Conversation
lecture-wasm's business_cycle now reads gdp_growth_annual.csv, unemployment_rate_annual.csv, private_credit_to_gdp.csv and us_business_cycle_monthly.csv from raw/main (QuantEcon/lecture-wasm#70), so the records here say so on the same day. This is block C of #118, worked from the checklist in #146. - The four manifests record the consumer, {repo: QuantEcon/lecture-wasm, file: lectures/business_cycle.md, on_refresh: rebuild}, in place of each "None yet" comment. `rebuild`, because no prose in the lecture quotes a value a refresh can move: its numbers are years of historical events, and its ranges run "to the present". - gdp_growth_annual.csv.yml: source.version, the comment above `retrieved` and the comment above integrity.upstream.status described the inherited bytes the first refresh (#112) replaced; they are vintage-neutral now. The Integrity header's "no lecture has ever read this file" goes too, since this commit makes it false, and the reason lecture-wasm had excluded the lecture is stated precisely: neither wbgapi nor pandas_datareader ships with Pyodide, and FRED's fredgraph.csv sends no CORS header. - migration.yml: the four records go from landed to repointed, each with one lecture-wasm repoints entry. The stale pending P4 wave (the "UNRATE twin", which drew "Wave P4" twice on the dashboard) is removed, and the closing comment says `final` means qeld adoption instead of routing it through the retired data.quantecon.org cutover (#15). - scripts/audit_annotations.yml: the lecture-wasm business_cycle wbgapi and pandas_datareader entries go, since the adopted lecture shows those calls in non-executing blocks. Intro's pandas_datareader note now names the twin lecture-wasm reads, not an "unadopted" pipeline. - PLAN.md: the P4 box is ticked, with the flip and the canary proof (#147, runs 36654189187 and 36654357802). The Phase 5 fan-out line records that a consumer which executes at read time needs no dispatch. - refresh-snapshots.yml's header no longer says no snapshot has a consumer, and scripts/snapshots.py's refresh PR body marks the rebuild dispatch as not wired yet (PLAN Phase 5) instead of implying it runs. - CATALOG.md regenerated: 44 datasets, 44 read by lectures today. lecture-wasm's adoption is QuantEcon/lecture-wasm#85. One placeholder remains, to replace on the day it merges: B_MERGE_DATE, in each of the four migration.yml repoints entries and on PLAN.md's P4 lines. It parses as a string, so the audit and the dashboard accept it and print it as text. Dry-run of the strict audit (build_audit.py all --strict) over fresh shallow clones of the eight lecture repos, on 2026-09-30. With lecture-wasm at the adoption branch, main's landed records exit 1 with one migration_inconsistency per file, and these repointed records exit 0. With lecture-wasm at its main, the repointed records exit 1. The exit-0 case holds once intro's new yfinance read in mle.md (QuantEcon/lecture-python-intro#849) is annotated, which #151 does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Sep 30, 2026
This branch has not been 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.
This is block C of #118, this repo's half of lecture-wasm's adoption of the four
business_cyclesnapshots. When lecture-wasm's adoption PR (QuantEcon/lecture-wasm#85, for QuantEcon/lecture-wasm#70) merges,lectures/business_cycle.mdthere readsgdp_growth_annual.csv,unemployment_rate_annual.csv,private_credit_to_gdp.csvandus_business_cycle_monthly.csvfromraw/main. This PR records that on the same day: lecture-wasm becomes the consumer of all four, theirmigration.ymlrecords go fromlandedtorepointed, and P4 is ticked inPLAN.md.Part of #146 and #118. #146 is done when the next
audit-dashboardrun onmainafter this merges is green and deploys, so it gets closed by hand at that point rather than on merge.Before merging
main. It annotates intro's newyfinanceread inmle.md(Rewrite MLE as an elementary lecture on maximum likelihood lecture-python-intro#849). Without it the strict audit fails onmainwhatever this PR does.main. It records the UMCSENT licence reading, and it merges before B.landedrecord that has a reader and arepointedrecord that has none. Until both are in, every push tomainand any PR that touches a manifest go red, and the Pages deploy is skipped.git grep -n B_MERGE_DATE -- migration.yml PLAN.mdprints nothing. Amend the commit so its message no longer describes the placeholder, because the repo squash-merges with the commit message.mainand re-run the three dry-run cases below. They must give exactly whatPLAN.mdrecords:landedexits 1 with 4 warnings,repointedexits 0, andrepointedwith lecture-wasm at itsmainexits 1.mainand re-clones lecture-wasm. A plain re-run of the old check does only the second.What changes
lectures/gdp_growth_annual.csv.yml,unemployment_rate_annual.csv.yml,private_credit_to_gdp.csv.yml,us_business_cycle_monthly.csv.ymlconsumersbecomes one entry,{repo: QuantEcon/lecture-wasm, file: lectures/business_cycle.md, on_refresh: rebuild}, in place of each "None yet" comment. Inus_business_cycle_monthly.csv.ymlnothing else changes, so #152's licence and source edits to that file merge cleanlylectures/gdp_growth_annual.csv.ymlsource.version, the comment aboveretrievedand the comment aboveintegrity.upstream.status. The Integrity header said "no lecture has ever read this file", which this PR makes false, so it is reworded. The reason lecture-wasm had excluded the lecture is stated precisely: neitherwbgapinorpandas_datareaderships with Pyodide, and FRED'sfredgraph.csvsends no CORS headermigration.ymllandedtorepointed, each with onerepointsentry for lecture-wasm, and the comment on thegdp_growth_annual.csvrecord names the consumer. The stalepending:P4 wave ("a maintained UNRATE twin") is removed, so the dashboard draws "Wave P4" once;pendingis now[]. The closing comment saysfinalmeans qeld adoption, instead of routing it through #15 and Phase 4 DNSscripts/audit_annotations.ymllecture-wasm:business_cycle:wbgapiandlecture-wasm:business_cycle:pandas_datareaderare deleted: B shows those calls in non-executing blocks, and the scan finds no API marker in the adopted lecture. Intro'spandas_datareadernote called the snapshot pipeline unadopted and named the World Bank file; it now names the FRED twin,us_business_cycle_monthly.csv, and says intro keeps its live call by decisionPLAN.md.github/workflows/refresh-snapshots.ymlraw/mainin the reader's browser and needs no dispatchscripts/snapshots.pyrebuildconsumer as "→ dispatch a rebuild (not wired yet: PLAN Phase 5)" instead of implying that a dispatch happensCATALOG.mdA parsed comparison with
mainconfirms that scope. Each manifest differs only inconsumers, plussource.versioningdp_growth_annual.csv.yml.migration.ymldiffers only in the four records'statusandrepointsand inpending, andaudit_annotations.ymlonly in the two deletions and the one note.The decision it records
on_refresh: rebuildfor lecture-wasm on all four files. No prose in B's lecture quotes a value a refresh can move: the only numbers outside its code are dates and periods of historical events, such as 2010-2011 or the 1970s, and its ranges run "to the present". I checked this on B's commit, so it needs checking again if B's prose changes in review. The value sets nothing off today, because consumer fan-out is out of scope: lecture-wasm runs the lecture in the reader's browser and readsraw/mainwhen it runs.The placeholder to fill
B is QuantEcon/lecture-wasm#85, already filled in. Its merge date is unknown until it merges. The placeholder parses as a YAML string, so the audit and the dashboard accept it and print it as text; the migration page reads "completed B_MERGE_DATE" until it is filled.
migration.ymlrepointsentry ofgdp_growth_annual.csv(line 855),unemployment_rate_annual.csv(873),private_credit_to_gdp.csv(886) andus_business_cycle_monthly.csv(899)date: B_MERGE_DATEPLAN.md**Complete B_MERGE_DATE**PLAN.mdB_MERGE_DATEin its headingThis fills all six (macOS
sed; on Linux drop the''). Keep the date unquoted, as in the other records, so YAML reads it as a date:Checks run (2026-09-30)
validate-datasetsscripts/validate_datasets.py, then with--builders, as the workflow runs them, in Python 3.12.13 venvs with PyYAML 6.0.3 and wbgapi 1.0.12, under pandas 2.3.3 and 3.0.5mainconsumed-file-check.github/scripts/check_consumed_files.py, thenscripts/build_catalog.pyandgit diff --exit-code -- CATALOG.mdCATALOG.mdis currentscripts/snapshots.py stampandpr-bodyon a scratch copyThe strict audit dry-run
This is
python scripts/build_audit.py all --strictover shallow clones of the eight lecture repos, cloned asaudit-dashboard.ymlclones them, with #151's annotation applied. The scan reads each clone'sorigin/main, so for "B's branch" the lecture-wasm clone'sorigin/mainwas set to B's head, rebased on lecture-wasmmainat ff9196d.main(records atlanded)repointed)main(ff9196d)missing_api_annotationsfor lecture-wasm'sbusiness_cycleWithout #151's entry,
mainalone exits 1 onmissing_api_annotations: lecture-python-intro:mle:yfinance, which is why #151 goes first.The dashboard pages
From the exit-0 run (this PR against B's branch):
maintodaymigration.html, datasets migratedmigration.html, "Wave P4"landedrepointed, "✓ verified against today's scan", consumed by lecture-wasm · business_cycleWith #148 merged in as well, its legend correction holds after the flip: 44 / 0 / 0, "Wave P4" once, and the broad sweep "completed 2026-08-18".
Merging alongside the open PRs
mainbefore this PR's checks can passus_business_cycle_monthly.csv.ymlCATALOG.mdunchangedgit merge-treeis clean in both ordersPLAN.md,private_credit_to_gdp.csv.ymlPLAN.md: this PR's P4 block against #145's edits to the two lines after it. Keep this PR's P4 block, then #145's two lines. The manifest merges cleanlyCATALOG.md,migration.ymlmigration.ymlmerges cleanly, with #144's record after the four P4 records.CATALOG.mdconflicts in two hunks; regenerate it, which gives "45 datasets · 45 read by lectures today"If anything else that regenerates
CATALOG.mdlands first, such as the monthly refresh PR expected on Monday 2026-10-05, rebase and re-runpython scripts/build_catalog.py.Left for whichever of this PR and #145 lands second
#145 rewrites
PLAN.mdlines that this flip makes false. Whichever lands second applies these:CATALOG.mdandmigratedboth say 40, or (in docs: close-out tidy — status, convention pointers and stale facts after the migration #145) that the gap is the four Track E snapshots:CATALOG.mdandmigratedagree at 44 after the flip, or at 45 once Add us_household_net_worth_2022.csv: SCF 2022 household net worth with survey weights #144 lands, whose file is listed ahead of its lecture. The last gap was the fourbusiness_cyclesnapshots, landed 2026-09-01 atconsumers: []and flipped on the day lecture-wasm adopted them.consumers: []" becomes "landed 2026-09-01, read by lecture-wasm since B_MERGE_DATE", and "Next: the lecture-wasm adoption …, then the flip; session plan lecture-wasm dynamic snapshots: business_cycle reads the four data-lectures snapshots (P4) #118" becomes "the lecture-wasm adoption and the flip landed B_MERGE_DATE (P4); project tracker lecture-wasm dynamic snapshots: business_cycle reads the four data-lectures snapshots (P4) #118".Keep the header's "40 of 40 static". The header of
private_credit_to_gdp.csv.ymlstill calls the filename provisional; #145 corrects it, so this PR leaves it alone. Once B's preview gate has passed, the Phase 8 line that says no in-browser Pyodide run is recorded can also note B's preview as the first, for these four files.🤖 Generated with Claude Code