diff --git a/RUST_COMPATIBILITY_MATRIX_TEMPLATE.md b/RUST_COMPATIBILITY_MATRIX_TEMPLATE.md index 2e69d6a..673fc07 100644 --- a/RUST_COMPATIBILITY_MATRIX_TEMPLATE.md +++ b/RUST_COMPATIBILITY_MATRIX_TEMPLATE.md @@ -73,7 +73,7 @@ Use this for compatibility-sensitive behaviors that are not a single persisted f | rendering | built-in macros | JS server-side (gallery, youtube, vimeo, photo_archive, tag_cloud) | Rust-native in bds-core/render | implementation language changes, output must match | golden-generated-site comparisons | not-started | These are NOT Python macros | | rendering | Liquid feature subset | liquidjs 10.25 (full spec available) | Rust Liquid (scoped to used subset) | implementation may differ for unused features | template compatibility suite | not-started | Only ~35% of spec used by default templates | | slugs | slug generation | `transliteration` npm package | `deunicode` Rust crate | possible edge-case differences | slug corpus tests in M0 fixtures | not-started | Verify against real content | -| editor | content editing | rich editor (default) | plain-text syntax-highlighting editor (bds-editor: ropey + syntect + cosmic-text) + live preview | yes | n/a | approved-divergence | Rich editor deferred to extension Bucket I, builds on bds-editor foundation | +| editor | content editing | Markdown editor + rendered preview | syntax-highlighting Markdown editor (bds-editor: ropey + syntect + cosmic-text) + rendered preview | no | editor + preview integration tests | not-started | | | preview | asset sourcing | local assets only | identical | no | HTML assertions | not-started | | | runtime | JS dependency | Electron (Chromium + Node.js) | no JavaScript anywhere — pure Rust + native APIs | yes (intentional) | build verification: no JS in dependency tree | approved-divergence | Supply-chain security constraint | | runtime | async executor | Node.js event loop | tokio | yes (internal) | n/a | approved-divergence | Used for preview server, publish, file watching | @@ -95,4 +95,4 @@ Use this for compatibility-sensitive behaviors that are not a single persisted f - every persisted field used by core is represented - every approved divergence is explicit - every row links to a fixture or test before release -- metadata diff, rebuild, and publish implications are filled in for all relevant rows \ No newline at end of file +- metadata diff, rebuild, and publish implications are filled in for all relevant rows diff --git a/RUST_EXECUTION_BACKLOG.md b/RUST_EXECUTION_BACKLOG.md index f205ca1..c3bdf6a 100644 --- a/RUST_EXECUTION_BACKLOG.md +++ b/RUST_EXECUTION_BACKLOG.md @@ -443,20 +443,6 @@ Code-vs-spec gaps from the 2026-07-18 spec sync. Each task names its authoritati - external content capture workflow -### Bucket I: Rich Editor - -#### `bds-editor` (evolution) - -- inline bold/italic/header rendering via cosmic-text mixed font styles -- inline image preview via Iced image rendering within the custom widget -- macro block preview (render macro output inline) -- clickable links - -#### `bds-ui` - -- rich editor mode toggle -- image insert dialog from linked media - ### Bucket J: A2UI Surfaces #### `bds-ui` diff --git a/RUST_PLAN_CORE.md b/RUST_PLAN_CORE.md index 0e67421..17cfbbc 100644 --- a/RUST_PLAN_CORE.md +++ b/RUST_PLAN_CORE.md @@ -99,7 +99,7 @@ These map to extension Buckets G (CLI + events) and K/L (server, TUI) in RUST_PL - **Custom editor widget (bds-editor crate)**: syntax-highlighting markdown/Liquid/Lua editor built on ropey (rope buffer), syntect (syntax highlighting), and cosmic-text (font shaping and text layout). This is the highest-risk custom component and gets a proof-of-concept in Wave 0. - **Diesel + embedded migrations**: typed SQLite queries and generated schema, with migrations managed by `diesel_migrations`. Backend-only SQL is confined to connection setup and FTS5 operations. - **tokio as the async runtime**: preview server (axum), SSH publishing, file watching, and rfd async dialogs all require an async executor. tokio is the standard choice and is used workspace-wide. Synchronous engine code in bds-core does not use tokio directly — it remains callable from both async (bds-ui) and sync (bds-cli) contexts. -- **Plain-text markdown editor first**: no WYSIWYG in core. Live preview is required. This is an intentional regression from the baseline app's rich editor. A rich editor can be added as an extension bucket after core ships — and the bds-editor widget provides a natural foundation for it. +- **Markdown editor with live preview**: bds-editor provides syntax-highlighted Markdown editing, paired with the rendered preview required by the baseline workflow. - **Lua for user-authored scripting**: `mlua` with Lua 5.4. Only user-authored macros, transforms, and utility scripts run through Lua. Built-in macros are native Rust — see the macro architecture section below. - **One-shot AI operations are core scope**: six operations use a simple OpenAI-compatible HTTP client (`reqwest` + `serde_json`): (1) translate post, (2) translate media metadata, (3) image description / alt text, (4) post analysis (title + excerpt + slug suggestion), (5) taxonomy analysis (tag + category suggestions), (6) language detection. Two configurable endpoints: one for online use, one for airplane/offline mode (local model). These are fire-and-forget request/response calls — no streaming, no tool use, no chat history. The AI chat UI, streaming responses, and tool execution remain in Extension Bucket C. @@ -211,7 +211,6 @@ bds-rust/ - MCP and remote automation surfaces - Blogmark transform service (external content capture pipeline) - A2UI server-driven UI surfaces -- WYSIWYG / rich markdown editor (builds on bds-editor foundation) ## Cross-Cutting Requirements diff --git a/RUST_PLAN_EXTENSION.md b/RUST_PLAN_EXTENSION.md index d6aabc2..60d6ac0 100644 --- a/RUST_PLAN_EXTENSION.md +++ b/RUST_PLAN_EXTENSION.md @@ -165,33 +165,6 @@ Secondary content-capture workflow. Not required for core authoring with existin - external content can be captured and transformed into posts via the Blogmark pipeline - transform scripts execute reliably -### Bucket I: Rich Markdown Editor - -#### Scope - -- WYSIWYG or hybrid markdown editing (comparable to the baseline app's rich editor) -- macro syntax preview in editor -- image insert dialog from linked media - -#### Why extension - -Core ships with the bds-editor syntax-highlighting plain-text editor and live preview. The baseline app defaults to a rich editor, so this is a user-facing regression that should be addressed after core stabilizes. - -#### Architecture advantage - -The bds-editor crate (ropey + syntect + cosmic-text) built during core provides the foundation for the rich editor. Incremental additions: - -- inline rendering of bold/italic/headers via cosmic-text mixed font styles -- inline image preview via Iced image rendering within the custom widget -- macro block preview (render macro output inline in the editor) -- clickable links - -This is an evolution of the existing editor widget, not a separate technology decision. - -#### Done when - -- users can edit content with a rich editor comparable to the baseline app's editing experience - ### Bucket K: Headless Server Mode #### Scope @@ -264,8 +237,6 @@ Bucket G MCP + Automation ↓ Bucket H Blogmark + Transforms ↓ -Bucket I Rich Editor (builds on bds-editor from core) - ↓ Bucket K Headless Server Mode ↓ Bucket L Terminal UI (after Buckets G + K) @@ -289,4 +260,4 @@ Every extension still inherits the core verification baseline plus extension-spe ## Out Of Scope For Now - cross-platform packaging polish beyond what the core and extension work naturally require -- feature work that introduces new persistence formats before full parity is reached \ No newline at end of file +- feature work that introduces new persistence formats before full parity is reached diff --git a/specs/editor_post.allium b/specs/editor_post.allium index d6fd39b..c28b006 100644 --- a/specs/editor_post.allium +++ b/specs/editor_post.allium @@ -164,7 +164,7 @@ surface PostEditorSurface { -- Markdown: code editor with markdown-with-macros language, -- highlighting [[macro ...]] syntax. Word wrap on, minimap off, 14px font. -- Preview: iframe showing rendered preview. - -- Note: visual/WYSIWYG mode not implemented; "visual" normalizes to markdown. + -- Markdown and Preview are the only editor modes. @guarantee DragDropImages -- Drop image file onto editor area triggers import chain.