From 35b996e3bfc2058705252ce91ded45f1a7577455 Mon Sep 17 00:00:00 2001 From: Brummel Date: Fri, 10 Jul 2026 01:10:32 +0200 Subject: [PATCH] docs(ledger,research): note the metric-vocabulary drift guard (#190 close) The #190 cycle-close audit found two now-stale claims that predate this cycle's guard test: the ledger's known-debt note listed the metric-roster triplication as tracked by #190 (the issue that just added the guard, closing on push), and metric_vocabulary()'s doc comment told a hand-editor to keep the list in sync by hand without mentioning that a red test now catches a desync. Reconcile both to the honest state: the triplication remains (still a hand-list) but drift from the shipped aura-analysis types is now caught by the cross-crate guard `aura-campaign/tests/metric_vocabulary_e2e.rs`; the single-source removal that would delete the hand-list is tracked under #147 (where the metric vocabulary's home is decided). refs #190, #147 --- crates/aura-research/src/lib.rs | 8 ++++++-- docs/design/INDEX.md | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/crates/aura-research/src/lib.rs b/crates/aura-research/src/lib.rs index 0570eaa..62b4b63 100644 --- a/crates/aura-research/src/lib.rs +++ b/crates/aura-research/src/lib.rs @@ -624,8 +624,12 @@ pub fn content_id_of(canonical: &str) -> String { /// reference here, unlike the block-schema tables above (:105). Same #160/0105 /// drift class; fails safe in the direction that matters: a metric renamed or /// removed upstream surfaces as `DocFault::UnknownMetric` at parse/validation -/// time, never a silent accept. Keep this list in sync by hand when the -/// upstream field sets change. +/// time, never a silent accept. A cross-crate guard test +/// (`aura-campaign/tests/metric_vocabulary_e2e.rs`, #190) also enumerates the +/// shipped scalar fields via serde and goes red on any desync, so a stale +/// hand-edit here is test-caught rather than silent. Keep this list in sync by +/// hand when the upstream field sets change (single-sourcing it away waits on +/// #147). pub fn metric_vocabulary() -> &'static [&'static str] { &[ "expectancy_r", diff --git a/docs/design/INDEX.md b/docs/design/INDEX.md index 2f34bcf..bf439a6 100644 --- a/docs/design/INDEX.md +++ b/docs/design/INDEX.md @@ -1473,7 +1473,9 @@ are validated against), and a blueprint-file mode on `--content-id`. The both `RollMode`s; the shipped `folds` slot mapped to nothing the machinery accepts), with a new `ZeroWalkForwardLength` intrinsic fault; wf-bearing process docs get new content ids by design (the 0106 fieldtest corpus stays as the historical record). Known debt: -metric-roster triplication (#190), deflation-constant duplication (#199). +metric-roster triplication (still hand-maintained, but drift from the shipped +`aura-analysis` types is now test-caught by a cross-crate guard, #190; +single-source removal waits on #147), deflation-constant duplication (#199). **Realization (cycle 0108, #200 — the annotator stages execute).** The v2 executable shape is `std::sweep [std::gate]* [std::walk_forward]? [std::monte_carlo]? [std::generalize]?` — an ordered optional annotator suffix, each at most once,