verstak/docs/PLAN.md

321 lines
13 KiB
Markdown
Raw Permalink 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.

# Верстак — Пошаговый план разработки
## Принципы работы
1. После каждого шага — **СТОП**. Влад проверяет, даёт обратную связь.
2. Следующий шаг начинается **ТОЛЬКО** после одобрения.
3. Каждый шаг — отдельный git commit.
4. Периодически сверяться с этим планом и документацией в docs/.
## Статус шагов
| # | Шаг | Статус |
|---|-----|--------|
| 1 | Git init + Skeleton | ✅ выполнен |
| 2 | Init + SQLite + First Migration | ✅ выполнен |
| 3 | Nodes Repository + CRUD + CLI Node | ✅ выполнен |
| 4 | Vault Files: Trash + File Service + CLI File | ✅ выполнен |
| 5 | Markdown Notes: Create/Read/Save + CLI Note | ✅ выполнен |
| 6 | GUI (browser prototype): Sidebar + Main Panel | ✅ выполнен |
| 7 | Actions + Worklog | ✅ выполнен |
| 8 | FTS5 Search | ✅ выполнен |
| 9 | Section assignment + Sidebar filtering | ✅ выполнен |
| 10 | Plugin Manager (discovery + templates) | ✅ выполнен |
| 11 | **Wails Desktop GUI** | ✅ выполнено (v2, full Svelte UI) |
| 12 | **Files/Folders full workflow** | ✅ выполнено (copy/link/import/tree) |
| 13 | **Drag-and-drop** | ✅ выполнено (internal + external drops) |
| 14 | **MVP stabilization** | ✅ выполнено |
| 15 | **Sync Server + Client** | 🔄 в работе — HTTP API, push/pull, blob sync |
| 16 | **Activity Suggestions** | ⏳ ожидает — подсказки из activity_events |
| 17 | **File Scanner/Watcher** | ⏳ ожидает — fsnotify, snapshot scanner |
| 18 | **TUI MVP (Bubble Tea)** | ⏳ ожидает — tree/search, add worklog |
| 19 | **Plugins: Lua runtime** | ⏳ ожидает — gopher-lua, hooks, sandbox |
| 20 | **Browser Extension** | ⏳ ожидает — tracking, capture, evidence |
| 21 | **Calendar/Kanban** | ⏳ ожидает — view by date, board view |
| 22 | **Integrity Check + Repair** | ⏳ ожидает — checksums, crash recovery |
| 23 | **New templates/integrations** | ⏳ ожидает — community plugins |
---
## Выполненные шаги (1-14)
### ШАГ 1 — Git Init + Skeleton
- go module `verstak`, структура cmd/internal/migrations
- CLI `verstak --version`
- README.md
### ШАГ 2 — Init + SQLite
- storage.go: DB wrapper, migration runner
- vault.go: Init() создаёт .verstak/ + index.db
- config.go: YAML config
### ШАГ 3 — Nodes Repository
- Node struct + CRUD (Create, Get, ListChildren, ListRoots, UpdateTitle, Move, SoftDelete)
- Meta KV + tests
### ШАГ 4 — Files
- FileService: AddExternal, CopyIntoVault, Get, ListByNode, MarkMissing, DeleteToTrash, Open
- file_test.go: 5 tests
### ШАГ 5 — Notes
- NoteService: Create, Read, Save (с backup), Delete
- note_test.go: 3 tests
### ШАГ 6 — GUI (browser prototype)
- Go HTTP SPA на случайном порту
- Sidebar tree + разделы (Сегодня, Неразобранное, Клиенты, Проекты...)
- Dashboard дела + вкладки (Обзор, Заметки, Файлы, Действия, Журнал, Активность)
- Модальное окно "+ Добавить" с выбором типа
- Поиск по корневым нодам
- **Это legacy prototype — не развивать как основной GUI**
### ШАГ 7 — Actions + Worklog
- ActionService: Create, Get, ListByNode, Delete, Run (open_url/file/folder, run_command)
- WorklogService: Add, Update, ListByNode, Delete, SumMinutes, Report
- CLI: `action add/list/run/delete`, `log add/list/report`
- GUI вкладки с кнопками действий и журналом работ
### ШАГ 8 — FTS5 Search
- SearchService: Index, Remove, Rebuild, Search (FTS5 MATCH)
- FTS5 virtual table создаётся лениво (работает с/без FTS5)
- Fallback на LIKE по заголовкам нод
- CLI: `verstak index rebuild`
- GUI search bar
### ШАГ 9 — Section assignment
- Колонка `section` в nodes (clients/projects/recipes/documents/archive/inbox)
- Фильтрация разделов по `?section=` в API
- Root-ноды без section → inbox
### ШАГ 10 — Plugin Manager
- Discovery: `.verstak/plugins/<name>/plugin.json`
- Enable/disable, templates → pre-filled node trees
- Built-in шаблон "Клиент" (Overview + Документы/Переписка/Скриншоты)
- Template selector в модалке создания дела
- POST /api/nodes/from-template
- CLI: `plugin list/enable/disable/templates`
- Lua runtime — stub (placeholder)
### ШАГ 11 — Wails Desktop GUI
**Прогресс:**
- ✅ Wails v2 shell (window opens, no SIGSEGV)
- ✅ Layout fix (full viewport, dark theme, sidebar+main)
- ✅ Notes bindings + UI (create/read/save/dirty state)
- ✅ Tabs (Overview/Notes/Files/Actions/Worklog/Activity)
- ✅ Node creation + template selection (FromTemplate)
- ✅ Section filtering
- ✅ File tree with breadcrumbs, preview, CRUD (rename/delete/duplicate/cut/copy/paste)
- ✅ Drag-and-drop (internal + external OS file drops)
- ✅ Actions CRUD (create/list/run/delete)
- ✅ Worklog entry form
- ✅ Today dashboard + Activity feed (global + per-case)
- ✅ Search
- ✅ Import dialog with safety checks (PreviewImport)
- ✅ Keyboard shortcuts
- ✅ i18n (ru/en)
Архитектура:
```
┌─────────────────────────────────────────────────┐
│ Frontend (Wails) │
│ frontend/src/ │
│ App.svelte │
│ FileTreeRow, TreeNode │
│ lib/FileBreadcrumbs, FilePreviewModal, ... │
│ lib/i18n/ locales (ru, en) │
└──────────────────┬──────────────────────────────┘
│ Wails bindings
┌──────────────────▼──────────────────────────────┐
│ Go Core (internal/core/) │
│ nodes, vault, storage, notes, files, │
│ actions, worklog, search, plugins, sync, │
│ activity │
└──────────────────┬──────────────────────────────┘
┌──────────────────▼──────────────────────────────┐
│ Vault filesystem + SQLite │
└─────────────────────────────────────────────────┘
```
### ШАГ 12 — Files/Folders full workflow
Core service extensions:
- `AddPathCopy` — рекурсивный импорт директорий
- `AddPathLink` — привязка внешних файлов без копирования
- Folder model: node type `folder`
- Name conflict resolution: `name (2)`, `name (3)`
- Safety checks: PreviewImport с summary (count, size, warnings)
- Trash: soft delete → `.verstak/trash`
### ШАГ 13 — Drag-and-drop
- Internal DnD: перетаскивание узлов в дереве
- External DnD: файлы из ОС → активное дело / вкладка Файлы
- Диалог подтверждения с выбором: копировать / переместить / привязать
### ШАГ 14 — MVP stabilization
- Все операции атомарны (DB+FS)
- Template файлы/папки создаются как полноценные ноды с rollback
- fs_path валидируется (SafeVaultPath)
- sync_apply FS-first
- Delete находит ошибки trash-переноса
- 24+ integration tests проходят
- **Известные пробелы:** Restore из trash не реализован, ensureTemplateChildren продолжает при ошибках (backward compat), parent_id+title в applyRemoteNodeUpdate без полной транзакции
---
## Текущий этап: ШАГ 15 — Sync Server + Client
**Статус:** ✅ Сервер собран и работает. Клиент реализован. Нужна доработка и тестирование.
Стек синхронизации:
- `cmd/verstak-server/` — HTTP API сервер (порт, API key, push/pull)
- `internal/core/sync/` — клиент синхронизации
- SQLite-based sync state (`migrations/008_sync.sql`)
- FS-first apply: изменения применяются через файловую систему, БД — индекс
---
## Ожидающие шаги (16-23)
### ШАГ 16 — Activity Suggestions
Подсказки для журнала работ на основе activity_events:
- анализировать события за день
- предлагать записи в worklog
### ШАГ 17 — File Scanner/Watcher
- fsnotify watcher на vault
- snapshot scanner для обнаружения изменений при закрытом приложении
- обнаружение missing файлов
### ШАГ 18 — TUI MVP (Bubble Tea)
- Терминальный интерфейс: дерево дел, поиск, добавление worklog, запуск действий, sync
### ШАГ 19 — Plugins: Lua runtime
- gopher-lua runtime
- хуки на события (node created, file added, etc.)
- песочница
### ШАГ 20 — Browser Extension
- Расширение для браузера: трекинг времени, скриншоты, evidence
### ШАГ 21 — Calendar/Kanban
- Календарный вид по датам
- Канбан-доска по статусам
### ШАГ 22 — Integrity Check + Repair
- Проверка целостности vault
- Контрольные суммы, восстановление после сбоев
### ШАГ 23 — New templates/integrations
- Community-плагины и шаблоны
---
## Структура репозитория
```
verstak/
go.mod
README.md
PLAN.md
build.sh # Полная сборка (GUI + сервер)
AGENTS.md # Инструкции для AI-ассистента
cmd/
verstak/ # CLI
verstak-gui/ # Wails v2 GUI main
verstak-server/ # Sync server
frontend/ # Wails v2 Svelte frontend
package.json
vite.config.js
src/
App.svelte
FileTreeRow.svelte
TreeNode.svelte
lib/
FileBreadcrumbs.svelte
FilePreviewModal.svelte
ConfirmModal.svelte
FileIcon.svelte
FileActions.svelte
fileUtils.js
i18n/ # Локали (ru, en)
api/verstak.js
scripts/
build.sh # Раздельная сборка (gui/server/all)
check-i18n.sh # Проверка интернационализации
internal/
core/
nodes/
vault/
storage/
notes/
files/
actions/
worklog/
activity/
search/
sync/
config/
templates/
plugins/ # manager, lua (stub), builtin templates
i18n/ # Go-локали (ru, en)
contrib/
plugins/
importer-dokuwiki/
migrations/
001_init.sql
002_add_meta.sql
003_add_files.sql
004_add_notes.sql
005_add_actions.sql
006_add_worklog.sql
007_search.sql
008_sync.sql
009_section.sql
docs/
00_README.md
01_Product_Spec.md
02_Architecture.md
03_Data_Model_Storage.md
04_Sync_Backup_Activity.md
05_UI_UX.md
06_Roadmap.md
09_Extensibility.md
10_Sync_Server_Guide.md
PLAN.md
TEMPLATES.md
VAULT_LAYOUT.md
```
## Сборка
```bash
# Полная сборка
./build.sh
# По отдельности
./scripts/build.sh gui # Wails v2 GUI
./scripts/build.sh server # Sync server
./scripts/build.sh all # Оба
# Dev-режим GUI
cd frontend && npm run dev
```
## RAID
- **Критично:** Wails требует Node.js для frontend-сборки
- **Критично:** go-sqlite3 + cgo; gcc уже установлен
- **Сборка GUI:** требуется `webkit2_41` tag для WebKitGTK 4.1+