completion: progress at t_end (or time of orbit completion if reached)
Pre-registered expectations (the gate)
E1: each metric degrades monotonically with magnitude within a source (non-monotone => injection or metric is wrong; STOP and investigate).
E2: nominal cell reproduces the adopted headline (coverage 0.999, pe_p99 0.165). NOTE (pre-registered Jun 11, before the campaign): Phase 00’s verdict re-pins the frozen baseline (phase00.md T9); E2’s numbers and the Design config line update to the winner BEFORE any fragility run — the campaign measures the post-verdict baseline.
E3 (scope): state noise = COM localization only; EE estimated-state and arm actuation noise are Phase B/C scope and get fragility columns then.
Outputs
generated_reports/analysis/fragility_table.md (the yardstick table)
saved NPZ log per run under logs/fragility/ (provenance: regen via validation/fragility_study.py)