WP13: kit-class trade study + EDT physics (aligned-dipole band model)#28
Merged
Conversation
Replaces the parametric EDT knob as the *performance model* (the legacy
edt_deorbit_days stays byte-identical, R15) with an aligned-dipole physics
band, and adds the kit-class trade + class-C controlled-reentry emitters.
- decay.hpp/decay.cpp: EdtConfig (BETs-cited tether length; PLACEHOLDER
current/kit-mass/libration-duty/deploy-risk), EdtResult,
integrate_edt_seconds (Gauss da/dt = -2 F a^1.5/(m sqrt mu), trapezoidal,
mirrors the sail integrator), edt_deorbit_years: B_n(a) = B0 (Rd/a)^3
|cos i| (SPENVIS centred dipole, cited), MANDATORY inclination band
eta_hi = |cos i| (power/current-capped) .. eta_lo = cos^2 i
(EMF/collection-limited), closed-form deorbit time cross-checked by the
integrator. |cos i|, not signed cos i: the passive tether's induced
current always drags (Lenz) -- retrograde catalogs get finite bands;
exactly-polar returns +infinity (aligned-dipole null, printed as an
honest n/a). Libration folded in ONLY as a flat PLACEHOLDER duty knob;
T7 dynamic stability stays explicitly unresolved.
- catalog_C filled: Envisat-class massive SSO payload (8211 kg / 780 km /
98.4 deg, eoPortal, web-verified 2026-07-11). catalog_D untouched.
- NEW src/main_kit_trade.cpp (binary kit_trade): emits
generated/wp13_kit_trade.csv (per-class sail vs EDT vs recommended-kit
rows, bands never point values), wp13_kit_trade_schema.md,
wp13_classC.{md,csv} (controlled-reentry mission class: cited
NASA-STD-8719.14A Ec<1e-4 framing with an explicit not-computed
placeholder, COMPUTED perigee-lowering delta-v, D12 consent gate,
steelmanned same-target-set installer-vs-tug comparison, WP14 cost
placeholder).
- main_decay_trade.cpp: kAreas gains 1000.0 (additive row, no schema bump
per wp3_decay_trade_schema.md's own R15 rule) so the README's 1000 m^2
column becomes byte-checkable against the committed CSV.
- tests/test_decay.cpp: 6 new CHECK blocks (eta table vs the derivation
note incl. |cos 98.4 deg| retrograde, band ordering, integrator vs
closed form vs edt_deorbit_years wiring, inclination monotonicity,
exact-polar infinity). Existing blocks 1-6 byte-untouched.
- NEW wp13-edt-derivation.md (full eta(i) derivation; independently
numerically verified) + wp13-literature.md (web-verified citation pack:
Sanmartin/OML, BETs FP7, Pelaez T7, Ne sources, dipole, stage params,
McKnight ranking, casualty standards).
- CMakeLists.txt: kit_trade target; tools/regenerate_all.sh: new step,
all labels renumbered to /11.
NOTE: this commit intentionally FAILS the CI reproducibility gate -- the
regenerated artifacts (wp3_decay_trade.csv +1000 m^2 rows, wp3 SVG, new
wp13_* files) are committed in the follow-up from CI's uploaded artifacts
(the documented no-local-toolchain flow). Build + ctest must pass here.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The EDT physics core adds honestly-inventoried PLACEHOLDER constants (EdtConfig current/kit-mass/libration-duty/deploy-risk and the kit_trade emitter's marked rows); filling catalog_C with cited Envisat values removes its former placeholder rows. Auto-inventory only -- no quoted pinned number changes. All four Python suites pass locally; this unblocks the CI ctest evidence gate so regenerate_all can produce the wp13_* artifacts for the follow-up commit (documented no-local-toolchain flow). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… wp3 rows)
Taken byte-for-byte from CI run 29155923705's artifact upload (the
documented no-local-toolchain flow; ctest was green, the repro-gate diff
was exactly these files):
- NEW generated/wp13_kit_trade.csv + schema: per-class sail/EDT trade.
Headline bands: SL-16 EDT 2.98..9.17 yr (candidate-with-open-risks, NOT
a closed recommendation; sail infeasible 135..2155 m2); SL-8 sail wins
(7..115 m2); Envisat-class retrograde 98.4 deg FINITE 5.48..37.5 yr
(|cos i| physics), recommended mission class = controlled reentry.
- NEW generated/wp13_classC.{md,csv}: controlled-reentry comparison,
computed perigee-lowering delta-v, cited casualty framing.
- generated/wp3_decay_trade.csv + viz/wp3_decay_trade.svg: the additive
1000 m^2 sweep rows (no schema bump; existing rows byte-identical).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- make_evidence.py: new 'Kit-class trade + EDT physics (WP13)' subsection under section 4 (subsection form mirrors the WP12 precedent; section numbers are hardcoded literals). Per-catalog table (recommended kit / sail-area band / EDT-years band / eta band), the EDT-v1 model-scope tag and the SL-16 recommended_kit note quoted VERBATIM from the committed CSV (generator and data cannot drift), the T7/plasma/deploy-risk honesty paragraph, and the class-C delta-v table from wp13_classC.csv. Zero hand-written numbers; pure ASCII; cross-refs to wp13-edt-derivation.md and wp13-literature.md. - test_evidence.py: R14 pattern list gains the EDT-v1 model-scope tag; a T7-honesty presence check (libration + T7 + UNRESOLVED/OPEN); and a number-transcription must for the SL-16 edt_years band read from the committed CSV. - evidence pack regenerated (650 lines); all four Python suites green. Adjudication note (spec section 10): the WP13 task-6 idea of adding reference_metrics.csv rows for EDT headline numbers is deliberately NOT done -- wp13_kit_trade.csv is itself the machine-readable source of truth the pack reads, and a reference_metrics copy would add a second place for the same numbers to drift plus one more C++ CI round-trip for no audit gain. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…eg fix Adversarial-verifier nits: README no longer claims WP13 'not started'; the EDT prose now points at the WP13 physics band (2.98..9.17 yr for the SL-16 class, CSV-backed by generated/wp13_kit_trade.csv) with the candidate-with-open-risks framing; the derivation note's Section 8.3 now states catalog B's actual 78 deg code preset (real SL-8 clusters at 74/83 deg, wp13-literature.md Topic 5b -- 78 is a PLACEHOLDER compromise, disclosed here and in the PR body per spec section 10). 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.
Implements spec §6 WP13 end-to-end. Zero pinned numbers moved (verified twice: pre-push code review + the mandatory task-7 adversarial verification, both with independent recomputation).
What this adds
decay.{hpp,cpp}): replaces the parametric knob as the performance model (the legacyedt_deorbit_daysstays byte-identical, R15). Aligned-dipole B_n(a) = B0(Rd/a)³·|cos i| (SPENVIS, cited), mandatory inclination band η_hi = |cos i| (power/current-capped) .. η_lo = cos²i (EMF/collection-limited) — derived inwp13-edt-derivation.md, independently numerically verified, and re-derived from scratch by the adversarial verifier. |cos i|, not signed cos i: a passive tether's induced current always drags (Lenz), so retrograde catalogs get finite bands; exactly-polar returns an honest n/a. Closed-form deorbit time cross-checked against the quadrature integrator intest_decay(16/16 ctest green on CI).kit_tradebinary →generated/wp13_kit_trade.{csv,md}): per-class recommended kit, generated not hand-written. Headlines: SL-16: sail infeasible (135..2155 m²) / EDT band 2.98..9.17 yr = candidate with open risks, NOT a closed recommendation (T7 libration unresolved — Peláez et al. 2000; plasma Ne solar pair PLACEHOLDER; current 2 A PLACEHOLDER). SL-8: sail closes (7..115 m²), no EDT needed. Envisat-class (98.4° retrograde): finite 5.48..37.5 yr; recommended mission class = controlled reentry.generated/wp13_classC.{md,csv}): cited-not-computed casualty framing (NASA-STD-8719.14A Ec<1e-4, explicit[CITATION NEEDED — PLACEHOLDER: per-object Ec analysis]), computed perigee-lowering Δv (223.4 / 208.3 m/s, independently recomputed to 4 decimals), D12 consent gate, steelmanned same-target-set installer-vs-tug paragraph.wp3_decay_trade.csvgains additive 1000 m² rows (no schema bump per the schema file's own R15 rule; existing rows byte-identical) — the README's 1000 m² column is now CSV-backed. Citations shipped inwp13-literature.md(all web-verified 2026-07-11).Adjudicated deviations from the plan (spec §10 disclosure)
reference_metrics.csvEDT rows:wp13_kit_trade.csvis itself the machine-readable source of truth the evidence pack reads; a copy would add a drift surface + one more CI round-trip for no audit gain.wp13-literature.mdTopic 5b); 78° is a compromise between them. B's conclusion (sail closes, no EDT kit) is inclination-insensitive, so no headline depends on it. Candidate for a later cited re-baselining.Verification
honest_headline_ok: true); pins verified unmoved.🤖 Generated with Claude Code