verstak-docs/06_Migration_Strategy.md

129 lines
4.9 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.

# Migration Strategy
## 1. Цель миграции
Нужно перейти от текущего приложения к платформе, не потеряв исходный смысл Верстака:
- local-first vault;
- дела как центр контекста;
- человекочитаемые файлы;
- заметки, файлы, журнал, активность, браузерные материалы вокруг дела;
- синхронизация и расширение как отдельные части, а не ядро смысла.
Миграция не должна быть "просто разнести App.svelte". Это смена архитектурной модели.
## 2. Нельзя делать
- Нельзя добавлять новые функции в монолитный `App.svelte`.
- Нельзя делать official plugins скрытыми compile-time modules.
- Нельзя связывать плагины по именам, если нужна capability.
- Нельзя делать notes/files/editor обязательными частями core.
- Нельзя ломать существующий vault layout без миграционного плана.
- Нельзя хранить секреты как обычные заметки или plain text.
- Нельзя молча менять title/filename note при конфликте.
## 3. Этап 1 - Platform Skeleton
Сделать в `verstak-desktop`:
- plugin manifest schema;
- plugin discovery from plugin directories;
- enable/disable state;
- plugin manager UI;
- plugin status model;
- capability registry;
- contribution registry;
- settings registry;
- basic event bus;
- diagnostics panel.
Проверки:
- приложение запускается без плагинов;
- приложение показывает пустой Plugin Manager;
- тестовый плагин появляется в списке;
- enable/disable работает;
- failed plugin не роняет приложение.
## 4. Этап 2 - Frontend Plugin Host
Сделать:
- загрузку frontend bundle;
- `VerstakPluginAPI`;
- registration of views/settings/commands;
- plugin UI error boundary;
- settings panel invocation from Plugin Manager.
Проверки:
- тестовый плагин регистрирует view;
- тестовый плагин регистрирует settings panel;
- выключение плагина убирает view/settings;
- ошибка в plugin UI не роняет shell.
## 5. Этап 3 - Backend Sidecar Host
Сделать:
- sidecar launch protocol;
- local RPC;
- permission-scoped API;
- sidecar shutdown/restart;
- logs/diagnostics.
Проверки:
- sidecar отвечает health check;
- sidecar не получает API без permissions;
- падение sidecar переводит плагин в failed;
- disable останавливает sidecar.
## 6. Этап 4 - Official Plugin Extraction
Выносить функции по одной:
1. `official.markdown-preview`;
2. `official.markdown-editor`;
3. `official.files`;
4. `official.notes`;
5. `official.activity`;
6. `official.browser-inbox`.
После каждого выноса:
- проверить build;
- проверить запуск;
- проверить Plugin Manager;
- проверить enable/disable;
- проверить degraded mode при отключении optional plugin;
- проверить, что старые данные vault открываются;
- проверить, что UI contributions исчезают при disable.
## 7. Этап 5 - Repository Split
Когда plugin runtime работает:
- оставить core и shell в `verstak-desktop`;
- вынести official plugins в `verstak-official-plugins`;
- вынести sync server в `verstak-sync-server`;
- вынести browser extension в `verstak-browser-extension`;
- выделить `verstak-sdk` после стабилизации API.
Не начинать с физического split repo, пока runtime не умеет грузить плагины локально.
## 8. Definition Of Done
Платформенный переход можно считать состоявшимся, когда:
- core запускается без official plugins;
- official plugins лежат вне core modules;
- notes/files/editor/preview/activity работают как плагины;
- Plugin Manager умеет включать/выключать плагины;
- плагин может иметь свое settings окно;
- capability registry управляет видимостью actions;
- отсутствие optional capability не считается ошибкой;
- existing vault открывается без миграционной потери данных;
- документация соответствует реализации.