Render the CLI blueprint view as main graph + composite definitions #38
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The CLI blueprint view (
render_blueprintin crates/aura-cli/src/graph.rs)currently draws composites as ascii-dag subgraph cluster boxes with their
interiors expanded inline, one level deep — nested composites hit an
unimplemented!at graph.rs:75.Two problems with the box model:
/2, shiftingsibling boxes by ~1 column; wide sibling labels then overlap
(
[SimpleMovingAverage(length)[SimpleMovingAverage(length)]). The garble iswidth/parity-sensitive and has no config or padding dodge that survives
unequal-width siblings. The flat (non-subgraph) layout is collision-free at
all widths. Bare-type labels only avoid it because aura's type names are
short. Verified by reproduction 2026-06-07.
composite reused N times, produces a wall of nodes.
New model (Option 3b — "program with subroutines"):
rendered as a single opaque node
[name], flat layout (no subgraph boxes).wheresection: each distinct composite type rendered onceas its own flat sub-graph, interior leaves expanded, nested composites again
opaque with their own definitions (recursive).
Benefits: blueprint size tracks top-level wiring, not inlined node count, so
real strategies stay displayable; each composite type's body is rendered once
regardless of reuse; nested composites become natural (removes the
unimplemented!); the flat-only layout sidesteps the ascii-dag cluster bug.Scope:
render_blueprintonly.render_compilat(flat, fully-inlined, C23)stays unchanged. Interactive enter/focus navigation is the playground
counterpart, tracked separately in #37 — out of scope here.
Open spec-level details (naheliegende defaults, not forks): composite-type
dedup key = the name (a debug symbol; assumes same name ⇒ same structure);
opaque-node ports = input roles + one output, edges by slot, shown in a
definition as
⟨in:k⟩/⟨out⟩markers.