verstak/docs/04_Sync_Backup_Activity.md

243 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Верстак — синхронизация, backup и активность
## 1. Синхронизация
Цель:
- рабочая машина и домашняя машина имеют один vault;
- обе работают offline;
- сервер используется для обмена и восстановления;
- при потере локальных файлов можно восстановиться с сервера.
## 2. Sync server
`verstak-server` — простой Go HTTP server.
Функции:
- API key auth;
- device registry;
- operation log;
- blob storage by sha256;
- snapshots;
- restore manifest;
- deleted item retention.
Пример server storage:
```text
server-data/
db.sqlite
blobs/
ab/
cd/
abcdef...blob
snapshots/
```
## 3. API MVP
```http
GET /api/v1/health
POST /api/v1/device/register
POST /api/v1/sync/push
POST /api/v1/sync/pull
POST /api/v1/blobs/upload
GET /api/v1/blobs/{sha256}
GET /api/v1/restore/manifest
```
Auth:
```http
Authorization: Bearer <api_key>
```
## 4. Push/pull
Client push:
```json
{
"device_id": "device-uuid",
"ops": [],
"blobs": ["sha256..."]
}
```
Server response:
```json
{
"accepted": true,
"missing_blobs": ["sha256..."]
}
```
Client pull:
```json
{
"device_id": "device-uuid",
"since_revision": 42
}
```
Response:
```json
{
"server_revision": 50,
"ops": []
}
```
## 5. Восстановление
Сценарий:
1. Установить Верстак.
2. Ввести server URL.
3. Ввести API key/recovery key.
4. Нажать Restore.
5. Скачать manifest.
6. Скачать blobs.
7. Применить ops.
8. Пересобрать SQLite/FTS.
9. Проверить целостность.
## 6. Конфликты
Не пытаться магически мержить всё.
Если заметка изменилась на двух устройствах:
```text
nginx.md
nginx.conflict-home-2026-05-30.md
```
Если docx изменился на двух устройствах:
```text
dogovor.docx
dogovor.conflict-work-2026-05-30.docx
```
UI:
```text
Конфликт: nginx.md
[Открыть обе версии] [Оставить локальную] [Оставить серверную] [Склеить вручную]
```
## 7. Sync не равен backup
Если удалить файл на одной машине, sync может удалить везде.
Поэтому сервер должен иметь:
- tombstones;
- trash retention;
- note versions;
- daily snapshots;
- integrity check;
- manual export.
Retention example:
```yaml
retention:
deleted_items_days: 90
note_versions_days: 180
daily_snapshots_days: 30
```
## 8. Activity tracking
Верстак не должен быть шпионской программой. Activity tracking должен быть явным и настраиваемым.
### Источники MVP
- opened node;
- edited note;
- added file;
- changed file through app;
- launched action.
### Источники later
- file watcher/scanner;
- active window title;
- browser URL extension;
- sshkeeper integration;
- idle detection.
## 9. Как понять, что пользователь работал 3 часа
Верстак не “знает точно”. Он предлагает версию.
Пример:
```text
Похоже, ты работал по делу “ООО Ромашка / Сайт”:
14:0517:12, примерно 3ч.
Основания:
- открывалась админка сайта;
- изменялся catalog.xlsx;
- запускался sshkeeper profile romashka-vps;
- создавался screenshot-result.png;
- открывалась заметка “Витрина”.
[Записать 3ч] [Исправить] [Игнорировать]
```
## 10. Группировка активности
Правило MVP:
- события одного дела;
- разрыв меньше 20 минут — один интервал;
- разрыв больше 20 минут — новый интервал;
- итог округлить до 5/10/15 минут;
- показать evidence.
## 11. Privacy modes
### Minimal
- only inside Verstak;
- actions;
- manual worklog.
### Work
- + file scanner/watcher;
- + files opened from Verstak;
- + sshkeeper events.
### Full
- + active windows;
- + browser URLs;
- + idle detection.
По умолчанию не включать Full.
## 12. Client report
Из журнала работ можно собрать отчёт:
```text
По сайту ООО “Ромашка” было сделано:
- обновлена витрина сайта;
- внесены изменения в каталог товаров;
- обновлены баннеры;
- проверено отображение результата.
Ориентировочное время: 3 часа.
```
MVP — шаблонный отчёт без ИИ.