From ebe2e713490855ac5364931aa3fb5a7bfb971d63 Mon Sep 17 00:00:00 2001 From: Brummel Date: Mon, 8 Jun 2026 02:24:15 +0200 Subject: [PATCH] =?UTF-8?q?audit:=20cycle=200019=20(#41)=20=E2=80=94=20dri?= =?UTF-8?q?ft-clean;=20C9=20boundary-uniform=20realization=20note?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Architect drift review over 8bc429f..HEAD (spec 03f2dc4, plan c9115e3, impl 41cbb55; plus the in-range #42 fieldtest port 241bb62). No regression scripts configured (profile regression/architect_sweeps both empty) — the architect is the sole gate. Result: clean. C23 holds — Role.name / ParamAlias.name / OutField.name are all dropped at lowering; compiled_view_golden byte-identical (untouched in the diff); the param_space slot-order anchors green and unmodified. Param aliasing is a pure naming overlay (relabel in place, slot order/arity/kind unchanged), confirmed by the new relabel/unaliased/partial tests. C8/C7/C4/ C9 untouched (authoring-surface legibility only); BadInteriorIndex reused, no new variant. The #42 port is faithful (assertions strengthened, not gutted). One drift item, resolved here: the 0018 C9 realization note carried a stale "Input-role and param names ... remain index-only pending #41" sentence. #41 has landed, so this commit replaces it with a cycle-0019 realization note recording that all three composite-boundary edge-kinds (input roles / params / outputs) are now uniform named projections of interior handles (Role / ParamAlias / OutField), names non-load-bearing and dropped at lowering — the prose now matches the shipped code. drift-clean, not a milestone close (no milestone fieldtest run here). --- docs/design/INDEX.md | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/docs/design/INDEX.md b/docs/design/INDEX.md index 190fa24..9257ef0 100644 --- a/docs/design/INDEX.md +++ b/docs/design/INDEX.md @@ -306,9 +306,22 @@ completion, not a contract change. A strategy composite is simply the K=1 case they live at the blueprint boundary and in render (`[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). Input-role and -param **names** at the same boundary remain index-only pending #41 (the legibility -sibling that depends on this cycle). +compiled-view render stayed bit-identical across this change). +**Realization (cycle 0019 — name the composite boundary, #41).** The same +named-projection shape now covers the other two boundary edge-kinds, so **all +three** are uniform: `input_roles` is a `Vec` (was a bare +`Vec>`) and a composite carries `params: Vec`, alongside `output: Vec`. Each is an ordered, positionally-indexed +**named projection** of interior handles. Param aliasing is a **pure naming overlay**, +not curation: `param_space()` relabels an aliased slot's surface name **in place** — +slot order, arity, and kinds are unchanged, so the sweep surface is identical and the +`param_space_mirrors_compiled_flat_node_param_order` anchor stays green. Like the +output names, role and param **names** are **non-load-bearing** (C23): they live at +the blueprint boundary and in render (`[in:]` / `[param:]` markers) but +are dropped at lowering — the compilat is wired by raw index and a dangling alias is +rejected at compile (`BadInteriorIndex`), not silently lowered. The full composite +boundary signature (named inputs, params, multi-outputs) is now legible without +changing the compilat. ### C10 — Strategy output is an intent/exposure stream; position management is a decoupled derived layer; brokers are downstream nodes **Guarantee.** A strategy's primary, backtestable output is **not** an equity