13 KiB
13 KiB
bDS Rust Rewrite — Execution Backlog
Purpose
This document converts the core and extension plans into execution order. It is organized by milestone first and by crate second.
Rules:
- Do not pull work forward from a later milestone unless it directly unblocks the current milestone.
- Keep tasks vertically sliced where possible: engine + UI + tests.
- Compatibility tasks outrank polish tasks.
Milestone M0: Compatibility Baseline
bds-core
create workspace and crate boundaries (bds-core, bds-editor, bds-ui, bds-cli)DONEadd SQLite connection management viaDONErusqlite(bundled, vtab features)add migration loader viaDONE (inline migrations for M0; refinery switch in M1)refinerydefine initial shared model modules withDONEserdederivesadd checksum (DONEsha2) and slug (deunicode) utilitiesestablish error handling conventions:DONEthiserrorfor bds-core,anyhowfor bds-ui/bds-cliaddDONEtokioruntime as workspace dependency (used by bds-ui and bds-cli, not directly by bds-core engine code)
bds-editor
create crate with ropey, syntect, cosmic-text dependenciesDONEimplement basic rope buffer wrapper with edit operationsDONEimplement syntect integration for markdown highlightingDONEimplement cosmic-text layout for rendering highlighted textDONE (Iced text rendering via cosmic-text backend)implement basic cursor model (position, move, place by click)DONE (up/down/left/right/home/end + click placement)implement basic text insertion and deletionDONE (insert, backspace, delete forward, enter)implement Iced custom widget that composes buffer + highlight + layout + cursorDONE (CodeEditor widget with gutter, text, cursor rendering + keyboard/mouse events)implement basic vertical scrolling with viewport-aware renderingDONE (scroll_by, ensure_cursor_visible, mouse wheel, viewport-clipped rendering)verify IME composition events work through winit (early risk check)DONE (verified: winit/Iced delivers composed chars via Key::Character; pre-edit display deferred to M3)
bds-ui
create app entry point with IcedDONEApplicationimplwire Iced window creationDONEwire muda menu bar with skeleton App/File/Edit/View/Window/Help menusDONE (stub)wire macOS lifecycle shim via objc2 (application:openFile:, application:openURLs:) behind cfg gateDONE (stub)wire mudaDONE (platform/menu.rs menu_subscription + app.rs subscription)MenuEventreceiver as IcedSubscription
fixtures and docs
collect representative fixture projects from current appDONE (fixtures/compatibility-projects/rfc1437-sample/)capture golden generated output for those fixturesDONE (fixtures/golden-generated-sites/rfc1437-sample/ — subset from live TypeScript-generated site: 3 post pages × 2 languages, structural files, assets, feeds, sitemap, category page)create initial compatibility inventory from the matrix template (must includeDONE (docs/COMPATIBILITY_INVENTORY.md)mediaTranslations,postLinks, FTS5 tables)create Liquid feature inventory from default templatesDONE (docs/LIQUID_FEATURE_INVENTORY.md)determine whether current app uses Pagefind or another client-side search index — if Pagefind, plan forDONE (confirmed: TypeScript app uses pagefind_extended CLI; Rust will use pagefind crate library API)pagefindcrate library integration (not CLI binary)create slug compatibility test suite comparingDONEdeunicodevstransliterationoutput on fixture contentcreate Iced architecture patterns document (message design, subscription model, custom widget patterns)DONE (docs/ICED_ARCHITECTURE_PATTERNS.md)
Validation
DB readability tests (all tables includingDONE (59 unit tests + 29 fixture integration tests)mediaTranslations,postLinks, FTS5, and AI/catalog tables)app launch smoke test (Iced window + muda menus)DONE (tests/app_smoke.rs — type-level tests; muda requires main thread so full launch tested viacargo run)bds-editor PoC test: renders highlighted markdown, accepts keyboard input, cursor movesDONE (tests/editor_poc.rs — 11 integration tests covering highlight + input + cursor + scroll)fixture harness testDONE (tests/fixture_readability.rs)slug compatibility testsDONE
Milestone M1: Data Fidelity
bds-core/db
- verify schema compatibility against existing projects
- add FTS5 virtual tables (
posts_fts,media_fts) for in-app full-text search - verify
mediaTranslationstable read/write - verify
postLinkstable read/write
bds-core/engine
- implement
ProjectEngine - implement
PostEngine - implement
MediaEngine - implement
PostMediaEngine - implement
TagEngine - implement
MetaEngine - implement metadata diff flow (posts, media, scripts, templates)
- implement rebuild-from-filesystem flow
bds-core/util
- frontmatter parser/writer via
serde_yaml - translation file parser/writer
- sidecar parser/writer
- content hashing support via
sha2 - thumbnail generation via
imagecrate (resize, WEBP encoding) - recursive directory traversal via
walkdir(for rebuild-from-filesystem)
Validation
- round-trip persistence tests
- rebuild tests
- metadata diff tests
- golden-file comparisons for written files
Milestone M2: Native Workspace
bds-ui/platform
- muda menu bar: full menu tree with accelerators
- menu enable/disable validation synced to app state
- menu event routing as
Messagevariants - rfd integration for file/folder open and save dialogs
- macOS lifecycle shim: file-open and URL-open events forwarded as
Messagevariants
bds-ui/app
- root
Messageenum andupdate()dispatcher - app state model
- task surface model
bds-ui/views
- workspace layout
- sidebar
- activity bar
- tab bar
- status bar
- project selector
Validation
- menu event →
Messagerouting integration tests - keyboard shortcut integration tests
- rfd dialog invocation tests
- fixture project open flow test
Milestone M3: Authoring
bds-editor (maturation)
- full cursor movement (arrows, word, line, page, home/end)
- selection (shift+movement, click-and-drag, double-click word select)
- system clipboard integration (copy/cut/paste)
- undo/redo with edit grouping
- line numbers gutter
- incremental syntax rehighlighting on edits
- IME input handling for CJK and other input methods
- configurable soft wrap
- additional syntax grammars: Liquid/HTML, Lua, YAML, JSON
bds-core/engine
- expose editor-safe save APIs
- expose publish/unpublish/discard flows
- expose template validation APIs
- expose script validation APIs
bds-ui/views
- dashboard
- post editor (bds-editor with markdown + YAML frontmatter highlighting)
- translation editor (bds-editor)
- media browser
- media editor
- tags view
- settings view
- templates view and editor (bds-editor with Liquid/HTML highlighting)
- scripts view and editor (bds-editor with Lua highlighting)
bds-ui/components
- inputs
- modals
- toast/error surfaces
- reusable list rows and panels
Validation
- entity create/edit/save flows
- template validation flow
- script validation flow
- editor widget tests: cursor movement, selection, undo/redo, clipboard, IME
Milestone M4: Rendering Parity
bds-core/render
- markdown render pipeline via
pulldown-cmark - Liquid render pipeline via
liquidcrate (scoped to the feature subset documented in the Liquid inventory:if/elsif/else,for,assign,render, whitespace stripping, plus filters:default,escape,url_encode,append;.sizeis property access on arrays, not a pipe filter) - custom Liquid filter:
i18n(translation lookup by key and language) - custom Liquid filter:
markdown(markdown-to-HTML with macro expansion, URL rewriting, media path canonicalization) - built-in macro renderers:
gallery,youtube,vimeo,photo_archive,tag_cloud(native Rust, not Lua) - template resolution rules
- URL rewriting
- RSS/Atom feed generation via
quick-xml - sitemap generation via
quick-xml - generated file hash tracking (
generatedFileHashestable for skip-unchanged-writes) - Pagefind search index generation via
pagefindcrate library API (PagefindIndex::add_html_file()+get_files()) — if required for parity (determine in M0 inventory)
bds-core/ai
- one-shot AI client:
reqwest+serde_jsonagainst OpenAI-compatible Chat Completions endpoint - two-endpoint configuration: online endpoint (URL, API key, model) + airplane mode endpoint (URL, model)
- AI translate post operation (title, excerpt, content to target language)
- AI translate media metadata operation (title, alt, caption to target language)
- AI image description / alt text generation operation
- AI post analysis operation (title, excerpt, slug suggestion)
- AI taxonomy analysis operation (tag, category suggestions)
- AI language detection operation
- API key storage via OS keychain (macOS Keychain, Windows DPAPI, Linux libsecret)
- airplane mode gating: block online endpoint, use airplane endpoint or show toast
- error handling: surface failures as user-visible feedback, never silent
bds-core/engine
TemplateEnginePageRenderer(parallelize rendering viarayon)BlogGenerationEnginePreviewServer(localhost HTTP viaaxumontokio)SearchIndexEngineonly if required for parity
bds-ui/views
- preview controls
- generation progress display
- render errors and diagnostics
- AI operation triggers in post editor (analysis, taxonomy), translation editor (translate), and media editor (alt text, translate)
- AI endpoint configuration in settings view (online + airplane mode endpoints)
Validation
- golden generated-site comparisons
- preview route coverage
- template compatibility suite
- one-shot AI client tests (mocked endpoint: all 6 operations)
- AI endpoint configuration persistence tests
- AI airplane mode gating tests
Milestone M5: Operate And Ship
bds-core/engine
PublishEngine(SSH/SCP viassh2, rsync via child process)- validation and integrity services
- filesystem watcher via
notify(if needed for detecting external changes to open content)
bds-core/scripting
ScriptEngineLuaRuntimeviamlua(Lua 5.4, vendored) — user-authored scripts only; built-in macros are native Rust inbds-core/renderLuaApi(expose post, media, tag, and project data to Lua scripts viamlua::UserDatatrait)- user-authored Lua macro execution at render time
- user-authored transform and utility script execution
- scripting docs generator
bds-ui/views
- publish workflow screens
- publish progress and failure surfaces
- script docs access points if needed for core usability
Validation
- publish end-to-end tests
- Lua API bridge tests
- built-in macro compatibility tests
- docs sync tests
Extension Backlog
Bucket A: Git And Validation
bds-core
GitEngineviagit2(shell out for LFS operations)- richer site validation service support
bds-ui
- Git sidebar
- diff view
- richer metadata diff UI
Bucket B: Import
bds-core
- WXR parser
- import analysis
- import execution
- import definitions
bds-ui
- import wizard
- import progress and result views
Bucket C: AI Chat And Tool Use
bds-core
- streaming client extension (SSE parsing on top of core
reqwestclient) - tool execution framework (tool definitions, call routing, result formatting)
- multi-turn conversation management
bds-ui
- chat sidebar
- chat panel
- provider settings UI (extends core AI endpoint configuration)
Bucket D: Embeddings And Duplicates
bds-core
- embedding engine via
ort(ONNX Runtime) - vector index via
usearch(HNSW) - duplicate detection logic
bds-ui
- semantic search UI
- duplicates view
Bucket E: Translation QA And Docs UX
bds-core
- translation validation engine
bds-ui
- translation validation view
- documentation browser
Bucket F: Menu Editing And Deep Links
bds-core
- menu editing services
- deep-link flow support beyond core shell hooks
bds-ui
- menu editor UI
Bucket G: MCP And Automation
bds-cli
- headless commands
- MCP server surface
- CLI-to-app notification mechanism (
db_notifications/NotificationWatcher)
Bucket H: Blogmark And Transforms
bds-core
BlogmarkTransformService- transform script chain execution
bds-ui
- 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
- A2UI component renderer
- A2UI surface manager
- AI assistant dynamic surface integration
Exit Rule
Do not start extension buckets until Milestone M5 is complete and the Rust app is already a credible replacement for the current authoring and publishing workflow.