Gate fiscal multipliers to published ranges; backtest LONGBASE vs FRED outturns - #7
Merged
Merged
Conversation
…D outturns Two validation gaps closed (audit: multiplier claims validated-once-never- gated; no baseline backtest): * tests/test_multipliers.py (Test 4, marked slow): recomputes the calendar- year fiscal multipliers from sustained standard runs and gates them -- purchases yr1 under the inertial Taylor rule (0.72, band 0.7-1.0 per Coenen et al. 2012 / CBO Whalen-Reichling 2015), purchases yr2 with the funds rate pegged (0.90, band 0.8-1.2), tax cut yr1/yr2 (0.22/0.32, band 0.15-0.45 vs CBO ~0.3). Runs in the scheduled-validation CI job; the fast jobs deselect -m slow. * scripts/backtest_longbase.py: compares the pinned April 2026 LONGBASE near-term path against realized FRED outturns (GDPC1, UNRATE, PCEPILFE, FEDFUNDS; 2026Q1-Q2), writing JSON/markdown reports. A snapshot fetched 2026-08-04 is committed (tests/data/fred_outturns_snapshot.csv) so tests/test_backtest.py gates the machinery hermetically; LONGBASE accuracy itself is deliberately NOT gated -- the weekly longbase-backtest CI job is continue-on-error. First backtest recorded in VALIDATION.md and backtests/: activity/rates close, core PCE inflation underprojected by 1.7pp (2026Q1) and 0.7pp (2026Q2). 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.
Closes the two validation gaps from the audit: the published fiscal-multiplier claims were validated once but never gated, and nothing backtested the LONGBASE baseline against realized data.
1. Fiscal multipliers gated (Test 4,
tests/test_multipliers.py, markedslow)Calendar-year multipliers recomputed from sustained standard runs (2026Q1–2028Q4, VAR expectations, demo fiscal configuration, policy switches shared with
scripts/scenarios.py):dmpex=1)These match the published claims (0.72 / ~0.99 / 0.22 / 0.32); the pegged yr2 value computes to 0.90 under this experiment definition, inside the 0.8–1.2 band. A
slowpytest marker is registered; fast CI jobs deselect it and thescheduled-validationjob runs it as a named gate step.2. LONGBASE-vs-outturn backtest (
scripts/backtest_longbase.py)Compares the pinned April 2026 LONGBASE near-term path against realized FRED outturns (GDPC1, UNRATE, PCEPILFE, FEDFUNDS via the public CSV endpoints) for 2026Q1–Q2, writing JSON/markdown reports (committed under
backtests/). A raw-observation snapshot fetched 2026-08-04 is committed attests/data/fred_outturns_snapshot.csvsotests/test_backtest.pygates the report machinery hermetically. First backtest (error = LONGBASE − outturn):Activity and rates were close; core PCE inflation was substantially underprojected. Per the audit's instruction this is a report, not a gate — the new weekly
longbase-backtestCI job runs--fetchwithcontinue-on-error. VALIDATION.md gains Test 4 and a "LONGBASE vs the 2026 outturns" section recording these numbers.Testing
uv run pytest -q— 33 passed, 1 skipped (includes the new slow multiplier gates and hermetic backtest test);ruff checkclean.🤖 Generated with Claude Code