audit: #310 cycle close — run usage names --tap; C14 class tension routed to #297

Architect (cycle 9124275..1baee77) holds: the C27 boundary is preserved
and ledger-anchored (selection = run-mode authority, fold growth stays
Rust/role 2; validation solely in the shared bind_tap_plan seam before
store I/O; unlisted taps inert); C1 byte-identity pinned for the
explicit all-record plan vs the record-all default; ledger discipline
kept (superseded C27 sentence verbatim in the new history sidecar); the
C25 projection tension was explicitly adjudicated in C27's Current
state, deferral #312/#327 minuted.

Drift resolution:
- [medium] C14 exit-class: --tap-content refusals (unknown label /
  undeclared tap) exit 1 through the assembly crate's runner-side
  registers while C14 assigns argv/blueprint-content faults to class 2.
  Pre-existing register family (#283 duplicate-tap, #286 exposes-
  neither). RESOLVED AS TRACKED-FORWARD to #297 (RunnerError
  propagation is where the CLI regains class authority; evidence
  comment with concrete sites posted there). A CLI-side shadow
  pre-validation was rejected: it duplicates the bind_tap_plan seam
  and can drift.
- [low] FIXED here: the three hand-rolled `aura run` usage strings and
  the loaded-blueprint-grammar comment now name --tap.
- [low] ADJUDICATED equivalent-as-delivered: the fold-mean expectation
  is derived from the pinned R_SMA_PRICES const rather than a second
  record run — an independent derivation of the same series; the
  spec's intent (fold row equals the series mean) is pinned.

Regression: aura-bench report-only, exit 0, all five surfaces within
tolerance, fingerprints OK (engine 13.78M bars/s Δ-1.6%, ingest 13.13M
Δ+1.0%, campaign_sweep rss 93.9MB Δ+1.9%, campaign_heavy rss 106.9MB
Δ+5.4%, cli run 3.6ms Δ-0.3%; loadavg-5.3 warning noted, report-only).
No baseline update.

Cycle spec + plan + the spent m1 fieldtest spec removed from the
working tree (git-ignored files, shell rm per lifecycle).

refs #310, refs #297
This commit is contained in:
2026-07-24 15:11:27 +02:00
parent 1baee774bb
commit e482f0ec35
+5 -4
View File
@@ -1474,7 +1474,7 @@ fn is_blueprint_file(arg: &Option<String>) -> Option<&str> {
/// mirroring the old `parse_blueprint_run_args` window guard (`--from`/`--to` /// mirroring the old `parse_blueprint_run_args` window guard (`--from`/`--to`
/// require `--real`; empty symbol rejected). Refuses in place (stderr + exit 2). /// require `--real`; empty symbol rejected). Refuses in place (stderr + exit 2).
fn run_data_from(real: Option<&str>, from: Option<i64>, to: Option<i64>) -> RunData { fn run_data_from(real: Option<&str>, from: Option<i64>, to: Option<i64>) -> RunData {
let usage = "Usage: aura run <blueprint.json> [--params <json-cell-array>] [--seed <n>] [--real <SYMBOL> [--from <ms>] [--to <ms>]]"; let usage = "Usage: aura run <blueprint.json> [--params <json-cell-array>] [--seed <n>] [--real <SYMBOL> [--from <ms>] [--to <ms>]] [--tap <TAP=FOLD> …]";
match real { match real {
Some(s) if !s.is_empty() => RunData::Real { symbol: s.to_string(), from, to }, Some(s) if !s.is_empty() => RunData::Real { symbol: s.to_string(), from, to },
Some(_) => { Some(_) => {
@@ -1799,13 +1799,13 @@ fn tap_plan_from_args(args: &[String]) -> Result<TapPlan, String> {
fn dispatch_run(a: RunCmd, env: &aura_runner::project::Env) { fn dispatch_run(a: RunCmd, env: &aura_runner::project::Env) {
match is_blueprint_file(&a.blueprint) { match is_blueprint_file(&a.blueprint) {
Some(path) => { Some(path) => {
// The loaded-blueprint grammar takes only --params/--seed/--real/--from/--to; // The loaded-blueprint grammar takes only --params/--seed/--real/--from/--to/--tap;
// the built-in-only flags are rejected here (exit 2), never silently dropped — // the built-in-only flags are rejected here (exit 2), never silently dropped —
// mirroring the sweep/mc blueprint branches, which reject their non-branch flags // mirroring the sweep/mc blueprint branches, which reject their non-branch flags
// exhaustively (refuse-don't-guess). clap's optional `[blueprint]` positional // exhaustively (refuse-don't-guess). clap's optional `[blueprint]` positional
// makes these structurally parseable, so the guard is re-asserted at dispatch. // makes these structurally parseable, so the guard is re-asserted at dispatch.
if a.trace.is_some() { if a.trace.is_some() {
eprintln!("aura: Usage: aura run <blueprint.json> [--params <json-cell-array>] [--seed <n>] [--real <SYMBOL> [--from <ms>] [--to <ms>]]"); eprintln!("aura: Usage: aura run <blueprint.json> [--params <json-cell-array>] [--seed <n>] [--real <SYMBOL> [--from <ms>] [--to <ms>]] [--tap <TAP=FOLD> …]");
std::process::exit(2); std::process::exit(2);
} }
let doc = std::fs::read_to_string(path).unwrap_or_else(|e| { let doc = std::fs::read_to_string(path).unwrap_or_else(|e| {
@@ -1893,7 +1893,8 @@ fn dispatch_run(a: RunCmd, env: &aura_runner::project::Env) {
None => { None => {
eprintln!( eprintln!(
"aura: Usage: aura run <blueprint.json> [--params <json-cell-array>] \ "aura: Usage: aura run <blueprint.json> [--params <json-cell-array>] \
[--seed <n>] [--real <SYMBOL> [--from <ms>] [--to <ms>]]" [--seed <n>] [--real <SYMBOL> [--from <ms>] [--to <ms>]] \
[--tap <TAP=FOLD> …]"
); );
std::process::exit(2); std::process::exit(2);
} }