11 KiB
11 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)
- add SQLite connection management via
rusqlite(bundled, vtab features) - add migration loader via
refinery - define initial shared model modules with
serdederives - add checksum (
sha2) and slug (deunicode) utilities - establish error handling conventions:
thiserrorfor bds-core,anyhowfor bds-ui/bds-cli - add
tokioruntime 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 dependencies
- implement basic rope buffer wrapper with edit operations
- implement syntect integration for markdown highlighting
- implement cosmic-text layout for rendering highlighted text
- implement basic cursor model (position, move, place by click)
- implement basic text insertion and deletion
- implement Iced custom widget that composes buffer + highlight + layout + cursor
- implement basic vertical scrolling with viewport-aware rendering
- verify IME composition events work through winit (early risk check)
bds-ui
- create app entry point with Iced
Applicationimpl - wire Iced window creation
- wire muda menu bar with skeleton App/File/Edit/View/Window/Help menus
- wire macOS lifecycle shim via objc2 (application:openFile:, application:openURLs:) behind cfg gate
- wire muda
MenuEventreceiver as IcedSubscription
fixtures and docs
- collect representative fixture projects from current app
- capture golden generated output for those fixtures
- create initial compatibility inventory from the matrix template (must include
mediaTranslations,postLinks, FTS5 tables) - create Liquid feature inventory from default templates (12 files in
src/main/engine/templates/) - determine whether current app uses Pagefind or another client-side search index — if Pagefind, plan for
pagefindcrate library integration (not CLI binary) - create slug compatibility test suite comparing
deunicodevstransliterationoutput on fixture content - create Iced architecture patterns document (message design, subscription model, custom widget patterns)
Validation
- DB readability tests (all tables including
mediaTranslations,postLinks, FTS5, and AI/catalog tables) - app launch smoke test (Iced window + muda menus)
- bds-editor PoC test: renders highlighted markdown, accepts keyboard input, cursor moves
- fixture harness test
- slug compatibility tests
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,size) - 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 - AI-assisted translation operation (translate field content to target language)
- AI image description / alt text generation operation
- AI title suggestion operation
- AI endpoint configuration model (endpoint URL, API key, model name)
- 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 (title suggestion), translation editor (translate), and media editor (alt text generation)
- AI endpoint configuration in settings view
Validation
- golden generated-site comparisons
- preview route coverage
- template compatibility suite
- one-shot AI client tests (mocked endpoint: translation, alt text, title suggestion)
- AI endpoint configuration persistence 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.