Repository navigation
Pin obr-macroeconomic-model 6fbbe06, where every quarter converges - #262
Open
vahid-ahmadi wants to merge 2 commits into
Open
vahid-ahmadi wants to merge 2 commits into
vahid-ahmadi wants to merge 2 commits into
Conversation
The hosted pin e4d7faa solves the published closure: every quarter of every obr_shock and score_reform stops on the Gauss-Seidel stall break, and the CGG multiplier is exactly 1.0000. obr main (94f08b9, #54-#58) makes the nominal-GDP pin the default; re-measured locally today, all four canary levers converge in every quarter. - Pin e4d7faa -> 94f08b9 (modal_app.py, pyproject.toml). - Canaries and site: Bank Rate +100bp GDP -129/-405/-480/-522 £m (was -121/-431/-482/-416), cut +134..+541; household ratio q12 0.33 (was 0.34); CGG multiplier 1.01 rising to 1.05 (caveat, code example). - "No quarter converges" statements on /obr, /obr/methodology, /obr/validation and /models/validation now say every quarter does. - /obr/validation hosted card described pin 1ed742c and #226; it now describes 94f08b9 and the score_reform runtime (#243). - capabilities OBR runtime: minutes, not seconds (topic page regenerated). Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…usehold ratio like for like obr #65 (EU payments held at zero) and #66 (household ratio on both bases) merged to main 6fbbe06. Re-measured locally at 6fbbe06: Bank Rate +100bp -128.7/-405.4/-480.6/-522.2, CGG 1.01 -> 1.05, every quarter converged, matching the OBR session's final figures (Actions run 43720935064); canary expectations unchanged. The worked example now quotes current-price GDP per pound of revenue, the OBR's like-for-like basis: 0.16 in year 1, 0.37 by quarter 12, with the real-GDP figures obr_shock returns (0.145, 0.33) beside them. Co-Authored-By: Claude Opus 5.5 <[email protected]>
vahid-ahmadi
marked this pull request as ready for review
November 15, 2026 14:21
This branch was successfully deployed
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.
Demo-critical, draft by decision (see the log below). The hosted OBR model is not demo-safe at its current pin.
Why
Hosted pin e4d7faa solves the published closure. Measured on the live server today:
obr_shock(CGG, +1250, 12): about 4.5 minutes, 12 of 12 quarters unconverged (Gauss-Seidel stall break), multiplier exactly 1.0000 and flat.score_reform(model="obr"), default window: 20 of 20 quarters unconverged, with quarterly GDP deltas jumping (−2.09bn in 2030Q4, then −1.33bn).obr main 94f08b9 (#54, #55, #57 and #58, merged 15 Nov) makes the nominal-GDP pin the default. I re-measured locally at 94f08b9 through
core.obr_shock, one heavy job:The Bank Rate path matches the OBR session's independent Actions run (
obr-for-macro-243.md).Change
modal_app.pyandpyproject.toml.canaries.json, plus the drift and wiring tests: the Bank Rate expectations and the household ratio 0.33. The stale-pin test now rejects e4d7faa's path.obr_shockpayload) and the/obr/codeexample: "about 1.01 on impact, rising to about 1.05", still against the OBR's 0.6./obr/validation: the Bank Rate card has the new numbers (cut +134..+541, from the OBR session's run). The hosted card, which still described pin 1ed742c and "until Decision needed (#218): bump the hosted OBR pin to obr-macroeconomic-model main (e4d7faa) #226 is deployed" (stale since 6 Nov), now describes 94f08b9 and thescore_reformruntime (Hosted score_reform (OBR, default window) has not finished within 10 minutes since the 30 Oct deploy #243). The three-configurations line says every quarter converges./obr,/obr/methodology,/obr/validationand/models/validation; the/obrverdict says every quarter converges.capabilities.pyOBR runtime: "about one to five minutes for a raw shock; over ten minutes for a translated reform scenario on the default window" (was "seconds"). The reform topic page is regenerated.Decision log (Fable 5.2, asked because Vahid asked for no questions)
Re-pinned to 6fbbe06 (obr #65 and #66 merged)
The OBR session's final figures are in (
obr-for-macro-243.md, "FINAL figures", Actions run 43720935064), and obr #65 (EU payments held at zero) and #66 (household ratio on both bases) are merged to main 6fbbe06. This PR now pins 6fbbe06. I re-measured locally at 6fbbe06 under the heavy-job lock:df.attrs)The canary expectations are unchanged from 94f08b9. The worked example now quotes the like-for-like current-price ratio, 0.16 → 0.37×, against the OBR's 0.3. That is the basis obr #66 says matches the OBR. The real-GDP figures
obr_shockreturns (0.145 → 0.33×) sit beside it, and the canary still checks 0.33, since that is what the tool reports.Still pending in obr, neither of which changes the hosted deltas (per the OBR session): #61 (IBUSX bracket) and #67 (demo and result labels). Fable's condition was "re-pin and regenerate inside this PR if #65/#66/#61 merge first". #65 and #66 are in. Marked ready for review.
Scope and what's still open
score_reform's runtime is mostly the microsim; see Run each population simulation once, not twice, and say how long it takes #260 (the double run) and Report stage timings in the OBR score_reform result #253 (timings)./obr/validation, OBR session: now proportional, −1,387/−2,773/−5,547), the free-running MAPE incapabilities.py(4.32% / 7.22%; the OBR session's 4.12% / 6.90% needs Point canonical URLs at policyengine-macro.vercel.app #65), and the/models/compareOBR rows (hosted runs from 6 Nov at e4d7faa). The compare battery should be rerun against the hosted server after this deploys./obr/validationtile (4.32%), the consumption, household-income, profits (82.77%) and current-account figures, the free-running chart (papers/obr-macro/figures/fig_free_running_data.csv), andcapabilities.py's "4.32% and 7.22%". The OBR session's final note gives the new default-pin scorecard (GDP 4.12%, consumption 6.90%, household income 4.50%, profits 12.45%, current account 1.19%, 8 of 11 in band), but not the chart series or business investment. Refreshing it properly needs the scorecard CSV copied from obr, as a follow-up.Merging redeploys Modal
Tests
pytest tests3257 passed; integration (excluding remote) 453 passed;site_contract.pyandtopics.py --checkOK.🤖 Generated with Claude Code