verstak/docs/04_Sync_Backup_Activity.md

4.9 KiB
Raw Blame History

Верстак — синхронизация, 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:

server-data/
  db.sqlite
  blobs/
    ab/
      cd/
        abcdef...blob
  snapshots/

3. API MVP

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:

Authorization: Bearer <api_key>

4. Push/pull

Client push:

{
  "device_id": "device-uuid",
  "ops": [],
  "blobs": ["sha256..."]
}

Server response:

{
  "accepted": true,
  "missing_blobs": ["sha256..."]
}

Client pull:

{
  "device_id": "device-uuid",
  "since_revision": 42
}

Response:

{
  "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. Конфликты

Не пытаться магически мержить всё.

Если заметка изменилась на двух устройствах:

nginx.md
nginx.conflict-home-2026-05-30.md

Если docx изменился на двух устройствах:

dogovor.docx
dogovor.conflict-work-2026-05-30.docx

UI:

Конфликт: nginx.md
[Открыть обе версии] [Оставить локальную] [Оставить серверную] [Склеить вручную]

7. Sync не равен backup

Если удалить файл на одной машине, sync может удалить везде.

Поэтому сервер должен иметь:

  • tombstones;
  • trash retention;
  • note versions;
  • daily snapshots;
  • integrity check;
  • manual export.

Retention example:

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 часа

Верстак не “знает точно”. Он предлагает версию.

Пример:

Похоже, ты работал по делу “ООО Ромашка / Сайт”:
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

Из журнала работ можно собрать отчёт:

По сайту ООО “Ромашка” было сделано:
- обновлена витрина сайта;
- внесены изменения в каталог товаров;
- обновлены баннеры;
- проверено отображение результата.

Ориентировочное время: 3 часа.

MVP — шаблонный отчёт без ИИ.