Skip to content

apps/diagram — delivery plan

Audience: contributors. Execution-only; IDs refer to the feature requirements. Parent phase: ui-app PLAN, phase 3.

Two commit series, stacked (gh stack), each commit green on its own.

Series 1 — the MVP board

StepDeliverableIDs
D1.1Scaffold: apps/diagram + root subPackage, both configurations, runApp component that clears to the theme page and quits on q/EscDIA1DIA4
D1.2camera.d + the full pure test table (round-trips, pivot-stable zoom, unbounded pan, culling rects, minimap math)CAM1CAM5
D1.3world.d: columns, spawn/free free-list, groups, edges; unit testsWLD1WLD4
D1.4systemInput: create/select/marquee/move/pan/zoom/minimap scrub, capture owners; scripted-event tests via runAppRecordedIXN1IXN4
D1.5Render systems: board (grid, nodes, marquee) + minimap + status chrome into one op buffer; cull test; @nogc frame assertionRND1, RND2, RND4, RND5, DIA5

Gate: both configurations build; the scripted session suite passes headlessly; the isolation grep (DIA2) finds nothing; a manual GUI + TUI smoke run.

Series 2 — menus, structure, connectors

StepDeliverableIDs
D2.1Context menu + dismissal chain; DeleteIXN5, IXN6
D2.2Group / ungroup, group-aware move and outlinesWLD2
D2.3Labels: LineEditState edit, commit/dismiss, renderIXN5
D2.4Connectors: connect tool + orthogonal box-drawing routes with arrowheads; edge delete cascadeIXN2, WLD3, RND3
D2.5Fit-all + minimap toggle polish; final scripted-session sweepIXN4

Gate: the full UX table exercised by scripted tests where expressible and by the manual pass where not; isolation grep again; dub test :diagram green on ldc2 and dmd.

Verification

bash
dub test :diagram
dub build :diagram && dub build :diagram -c no-gui
dub run :diagram -- --tui
dub run :diagram -- --gui --window-width 120 --window-height 40
rg -n "ui_tui|ui_raylib|sparkles\.tui|import raylib" apps/diagram/   # no matches