audit: cycle metric-vocabulary tidy — ledger records the retired #147 deferral
Cycle-close audit (architect: drift_found, design core clean). What holds, architect-confirmed: C18 bit-identity for RunMetrics (prose derived byte-identically, rng order preserved, registry suite unchanged); the C10 wall (monomorphic R-gates, r_based in the R vocabulary, cross-vocabulary refusal tested both ways — no leak); C28 direction (trait in aura-analysis, vocabulary supplied from the outer rungs, zero Cargo edge changes); C1 determinism pinned through the generic path. Drift items, all resolved as fixes in this commit: - design ledger: the C28 #147 disposition now records item 2 SHIPPED (the A1 cut) with A2 still deliberately deferred; the #136 one-implementor clause carries a supersession note (the IC is the second implementor). - seven stale doc comments describing the pre-#147 or mid-cycle state (analysis trait + estimator docs, registry check_r_metric C9 claim, engine re-export note, campaign PER_MEMBER_METRICS roster note, member-seam guard comment, research vocabulary note) updated to the shipped state. - R_BASED_METRICS is now oracle-pinned against RunMetricKey::r_based() in the vocabulary test (it feeds the NonRMetric refusal prose; a divergence would have misreported the R-gate silently). Noted, not amended (history stays): commit 6744f67's body says 'three syntax-only edits' where the test module actually took five. No regression scripts are configured (the bench is report-only); the architect review is the gate. Verification: extended vocabulary test, campaign suites, analysis/research suites green; clippy --workspace -D warnings clean. refs #147
This commit is contained in:
+23
-11
@@ -1358,7 +1358,10 @@ in the #136 thread):** the `aura-registry` `Metric` / `metric_cmp` / deflation v
|
||||
**stays in the registry by design** — the registry is the trading *selection* layer, not
|
||||
the domain-free engine, and its deflation statistics branch irreducibly on metric
|
||||
identity (R-bootstrap vs. `total_pips` dispersion floor); forcing genericity would be a
|
||||
one-implementor abstraction. **Deferred to the World / C21 layer (explicitly *not* #136):**
|
||||
one-implementor abstraction. *(Superseded 2026-07-20: measurement's IC became the second
|
||||
implementor — #290 — and the vocabulary moved behind the `MetricVocabulary` trait
|
||||
supplied by the outer rungs; see the C28 #147 disposition.)* **Deferred to the World /
|
||||
C21 layer (explicitly *not* #136):**
|
||||
making `RunReport` generic over a metric type and turning the orchestration/registry layer
|
||||
into a reusable domain-agnostic substrate — until then `RunReport` / `RunManifest` /
|
||||
`summarize` stay trace-coupled in the engine.
|
||||
@@ -2677,16 +2680,25 @@ cleanly by layer, so the layering is realized only partially:
|
||||
`M = RunMetrics` (`aura-backtest → aura-engine`, an outer→inner edge). The
|
||||
ladder direction is enforced for the engine/backtest/analysis rungs by the
|
||||
structural test (`c28_layering`, seven-row table).
|
||||
- **#147 split, partially retired (user-ratified 2026-07-20).** Item 1 — the
|
||||
metric genericity `RunReport<M>` — shipped as phase 2 above (#292). Item 2 —
|
||||
abstracting the registry `Metric`/`metric_cmp`/deflation vocabulary — stays
|
||||
deferred: the registry sits in the process column, whose trading-awareness
|
||||
this contract permits (`aura-registry → aura-research`, column-internal and
|
||||
legal), and the tree still holds exactly one metric consumer — a measurement
|
||||
run reports tap names, not metrics. It lifts when measurement supplies its
|
||||
first deflatable metric (a tap-to-scalar reduction carrying its own null
|
||||
model, #290); the original one-implementor rationale (#136, user-ratified
|
||||
2026-06-27) holds until then. See #147 for the full disposition.
|
||||
- **#147 retired (user-ratified direction 2026-07-20; shipped the same day).**
|
||||
Item 1 — the metric genericity `RunReport<M>` — shipped as phase 2 above
|
||||
(#292). Item 2 — the registry deflation vocabulary — shipped as the ratified
|
||||
"A1" cut, its deferral trigger having fired when measurement supplied its
|
||||
first deflatable metric (the IC, #290): the deliberately narrow
|
||||
`MetricVocabulary` trait (resolve/roster/direction/value/one null draw)
|
||||
lives in `aura-analysis`, re-exported through `aura-engine`; the R
|
||||
vocabulary (`RunMetricKey`, `r_based`, the rosters, the centred
|
||||
moving-block `null_draw`) is supplied by `aura-backtest`; the registry's
|
||||
rank/optimize/deflate machinery is generic over `M: MetricVocabulary` with
|
||||
refusal prose derived from the carried roster; the IC (`aura-cli`) is the
|
||||
second production implementor, bringing its within-run permutation null.
|
||||
The C10 wall stays monomorphic (`check_r_metric`/`generalization` accept
|
||||
only the R vocabulary; `r_based` is the enforcement point). Explicitly
|
||||
still deferred ("A2"): measurement runs as sweep-family citizens (report
|
||||
unification, campaign engine generic-over-M) — until a concrete
|
||||
family/campaign demand exists. The #136 one-implementor rationale is
|
||||
superseded by the second implementor; the registry's process-column
|
||||
trading-awareness holds unchanged. See #147 for the full disposition.
|
||||
- The `aura-std` four-layer roster is now cut by layer (phase 4, #288): `aura-std`
|
||||
holds the engine nodes only (arithmetic/logic/rolling + the generic sinks);
|
||||
`aura-market` (`session`, `resample`), `aura-strategy` (`bias`/`stop_rule`/
|
||||
|
||||
Reference in New Issue
Block a user