diff --git a/docs/design/INDEX.md b/docs/design/INDEX.md index f808e08..5a01ec6 100644 --- a/docs/design/INDEX.md +++ b/docs/design/INDEX.md @@ -303,7 +303,8 @@ cycle 0005). This is the **same arity** C8 already grants a leaf (OHLCV = one po of K fields, **one** port, **one** row per `eval` — C8/C7/C4 untouched, a boundary completion, not a contract change. A strategy composite is simply the K=1 case (one exposure field, C10). The re-export **names** are **non-load-bearing** (C23): -they live at the blueprint boundary and in render (`[out:]` markers, #13) +they live at the blueprint boundary and in render (cycle 0022/#46 folds each onto +its producing node as a `name := …` binding; originally `[out:]` markers, #13) but are dropped at lowering — `ItemLowering::Composite.output` is `Vec<(usize, usize)>`, raw index pairs only, so the compilat is name-free (verified: the compiled-view render stayed bit-identical across this change). @@ -613,7 +614,9 @@ label refinement now appears only in the *compiled* view (built nodes, `Node::la structure** as a *program with subroutines*: a flat **main graph** wiring the harness with each composite shown as a **single opaque node** `[name]`, plus a `where:` section that defines each **distinct** composite type **once** (its -interior with `[in:k]`/`[out]` port markers; deduped by `name()`, collected +interior with named input-entry nodes and outputs folded onto their producers as +`name := …` bindings (render refined through cycles 0019–0022; originally +`[in:k]`/`[out]` port markers); deduped by `name()`, collected recursively so nested composites are opaque nodes with their own definitions). This supersedes #13's original cluster-box model and is the durable split this view realizes: **blueprint = source** (composites as named subroutines, body once) vs. diff --git a/docs/specs/0022-composite-output-binding-render.md b/docs/specs/0022-composite-output-binding-render.md index f26d311..727c670 100644 --- a/docs/specs/0022-composite-output-binding-render.md +++ b/docs/specs/0022-composite-output-binding-render.md @@ -281,6 +281,14 @@ Build / determinism: byte-identical (C23 — the compiled view never carried output names); the MACD run stays deterministic and unchanged in metrics (render-only change). +> **Post-ship note (audit 0022).** This Testing strategy and the §Components table +> under-counted the test blast radius: besides the `contains`-style assertions, the +> full-render golden `blueprint_view_golden` (`crates/aura-cli/src/main.rs`) pins the +> entire sample (`sma_cross`) blueprint render and was forced to re-capture (the +> `[cross]` output stub + its edge collapse into `[cross := Sub(#Sf,#Ss)]`). The +> shipped change is correct and green; this note records the doc-vs-reality gap that +> the implement phase surfaced. + A dedicated multi-output-per-node tuple-binding unit test is **not** required for acceptance (no such composite exists in the fixtures), but `output_binding`'s tuple branch is specified above so a future multi-output composite renders `(a, b) :=`