docs: update PLAN.md — mark steps 1-14 done, unpause 15-23, sync with current state
This commit is contained in:
parent
b6a3a2238d
commit
8cbf23a74d
348
docs/PLAN.md
348
docs/PLAN.md
|
|
@ -24,64 +24,20 @@
|
||||||
| 11 | **Wails Desktop GUI** | ✅ выполнено (v2, full Svelte UI) |
|
| 11 | **Wails Desktop GUI** | ✅ выполнено (v2, full Svelte UI) |
|
||||||
| 12 | **Files/Folders full workflow** | ✅ выполнено (copy/link/import/tree) |
|
| 12 | **Files/Folders full workflow** | ✅ выполнено (copy/link/import/tree) |
|
||||||
| 13 | **Drag-and-drop** | ✅ выполнено (internal + external drops) |
|
| 13 | **Drag-and-drop** | ✅ выполнено (internal + external drops) |
|
||||||
| 14 | **MVP stabilization** | ✅ выполнено — atomicity audit, template children as nodes, fs_path validation, descendant move protection, delete atomicity, sync_apply FS-first rewrite, SafeVaultPath, CreateNodeFromTemplate rollback, 24 integration tests pass. Known gaps: Restore from trash not implemented, applyRemoteNodeUpdate/Move uses FS-first (parent_id + title updates still need full txn), ensureTemplateChildren uses `continue` on errors |
|
| 14 | **MVP stabilization** | ✅ выполнено |
|
||||||
| 15 | Sync Server + Client | 🔒 PAUSED — HTTP API key, push/pull, blob sync |
|
| 15 | **Sync Server + Client** | 🔄 в работе — HTTP API, push/pull, blob sync |
|
||||||
| 16 | Activity Suggestions | 🔒 PAUSED — worklog suggestions from activity_events |
|
| 16 | **Activity Suggestions** | ⏳ ожидает — подсказки из activity_events |
|
||||||
| 17 | File Scanner/Watcher | 🔒 PAUSED — fsnotify, snapshot scanner, missing file detection |
|
| 17 | **File Scanner/Watcher** | ⏳ ожидает — fsnotify, snapshot scanner |
|
||||||
| 18 | TUI MVP (Bubble Tea) | 🔒 PAUSED — tree/search, add worklog, run action, sync |
|
| 18 | **TUI MVP (Bubble Tea)** | ⏳ ожидает — tree/search, add worklog |
|
||||||
| 19 | Plugins: Lua runtime | 🔒 PAUSED — gopher-lua, hooks, sandbox |
|
| 19 | **Plugins: Lua runtime** | ⏳ ожидает — gopher-lua, hooks, sandbox |
|
||||||
| 20 | Browser Extension | 🔒 PAUSED — tracking, capture, evidence |
|
| 20 | **Browser Extension** | ⏳ ожидает — tracking, capture, evidence |
|
||||||
| 21 | Calendar/Kanban | 🔒 PAUSED — view by date, board view |
|
| 21 | **Calendar/Kanban** | ⏳ ожидает — view by date, board view |
|
||||||
| 22 | Integrity Check + Repair | 🔒 PAUSED — checksums, crash recovery |
|
| 22 | **Integrity Check + Repair** | ⏳ ожидает — checksums, crash recovery |
|
||||||
| 23 | New templates/integrations | 🔒 PAUSED — community plugins |
|
| 23 | **New templates/integrations** | ⏳ ожидает — community plugins |
|
||||||
|
|
||||||
> 🔒 = **PAUSED** — не начинать до завершения шага 14 (MVP stabilization). Текущий статус: ✅ **MVP stabilization завершена** — все операции атомарны (DB+FS), template файлы/папки создаются как полноценные ноды с rollback, fs_path валидируется, sync_apply FS-first с SafeVaultPath, delete находит ошибки trash-переноса, 24 integration tests проходят. Известные пробелы: Restore не реализован, ensureTemplateChildren продолжает при ошибках (backward compat), parent_id+title в applyRemoteNodeUpdate без полной транзакции.
|
|
||||||
|
|
||||||
> **Wails v3 → v2 migration:** Wails v3 alpha.96 показал SIGSEGV на Linux desktop (GTK/X11). Wails v2 stable выбран как GUI base для MVP. Миграция в процессе (ветка `gui/migrate-wails-v2`).
|
|
||||||
|
|
||||||
**GUI Build (Wails v2):**
|
|
||||||
```bash
|
|
||||||
cd frontend && npm run build && cd ..
|
|
||||||
rm -rf cmd/verstak-gui/frontend-dist && cp -r frontend/dist cmd/verstak-gui/frontend-dist
|
|
||||||
go build -tags "gui production webkit2_41" -o verstak-gui ./cmd/verstak-gui
|
|
||||||
./verstak-gui
|
|
||||||
```
|
|
||||||
|
|
||||||
Или для dev режима: `wails dev` (требует Wails v2 CLI)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Текущий этап: MVP Stabilization ✅
|
## Выполненные шаги (1-14)
|
||||||
|
|
||||||
**Цель:** стабилизация MVP — атомарность операций, template ноды, fs_path инварианты, sync roundtrip тесты.
|
|
||||||
|
|
||||||
**Прогресс Wails v2 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
|
|
||||||
|
|
||||||
**Среднесрочные шаги (заморожены до стабилизации MVP):**
|
|
||||||
- Sync server/client
|
|
||||||
- File Scanner/Watcher
|
|
||||||
- TUI (Bubble Tea)
|
|
||||||
- Activity suggestions
|
|
||||||
- Lua runtime
|
|
||||||
- Browser extension
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Выполненные шаги (1-10)
|
|
||||||
|
|
||||||
### ШАГ 1 — Git Init + Skeleton
|
### ШАГ 1 — Git Init + Skeleton
|
||||||
- go module `verstak`, структура cmd/internal/migrations
|
- go module `verstak`, структура cmd/internal/migrations
|
||||||
|
|
@ -140,11 +96,24 @@ go build -tags "gui production webkit2_41" -o verstak-gui ./cmd/verstak-gui
|
||||||
- CLI: `plugin list/enable/disable/templates`
|
- CLI: `plugin list/enable/disable/templates`
|
||||||
- Lua runtime — stub (placeholder)
|
- Lua runtime — stub (placeholder)
|
||||||
|
|
||||||
---
|
### ШАГ 11 — Wails Desktop GUI
|
||||||
|
|
||||||
## Текущий этап: ШАГ 11 — Wails Desktop GUI
|
**Прогресс:**
|
||||||
|
- ✅ Wails v2 shell (window opens, no SIGSEGV)
|
||||||
**Целевой commit:** `gui/wails-file-workflow`
|
- ✅ 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)
|
||||||
|
|
||||||
Архитектура:
|
Архитектура:
|
||||||
|
|
||||||
|
|
@ -153,15 +122,16 @@ go build -tags "gui production webkit2_41" -o verstak-gui ./cmd/verstak-gui
|
||||||
│ Frontend (Wails) │
|
│ Frontend (Wails) │
|
||||||
│ frontend/src/ │
|
│ frontend/src/ │
|
||||||
│ App.svelte │
|
│ App.svelte │
|
||||||
│ components/Sidebar, TopBar, CaseView, ... │
|
│ FileTreeRow, TreeNode │
|
||||||
│ stores/selection, nodes, files, ui │
|
│ lib/FileBreadcrumbs, FilePreviewModal, ... │
|
||||||
│ styles/theme.css │
|
│ lib/i18n/ locales (ru, en) │
|
||||||
└──────────────────┬──────────────────────────────┘
|
└──────────────────┬──────────────────────────────┘
|
||||||
│ Wails bindings
|
│ Wails bindings
|
||||||
┌──────────────────▼──────────────────────────────┐
|
┌──────────────────▼──────────────────────────────┐
|
||||||
│ Go Core (internal/core/) │
|
│ Go Core (internal/core/) │
|
||||||
│ nodes, vault, storage, notes, files, │
|
│ nodes, vault, storage, notes, files, │
|
||||||
│ actions, worklog, search, plugins │
|
│ actions, worklog, search, plugins, sync, │
|
||||||
|
│ activity │
|
||||||
└──────────────────┬──────────────────────────────┘
|
└──────────────────┬──────────────────────────────┘
|
||||||
│
|
│
|
||||||
┌──────────────────▼──────────────────────────────┐
|
┌──────────────────▼──────────────────────────────┐
|
||||||
|
|
@ -169,164 +139,79 @@ go build -tags "gui production webkit2_41" -o verstak-gui ./cmd/verstak-gui
|
||||||
└─────────────────────────────────────────────────┘
|
└─────────────────────────────────────────────────┘
|
||||||
```
|
```
|
||||||
|
|
||||||
### Действия
|
### ШАГ 12 — Files/Folders full workflow
|
||||||
|
|
||||||
1. Создать Wails app skeleton (`wails init`)
|
Core service extensions:
|
||||||
2. Структура frontend/ — Svelte/Vue/vanilla TS
|
- `AddPathCopy` — рекурсивный импорт директорий
|
||||||
3. Backend bindings — методы Wails над core services
|
- `AddPathLink` — привязка внешних файлов без копирования
|
||||||
4. Перенести текущий UI shell из inline HTML в frontend
|
- Folder model: node type `folder`
|
||||||
5. Оставить текущий `internal/gui/` как legacy (не удалять, но не развивать)
|
- Name conflict resolution: `name (2)`, `name (3)`
|
||||||
|
- Safety checks: PreviewImport с summary (count, size, warnings)
|
||||||
|
- Trash: soft delete → `.verstak/trash`
|
||||||
|
|
||||||
### Backend bindings (Wails v2 — реализовано)
|
### ШАГ 13 — Drag-and-drop
|
||||||
|
|
||||||
```go
|
- Internal DnD: перетаскивание узлов в дереве
|
||||||
// Nodes
|
- External DnD: файлы из ОС → активное дело / вкладка Файлы
|
||||||
ListSections() []SectionDTO
|
- Диалог подтверждения с выбором: копировать / переместить / привязать
|
||||||
ListNodesBySection(section string) ([]NodeDTO, error)
|
|
||||||
GetNodeDetail(nodeID string) (*NodeDTO, error)
|
|
||||||
ListChildren(parentID string) ([]NodeDTO, error)
|
|
||||||
CreateNode(parentID, typ, title, section string) (*NodeDTO, error)
|
|
||||||
DeleteNode(id string) error
|
|
||||||
MoveNode(nodeID, newParentID string) error
|
|
||||||
RenameNode(nodeID, newTitle string) error
|
|
||||||
|
|
||||||
// Templates
|
### ШАГ 14 — MVP stabilization
|
||||||
ListTemplates() []TemplateDTO
|
|
||||||
FromTemplate(parentID, typ, title, section, template string) (*NodeDTO, error)
|
|
||||||
|
|
||||||
// Notes
|
- Все операции атомарны (DB+FS)
|
||||||
ListNotes(nodeID string) ([]NodeDTO, error)
|
- Template файлы/папки создаются как полноценные ноды с rollback
|
||||||
CreateNote(parentID, title string) (*NodeDTO, error)
|
- fs_path валидируется (SafeVaultPath)
|
||||||
ReadNote(noteID string) (string, error)
|
- sync_apply FS-first
|
||||||
SaveNote(noteID, content string) error
|
- Delete находит ошибки trash-переноса
|
||||||
|
- 24+ integration tests проходят
|
||||||
// Files
|
- **Известные пробелы:** Restore из trash не реализован, ensureTemplateChildren продолжает при ошибках (backward compat), parent_id+title в applyRemoteNodeUpdate без полной транзакции
|
||||||
ListFiles(nodeID string) ([]FileDTO, error)
|
|
||||||
ListItems(nodeID string) ([]FileTreeItemDTO, error)
|
|
||||||
AddPathCopy(nodeID, sourcePath string) ([]NodeDTO, error)
|
|
||||||
AddPathLink(nodeID, sourcePath string) ([]NodeDTO, error)
|
|
||||||
DeleteFileOrFolder(nodeID string) error
|
|
||||||
CreateEmptyFile(parentID, filename string) (*NodeDTO, error)
|
|
||||||
DuplicateNode(nodeID string) (*NodeDTO, error)
|
|
||||||
OpenFile(fileID string) error
|
|
||||||
OpenFolder(nodeID string) error
|
|
||||||
ReadFileText(fileID string) (string, error)
|
|
||||||
GetFileBase64(fileID string) (string, error)
|
|
||||||
PreviewImport(sourcePath string) (*ImportSummary, error)
|
|
||||||
ValidateName(name string) error
|
|
||||||
PickFile() (string, error)
|
|
||||||
PickFiles() ([]string, error)
|
|
||||||
PickDirectory() (string, error)
|
|
||||||
|
|
||||||
// Actions
|
|
||||||
ListActions(nodeID string) ([]ActionDTO, error)
|
|
||||||
CreateAction(nodeID, kind, title, data string) (*ActionDTO, error)
|
|
||||||
DeleteAction(id string) error
|
|
||||||
RunAction(id string) error
|
|
||||||
|
|
||||||
// Worklog
|
|
||||||
ListWorklog(nodeID string) ([]WorklogDTO, error)
|
|
||||||
CreateWorklog(nodeID, summary string, minutes int) (*WorklogDTO, error)
|
|
||||||
|
|
||||||
// Search
|
|
||||||
Search(query string) ([]SearchResultDTO, error)
|
|
||||||
|
|
||||||
// Activity
|
|
||||||
ListTodayView() (*TodayDashboardDTO, error)
|
|
||||||
ListActivityFeed(limit, offset int) ([]EventDTO, error)
|
|
||||||
ListActivityByNode(nodeID string, limit, offset int) ([]EventDTO, error)
|
|
||||||
CountActivityByNode(nodeID string) (int, error)
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ШАГ 12 — Files/Folders full workflow
|
## Текущий этап: ШАГ 15 — Sync Server + Client
|
||||||
|
|
||||||
### Core service extensions
|
**Статус:** ✅ Сервер собран и работает. Клиент реализован. Нужна доработка и тестирование.
|
||||||
|
|
||||||
Расширить `files.Service`:
|
Стек синхронизации:
|
||||||
|
- `cmd/verstak-server/` — HTTP API сервер (порт, API key, push/pull)
|
||||||
```go
|
- `internal/core/sync/` — клиент синхронизации
|
||||||
AddPathCopy(nodeID string, sourcePath string) ([]Node, error)
|
- SQLite-based sync state (`migrations/008_sync.sql`)
|
||||||
AddPathLink(nodeID string, sourcePath string) ([]Node, error)
|
- FS-first apply: изменения применяются через файловую систему, БД — индекс
|
||||||
```
|
|
||||||
|
|
||||||
Логика:
|
|
||||||
- `os.Stat(sourcePath)` → если директория → рекурсивный обход
|
|
||||||
- Каждый файл → File node + file record
|
|
||||||
- Каждая папка → Folder node
|
|
||||||
- Структура сохраняется через parent_id
|
|
||||||
|
|
||||||
### Folder model
|
|
||||||
|
|
||||||
Папка = node type `folder` (не file record с mime=directory).
|
|
||||||
|
|
||||||
При импорте `romashka-docs/`:
|
|
||||||
```
|
|
||||||
Folder node: romashka-docs (type=folder)
|
|
||||||
File node: dogovor.docx (type=file)
|
|
||||||
Folder node: screenshots (type=folder)
|
|
||||||
File node: error.png (type=file)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Name conflict resolution
|
|
||||||
|
|
||||||
Если в target уже есть `docs`:
|
|
||||||
```
|
|
||||||
docs
|
|
||||||
docs (2)
|
|
||||||
docs (3)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Safety checks
|
|
||||||
|
|
||||||
При добавлении папки показать summary:
|
|
||||||
- количество файлов/папок
|
|
||||||
- общий размер
|
|
||||||
- предупреждение если > 1000 файлов, > 1 GB, содержит `.git`/`node_modules`/`.cache`
|
|
||||||
|
|
||||||
### Trash
|
|
||||||
|
|
||||||
- Soft delete node + children
|
|
||||||
- Vault files → `.verstak/trash`
|
|
||||||
- External files — только удалить связь
|
|
||||||
- Не `rm -rf`
|
|
||||||
|
|
||||||
### Tests
|
|
||||||
|
|
||||||
1. Copy single file → vault, record created, source intact
|
|
||||||
2. Link single file → no copy, external path saved
|
|
||||||
3. Copy folder → tree created, files in vault
|
|
||||||
4. Link folder → node created, no content copied
|
|
||||||
5. Delete vault file → soft-deleted, file in trash
|
|
||||||
6. Delete vault folder → children soft-deleted
|
|
||||||
7. Name conflict → no overwrite, safe suffix
|
|
||||||
8. Open file → mocked opener (no real app launch)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ШАГ 13 — Drag-and-drop
|
## Ожидающие шаги (16-23)
|
||||||
|
|
||||||
### External D&D
|
### ШАГ 16 — Activity Suggestions
|
||||||
|
Подсказки для журнала работ на основе activity_events:
|
||||||
|
- анализировать события за день
|
||||||
|
- предлагать записи в worklog
|
||||||
|
|
||||||
Drop target: активное дело / вкладка Файлы / Неразобранное.
|
### ШАГ 17 — File Scanner/Watcher
|
||||||
|
- fsnotify watcher на vault
|
||||||
|
- snapshot scanner для обнаружения изменений при закрытом приложении
|
||||||
|
- обнаружение missing файлов
|
||||||
|
|
||||||
После drop → диалог:
|
### ШАГ 18 — TUI MVP (Bubble Tea)
|
||||||
```
|
- Терминальный интерфейс: дерево дел, поиск, добавление worklog, запуск действий, sync
|
||||||
Добавить в "ООО Ромашка / Сайт"
|
|
||||||
Файлов: 3, Папок: 1, 240 MB
|
|
||||||
[Скопировать] [Переместить] [Привязать] [Отмена]
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
### ШАГ 19 — Plugins: Lua runtime
|
||||||
|
- gopher-lua runtime
|
||||||
|
- хуки на события (node created, file added, etc.)
|
||||||
|
- песочница
|
||||||
|
|
||||||
## ШАГ 14 — MVP stabilization
|
### ШАГ 20 — Browser Extension
|
||||||
|
- Расширение для браузера: трекинг времени, скриншоты, evidence
|
||||||
|
|
||||||
- Smoke tests базовых сценариев
|
### ШАГ 21 — Calendar/Kanban
|
||||||
- Проверка: дело → заметка → файл → папка → trash → перезапуск
|
- Календарный вид по датам
|
||||||
- go test ./... pass
|
- Канбан-доска по статусам
|
||||||
- Обновление документации
|
|
||||||
- Остановка перед следующими фичами
|
### ШАГ 22 — Integrity Check + Repair
|
||||||
|
- Проверка целостности vault
|
||||||
|
- Контрольные суммы, восстановление после сбоев
|
||||||
|
|
||||||
|
### ШАГ 23 — New templates/integrations
|
||||||
|
- Community-плагины и шаблоны
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -337,10 +222,13 @@ verstak/
|
||||||
go.mod
|
go.mod
|
||||||
README.md
|
README.md
|
||||||
PLAN.md
|
PLAN.md
|
||||||
|
build.sh # Полная сборка (GUI + сервер)
|
||||||
|
AGENTS.md # Инструкции для AI-ассистента
|
||||||
|
|
||||||
cmd/
|
cmd/
|
||||||
verstak/ # CLI
|
verstak/ # CLI
|
||||||
verstak-gui/ # Wails v2 GUI main
|
verstak-gui/ # Wails v2 GUI main
|
||||||
|
verstak-server/ # Sync server
|
||||||
|
|
||||||
frontend/ # Wails v2 Svelte frontend
|
frontend/ # Wails v2 Svelte frontend
|
||||||
package.json
|
package.json
|
||||||
|
|
@ -348,6 +236,7 @@ verstak/
|
||||||
src/
|
src/
|
||||||
App.svelte
|
App.svelte
|
||||||
FileTreeRow.svelte
|
FileTreeRow.svelte
|
||||||
|
TreeNode.svelte
|
||||||
lib/
|
lib/
|
||||||
FileBreadcrumbs.svelte
|
FileBreadcrumbs.svelte
|
||||||
FilePreviewModal.svelte
|
FilePreviewModal.svelte
|
||||||
|
|
@ -355,8 +244,13 @@ verstak/
|
||||||
FileIcon.svelte
|
FileIcon.svelte
|
||||||
FileActions.svelte
|
FileActions.svelte
|
||||||
fileUtils.js
|
fileUtils.js
|
||||||
|
i18n/ # Локали (ru, en)
|
||||||
api/verstak.js
|
api/verstak.js
|
||||||
|
|
||||||
|
scripts/
|
||||||
|
build.sh # Раздельная сборка (gui/server/all)
|
||||||
|
check-i18n.sh # Проверка интернационализации
|
||||||
|
|
||||||
internal/
|
internal/
|
||||||
core/
|
core/
|
||||||
nodes/
|
nodes/
|
||||||
|
|
@ -368,8 +262,11 @@ verstak/
|
||||||
worklog/
|
worklog/
|
||||||
activity/
|
activity/
|
||||||
search/
|
search/
|
||||||
|
sync/
|
||||||
config/
|
config/
|
||||||
|
templates/
|
||||||
plugins/ # manager, lua (stub), builtin templates
|
plugins/ # manager, lua (stub), builtin templates
|
||||||
|
i18n/ # Go-локали (ru, en)
|
||||||
|
|
||||||
contrib/
|
contrib/
|
||||||
plugins/
|
plugins/
|
||||||
|
|
@ -385,26 +282,39 @@ verstak/
|
||||||
007_search.sql
|
007_search.sql
|
||||||
008_sync.sql
|
008_sync.sql
|
||||||
009_section.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
|
## RAID
|
||||||
|
|
||||||
- **Критично:** Wails требует Node.js для frontend-сборки
|
- **Критично:** Wails требует Node.js для frontend-сборки
|
||||||
- **Критично:** go-sqlite3 + cgo; gcc уже установлен
|
- **Критично:** go-sqlite3 + cgo; gcc уже установлен
|
||||||
- **Зависимость:** Steps 15+ ждут завершения step 14 (MVP stabilization)
|
- **Сборка GUI:** требуется `webkit2_41` tag для WebKitGTK 4.1+
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Phase 4: Template-Driven Architecture
|
|
||||||
|
|
||||||
Implemented in this commit:
|
|
||||||
|
|
||||||
- **Template system** — built-in system templates for folder, project, client, document, and recipe types.
|
|
||||||
Each template defines default modules, default files (`Overview.md`), and default subfolders.
|
|
||||||
- **Vault layout** — human-readable folder structure on disk. Every node gets a folder named after its
|
|
||||||
title (sanitized). Nesting reflects parent-child relationships. UUIDs are never exposed in user paths.
|
|
||||||
- **`.verstak/` directory** — app-internal data (db, backups, thumbnails, cache, sync, trash, history).
|
|
||||||
- **i18n keys** — new locale keys for `nav.*`, `template.*`, `common.archive`, and `migrate.*` namespaces
|
|
||||||
added to both `ru.json` and `en.json`.
|
|
||||||
- **Documentation** — `docs/VAULT_LAYOUT.md` (vault folder structure, rules, migration) and
|
|
||||||
`docs/TEMPLATES.md` (system templates, template structure JSON, UI integration).
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue