verstak-docs/docs/MILESTONE_PLATFORM_RUNTIME_...

101 lines
3.2 KiB
Markdown
Raw 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.

# Milestone 4 — App Settings + Vault Plugin State
## Что реализовано
### App Settings Core
- Пакет `internal/core/appsettings/`
- Хранение: `~/.config/verstak/config.json`
- API: Load, Save, Update, SetCurrentVault, ClearCurrentVault
- Поля: currentVaultPath, recentVaults, theme, devMode, userPluginsDir, windowState
- Auto-open vault при запуске если currentVaultPath валиден
- Corrupt config → backup + defaults с понятной ошибкой
### Vault Plugin State
- Пакет `internal/core/pluginstate/`
- Хранение: `<vault>/.verstak/plugins.json`
- API: Load, Save, EnablePlugin, DisablePlugin, IsEnabled, IsDisabled, RecordDesiredPlugin, ListMissingInstalled
- Disabled plugin не регистрирует provides/contributions
- Desired plugins для будущей синхронизации
- Missing installed plugins tracking
### Wails API
- GetAppSettings, UpdateAppSettings
- GetVaultPluginState, EnablePlugin, DisablePlugin
### Lifecycle Integration
- main.go: init app settings → auto-open vault → init plugin state → plugin discovery
- Disabled plugins пропускаются в lifecycle (не регистрируют capabilities/contributions)
- ReloadPlugins: проверка disabled state
## Тесты
### App Settings (6 тестов)
- TestLoad_DefaultCreation
- TestLoad_CorruptConfig
- TestSetCurrentVault
- TestRecentVaults_NoDuplicates
- TestUpdate_Patch
- TestAppSettings_NotInsideVault
### Plugin State (7 тестов)
- TestLoad_DefaultCreation
- TestEnableDisable
- TestDisablePlugin_Persists
- TestRecordDesiredPlugin
- TestMissingInstalled
- TestCorruptPluginsJSON
- TestVaultClosed_StateUnavailable
## Верификация
| command | result | notes |
|---------|--------|-------|
| `go test ./...` | ✅ | 52 PASS (39 prev + 6 appsettings + 7 pluginstate) |
| `./scripts/check.sh` | ✅ | go vet + gofmt + go mod tidy OK |
| `./scripts/build.sh` | ✅ | wails build OK |
## Структура файлов
```
~/.config/verstak/
config.json — app settings (local, NOT in vault)
<vault>/
.verstak/
vault.json — vault metadata
plugins.json — vault plugin state
plugin-data/ — per-plugin data namespace
plugin-settings/ — per-plugin settings namespace
plugin-cache/ — per-plugin cache namespace
```
## Пример plugins.json
```json
{
"schemaVersion": 1,
"enabledPlugins": ["verstak.platform-test"],
"disabledPlugins": [],
"desiredPlugins": [
{
"id": "verstak.platform-test",
"version": "0.1.0",
"source": "official"
}
],
"updatedAt": "2026-06-17T..."
}
```
## Статус platform-test
- DEGRADED — только из-за missing optional `verstak/core/sync/v1`
- Enable/disable работает через vault plugin state
- При disabled: provides не регистрируются, contributions не показываются
- При enabled: всё возвращается
## Что НЕ сделано
- Notes/files/editor/sync
- Auto-install plugins
- First Run / Vault Selection UI (только backend, UI не готов)
- Plugin Manager enable/disable toggle (только backend API)