321 lines
13 KiB
Markdown
321 lines
13 KiB
Markdown
# Верстак — Пошаговый план разработки
|
||
|
||
## Принципы работы
|
||
|
||
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+
|