v2.2.1 — Performance: layout.py renders the finished file
A performance patch — same inputs, same self-contained-HTML output contract; the generator just does more of the work, so diagrams come out faster.
Changed
layout.py --render out.htmlwrites the complete, ready-to-ship HTML (geometry + style layer + the model's copy) instead of the model hand-transcribing 35 rects and 38 pathds into a template. The semantic graph JSON now carries the copy (subtitle, a 3-cardsummary, optionalfooter); the model authors semantics + copy and runs the script, keeping final say by editing the JSON (re-render) or the emitted file.--emit-svgkept as an alias; the hand-transcribe path remains the no-Python fallback. The tempgraph.jsonis written outside the output folder, so the user's folder holds only the.html.- Routing: shared per-source trunk lanes — a node fanning out to several off-column targets shares one margin trunk with horizontal taps instead of N lanes marching into empty space (bianque: 12 left lanes → 3, left band −64%).
- Journey dots speed up on long edges — per-hop dot duration capped at 4s, so dots on long cross-diagram edges no longer crawl (bianque slowest ~11.6s → ≤4s).
Performance
- Generation output the model must write drops ~84% aggregate across the 11-case regression and ~79.5% on the bianque-class benchmark. Regression green:
run_checks11/11,check_diagram0 violations (12 graphs),check_fidelityPASS (7 mermaid + bianque). Local-test bianque (35 nodes / 38 edges) generated in ~3 min — inside the 8-min perf-gate, down from ~5 min.
Install / update (Claude Code): npx skills add csthink/dashmotion -a claude-code (re-run to update in place). claude.ai: download dashmotion.zip below → Settings → Skills → upload.