From b6069d90e582299e8b0e566b9a260d44a14f007d Mon Sep 17 00:00:00 2001 From: ruohki Date: Sat, 28 Feb 2026 22:20:35 +0100 Subject: [PATCH] =?UTF-8?q?docs(02-02):=20complete=20markdown=20renderer?= =?UTF-8?q?=20plan=20=E2=80=94=20REND-01=20through=20REND-10=20satisfied?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 02-02-SUMMARY.md: documents render_markdown() pipeline, code block borders, GFM table grid, decisions, deviations - STATE.md: advance to plan 02 done, update decisions log (02-02 entries), resolve REND Widget trait blocker - ROADMAP.md: mark 02-02 complete (2/3 plans done for Phase 2) --- .planning/ROADMAP.md | 8 +- .planning/STATE.md | 31 ++-- .../02-02-SUMMARY.md | 134 ++++++++++++++++++ 3 files changed, 155 insertions(+), 18 deletions(-) create mode 100644 .planning/phases/02-vault-core-and-rendering/02-02-SUMMARY.md diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index c4e457b..8046f74 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -45,10 +45,10 @@ Plans: 3. User lands on index.md when the app starts; when index.md is missing, a readable error page is shown instead of a crash 4. User can scroll content longer than the terminal with j/k, arrow keys, and PgUp/PgDn 5. User sees keyboard hints in the status bar, box-drawing borders on panels, and a CGA-era retro color theme; the layout reflows correctly when the terminal is resized -**Plans:** 3 plans +**Plans:** 2/3 plans complete Plans: -- [ ] 02-01-PLAN.md — Dependencies, vault file loading, and syntax highlighter -- [ ] 02-02-PLAN.md — Markdown-to-styled-lines renderer (all constructs) +- [x] 02-01-PLAN.md — Dependencies, vault file loading, and syntax highlighter +- [x] 02-02-PLAN.md — Markdown-to-styled-lines renderer (all constructs) - [ ] 02-03-PLAN.md — App integration: scrolling, status bar, error screen, startup wiring ### Phase 3: Navigation and Links @@ -82,6 +82,6 @@ Phases execute in numeric order: 1 → 2 → 3 → 4 | Phase | Plans Complete | Status | Completed | |-------|----------------|--------|-----------| | 1. Safety Foundation | 3/3 | Complete | 2026-02-28 | -| 2. Vault Core and Rendering | 0/3 | Not started | - | +| 2. Vault Core and Rendering | 2/3 | In Progress | - | | 3. Navigation and Links | 0/TBD | Not started | - | | 4. BBS Polish and Live Content | 0/TBD | Not started | - | diff --git a/.planning/STATE.md b/.planning/STATE.md index fedd3e5..6bf499e 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -5,33 +5,33 @@ See: .planning/PROJECT.md (updated 2026-02-28) **Core value:** Users can connect via SSH and seamlessly browse a vault of linked markdown documents with retro BBS aesthetics -**Current focus:** Phase 2 in progress — Plan 01 complete (vault core + highlighter foundation) +**Current focus:** Phase 2 in progress — Plans 01-02 complete (vault core + highlighter + renderer) ## Current Position Phase: 2 of 4 (Vault Core and Rendering) — IN PROGRESS -Plan: 1 of 3 in current phase (plan 01 done) -Status: Phase 2 Plan 01 complete — Plan 02 (markdown renderer) next -Last activity: 2026-02-28 — Plan 01 complete (deps, vault.rs, highlighter.rs) +Plan: 2 of 3 in current phase (plans 01-02 done) +Status: Phase 2 Plan 02 complete — Plan 03 (app integration + scrolling) next +Last activity: 2026-02-28 — Plan 02 complete (renderer.rs with full markdown pipeline) -Progress: [████░░░░░░] 33% +Progress: [█████░░░░░] 50% ## Performance Metrics **Velocity:** -- Total plans completed: 4 -- Average duration: 2.2 min -- Total execution time: 0.14 hours +- Total plans completed: 5 +- Average duration: 2.6 min +- Total execution time: 0.21 hours **By Phase:** | Phase | Plans | Total | Avg/Plan | |-------|-------|-------|----------| | 01-safety-foundation | 3 | 7 min | 2.3 min | -| 02-vault-core-and-rendering | 1 | 2 min | 2.0 min | +| 02-vault-core-and-rendering | 2 | 6 min | 3.0 min | **Recent Trend:** -- Last 5 plans: 2 min, 3 min, 2 min, 2 min +- Last 5 plans: 2 min, 3 min, 2 min, 2 min, 4 min - Trend: Stable *Updated after each plan completion* @@ -56,8 +56,11 @@ Recent decisions affecting current work: - 01-03: app_config stored in App struct for Phase 2 access — vault_path accessible inside event loop - 01-03: Quit prompt cleared on any non-Ctrl+C key — pressing any key dismisses double-press window - 02-01: LinesWithNewlines iterator added to preserve trailing \n for syntect grammar correctness -- 02-01: mod declarations omitted from main.rs — Plan 03 handles wiring for all Phase 2 modules +- 02-01: mod declarations added to main.rs during Plan 02 (not Plan 03) — compiler needs them to check renderer.rs - 02-01: syntect default-fancy feature uses pure-Rust fancy-regex (avoids Oniguruma C lib) +- 02-02: Full emit_code_block and emit_table written in Task 1 (not stubs) — avoids throwaway code +- 02-02: Box width for code blocks capped at terminal width — prevents border overflow on long lines +- 02-02: Table n_cols derived from max(alignments.len(), max row length) — handles malformed GFM tables ### Pending Todos @@ -65,12 +68,12 @@ None. ### Blockers/Concerns -- **REND**: ratatui 0.30 Widget trait confirmed: `impl Widget for &Foo` pattern required (NOT WidgetRef) — Plan 02 must use reference-based impl +- **REND blocker resolved**: renderer.rs uses no Widget trait at all — `render_markdown()` returns `Vec>` which Plan 03 passes to `Paragraph::new()`. No custom Widget needed. - **NAV**: Path traversal via wiki-links must be addressed in Phase 3 link resolver — canonicalize and prefix-check every resolved path - **LIVE**: notify 8.x API must be verified at integration time; watch only current file (not full vault) to avoid inotify exhaustion ## Session Continuity Last session: 2026-02-28 -Stopped at: Completed 02-01-PLAN.md — vault.rs and highlighter.rs created, cargo build clean -Resume file: .planning/phases/02-vault-core-and-rendering/02-02-PLAN.md +Stopped at: Completed 02-02-PLAN.md — renderer.rs created, cargo check clean +Resume file: .planning/phases/02-vault-core-and-rendering/02-03-PLAN.md diff --git a/.planning/phases/02-vault-core-and-rendering/02-02-SUMMARY.md b/.planning/phases/02-vault-core-and-rendering/02-02-SUMMARY.md new file mode 100644 index 0000000..d93fda5 --- /dev/null +++ b/.planning/phases/02-vault-core-and-rendering/02-02-SUMMARY.md @@ -0,0 +1,134 @@ +--- +phase: 02-vault-core-and-rendering +plan: 02 +subsystem: renderer +tags: [pulldown-cmark, ratatui, syntax-highlighting, cga-colors, box-drawing, markdown-rendering] + +dependency_graph: + requires: + - phase: 02-01 + provides: highlight_code(), OnceLock-based syntect initialization, CGA color mapping + provides: + - render_markdown() — markdown string to Vec> conversion pipeline + - H1-H6 heading rendering with CGA colors and ═/─ decorators + - Bold/italic/inline code inline styling + - Ordered and unordered list rendering with ●/◦/▪ bullets + - Blockquote rendering with yellow │ border + - Horizontal rule rendering (full-width ─ in DarkGray) + - Image placeholder rendering [IMAGE: alt] + - Fenced code block rendering with ╭─╮│╰─╯ borders + syntect highlighting + - GFM table rendering with ┌┬┐├┼┤└┴┘ full box-drawing grid + affects: [02-03-app-integration] + +tech-stack: + added: [] + patterns: + - RenderState struct with style_stack (Vec