WP12 - Fidelity ladder: L0/L1/L2 propagation + L4/L5 elements; zero keep-out violations re-verified per level#25
Merged
Merged
Conversation
… L4/L5)
- propagation module: runtime-selectable FidelityLevel (one code path, no
fork); inertial two-body+J2(+drag) RK4 of both craft differenced into the
target LVLH frame (the one documented conversion, R8); cited kEarthJ2 /
kEarthOmega; drag via the existing Vallado density model (R1 reuse)
- adsc_ladder emitter -> generated/wp12_ladder.{csv,md}: per-level
re-verification of every committed campaign abort event (same commanded
dv - the law is unchanged), forensic-14 per-level clearance with a
prominent flag for any L0-clears-but-L1/L2-dips case (first-class
deliverable), margin-decay table (F2 promise, now measured), L2 BC
dispersion from an independent stream (ds-v2 rows; ds-v1 untouched)
- run_one_mission audit hook (draw-order preserving, nullptr default)
- L4: estimate-driven guidance (TranslationEkf consumes range/LOS with
Bernoulli dropout + unestimated range-bias walk - documented gap; screen
and guidance on the ESTIMATE, truth for error recording only)
- L5: ActuatorError MIB quantization (half-bit deadband), command delay
FIFO, single-axis fault - neutral defaults exact-identity (pins intact);
retires the continuous-torque caveat with measured numbers
- ctest ladder: MANDATORY cross-validation (L1 J2-off vs CW closed form,
eps 0.5 m, incl. the WP1 424.3 scenario re-derived and all forensic-14
coasts; L2 drag-off == L1 bit-for-bit; J2-on erosion bounded sanity)
- campaign keep_out note string gains the L0/ds-v1 tag (PR#19 deferred WARN)
- evidence pack regenerated (PLACEHOLDER inventory: new honest marks for
the L2/L4/L5 knobs + line shifts; no quoted number moved)
Committed generated/ campaign artifacts are byte-identical by construction
(audit hook nullptr in all artifact paths); wp12_ladder.* and new metrics
rows arrive from CI regeneration in the re-baselining commit (gate expected
red on this push; artifacts upload for harvest).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…n bound) The L1 J2-off path is the full nonlinear two-body problem; it reproduces the linear CW closed form within the CW linearization error, not to zero. CI measured the worst forensic-14 difference at 0.52 m (SL-16/340, the largest x0>0 excursion), matching the ~3*pi*rho^2/r second-order scale. 2.0 m bounds it with margin while still failing instantly on any real frame or initialization bug (tens-to-hundreds of meters). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…eted the feedforward) CI measurement (test_ladder L5): per-step round-to-nearest MIB quantization zeroes every sub-bit command, and the torque-free feedforward tracking a precessing target is a CONTINUOUS sub-bit command (~1e-5 N m s per 10 ms step vs a 1e-4 half-bit) - the hold never converges. Real pulsed DACS hardware duty-cycles: unfired demand accumulates until a whole impulse bit fires. Implemented as a MibAccumulator (delta-sigma) in run_tumble_sync's loop (per-step state, same placement rationale as the delay FIFO); firings remain integer MIB quanta - the discreteness the continuous-torque caveat ignored - while mean torque tracks the command. ActuatorError::apply keeps scale/misalign/fault only; neutral defaults stay exact-identity (pins byte-identical). Diagnostic print added before the L5 assert. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…+ docs
- generated/wp12_ladder.{csv,md} adopted from CI run 28722765714 (Linux):
zero keep-out violations at L0/L1/L2 for both catalogs; clearance floor
20.0 -> 18.8 m (L0 -> L2, SL-8) - the anticipated CW-safe-but-higher-
level-unsafe case does NOT materialize for ds-v1/ds-v2 (measured
negative-negative result); forensic-14 clears at every level (L1 value
for B254 independently cross-checked against a from-scratch numpy J2
propagation, 4-decimal agreement); margin decay measured (F2 promise):
worst 1.40 m over 5 orbits on the 400 m standoff [L1]
- reference_metrics: +9 wp12 rows (L4 estimate-driven guidance incl. the
honest NEES ~310 vs ideal ~6 under the unestimated bias walk; L5 MIB
sync 16.28 s vs 16.87 s continuous); legacy rows byte-identical;
wp5_campaign_runs.csv byte-identical (draw-order preservation verified
at artifact level); summary notes gain the L0/ds-v1 tag (2 lines)
- evidence pack: new 'Fidelity ladder (WP12)' section (per-level table,
forensic-14 statement, margin decay, L4/L5 measured bullets, coverage
statement); continuous-torque limitation bullet RETIRED with measured
numbers; estimator-scope bullet updated with the NEES honesty; TRL
sentence extended to WP12 (spec v5 section 9); claims-audit extended
- README: wall-clock CI timings de-pinned (PR#19 verifier observation);
known-limit retirements (continuous-torque, truth-fed-only guidance);
WP12 roadmap/implemented bullets; ladder artifacts in the layout
- spec v5 section 1: owner-authorized exact wording replacement
('passively-safe approach design with clearance-verified aborts (keep-out
violations 0/500 per catalog [L0, ds-v1, Wilson <= 0.0076])')
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…iscipline)
- evidence pack section 8: 'minimum-cost allocation' (pre-existing WP7
text, banned as an absolute claim by spec v5 section 1) -> the
cost-effectiveness framing; claims-audit gains a minimum-cost regex so
the ban is enforced from now on (the reviewer found the gap: the banned
phrase had never been in the scan list)
- README: 'clearing-verified' -> spec-exact 'clearance-verified'; the WP12
implemented-bullet zero-claim gains its R14 dispersion-set/Wilson tags
[L1: ds-v1; L2: ds-v2; Wilson 95% UB 0.0130]; 'compliant, geometry-keyed
clamp' -> 'geometry-keyed clamp with mechanical compliance' (removes the
banned-word ambiguity)
- The stale spec section-1 rationale clause ('because the current campaign
shows a nonzero keep-out violation rate') is REPORTED in the PR body as
an owner observation, not edited (beyond the authorized replacement)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…al safety phrase in the pack summary)
- propagation.hpp: the cross-validation comment still said eps 0.5 m from
before the measured-linearization retune; now points at kCrossValEpsM =
2.0 m with the measured 0.52 m worst case
- evidence pack section 1: the spec section-1 binding phrase
('passively-safe approach design with clearance-verified aborts') now
appears verbatim in the executive summary with the mechanically-derived
numbers (it existed in README but not in the pack's summary text)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
WP12 (adsc-specification-v5.md section 6) - fidelity ladder through L2 with L4/L5 elements
Runtime-selectable propagation levels on ONE code path (no fork; 'build-selectable' realized as run-time-selectable within one build - strictly stronger): L0 the original linear CW baseline, kept - every committed campaign number byte-identical; L1 full inertial two-body+J2 of both craft differenced into the target LVLH frame (the one documented conversion, R8); L2 +per-craft drag (Vallado density, R1 reuse) with ballistic-coefficient uncertainty from an INDEPENDENT dispersion stream (ds-v2 = ds-v1 + BC stream; the committed ds-v1 draws untouched).
Mandatory cross-validation (tested, ctest
ladder)L1 with J2 disabled reproduces the L0 CW closed form within a stated 2.0 m epsilon - the CW LINEARIZATION error itself (the J2-off path is the full nonlinear two-body problem), measured worst case 0.52 m (SL-16/340) across the WP1 424.3 m scenario re-derived from its own corridor sweep, all 14 forensic-14 post-abort coasts, and the standoff case. L2 with drag disabled reproduces L1 bit-for-bit (same code path). Attitude pins (19.15/16.87/17.07) untouched by construction - no translation content.
Results (generated/wp12_ladder.{csv,md}, R14-tagged per level)
Two findings the CI-as-laboratory loop produced (documented, not patched over)
Discipline
Ride-alongs (owner-directed)
Spec-vs-repo observations (reported, not improvised around)
Completion criteria (v5 section 6, WP12): ladder implemented through L2 with L4/L5 elements - met; per-level comparison table in the evidence pack - met (section 3, from wp12_ladder.csv mechanically); 'which model verifies what' section - met (the pack subsection and the ladder md coverage statement; phrased without the banned word the spec's own shorthand uses); mandatory cross-validation tested - met (ctest ladder); adversarial-verifier independently re-derived the J2-off cross-validation and per-level rates before this PR opened - met.
🤖 Generated with Claude Code