docs: add milestone platform runtime 4 (app settings + vault plugin state)

This commit is contained in:
mirivlad 2026-06-17 03:40:08 +08:00
parent ec5c3f7f45
commit 54e460271b
1 changed files with 100 additions and 0 deletions

View File

@ -0,0 +1,100 @@
# 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)