3.8 KiB
3.8 KiB
Milestone 4 — App Settings + Vault Plugin State + First Run UI
Дата: 2026-06-17 Статус: ✅ Завершён
Цель
Сделать нормальную модель настроек приложения, выбор vault при первом запуске, и enable/disable плагинов через vault plugin state.
Что сделано
1. App Settings Core (internal/core/appsettings/)
manager.go— Load/Save/Update, recent vaults, defaults, corrupt config recoverymanager_test.go— 6 тестов- Хранение:
~/.config/verstak/config.json - Поля: currentVaultPath, recentVaults, theme, devMode, userPluginsDir, windowState, lastOpenedAt
- Правила: defaults при отсутствии, backup+recovery при битом config, без secrets
2. Vault Plugin State (internal/core/pluginstate/)
manager.go— enable/disable, desired plugins, missing-installed trackingmanager_test.go— 7 тестов- Хранение:
<vault>/.verstak/plugins.json - Поля: enabledPlugins, disabledPlugins, desiredPlugins, updatedAt
- Installed ≠ Enabled ≠ Desired
3. Wails API (app.go)
GetAppSettings()/UpdateAppSettings(patch)/SetCurrentVault(path)GetVaultPluginState()/EnablePlugin(id)/DisablePlugin(id)SetCurrentVaultвызываетOpenVault+ сохраняет в app settings + загружает plugin state
4. First Run / Vault Selection UI (VaultSelection.svelte)
- Показывается когда currentVaultPath пустой или vault не открывается
- Create New Vault → CreateVault → OpenVault → SetCurrentVault
- Open Existing Vault → OpenVault → SetCurrentVault
- Recent Vaults → OpenVault → SetCurrentVault
- Понятные ошибки при неудаче
5. Sidebar Navigation (Sidebar.svelte)
- Ширина 220px, фиксированная
- Навигация: Plugin Manager
- Plugin sidebar items (из contributions)
- Vault status indicator
- Отступы и hover-эффекты
6. Plugin Manager Integration
- Enable/Disable toggle в PluginCard
- Disabled plugin не регистрирует capabilities/contributions
- Missing installed plugins — отдельная секция
- Vault state загружается при открытии
7. Layout Fixes
- App.svelte: global reset (margin, padding, box-sizing)
- PluginManager: отступы header, border-bottom separator
- Content area: padding 1.5rem
Тесты
go test ./...— 52 PASS (6 appsettings + 7 pluginstate + 39 previous)./scripts/check.sh— ✅./scripts/smoke-platform.sh— ✅ (enable/disable/plugins.json verification)./scripts/build.sh— ✅
Структура файлов
~/.config/verstak/config.json ← app settings (local)
<vault>/.verstak/plugins.json ← vault plugin state
<vault>/.verstak/plugin-settings/<id>/ ← per-plugin settings
<vault>/.verstak/plugin-data/<id>/ ← per-plugin data
<vault>/.verstak/plugin-cache/<id>/ ← per-plugin cache
Пример plugins.json
{
"schemaVersion": 1,
"enabledPlugins": ["verstak.platform-test"],
"disabledPlugins": [],
"desiredPlugins": [
{
"id": "verstak.platform-test",
"version": "0.1.0",
"source": "official"
}
],
"updatedAt": "2026-06-17T..."
}
Исправление отчёта Milestone 3
В отчёте Milestone 3 была арифметическая ошибка: написано "24/24 PASS", реально — 39 PASS (16 plugin + 8 storage + 7 vault + 8 other). Исправлено в документации.
Что НЕ сделано (будет в следующих milestone)
- Notes/files/editor/sync plugins
- Plugin marketplace/distribution
- Auto-install plugins
- Advanced window state management