4.9 KiB
4.9 KiB
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
Выносить функции по одной:
official.markdown-preview;official.markdown-editor;official.files;official.notes;official.activity;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 открывается без миграционной потери данных;
- документация соответствует реализации.