From 57310b83c74d728832b66e39504a383724aa1ede Mon Sep 17 00:00:00 2001 From: Brummel Date: Wed, 3 Jun 2026 15:58:54 +0200 Subject: [PATCH] =?UTF-8?q?audit:=20cycle=200005=20tidy=20=E2=80=94=20glos?= =?UTF-8?q?sary=20record-reality=20(node-output-record)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Architect drift review over 9ff90b5..5228542 (node-output-record): drift_found, all low-severity, NO contract violation. The load-bearing invariants hold: - C7 forbids intact — the reused `scratch` buffer (cleared+extended, warm after cycle 1) and node-owned `[Scalar; K]` output buffers give zero per-cycle heap alloc on the inter-node forward path; no fifth scalar type, no dyn-Any, no heterogeneous buffer (the TwoField mixed-kind producer is rejected at bootstrap, never streamed). Purity grep clean. The sharpened C7 guarantee text matches the shipped per-field kind check + the Edge::from_field scatter. - C8 revised text faithful — one output port (out_len), record of 1..K columns (Vec), field-wise binding only (N edges, no whole-record bind), scalar = degenerate K=1. No internal contradiction with C7/C9/C10. - C6 untouched, verified against the run loop — one eval per node per cycle, every out-edge stamps SlotState { fresh_at: cycle_id, last_ts: ts } with the same ts, so the K fields of one record are co-fresh by construction. fires() unchanged. - C3/C4/C5/C9 unperturbed (diff touches only node/edge plumbing); C2 lookback enforcement unperturbed (column.rs/ctx.rs/any.rs not in the diff). - C10 coherence confirmed — a position event is a 5-field record (event_ts/action/position_id/instrument_id/volume), exactly the K-field base-column record C8/C7 now sanction; the decision/sizing node is an ordinary K=5 producer, the broker an N-edge field-wise consumer. No contract gap blocks the next consumer; C10 correctly out of scope this cycle. Resolved [low] (the one confirmed drift) — glossary record-reality. The ledger C7/C8 moved this cycle but the glossary lagged. Fixed three entries to the post-0005 reality (this is audit's autonomous glossary write authority, record-reality only): `node` ("at most one output" -> "at most one output port; a producer's output is a record of 1..K base-scalar columns, scalar = degenerate K=1"), `composite` (now connects the multi-column stream to the node-output model — the record a producer's eval returns, bound field-wise), `edge` (forwards "one field (from_field) of a producer's eval output record", per-field kind check). The architect named `node` + `composite`; `edge` is an orchestrator-observed addition in the same record-reality pass (post-from_field it read "forwards one node's eval output", now imprecise for K>1). Regression gate: profile regression list empty — architect is the sole gate, now clean (36 tests: aura-core 19 + aura-std 3 + aura-engine 14; clippy -D warnings clean; purity grep clean). Cycle 0005 is drift-clean. Carry-on forward note (next-cycle owner, not a fix now): - [low] cycle 0004's depth>1 join-lookback guard test remains merely OWED, not a fresh hole — the substrate enforces it via Window bounds (column.rs/ctx.rs untouched this cycle) and 0005 added no depth>1 join. Co-fresh borrowed-row routing does not interact with per-input lookback. A confirmation test is still owed when a depth>1 join lands. NOT a milestone close: the walking-skeleton milestone still needs its end-to-end fieldtest (ingest -> signal -> backtest -> position table -> broker -> pip-equity). This cycle delivers the record-output substrate that the trading half (C10) now builds on. refs walking-skeleton Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/glossary.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/glossary.md b/docs/glossary.md index 3718a85..8517b5b 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -45,7 +45,7 @@ The dynamically-loadable Rust library form of a project and its nodes, hot-reloa ### composite **Avoid:** — -A node that wires a sub-graph and exposes one output (a combined signal, or a strategy) — composition is fractal and acyclic. Also names a multi-column stream that bundles base scalar columns (e.g. OHLCV). +A node that wires a sub-graph and exposes one output (a combined signal, or a strategy) — composition is fractal and acyclic. Also names the multi-column stream a node emits: the **record** a producer's `eval` returns, bundling 1..K base scalar columns (e.g. OHLCV), each bound field-wise by a consumer (C7/C8). ### cycle **Avoid:** — @@ -53,7 +53,7 @@ One data-driven clock step: one input record = one cycle, advanced in global tim ### edge **Avoid:** — -A directed wiring link in a harness that forwards one node's `eval` output into a consumer node's input slot (the engine's `Edge`); the source-side variant binding the source value into an input slot is a **source target** (`Target`). Edges define the DAG the bootstrap topologically orders; mismatched scalar kinds across an edge are rejected at bootstrap. +A directed wiring link in a harness that forwards **one field** (`from_field`) of a producer node's `eval` output record into a consumer node's input slot (the engine's `Edge`); the source-side variant binding the source value into an input slot is a **source target** (`Target`). Edges define the DAG the bootstrap topologically orders; a per-field scalar-kind mismatch across an edge is rejected at bootstrap. ### equity stream **Avoid:** — @@ -105,7 +105,7 @@ An orchestration axis running N seeded realizations that perturb the input; each ### node **Avoid:** block -The universal composable dataflow unit, implementing `schema()` + `eval(ctx)`, with at most one output; a producer, a pure consumer (sink), or both. Everything that plugs into the engine is fractally a node. +The universal composable dataflow unit, implementing `schema()` + `eval(ctx)` — a producer, a pure consumer (sink), or both — with at most one output port; a producer's output is a **record of 1..K base-scalar columns** (a scalar is the degenerate K=1 case). Everything that plugs into the engine is fractally a node. ### playground **Avoid:** —