Single-source the declared-metric vocabulary against the shipped metric types #190

Closed
opened 2026-07-03 16:26:04 +02:00 by Brummel · 1 comment
Owner

aura_research::metric_vocabulary() hand-lists the 17 scalar field names of RMetrics/RunMetrics (aura-analysis) and the FamilySelection annotation scores — the same 3-copy drift class the std-vocabulary roster macro closed for node type ids (#160, cycle 0105): a field rename or addition in aura-analysis silently desyncs the gate/stage metric checks in process documents (an unknown metric still refuses, so it fails safe, but a NEW metric is silently un-gateable until the roster is hand-updated).

Likely shape: a roster macro or a build-time check tying the list to the type definitions (the 0105 pattern), or at minimum a cross-crate test pinning metric_vocabulary() against serde field enumeration of the three types.

  • depends on: nothing
  • context: architect drift item from the cycle-0106 close (research-artifact vocabularies, #189); accurate today, self-documented at the roster site.
aura_research::metric_vocabulary() hand-lists the 17 scalar field names of RMetrics/RunMetrics (aura-analysis) and the FamilySelection annotation scores — the same 3-copy drift class the std-vocabulary roster macro closed for node type ids (#160, cycle 0105): a field rename or addition in aura-analysis silently desyncs the gate/stage metric checks in process documents (an unknown metric still refuses, so it fails safe, but a NEW metric is silently un-gateable until the roster is hand-updated). Likely shape: a roster macro or a build-time check tying the list to the type definitions (the 0105 pattern), or at minimum a cross-crate test pinning metric_vocabulary() against serde field enumeration of the three types. - depends on: nothing - context: architect drift item from the cycle-0106 close (research-artifact vocabularies, #189); accurate today, self-documented at the roster site.
Brummel added the idea label 2026-07-03 16:26:04 +02:00
Brummel added this to the Triage harvest 2026-07 — surface honesty & authoring ergonomics milestone 2026-07-09 17:31:16 +02:00
Brummel removed the idea label 2026-07-09 17:31:22 +02:00
Author
Owner

Triage 2026-07-09 (tree at 68317ec) — the drift class has tripled since filing; the names are in sync today, but nothing goes red when they stop being:

  • Roster sites now: aura_research::metric_vocabulary() with 17 hand-listed names (crates/aura-research/src/lib.rs:629), PER_MEMBER_METRICS (14) and RANKABLE_METRICS (7) in crates/aura-campaign/src/lib.rs:116/:127 (both commented as hand-copied, referencing this issue), plus resolve_metric's name→kind map (crates/aura-registry/src/lib.rs:341). The ledger records the triplication as known debt (docs/design/INDEX.md:1472).
  • Partial mitigations pin the rosters to EACH OTHER (aura-campaign lib.rs:372, tests/member_seam_e2e.rs:130; the 17-line introspect roster pin at crates/aura-cli/tests/research_docs.rs:211) — but no test serde-enumerates RMetrics/RunMetrics/FamilySelection fields against the vocabulary, so a NEW aura-analysis scalar is silently un-gateable until every roster is hand-updated.
  • Verified in sync today: the 17 names cover 11 RMetrics + 3 RunMetrics + 3 FamilySelection scalars (conviction_terciles_r / trade_rs deliberately excluded).
  • Minimum shape: a cross-crate test in aura-campaign (already depends on both aura-research and aura-analysis per its Cargo.toml) pinning all rosters against serde field enumeration of the three types; the roster-macro maximal shape waits until #147 settles where the metric vocabulary lives. Label idea removed: the minimum fix is a concrete, small task.
Triage 2026-07-09 (tree at 68317ec) — the drift class has tripled since filing; the names are in sync today, but nothing goes red when they stop being: - Roster sites now: aura_research::metric_vocabulary() with 17 hand-listed names (crates/aura-research/src/lib.rs:629), PER_MEMBER_METRICS (14) and RANKABLE_METRICS (7) in crates/aura-campaign/src/lib.rs:116/:127 (both commented as hand-copied, referencing this issue), plus resolve_metric's name→kind map (crates/aura-registry/src/lib.rs:341). The ledger records the triplication as known debt (docs/design/INDEX.md:1472). - Partial mitigations pin the rosters to EACH OTHER (aura-campaign lib.rs:372, tests/member_seam_e2e.rs:130; the 17-line introspect roster pin at crates/aura-cli/tests/research_docs.rs:211) — but no test serde-enumerates RMetrics/RunMetrics/FamilySelection fields against the vocabulary, so a NEW aura-analysis scalar is silently un-gateable until every roster is hand-updated. - Verified in sync today: the 17 names cover 11 RMetrics + 3 RunMetrics + 3 FamilySelection scalars (conviction_terciles_r / trade_rs deliberately excluded). - Minimum shape: a cross-crate test in aura-campaign (already depends on both aura-research and aura-analysis per its Cargo.toml) pinning all rosters against serde field enumeration of the three types; the roster-macro maximal shape waits until #147 settles where the metric vocabulary lives. Label `idea` removed: the minimum fix is a concrete, small task.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Brummel/Aura#190