Traffic Growth#
Implementation status: Partial (coverage matrix row Traffic Growth).
Production: global CAGR (single, two-period or multi-segment) + COVID
factors, two-track headline model per DL-022 — no route/regional
differentiation in the wedge path. The rest of the page — the cubic
Hermite linking family (eq. 2–9), the flight-count projection (eq. 10),
the region-pair CAGR form (eq. 13) and the per-route fuel-mass series
(eq. 15) — is implemented standalone in
src/engine/traffic-growth-full.ts (DL-137, Stage-1 shadow; import
guards keep it unreachable from production entry points). Every result
declares its traffic basis per DL-139/DL-165 (root year, root value,
growth rate, COVID treatment, recovery assumption).
Source: src/engine/cascade.ts:computeLCA (growthMultAt,
grossAt); src/engine/traffic-growth-full.ts (full page, shadow)
Test evidence: tests/traffic-model.spec.ts,
tests/end-year.spec.ts, tests/horizon-2100.spec.ts,
tests/suite-l-traffic-growth-full.spec.ts,
tests/traffic-dataset-provenance.spec.ts
Compound growth#
Growth is applied to the 2019 baseline (cf. CASCADE Traffic Growth, eqs. 11–14). For a single compound annual growth rate:
with \(g\) the scenario CAGR (default 3.5 %/yr). Two refinements are implemented. A two-period form switches CAGR at a break year:
and a multi-segment form (cagrPeriods, up to 12 periods, overriding the
simpler forms when present) compounds segment by segment:
COVID demand shock#
Calendar years 2020–2023 are scaled by demand-recovery factors
(constants.ts:COVID_FACTORS), calibrated to the global traffic collapse
and recovery:
Year |
Factor |
|---|---|
2019 |
1.0 |
2020 |
0.3941 |
2021 |
0.4631 |
2022 |
0.7168 |
2023 |
0.9424 |
Gross BAU emissions at year \(y\) are then:
so the 2021 gross value falls below the 2019 baseline (pinned by test). At defaults the 2050 value is \(0.92 \times 1.035^{31} \approx 2.67\) GtCO₂.
Two-track headline model (DL-022)#
Historically the headline scalar and the time-series sweep used different
BAU models (2.82 Gt anchor vs 2.67 Gt compounded — DEFECT-NEW-1). DL-022
unified both behind the shared growth machinery and introduced
traffic_model:
'cascade_series'(default): headline ≡ time-series, as above.'legacy_anchor': the frozen v3.3 scalar \(G = 2.82 \cdot (g/3.5) \cdot y_f \cdot f_{covid} + 0.92(1-y_f)\), retained only so the frozen parity baseline stays reproducible.
Test evidence (8 tests) pins the headline≡series identity, the \(0.92 \times 1.035^{31}\) value, the legacy anchor, monotonicity in both modes, the COVID shock below baseline, and conservation \(0 \le G_{net} \le G_{gross}\).
Extended horizon: end_year 2050 / 2075 / 2100 (DL-044)#
The scenario horizon is selectable via end_year (2050 | 2075 | 2100,
default 2050; URL-state v2 accepts only these three values as
enum_end_year, and the engine defensively clamps any out-of-set value
into [2050, 2100]). Extending the horizon must never reshape the legacy
window, so the rule is hold-not-stretch: a Y_SAT = 2050 constant
anchors every curve normalisation (adoption S-curves saturate at 2050, the
SBTi pathway — defined to 2050 only — holds its 2050 floor), while
end_year only extends the sweep loop. Traffic growth keeps compounding
beyond 2050 at the last-period CAGR (the two-period machinery defaults
\(g_2 = g_1\), so the extension is continuous):
Acceptance properties, all pinned by test:
Frozen-baseline bit-identity —
end_year: 2050(or omitted) reproduces the legacy engine exactly (physics-signature equality); both frozen two-track baselines are untouched by construction.Prefix invariance — the first 32 slices (2019–2050) of a 2100 run are exactly the 2050 run.
Hold-flat — adoption/saturation curves, SAF and methane blends, removal cost/capacity and SBTi hold their 2050 values beyond 2050 (no silent stretch); the aircraft-wedge/gross ratio is flat once fleet renewal completes.
KPI stability — the 2050-anchored KPIs (
net2050,grossBau2050,sbti2050,gapToSbti) never move withend_year;endYear/netEnd/grossEndexpose the horizon end. A 2100 run has 82 slices (2019–2100), conservation \(G_{gross} = G_{net} + \sum \text{reductions}\) holds every year, and cumulative net emissions are monotone non-decreasing.
DL-044 also wires the RST Custom Global Initiative (CGI) offsets mode
(cgi_enabled, cgi_gamma_end clamped to [0, 0.85]): offsets are
auto-set to hold eligible emissions at the CORSIA baseline
\(0.85\,G_{2019}\) for 2024–2035, then follow a linear CGI baseline to
\(\gamma_{end}\,G_{2019}\) at end_year (continuity at 2036 exact
by construction). Constrained offset mode only — the frozen 'percent'
track ignores CGI, and the user offsets ambition is inert while CGI is
active (per the RST). See Scenarios, Ambition Levels & Parameter Bounds for the URL-state surface.
Known deviations / limitations#
CASCADE’s cubic-Hermite shock-recovery blend is implemented standalone (
traffic-growth-full.ts, DL-137) but cannot reproduce CASCADE’s curve: the spline-width parameter α is never given a value anywhere in the 27-file corpus, so it is a required caller argument with no default (HERMITE_ALPHA_UNVALUED_NOTE), and the printed eq. 8/9 use an absolute-year exponent that overflows as printed (reproduced underCASCADE_PARITYas a diagnostic, corrected underCURRENT_EVIDENCE). The production path applies the flat factor table; the 2019-rooted vs 2023-rebased readings differ by 21.77 % from 2032 onward, which is why every result names its basis (DL-139/165).No route-, region- or market-segment-differentiated growth in production. The region-pair CAGR form (eq. 13) exists in the shadow module, and since DL-166 it has a sourced value: Boeing’s own published CMO 2026 forecast-data workbook (all 39 region-pair RPK flow rows, transcribed programmatically with attribution) plus Airbus GMF 2026 world figures ship in
src/data/market-outlooks.ts(tests/market-outlooks.spec.ts), and theboeing_cmo_2026library scenario applies the published world CAGR. CASCADE’s own internal CMO/WACF configuration remains unheld beyond its two public endpoint anchors (see the Boeing-CMO root, Scenarios, Ambition Levels & Parameter Bounds).The ambition table’s traffic levels (
AMBITION.traffic= 2.4/2.9/3.4/3.7/4.0 %/yr) are available but the headline CAGR remains a direct user input in most flows.