B1-3: distill Technology, MCP, and Data Maintenance settings sections into editor_settings spec
This commit is contained in:
@@ -62,7 +62,7 @@ Gap categories: **SC** = spec correct, fix code | **CS** = code correct, update
|
|||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| ~~B1-1~~ | ~~Chat inline surfaces (9 types: card, chart, form, list, metric, mindmap, table, tabs, text/json)~~ | `tool_surfaces.ex` | **Resolved:** added InlineSurface value type with all 9 discriminators, supporting value types (SurfaceAction, ChartSeries, MindmapNode, FormField, FieldOption, TabPanel), inline_surfaces on ChatMessage, InlineSurfaceRendering guarantee, and surface_form_debounce_ms config to editor_chat.allium; updated StructuredRenderTools invariant in ai.allium to list all 9 types |
|
| ~~B1-1~~ | ~~Chat inline surfaces (9 types: card, chart, form, list, metric, mindmap, table, tabs, text/json)~~ | `tool_surfaces.ex` | **Resolved:** added InlineSurface value type with all 9 discriminators, supporting value types (SurfaceAction, ChartSeries, MindmapNode, FormField, FieldOption, TabPanel), inline_surfaces on ChatMessage, InlineSurfaceRendering guarantee, and surface_form_debounce_ms config to editor_chat.allium; updated StructuredRenderTools invariant in ai.allium to list all 9 types |
|
||||||
| ~~B1-2~~ | ~~Auto-translation system (AutoTranslation.maybe_schedule, media cascade, batch fill)~~ | `lib/bds/posts/auto_translation.ex` | **Resolved:** distilled into translation.allium — added `AutoTranslationControlSurface` (PostSavedForAutoTranslation reactive + FillMissingTranslationsRequested batch triggers), three rules (`ScheduleAutoTranslation` draft-per-missing-language + media cascade, `AutoTranslatePost` upsert/auto-publish primitive, `AutoTranslateMediaCascade` linked-media per-language tasks, `FillMissingTranslations` published-only batch emitting `ProgressReported` + `FillMissingTranslationsCompleted`), three invariants (`AutoTranslationGatedByEndpoint`, `AutoTranslationSkipsDoNotTranslate`, `AutoTranslationOnlyMissingLanguages`), and `auto_translation_task_group_name` config; `allium check` passes |
|
| ~~B1-2~~ | ~~Auto-translation system (AutoTranslation.maybe_schedule, media cascade, batch fill)~~ | `lib/bds/posts/auto_translation.ex` | **Resolved:** distilled into translation.allium — added `AutoTranslationControlSurface` (PostSavedForAutoTranslation reactive + FillMissingTranslationsRequested batch triggers), three rules (`ScheduleAutoTranslation` draft-per-missing-language + media cascade, `AutoTranslatePost` upsert/auto-publish primitive, `AutoTranslateMediaCascade` linked-media per-language tasks, `FillMissingTranslations` published-only batch emitting `ProgressReported` + `FillMissingTranslationsCompleted`), three invariants (`AutoTranslationGatedByEndpoint`, `AutoTranslationSkipsDoNotTranslate`, `AutoTranslationOnlyMissingLanguages`), and `auto_translation_task_group_name` config; `allium check` passes |
|
||||||
| B1-3 | 3 extra settings sections (Technology, MCP, Data Maintenance) | `lib/bds/ui/settings_editor/` | Distill into spec |
|
| ~~B1-3~~ | ~~3 extra settings sections (Technology, MCP, Data Maintenance)~~ | `lib/bds/desktop/shell_live/settings_editor/` | **Resolved:** distilled into editor_settings.allium — added `SettingsTechnologySection` (semantic_similarity toggle + read-only scripting-runtime note, saved with project metadata), `SettingsDataSection` (rebuild_targets), and `technology_section`/`data_section` on `SettingsView`; reconciled `SettingsMCPSection`/`MCPAgentRow` to code (dropped non-existent status badge; added `is_supported`/`config_path`; only Claude Code + GitHub Copilot supported); updated TechnologySection/MCPSection/DataMaintenanceSection guarantees (7 rebuild buttons incl. Rebuild Embedding Index) and SettingsRebuild rule entity_type (+embedding); `allium check` passes |
|
||||||
| B1-4 | Style/Theme as separate tab (`:style`), not settings section | `lib/bds/ui/style_editor.ex` | Distill into spec |
|
| B1-4 | Style/Theme as separate tab (`:style`), not settings section | `lib/bds/ui/style_editor.ex` | Distill into spec |
|
||||||
| B1-5 | `published_*` snapshot fields on Post for diffing | `lib/bds/posts/post.ex:61-65` | Add to post.allium entity |
|
| B1-5 | `published_*` snapshot fields on Post for diffing | `lib/bds/posts/post.ex:61-65` | Add to post.allium entity |
|
||||||
| B1-6 | Full rendering subsystem (Liquex, Filters, Labels, LinksAndLanguages, PostRendering) | `lib/bds/rendering/` | Distill into spec |
|
| B1-6 | Full rendering subsystem (Liquex, Filters, Labels, LinksAndLanguages, PostRendering) | `lib/bds/rendering/` | Distill into spec |
|
||||||
@@ -193,7 +193,7 @@ All reconciled to follow code. Specs must be self-consistent and match code.
|
|||||||
1c. ~~**A1-17**~~ — blogmark deep-link handler resolved: `BDS.Desktop.DeepLink` receives OS `bds2://` URL events and `BDS.Blogmark` parses them, runs the transform pipeline, and creates+opens a draft post (macOS `Info.plist` scheme registration documented, pending an app-bundle pipeline)
|
1c. ~~**A1-17**~~ — blogmark deep-link handler resolved: `BDS.Desktop.DeepLink` receives OS `bds2://` URL events and `BDS.Blogmark` parses them, runs the transform pipeline, and creates+opens a draft post (macOS `Info.plist` scheme registration documented, pending an app-bundle pipeline)
|
||||||
2. **D1-1 through D1-18** — untested invariants/guarantees
|
2. **D1-1 through D1-18** — untested invariants/guarantees
|
||||||
3. **C-1 through C-3** — internal spec inconsistencies (reconcile to code)
|
3. **C-1 through C-3** — internal spec inconsistencies (reconcile to code)
|
||||||
4. **B1-1 through B1-6** — major code behaviors missing from spec (B1-1, B1-2 resolved)
|
4. **B1-1 through B1-6** — major code behaviors missing from spec (B1-1, B1-2, B1-3 resolved)
|
||||||
5. **A2-1 through A2-17** — spec drift (code is normative, update spec)
|
5. **A2-1 through A2-17** — spec drift (code is normative, update spec)
|
||||||
6. **D2-1 through D2-17** — untested rules
|
6. **D2-1 through D2-17** — untested rules
|
||||||
7. **D3-1 through D3-11** — partial test coverage
|
7. **D3-1 through D3-11** — partial test coverage
|
||||||
|
|||||||
@@ -16,8 +16,10 @@ value SettingsView {
|
|||||||
editor_section: SettingsEditorSection?
|
editor_section: SettingsEditorSection?
|
||||||
categories: List<SettingsCategoryRow>
|
categories: List<SettingsCategoryRow>
|
||||||
ai_section: SettingsAISection?
|
ai_section: SettingsAISection?
|
||||||
|
technology_section: SettingsTechnologySection?
|
||||||
publishing_section: SettingsPublishingSection?
|
publishing_section: SettingsPublishingSection?
|
||||||
mcp_section: SettingsMCPSection?
|
mcp_section: SettingsMCPSection?
|
||||||
|
data_section: SettingsDataSection?
|
||||||
}
|
}
|
||||||
|
|
||||||
value SettingsProjectSection {
|
value SettingsProjectSection {
|
||||||
@@ -62,6 +64,12 @@ value SettingsAISection {
|
|||||||
system_prompt: String -- textarea (12 rows) + Save + Reset to Default
|
system_prompt: String -- textarea (12 rows) + Save + Reset to Default
|
||||||
}
|
}
|
||||||
|
|
||||||
|
value SettingsTechnologySection {
|
||||||
|
semantic_similarity_enabled: Boolean -- checkbox: enable duplicate search + related-post embeddings
|
||||||
|
-- Scripting runtime is fixed at the application layer; no runtime switch is exposed.
|
||||||
|
-- Saved together with project metadata (settings_project form).
|
||||||
|
}
|
||||||
|
|
||||||
value SettingsPublishingSection {
|
value SettingsPublishingSection {
|
||||||
ssh_mode: String -- select: scp | rsync
|
ssh_mode: String -- select: scp | rsync
|
||||||
ssh_host: String -- text input
|
ssh_host: String -- text input
|
||||||
@@ -70,13 +78,19 @@ value SettingsPublishingSection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
value SettingsMCPSection {
|
value SettingsMCPSection {
|
||||||
status: String -- port number or "Not running"
|
|
||||||
agents: List<MCPAgentRow>
|
agents: List<MCPAgentRow>
|
||||||
}
|
}
|
||||||
|
|
||||||
value MCPAgentRow {
|
value MCPAgentRow {
|
||||||
agent_name: String -- Claude Code, Claude Desktop, GitHub Copilot, etc.
|
agent_name: String -- Claude Code, Claude Desktop, GitHub Copilot, etc.
|
||||||
is_installed: Boolean -- Add/Remove toggle
|
is_supported: Boolean -- false agents show a disabled button + "not supported yet" note
|
||||||
|
is_installed: Boolean -- toggle label: Remove when installed, else Add
|
||||||
|
config_path: String? -- agent config file path (nil when unsupported)
|
||||||
|
}
|
||||||
|
|
||||||
|
value SettingsDataSection {
|
||||||
|
-- Action-only section: rebuild buttons + Open Data Folder. No persisted fields.
|
||||||
|
rebuild_targets: List<String> -- posts | media | scripts | templates | links | thumbnails | embedding
|
||||||
}
|
}
|
||||||
|
|
||||||
invariant SettingsProtectedCategories {
|
invariant SettingsProtectedCategories {
|
||||||
@@ -88,6 +102,8 @@ invariant SettingsMCPAgents {
|
|||||||
-- MCP section has exactly 7 agent rows in this order:
|
-- MCP section has exactly 7 agent rows in this order:
|
||||||
-- Claude Code, Claude Desktop, GitHub Copilot, Gemini CLI,
|
-- Claude Code, Claude Desktop, GitHub Copilot, Gemini CLI,
|
||||||
-- OpenCode, Mistral Vibe, OpenAI Codex.
|
-- OpenCode, Mistral Vibe, OpenAI Codex.
|
||||||
|
-- Only Claude Code and GitHub Copilot are supported; the rest render a
|
||||||
|
-- disabled toggle and a "not supported in the rewrite yet" note.
|
||||||
}
|
}
|
||||||
|
|
||||||
config {
|
config {
|
||||||
@@ -120,9 +136,11 @@ surface SettingsViewSurface {
|
|||||||
SettingsAISystemPromptReset()
|
SettingsAISystemPromptReset()
|
||||||
SettingsPublishingSaved(publishing_data)
|
SettingsPublishingSaved(publishing_data)
|
||||||
SettingsPublishingCleared()
|
SettingsPublishingCleared()
|
||||||
|
SettingsTechnologySaved(technology_data)
|
||||||
SettingsMCPAgentToggled(agent_name)
|
SettingsMCPAgentToggled(agent_name)
|
||||||
SettingsRebuildRequested(entity_type)
|
SettingsRebuildRequested(entity_type)
|
||||||
SettingsRegenerateThumbnailsRequested()
|
SettingsRegenerateThumbnailsRequested()
|
||||||
|
SettingsEmbeddingIndexRebuildRequested()
|
||||||
SettingsOpenDataFolderRequested()
|
SettingsOpenDataFolderRequested()
|
||||||
StyleThemeSelected(theme_name)
|
StyleThemeSelected(theme_name)
|
||||||
StyleApplyRequested(theme_name)
|
StyleApplyRequested(theme_name)
|
||||||
@@ -174,22 +192,27 @@ surface SettingsViewSurface {
|
|||||||
-- Per-model info: max output tokens, context window (when available).
|
-- Per-model info: max output tokens, context window (when available).
|
||||||
|
|
||||||
@guarantee TechnologySection
|
@guarantee TechnologySection
|
||||||
-- Section 5: scripting capabilities are configured at the application level;
|
-- Section 5: Semantic Similarity toggle
|
||||||
-- this section does not expose implementation-specific runtime choices.
|
-- ("Enable duplicate search and related-post embeddings").
|
||||||
-- Semantic Similarity toggle.
|
-- Scripting Runtime row is read-only descriptive text: scripting capabilities
|
||||||
|
-- are configured at the application layer and expose no runtime switch here.
|
||||||
|
-- Save button persists with project metadata (settings_project form).
|
||||||
|
|
||||||
@guarantee PublishingSection
|
@guarantee PublishingSection
|
||||||
-- Section 6: SSH Mode (scp/rsync), Host, Username, Remote Path.
|
-- Section 6: SSH Mode (scp/rsync), Host, Username, Remote Path.
|
||||||
-- Save + Clear buttons.
|
-- Save + Clear buttons.
|
||||||
|
|
||||||
@guarantee MCPSection
|
@guarantee MCPSection
|
||||||
-- Section 7: Status badge (port or "Not running").
|
-- Section 7: 7 agent rows, each with the agent label, its config-file path
|
||||||
-- 7 agent rows with Add/Remove toggle each.
|
-- as a subtitle (or "not supported yet" note), and a toggle button.
|
||||||
|
-- Supported agents (Claude Code, GitHub Copilot) toggle Add/Remove,
|
||||||
|
-- writing/removing the bDS server entry in the agent config file.
|
||||||
|
-- Unsupported agents render a disabled button.
|
||||||
|
|
||||||
@guarantee DataMaintenanceSection
|
@guarantee DataMaintenanceSection
|
||||||
-- Section 8: 6 rebuild buttons (Posts from Files, Media from Files,
|
-- Section 8: 7 rebuild buttons (Posts from Files, Media from Files,
|
||||||
-- Scripts from Files, Templates from Files, Links,
|
-- Scripts from Files, Templates from Files, Links,
|
||||||
-- Regenerate Missing Thumbnails).
|
-- Regenerate Missing Thumbnails, Rebuild Embedding Index).
|
||||||
-- Open Data Folder button.
|
-- Open Data Folder button.
|
||||||
-- Each rebuild executes immediately (no confirmation).
|
-- Each rebuild executes immediately (no confirmation).
|
||||||
-- Runs as background task with progress in Tasks panel.
|
-- Runs as background task with progress in Tasks panel.
|
||||||
@@ -203,7 +226,7 @@ surface SettingsViewSurface {
|
|||||||
|
|
||||||
rule SettingsRebuild {
|
rule SettingsRebuild {
|
||||||
when: SettingsRebuildRequested(entity_type)
|
when: SettingsRebuildRequested(entity_type)
|
||||||
-- entity_type: posts | media | scripts | templates | links | thumbnails
|
-- entity_type: posts | media | scripts | templates | links | thumbnails | embedding
|
||||||
-- Executes immediately (no confirmation dialog)
|
-- Executes immediately (no confirmation dialog)
|
||||||
-- Runs as background task with progress visible in Tasks panel
|
-- Runs as background task with progress visible in Tasks panel
|
||||||
-- On completion: wholesale replaces store data for that entity type
|
-- On completion: wholesale replaces store data for that entity type
|
||||||
|
|||||||
Reference in New Issue
Block a user