Methodology Parity ================== **Source:** ``phase0-discovery/cascade-coverage-matrix.csv``, ``phase0-discovery/claim-register.csv``, ``phase0-discovery/ENGINEERING_DECISION_LOG.md`` **Test evidence:** the whole ``tests/`` suite (summary below) This page consolidates the parity programme: the coverage matrix, the deviations register, the engineering decision log highlights, the test suite, and the standing security note. Status vocabulary: **Exact** — equation-level parity benchmarked against the published CASCADE formulation; **Equivalent** — same mathematics on a documented simplified base; **Simplified** — implemented with reduced resolution; **Extended** — HyFlux capability beyond CASCADE's published method; **Partial** — a documented subset; **Missing** — not implemented; **Fixed** — a confirmed defect repaired under a two-track baseline. Coverage matrix --------------- Rendered from ``cascade-coverage-matrix.csv`` (2026-07-18), abbreviated columns. **This is the historical Phase-0 snapshot**: it is kept verbatim as provenance, and many of its *Missing* / *Simplified* verdicts have since been closed. The matrix was regenerated per-source-file against the July 2026 CASCADE corpus under DL-131/DL-132 (``docs/rst-coverage-matrix.md`` / ``.csv`` / ``.json``, 2026-07-31 — 256 distinct governing equations, 163 mapped at DL-132, 186 at DL-134), and the register refresh below records the verified state as of 2026-08-02. Where this snapshot and the refresh differ, the refresh is authoritative. .. include:: _matrix_table.rst.part Gap-register refresh (2026-08-02) --------------------------------- Every row below was re-verified against the current engine **and** a green test this pass (``vitest run``: **1,820 tests across 112 spec files, all passing** — 1,816/111 at the 2026-08-02 refresh, plus DL-167's spec file, which landed after the refresh). A claim flips to *Implemented* only when both the implementing module and its test exist; *Implemented (standalone)* / *(shadow)* means the equations exist and pass tests but are **not wired into ``computeLCA``** — the controlled-integration registry (``src/engine/integration.ts``, DL-138, enforced by ``tests/suite-o-integration-governance.spec.ts``) records each module's stage, and no production default has changed. .. list-table:: :header-rows: 1 :widths: 26 16 30 28 * - Former register claim - Current status - Module - Test evidence * - Glossary (Missing) - Closed (docs) - :doc:`glossary` - n/a (documentation page) * - Introduction/Nomenclature — fleet-vs-route case distinction (Missing) - Closed (docs) / Partial (engine) - :doc:`introduction` (nomenclature section); ``src/engine/fleet-tensor.ts`` (per-type × route tensor, DL-137; existing-aircraft axis honestly lumped, operator axis synthetic) - ``tests/suite-n-corsia-tensor.spec.ts`` * - Payload Capacities (Missing) - Implemented — Exact, 17/17 equations (DL-132) - ``src/engine/payload.ts``, ``src/engine/rtk-network.ts`` - ``tests/suite-e-payload-fleet.spec.ts`` * - Fleet Size Estimation (Missing) - Implemented — Exact, 5/5 equations + both τ_avg bucket tables (DL-132); CASCADE's own β_NEC placeholders carried as published, so independent validity stays Unverified - ``src/engine/fleetEstimation.ts`` - ``tests/suite-e-payload-fleet.spec.ts`` (E.7/E.8) * - Energy Demand (Missing) - Implemented — two layers: aggregate roll-up in production (2026-07-18) **plus** all 29 governing equations standalone (DL-136, Stage-1 shadow) - ``src/engine/energyDemand.ts``; ``src/engine/energy-demand-full.ts`` - ``tests/energy-demand.spec.ts``; ``tests/suite-j-energy-demand-full.spec.ts`` * - Context Metrics (Missing) - Implemented — 6/6 equations (DL-134), incl. the Breguet electric range with its 19 % on-page self-disagreement reported, not hidden - ``src/engine/context-metrics.ts`` - ``tests/suite-h-cost-context.spec.ts`` * - Cost model (Mostly missing) - Implemented — all 22 equations incl. MAC and per-payload-distance costs (DL-134); standalone — the production path still emits the legacy absolute series; currency year unstated by CASCADE (``COST_CURRENCY_NOTE``) - ``src/engine/cost-model.ts``; ``src/engine/cost-series.ts``; ``src/engine/fuel-costs.ts`` - ``tests/suite-h-cost-context.spec.ts``; ``tests/sbatch-cost.spec.ts``; ``tests/fuel-costs.spec.ts`` * - CORSIA operator accounting + w(t) (Missing) - Implemented (standalone) — OEB/OGF/w(t) schedule and CGI operator analogues (DL-045/046), plus the eq. 16/17/19/24/31 aggregation identities and the printed-vs-floored SGF divergence made measurable (DL-137). Not wired into ``computeLCA``; operator set synthetic (one per origin state) - ``src/engine/routes/corsia-operator.ts``; ``src/engine/corsia-aggregation.ts`` - ``tests/corsia-operator.spec.ts``; ``tests/route-corsia.spec.ts``; ``tests/suite-n-corsia-tensor.spec.ts`` * - CGI to 2100 (Missing) - Implemented (DL-044) — auto-offset wiring 2024–2035 + linear CGI baseline to ``end_year``; constrained mode only - ``src/engine/cascade.ts`` (``cgiBaselineAt``, ``cgi_enabled``, ``cgi_gamma_end``) - ``tests/horizon-2100.spec.ts``; ``tests/end-year.spec.ts`` * - Route-level flight substitution & seat/cargo capacity corrections (Missing) - Implemented (shadow) — the full fleetRenewal.rst route chain: substitution, freighter/passenger payload corrections, the seven-step RCTK conservation proof, belly-cargo mapping (DL-136) - ``src/engine/fleet-renewal-route.ts`` - ``tests/suite-k-fleet-renewal-route.spec.ts`` * - Per-type flight counts / traffic conservation (Missing) - Implemented (standalone) — the ac × rt flight tensor and its six folds + eq. 4 production-rate → r_ss (DL-137). The existing-aircraft axis is lumped (``EXISTING_LUMPED``) pending licensed fleet data - ``src/engine/fleet-tensor.ts`` - ``tests/suite-n-corsia-tensor.spec.ts`` * - Eligibility plane (Missing) - Implemented — route eligibility = size-class eligibility ∧ distance ≤ usable range (0.8 × design range, documented assumption) - ``src/engine/futureAircraft.ts`` - ``tests/future-aircraft.spec.ts`` * - Market-saturation freeze (Missing) - Still open — adjudicated deviation: pro-rata normalisation instead of CASCADE's freeze-at-:math:`t_{marketSat}` :math:`x^*(rt,t)`; the three-step :math:`t_{marketSat}` interpolation is not implemented - deviation registered (:doc:`aircraft`) - ``tests/future-aircraft.spec.ts`` (pro-rata behaviour pinned) * - Per-route resolution (Missing) - Partial — opt-in ``'route_resolved'`` traffic model scales CORSIA quantities by eligible fractions; the route-level modules above run standalone/shadow; the production wedge engine remains aggregate - ``src/engine/routes/*``; ``src/engine/cascade.ts:654`` - ``tests/route-corsia.spec.ts``; ``tests/route-model.spec.ts`` * - PtG e-methane (Missing) - Implemented (DL-032; PtG electricity/H₂ demand closed by DL-136) - ``src/engine/saf.ts:ciCh4PtgAt``; ``src/engine/energy-demand-full.ts`` - ``tests/methane-parity.spec.ts``; ``tests/carrier-conservation.spec.ts``; ``tests/suite-j-energy-demand-full.spec.ts`` * - NEC/DW/WW bio-methane split (Missing) - Implemented (DL-048) - ``src/engine/saf.ts`` (bio-methane category split) - ``tests/methane-split.spec.ts`` * - Editable fuel loss :math:`f_{loss}` (Missing) - Implemented (DL-081) — year-trajectory ``ch4FLossAt`` (constant mode = bit-identical legacy default) - ``src/engine/leakage-trajectory.ts`` - ``tests/leakage-trajectory.spec.ts`` * - Grid-linked liquefaction CI (Missing) - Implemented (DL-162 §4) — :math:`CI_{liq}(t) = \varepsilon_{liq} \cdot CI_{elec}(t)` in the shared methane loss machinery (``ch4_eps_liq``, default 0.04) - ``src/engine/saf.ts:ch4LossTermsAt`` - ``tests/leakage-trajectory.spec.ts``; ``tests/evidence-register.spec.ts`` * - Vapour-loss compounding (Missing) - Implemented (DL-134) — stagewise :math:`1-\prod_i(1-f_i)`, with the naive sum alongside so the drift is measurable - ``src/engine/methane-stoichiometry.ts:downstreamVapourLoss`` - ``tests/methane-stoichiometry.spec.ts`` * - SMR in the electricity roll-up / liquefaction electricity in energy demand (Missing) - Implemented in the full module (DL-136, shadow) — htype decomposition, PtG + liquefaction + removals electricity, product slate :math:`P_{PtL}`, α_eFuel allocation. The production roll-up keeps the documented simplified treatment (bit-identical default) - ``src/engine/energy-demand-full.ts`` - ``tests/suite-j-energy-demand-full.spec.ts`` * - Regional Scenarios (Missing / "intentionally excluded?") - Withdrawn — the page is absent from the July-2026 CASCADE corpus (27 files, DL-131/132); there is no current source to cover - n/a - ``docs/rst-coverage-matrix.md`` (corpus inventory) * - Air-traffic dataset "mock + global CAGR" (Simplified) - Partly stale as claimed — ``traffic_model`` has three URL-shareable tracks (``legacy_anchor`` / ``cascade_series`` / ``route_resolved``, DL-022/045); the opt-in ``route_resolved`` track runs CORSIA/CGI eligibility on the synthetic-representative route set and reports eq. 10 per-class flight counts + traffic conservation identities; since DL-165 every result carries ``provenance.trafficBasis`` (the DL-139 §6 five facts from the run's actual inputs). Gross remains a global scalar on all tracks; an observed route-level baseline stays licence-blocked (:doc:`trafficDataset`) - ``src/engine/traffic-dataset-provenance.ts``; ``src/engine/traffic-basis-registry.ts`` - ``tests/traffic-dataset-provenance.spec.ts``; ``tests/suite-p-adjudication.spec.ts`` * - Traffic growth "single global CAGR" (Simplified) - Partial — multi-segment ``cagrPeriods`` in production; the full Hermite linking family, region-pair CAGR form and per-route projections standalone (DL-137, shadow). The Hermite width α is **never valued in the corpus** (required caller argument, no default); the eq. 13 region-pair form is now **valued** by Boeing's published CMO 2026 workbook table + Airbus GMF 2026 (DL-166, ``src/data/market-outlooks.ts``, ``boeing_cmo_2026`` scenario); named traffic bases with mandatory provenance (``CASCADE_PARITY`` / ``CURRENT_EVIDENCE_*``) per DL-139 — the 2019-rooted vs 2023-rebased readings differ by 21.77 % from 2032 and no selector may hide which one a number came from - ``src/engine/traffic-growth-full.ts``; ``src/engine/traffic-basis-registry.ts``; ``src/data/market-outlooks.ts`` - ``tests/suite-l-traffic-growth-full.spec.ts``; ``tests/suite-p-adjudication.spec.ts``; ``tests/market-outlooks.spec.ts`` * - Route-level traffic baseline (Simplified — "mock only") - Implemented (standalone, licence-gated) — versioned offline Cirium snapshot schema with coverage validation and export refusal until licence retention is confirmed (DL-133 §11); governed live corridor snapshot loader, gitignored, mock fallback (DL-153) - ``src/engine/route-traffic-baseline.ts``; ``src/data/cirium-snapshot.ts``; ``src/data/cirium-live.ts`` - ``tests/suite-g-cirium-baseline.spec.ts``; ``tests/cirium-live.spec.ts`` * - Future-aircraft structural gaps (Simplified) - Partial — EIS-gated class adoption exported as a single factory so UI and engine share one implementation (DL-160); chained ``ac_generations`` baseline renewal (DL-049); flight tensor standalone (DL-137). Remaining: market-saturation freeze (deviation above), Boeing-proprietary range-energy tables (adjudicated — no exact value parity), lumped existing-type axis - ``src/engine/cascade.ts:makeAcAdoption``; ``src/engine/fleet-tensor.ts`` - ``tests/future-aircraft-ui.spec.ts``; ``tests/multi-generation.spec.ts``; ``tests/suite-n-corsia-tensor.spec.ts`` * - Operations per-route (Simplified) - Implemented (shadow) — the printed three separate linear ramps, the multiplicative :math:`e^* = (1-\Delta\eta)e_{in}` form and the eq. 5 flight-count recomputation (DL-137); the three end-values are never valued in the corpus (required caller arguments). Production wedge unchanged (subtractive, S-curve — divergence documented) - ``src/engine/operations-full.ts`` - ``tests/suite-m-operations-fuelburn.spec.ts`` * - Electricity grid CI (Simplified) - Partial — low-carbon CI is now a user input per the RST (``ci_elec_lc``, DL-129) and the market-share curve family incl. half-S is selectable (``curve_elec_lc``, DL-161). Remaining divergence: the legacy default interpolates CI linearly in year, and α_lowcarbon has no stated value in the RST - ``src/engine/saf.ts:gridCIAtFor`` - ``tests/dl129-grid-ci-lowcarbon.spec.ts``; ``tests/curve-shapes-flat-pulse.spec.ts`` * - Jet-fuel baseline CI (Simplified) - Partial — anchors remain fixed (WTW 89 / TTW 74 / WtT 15 gCO₂e/MJ) with ``jeta_upstream_share`` (DL-051); per-carrier lifecycle-boundary selection (WTW/TTW/WtT/custom stage sets) is first-class per DL-162 (:doc:`lifecycleBoundaries`) - ``src/engine/lifecycle-boundaries.ts`` - ``tests/lifecycle-boundaries.spec.ts`` Supplementary coverage (landed after the CSV snapshot) ------------------------------------------------------ The CSV above is the 2026-07-18 snapshot and is authoritative for the rows it carries; the following engine work landed after the snapshot and is recorded here rather than by editing the CSV (each item is documented at the linked page): .. list-table:: :header-rows: 1 :widths: 24 20 24 32 * - Item - Status - Test evidence - Note * - Carrier conservation (DL-033, in-code label) - Fixed - ``tests/carrier-conservation.spec.ts`` (10) - SAF + CH₄ shares scaled pro-rata when their sum exceeds 1 — CASCADE's aggregate-mix :math:`\sum X = 1` constraint; bit-identical within budget (:doc:`energy`). In-code DL-033 label; the decision log assigns DL-033 to Workstream B (numbering collision). * - Horizon 2050/2075/2100 + CGI (DL-044) - Extended - ``tests/end-year.spec.ts`` (21), ``tests/horizon-2100.spec.ts`` (14) - ``end_year`` with hold-not-stretch (:math:`Y_{SAT} = 2050` anchors every curve normalisation), prefix invariance, 2050-KPI stability; CGI auto-offsets to :math:`\gamma_{end}\,G_{2019}` at ``end_year``, constrained mode only (:doc:`trafficGrowth`, :doc:`scenarios`). * - Contrail avoidance lever - Extended (app parity) - ``tests/contrails.spec.ts`` (20) - The RST set publishes no contrail formulation (grep-verified); knowledge factors 0/0.6/1.0 and :math:`R_{CO_2eq} = 2/3` are documented fallbacks; pure module, not yet in the sweep (:doc:`operations`). * - CORSIA routes filter + operator accounting (DL-045/046) - Closed - ``tests/route-corsia.spec.ts`` (14), ``tests/corsia-operator.spec.ts`` (14) - Closes the CORSIA matrix row's "operator/CGI Missing": edition-listed participation (ICAO Ed. 6/7), fuel-weighted eligible fraction, per-operator accounting with homogeneity-reduction proof (CASCADE's route-homogeneous form is the exact special case). * - Baseline renewal, multi-generation, methane split, display gaps (DL-047…DL-050) - Closed (V3.0 gap register) - ``tests/baseline-renewal.spec.ts`` (6), ``tests/multi-generation.spec.ts`` (13), ``tests/methane-split.spec.ts`` (7), ``tests/ops-presets.spec.ts`` (5), ``tests/display-logic.spec.ts`` (9) - Opt-in conventional-generation baseline renewal (chained phase-out curves, one-entry chain provably ≡ single step); NEC/DW/WW bio-methane split; named ops presets; CI-by-end-use display decomposition. Deviations register (summary) ----------------------------- Registered implementation decisions that diverge from the published CASCADE formulation, each documented at the point of use: * **Market-share cap:** pro-rata normalisation instead of CASCADE's freeze-at-:math:`t_{marketSat}` (:doc:`aircraft`). * **Insertion-rate constraint:** module-level specs are rejected (``RangeError``) when :math:`r_{ss} > 1/T_{ramp}` rather than truncated (:doc:`aircraft`); the truncating helper exists for the aggregate engine. * **Usable range = 0.8 × design range** — HyFlux assumption the RST does not specify (:doc:`aircraft`). * **Offsets wedge base:** constrained mode applies removals to residual emissions; the legacy percent mode keeps the gross base frozen (DL-027). * **σ(t) normalisation** shown vacuous under HyFlux's parameterisation (:doc:`carbonOffsetsRemovals`). * **PtL CI without artificial floor** on the stoichiometric track (:doc:`energy`). * **Energy-demand roll-up (production):** aggregate partition instead of per-route resolution; SMR ignored in the electricity roll-up; no liquefaction electricity; :math:`P_{PtL} = 1` (:doc:`energyDemand`). All four are closed in the standalone 29-equation module (``energy-demand-full.ts``, DL-136, shadow); the production default is unchanged. * **Methane:** Boeing's published 558 adopted over the derived 596 in the frozen parity track (F1); single-multiplier reading of :math:`f_{loss}` (F2) (:doc:`energy`). DL-130 made this two-track: the ``CURRENT_EVIDENCE`` basis modules default to the derived 596 (and to the Sabatier floor 1.20636 over the published :math:`\varepsilon_{H_2,PtG} = 1.14`), with the published values reproducible under ``CASCADE_PARITY`` (``src/engine/basis.ts``). * **Fleet renewal:** continuity-derived intercept :math:`b` used where CASCADE's published closed form omits "+1" (F3) (:doc:`aircraft`). Decision-log highlights ----------------------- From ``ENGINEERING_DECISION_LOG.md`` (all entries 2026-07-18): * **DL-006** — Two-track regression baselines approved: frozen legacy-defect spec plus corrected spec with documented deltas. * **DL-012** — Removal-capacity defect fixed: constrained mode (default) uses ``min(demand, capacity)`` removals; legacy percent mode pinned by the frozen parity spec. Headline net at defaults 0.14 → 0.00 Gt (cause: arbitrary 95 % aggregate cap removed; capacity not binding at defaults). * **DL-016** — All remaining ``as any`` casts removed; scenario writes go through the statically validating ``setScenarioField``. * **DL-017** — Load factor wired as a physics change (RPTK conservation, freighters exempt), neutral at defaults; 7 validation tests. * **DL-018** — URL-state v2: named sparse diff over the generated 199-field registry; v1 decode frozen for old links. * **DL-019** — All six strict TypeScript flags enabled, 0 errors. * **DL-020** — Pulse curve implemented from the RST formulation; 11 tests. * **DL-021** — Concurrent methane feature preserved; benchmark made a gate for any parity claim. * **DL-022** — Two-track traffic model: headline ≡ series by construction; methane benchmark complete with findings F1/F2 recorded. * **DL-023** — CORSIA equation map (21 equations) + sectoral-subset benchmark; deviation pinned and later closed by DL-027. * **DL-024** — LH₂ delivered CI reproduces the CASCADE closed form **exactly** (first Exact classification); PtL moved to the stoichiometric formulation two-track. Later entries (DL-026…DL-050) closed the §26 Future-Aircraft actions, Workstreams A/B/D/F, the airport-map scaffold, the Cirium Sky client (DL-040), the Monte-Carlo cost engine (DL-039), the Phase-6 decision map (DL-038), the horizon-2100 + CGI wave (DL-044), the CORSIA equation map (DL-045/046), the remaining CASCADE V3.0 engine and display gaps (DL-047…DL-050), and drafted the Boeing evidence-gap letter (A1–A5 documentation inconsistencies, B1–B6 undisclosed assumptions — not sent, awaiting review). The July/August 2026 correction-and-parity programme (DL-129…DL-164) regenerated the coverage matrix against the July-2026 CASCADE corpus (DL-131/132), fixed the grid-CI input and methane two-track defects (DL-129/130), wrote the six source-page closure modules — cost, context metrics, energy demand, fleet-renewal route chain, traffic-growth Hermite family, operations, flight tensor, CORSIA aggregation (DL-134/136/137) — under an explicit integration-stage registry that keeps them out of the production path (DL-138, ``integration.ts``), adjudicated the named traffic bases (DL-139), audited control liveness (DL-140/141), corrected the DL-140 LH₂ ledger term (DL-142), added the governed Cirium snapshots (DL-133 §11 / DL-153), the Stage-2 route-aware sequential shadow (DL-154), the shared EIS-gated adoption factory (DL-160), curve-shape selection for grid/SAF adoption (DL-161), per-carrier lifecycle boundaries (DL-162, :doc:`lifecycleBoundaries`) and the Boeing-CMO traffic root (DL-164, :doc:`scenarios`). See ``docs/dl131-programme-report.md`` through ``docs/dl142-lh2-ledger-correction.md`` and the refresh table above. Test suite ---------- The vitest suite is the parity evidence. Current state: **1,820 tests across 112 spec files, all passing** (``vitest run``; 1,816/111 at the 2026-08-02 refresh — DL-167's spec landed after it). Historical anchors: 536/536 across 42 files at the 2026-07-18 snapshot; 226/226 across 16 files at the Phase-4 Workstream-A report. Type checking: ``tsc`` 0 errors under all six strict flags. The table below lists the foundational specs by name (counts as of 2026-07-18); the post-snapshot work is covered by the lettered suites ``tests/suite-a…suite-q`` (HyFlux correctness, cascade parity, physics evidence, divergence regression, payload/fleet, gap closure, Cirium baseline, cost/context, unvalued partials, energy-demand full, fleet-renewal route, traffic-growth full, operations/fuel-burn, CORSIA/tensor, integration governance, adjudication, liveness) plus the DL-numbered and v5 specs — the refresh table above names the relevant spec for every closed row. .. list-table:: :header-rows: 1 :widths: 45 10 45 * - Spec file - Tests - Evidence for * - ``tests/airport-demand.spec.ts`` - 19 - Airport demand-driven sizing (DL-035) * - ``tests/baseline-renewal.spec.ts`` - 6 - Baseline fleet-renewal toggle (DL-047) * - ``tests/bounds-electric.spec.ts`` - 11 - CASCADE bounds + electric wedge (DL-029) * - ``tests/breakeven-ladder.spec.ts`` - 17 - Workstreams F & D, Q7–Q10 (DL-037) * - ``tests/cascade-parity.spec.ts`` - 4 - Frozen legacy baseline (±0.5 %) * - ``tests/carrier-conservation.spec.ts`` - 10 - Carrier conservation + PtG pathway (DL-033/032) * - ``tests/cirium-client.spec.ts`` - 11 - Cirium Sky API client, mocked fetch (DL-040) * - ``tests/contrails.spec.ts`` - 20 - Contrail-avoidance lever (app parity) * - ``tests/corsia-operator.spec.ts`` - 14 - Per-operator CORSIA accounting (DL-046) * - ``tests/corsia-parity.spec.ts`` - 8 - CORSIA sectoral subset (DL-023/027) * - ``tests/custom-flags.spec.ts`` - 4 - Custom-settings badges * - ``tests/decision-map.spec.ts`` - 11 - Phase 6 decision map (DL-038) * - ``tests/display-logic.spec.ts`` - 9 - Display gaps G8/G11/G12 (DL-050) * - ``tests/energy-demand.spec.ts`` - 20 - Energy-demand roll-up * - ``tests/end-year.spec.ts`` - 21 - ``end_year`` horizon contract (DL-044) * - ``tests/fleet-insertion.spec.ts`` - 13 - Insertion machinery (DL-028) * - ``tests/fleet-renewal-parity.spec.ts`` - 6 - Fleet renewal equation parity + F3 * - ``tests/fuel-costs.spec.ts`` - 9 - Workstream B cost stacks (DL-033) * - ``tests/future-aircraft.spec.ts`` - 36 - Future Aircraft module * - ``tests/future-aircraft-ui.spec.ts`` - 15 - AircraftModal lever wiring (DL-026/028) * - ``tests/geodesic.spec.ts`` - 16 - Geodesic map math (DL-031) * - ``tests/horizon-2100.spec.ts`` - 14 - Horizon 2100 + CGI acceptance (DL-044) * - ``tests/hydrogen-pathways.spec.ts`` - 6 - LH₂/GH₂ distinction (DL-024) * - ``tests/load-factor.spec.ts`` - 8 - Load-factor physics (DL-017) * - ``tests/mc-scthermal.spec.ts`` - 9 - Monte Carlo + SC thermal debits (DL-039) * - ``tests/methane-parity.spec.ts`` - 13 - Methane benchmark + F1/F2 (DL-022/032) * - ``tests/methane-split.spec.ts`` - 7 - NEC/DW/WW bio-methane split (DL-048) * - ``tests/multi-generation.spec.ts`` - 13 - Chained generation machinery (DL-049) * - ``tests/ops-presets.spec.ts`` - 5 - Named ops presets (DL-048) * - ``tests/parity-actions.spec.ts`` - 15 - Battery multiplier, EIS gating, CI_GH2 (DL-026) * - ``tests/preset-collections.spec.ts`` - 5 - Scenario-library collections (drift guard) * - ``tests/ptl-stoich.spec.ts`` - 11 - PtL stoichiometry (DL-024) * - ``tests/pulse-curve.spec.ts`` - 11 - Pulse curve (DL-020) * - ``tests/removal-capacity.spec.ts`` - 12 - Constrained offsets (DL-012) * - ``tests/route-corsia.spec.ts`` - 14 - routes_CORSIA eligibility (DL-045) * - ``tests/route-filter.spec.ts`` - 14 - Route/class display filter * - ``tests/route-model.spec.ts`` - 19 - Part B route-model scaffold * - ``tests/sbatch-cost.spec.ts`` - 14 - S-batch + cost-tab engine layer (DL-043) * - ``tests/supporting-models.spec.ts`` - 21 - RNG supply, non-CO₂, aircraft mass * - ``tests/traffic-model.spec.ts`` - 8 - Two-track traffic (DL-022) * - ``tests/url-state.spec.ts`` - 9 - URL codec v1/v2 (DL-018) * - ``tests/usable-fuel.spec.ts`` - 11 - Workstream A reproduction (DL-030) Measured CASCADE LH₂ wedge accounting (2026-08-01 live-API capture) ------------------------------------------------------------------- **Source:** ``data/evidence/cascade-measured-lh2-2050.json`` (captured ``orchestrationLayerInterface`` payloads and full 2050 ``netEmissions`` decompositions); ``fable-addendum-lh2-measured.md`` (repository root) **Test evidence:** ``tests/cascade-measured-lh2.spec.ts`` (20 tests: fixture consistency + parity governance) A live-API experiment (Waypoint 2050 Scenario 0 — Baseline, Low SAF; year 2050; five runs A–F varying the hydrogen-aircraft lever, H₂ production route and per-carrier hydrogen scope) resolved the wedge-allocation question this register previously carried as its highest-value open clarification. Measured behaviour: * LH₂ aircraft abatement books **wholly in the Aircraft wedge**, under ``netEmissions.futureAircraft.byAircraftClass.hydrogen``, with delivered-LH₂ CI applied inside the Aircraft module (:math:`W = E_{\mathrm{H2}}\,(CI_{\mathrm{jet}} - CI_{\mathrm{LH2,del}})`, measured :math:`E_{\mathrm{H2}} \approx 5.887\times10^{12}` MJ recovered identically from a CI change and from a scope change). * Anti-double-counting is **sequential activity removal**: hydrogen aircraft shrink the residual Jet-A pool (:math:`15.083 \to 10.342 \times 10^{12}` MJ, None → High) and the SAF streams scale with that pool at unchanged blend shares. There is no explicit de-duplication subtraction and no Energy-wedge LH₂ term. * Per-carrier emission scope acts **inside the Aircraft module** (H₂ SMR WTW → TTW: −43.04 → −580.99 Mt) while the Energy wedge stays bit-identical; the parity request encodes scopes as a positional four-value string (jet fuel, hydrogen, electricity, methane; 1 = WTW, 2 = TTW). * Carriers are distinct: gaseous H₂ for e-fuels vs delivered LH₂ for aircraft, related by :math:`CI_{\mathrm{LH2,del}} = CI_{\mathrm{GH2}} + \varepsilon_{\mathrm{liq}}\,CI_{\mathrm{elec}}` (measured 4.432 = 0.2 × 22.16 gCO₂e/MJ), and e-SAF follows :math:`CI_{\mathrm{PtL}} = 1.4\,CI_{\mathrm{GH2}} + 1.11` against a fixed 89 gCO₂e/MJ WTW comparator — the e-fuel wedge legitimately changes sign (−25.84 Mt benefit under electrolysis, +19.00 Mt penalty under SMR). Consequences recorded in this register: * **Sequential wedge architecture is now the highest-value structural gap.** The HyFlux engine computes wedges independently against gross; CASCADE propagates stage state (Traffic → Aircraft → Operations → Energy → Offsets), so downstream wedge magnitudes diverge whenever hydrogen aircraft are active even at perfect CI parity (measured Operations −128.63 → −102.56 Mt, Energy/SAF −305.10 → −209.20 Mt, A → B). The ``CASCADE_SEQUENTIAL`` accounting mode is now implemented at two stages, both **shadow-only**: the Stage-1 aggregate chain (``sequential-shadow.ts``, ``tests/sequential-shadow.spec.ts``) and the Stage-2 route-aware shrinking pool with range-eligible LH₂ switching (``sequential-shadow-stage2.ts``, DL-154, ``tests/sequential-shadow-stage2.spec.ts``). ``computeLCA`` must never import either (gate asserted by test against the production source); the production ``LEGACY_INDEPENDENT_PERCENT`` mode stays bit-identical and must not be labelled CASCADE parity. * **Parity governance:** ``lh2_ci_driven`` (alias ``lh2_ledger``) is a HyFlux-only accounting view; ``computeLCA`` throws when it is combined with ``evidence_basis: 'CASCADE_PARITY'``, and no library preset enables it (see :doc:`extensions`). * **Offset saturation:** in the measured scenario offsets are endogenous and net 2050 saturates at zero in every run, so net emissions carry no independent evidence about the hydrogen pathway; comparisons must use gross, pre-offset emissions and offset demand. * **Open reconciliation (deliberately unresolved):** the wedge-implied effective e-SAF energy over the reported ``energyQuantity.safEnergy.eFuel`` is ≈ 561.5/675.3 ≈ **0.831**; registered as the *e-SAF effective-volume reconciliation gap* and locked by test as unresolved — no invented factor may close it. The A→B wedge reconciliation likewise leaves a recorded ≈ +8.1 Mt residual once the endogenous offsets response is included. The fixtures are measured responses for one scenario, one year and one captured configuration — they anchor the parity adapter and are never treated as universal defaults, and the engine does not claim to reproduce them (synthetic data; no route-level orchestration). Security note SEC-2026-07-18-01 ------------------------------- During the Phase-0 audit (2026-07-18), live Cloudflare deployment credentials (an API token and account ID) were found pasted inline in a prompt file inside the working tree. The file is **untracked**: exhaustive scans of the full git history and the rest of the tree found no other exposure, and the value has never been reproduced in any report, log, artefact, URL state or deployed bundle (and is not reproduced here). Resolution and standing rules: * The owner **declined token rotation** and accepted the residual risk; the token must be treated as permanently exposed. * The credential must never enter git history, any artefact, log, report, URL state or deployed bundle; the prompt file stays untracked and is excluded from any commit or archive (scrubbing before any such commit remains recommended). * Agents working on this repository never use the credential for any operation. * Deploys use environment-variable credentials supplied at deploy time, preview branch only; production promotion requires explicit owner approval each time. (Incident record: ``Phase0-Report-2026-07-18.md`` §3; resolution recorded in DL-002 and the completion report.)