
ROADMAP TO v0.0.0: Static Visual Engine

✅ Completed
- 0.9  — Geometry & edge bend foundation
- 0.10 — Arrowhead bugfixes, label positioning round 1
- 0.11 — Render profile system (compact/debug/presentation + TOML/inline)
- 0.12 — Full layout/render refactor (IntentBuilder, modular FS, trait-based layout)
- 0.13 — Test harness before cutover
- 0.14 — Final cutover, legacy deletion, and warning cleanup

🧭 ACTIVE: Waypoint 0.15 — Unified Feature Pipeline

0.15a — Metadata, Title, and Debug Overlay
- Add <title>, <desc>, optional created timestamp
- Profile: title, tool, show_debug_overlay: bool
- CLI: --title, --tool, --debug-overlay
- Inject SVG comments, visible labels (e.g. bend offset, edge index)

0.15b — Render Profile & CLI Reflection
- Centralize all visual options into the RenderProfile struct
- Enable profile loading via --profile custom.toml
- All CLI flags override profile keys cleanly
- Enable --profile-preset debug|presentation|compact

0.15c — Snapshot Test Harness
- Build snapshot regression suite
- Store SVG outputs for tests/fixtures/*.svg
- Golden comparisons: a(b|c)*d, a*, (ab)*, self-loops, etc.
- Tests must reflect profiles + CLI inputs

0.15d — Arrowhead & Marker Style
- Tweak arrow shape, scale, orientation, and stroke/fill
- Profile: arrow_size, arrow_fill, arrow_style
- CLI: --no-arrows, --arrow-style=triangle|dot
- Test: arrows at fans, loops, endpoints

0.15e — Self-Loop Aesthetics
- Detect from == to and apply CurveType::Loop
- Tune radius, loop angle, label position inside arc
- Profile: loop_offset, loop_angle
- CLI: --loop-offset, --tight-loops
- Test: looped states with multiple transitions

0.15f — Edge Fan-Out Refinement
- Group all (from, to) bidirectional edge sets
- Spread multiple edges with symmetric curvature
- Profile: max_fanout_bend, fanout_mode
- CLI: --no-fanout, --fanout-style=cubic
- Test: a(b|c)*d and (a|b)*

0.15g — Label Anchor Tuning
- Adjust label Y-offset, curve-following, alignment
- Profile: label_follow_curve: bool, label_offset_y
- CLI: --flat-labels, --curve-labels
- Ensure label readability on self-loops and curved edges

0.15h — Layout Heuristics Refinement
- Improve node spacing, loop separation, start-state position
- Profile: layout.gravity, tightness, loop_bias
- CLI: --layout=flow|grid, --gravity=center
- Test: long chains, dense fans, start/accept transitions

0.15i — Z-Order and Layering
- Adjust rendering order: nodes above edges
- Profile: draw_order = ["edges", "nodes"]
- CLI: --layer=nodes-top
- Validate visually with overlapping edge-label-node scenarios

🔜 0.16 — Final Integrate and Polish
- Internal refactor pass for clarity and modularity
- File cleanup, naming, helper shims
- Review all configuration pathways

🔜 0.17 — Publish v0.0.0
- cargo publish
- CHANGELOG.md
- Version tag
- Optional: demo GIF, release blog
