WP14: absolute cost ranges + derived CU anchor + FoM/prioritization upgrade#29
Merged
Conversation
…C++ side) Adds the WP14 cost layer WITHOUT moving any existing number: CU coefficients, both FoM weight tables, amortization, tornado -- all byte-identical code paths. - cost.hpp: CostItemUsd + wp14_cost_items(); wp6 schema 1.0 -> 1.1; cu_to_musd_low/high stay 0.0 sentinels (comment: superseded -- the anchor is runtime-DERIVED, not configured). - cost.cpp: 12-row itemized table transcribed from the web-verified source pack (SpaceX rideshare card Feb-2026, Electron 10-Q, AWS Ground Station rates, FCC fee schedules, NASA CEH reserves, insurance-premium reports; tiers preserved: [web-verified] / [web-verified (analog)] / [training-data extrapolation] / [PLACEHOLDER] -- SSA row stays PLACEHOLDER, LeoLabs declines to quote). New CSV rows (additive column cost_scenario + record_types): cost_component_musd; currency_anchor_derived = 5-CU-mapped- components-only numerator (dev/bus/kit*N/launch/ops, launch low=rideshare 0.35 / high=dedicated 7.5 preserving the source's do-not-narrow width) over the baseline C_campaign CU p50 (179.195140), full arithmetic printed in notes -> anchor 0.0628..0.4213 MUSD/CU; campaign_cost_musd split into auditable core_5_component / additives (ground+licensing+ssa) / base_total / with_reserves (contingency pct on base + insurance pct on asset-scale insured value only, never on multi-year opex); cost_per_removal_musd; cost_per_risk_equiv_mass (+_musd) = reciprocal of the FoM percentiles BY CONSTRUCTION (documented: NOT the percentile of per-run reciprocals). - schema md rewritten for 1.1 with the D10 sourced-or-PLACEHOLDER rule and the honesty framing (absolute ranges are low-standing; CU stays primary; no point-value currency -- '$' remains banned and tested). - test_cost.cpp: quote-aware RFC-4180-lite CSV splitter (WP14 notes contain literal commas), WP14 row assertions (anchor ordering, with-reserves > base, note-flag suffixes, itemized count), reciprocal identity asserted against the %.6f round-trip (exact by construction). Round-1 note: generated/wp6_* regenerate with schema 1.1 on CI; the repro gate is expected RED this push and the artifacts get committed next (the documented no-local-toolchain flow, as in WP13). Build + ctest must be green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The WP14 itemized-cost table adds honestly-inventoried PLACEHOLDER lines
(SSA row, kit-unit extrapolation flags) and shifts existing mark line
numbers in cost.{hpp,cpp}. Auto-inventory only; no quoted number changes.
Unblocks CI ctest so regenerate_all can emit the schema-1.1 wp6 artifacts
for the follow-up commit (same flow as WP13).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Byte-for-byte from CI run 29159453886 (documented no-local-toolchain flow): - wp6_cost_summary.csv: cost_scenario column + cost_component_musd (12 items x low/mid/high, each sourced-or-PLACEHOLDER), currency_anchor_derived (0.0628 / 0.1546 / 0.4213 MUSD/CU with the full 5-component arithmetic in notes), campaign_cost_musd core/additives/base_total/with_reserves, cost_per_removal_musd, cost_per_risk_equiv_mass(+_musd). All pre-existing rows value-identical. - wp6_cost_schema.md: version 1.1 documentation. - wp6_cost_summary.md: derived-anchor wording. - viz SVGs + dashboard: captions embed schema_version (1.0 -> 1.1); the plotted values are unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…CEHOLDER
importance classes, README number-block automation + CI gate
Python layer over the schema-1.1 artifacts (all stdlib, R9; all six local
suites green including the two NEW ctests):
- NEW tools/prioritization/make_prioritization.py -> generated/
wp14_prioritization.{csv,md}: per-class FoM p50 (both weightings),
cost/removal CU p50 + MUSD range via the derived anchor (SL-8 reuses the
catalog-A anchor -- stated in the artifact, not hidden), recommended kit
from WP13, D12 gate-not-multiplier sentence, one-paragraph defense per
class (SL-16 first: mass-dominant under BOTH weightings + McKnight
top-20-all-SL-16; SL-8 second: cheap sail kit, high count; Envisat-class:
separate controlled-reentry mission class, not kit-ranked), and the T5
honesty note (criticality weighting McKnight-anchored at the peak,
non-peak ratios PLACEHOLDER, mass-sort critique acknowledged).
+ test_prioritization.py ctest (determinism, committed==regenerated,
no-$-glyph, banned-words, required-content).
- make_evidence.py: "Absolute cost ranges (WP14)" subsection -- anchor band
with 5-component provenance, base_total/with_reserves, cost/removal MUSD,
cost_per_risk_equiv_mass, PLACEHOLDER/training-data flags read from the
CSV notes themselves, honesty framing quoted from the schema doc.
PLACEHOLDER inventory gains the spec-mandated importance column
(decision-critical: 56 / moderate / cosmetic) with the count assert
updated in test_evidence.py in the same commit (X+Y+Z==N).
- NEW tools/readme/fill_readme_numbers.py (+ ctest readme_numbers):
regenerates the README WP5-NUMBERS/WP6-NUMBERS marker blocks from the
committed CSVs, byte-exact against the current README; --check mode.
ci.yml runs it after regenerate_all and the reproducibility gate now
includes README.md -- closing the hand-maintained-README-numbers silent
drift gap (review finding C4) permanently.
- regenerate_all.sh: prioritization step inserted, labels renumbered /12.
- main_kit_trade.cpp + committed wp13_classC.md (byte-identical static-string
edit): the classC cost row no longer says "PLACEHOLDER until WP14" -- it
points at the WP14 itemized rows; the Envisat row honestly states WP14
ranges are servicer-campaign-scale and a controlled-reentry mission needs
its own estimate (open). Evidence pack regenerated (inventory reflects the
removed stale marks).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…n notes The cost_per_removal_musd cross-check note said 'identical by construction', but the tool multiplies by the 6dp-ROUNDED anchor while the wp6 row uses the full-precision anchor -- the last printed digit can differ by rounding path (2.812513 vs 2.812500, ~5 ppm; adversarial-verifier nit). Reworded to 'consistent to display precision' with the mechanism stated. Regenerated artifacts (the evidence-pack inventory tracks the shifted source line). 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 WP14 + §4 amendments. Zero existing numbers moved — CU coefficients, both FoM weight tables, amortization (0.285×), tornado, all 95 pre-existing wp6 CSV keys verified value-identical vs master by the adversarial pass.
What this adds
[web-verified](SpaceX rideshare card, Electron 10-Q, AWS Ground Station rates, FCC fee schedules, insurance-market reports, NASA CEH reserves) /[web-verified (analog)]/[training-data extrapolation](the 9-t kit unit) /[PLACEHOLDER](SSA — LeoLabs declines to quote; stated, not faked).core_5_component / additives / base_total / with_reserves(contingency % on base; insurance % on asset-scale insured value only, never on multi-year opex). Configcu_to_musd_*stay 0.0 sentinels — the anchor is derived, not configured.cost_per_risk_equiv_mass(+ MUSD) — reciprocal of the FoM percentiles by construction (documented: NOT the percentile of per-run reciprocals).generated/wp14_prioritization.{csv,md}(new stdlib tool + ctest): per-class FoM/cost/kit table + one-paragraph defense per class; SL-16 first (mass-dominant under both weightings + McKnight top-20-all-SL-16), SL-8 second, Envisat-class = separate controlled-reentry mission class. D12: legal enters as gate+flags, never a FoM factor.tools/readme/fill_readme_numbers.pyregenerates the WP5/WP6 marker blocks from the committed CSVs; CI runs it and the reproducibility gate now includes README.md.Honesty framing (baked into artifacts, audit-enforced)
"External absolute-cost estimation by an unaffiliated author is inherently low-standing; agencies re-run with their own parametric models; the relative CU results remain primary." No point-value currency anywhere ('$' glyph banned + tested; ranges only). The criticality FoM weighting got a citation-only upgrade: McKnight 2021 anchors the 840–850 km peak, but non-peak ratios are not extractable from accessible sources, so the weight VALUES stay PLACEHOLDER — inventing dynamic range would be fabrication (T5 stays open; the mass-sort critique is acknowledged in the artifacts).
Disclosed deviations / scope notes (spec §10)
cost_per_risk_equiv_masschart (it is 1/FoM by construction — redundant with the existing FoM chart); the four wp6-consuming viz files changed only their embedded schema string (1.0→1.1).wp5_dashboard.htmlchanged by that same 1 token — no wp5 datum moved.cost_per_risk_equiv_mass_musdis emitted at the mid anchor only (CU version carries full p05/p50/p95; low/high anchors are in-file, dollar bounds trivially derivable).fill_readme_numbers.pyruns as its own CI step, not insideregenerate_all.sh(README is repo-root, outside that script's generated/+evidence/ contract — commented in ci.yml).Verification
prioritizationandreadme_numberssuites + regenerate_all/12 + the extended README gate).🤖 Generated with Claude Code