Everything below was verified during the work, by the same session that did it — same tools, same URL forms, same environment, same mental model. This issue exists to break that circularity: run these checks in a fresh session with a diversified toolchain and report what survives.
Bias to test for: this session's verification monoculture was curl-based HTTP status/byte probes plus basename greps, and a single pinned venv (python 3.13, pandas 2.3.3, scipy 1.16.3) for every numeric claim; scripts/build_audit.py was run by the session itself for all four strict/dry-run measurements. Confirm reader-facing outcomes independently of all of that: open the published pages and notebooks in a browser, execute code rather than grepping it, use a different Python/pandas where a check involves parsing, and re-derive counts with your own parser rather than confirming the session's numbers.
What landed (2026-08-18, all merged the same day)
| repo |
landed |
| QuantEcon/lecture-python-advanced.myst |
#374 (prune jb clean . --html in ci+publish, 6ff5ab3), #375 (wave C2 repoint, 878b87a), #376 (wave C2 deletion, 0c96791), tag publish-2026aug18 (rerun of run 32087672065 after a 75-min hang on the texlive apt step; deploy had not run when cancelled) |
| QuantEcon/data-lectures |
#98 (land wave C2 + Track D: 4 datasets, 2 builders, sources/dataBHS.mat under LFS, f42eeaf), #99 (flip all four to repointed, f09485c) |
| QuantEcon/lecture-python-programming |
#612 (Track D repoint, 55c87c9) — whose merge auto-opened translation-sync PRs lecture-python-programming.zh-cn#92, lecture-python-programming.fr#33, lecture-python-programming.fa#153 (all still open, deliberately) |
| QuantEcon/lecture-tools-techniques |
issue #11 filed (byte-identical dataBHS.mat, same broken-downloadable-notebook bug) |
| QuantEcon/workspace-lectures |
comments: #41 (prune repo 1 of 9 landed), #40 (re-audit booked for ~2026-08-24 with checklist) |
1. Reader-facing outcomes
2. Artifact integrity
3. Highest-value claim: fred_data.csv reproduces from live FRED byte-for-byte
Everything about this file's committed builder status rests on it. Re-run builders/fred_data.py (pinned env per requirements.txt, then once more on a different pandas) and diff against the committed file. The claim's load-bearing details, each falsifiable: DFII5/DFII10 must be fetched with fredgraph's fq=Monthly&fam=avg aggregation (the bare series is daily); fredgraph now serves header observation_date where the file says DATE (the builder renames on read); the window is pinned 1953-04-01..2024-12-01. If the diff is non-empty, check whether FRED revised a value before concluding the builder is wrong — that distinction decides between fixing the builder and re-recording integrity.upstream.
4. Records written
5. Tracker consistency
6. Known blind spots
7. Decisions and mechanisms settled today
8. Deliberately not done
Where the reasoning lives
AGENTS.md and PLAN.md in this repo (URL forms, sources/ rules, repoint ordering); the work plan and its decisions on QuantEcon/workspace-lectures#45; the PR bodies of #98/#99 here and #374/#375/#376 in advanced.myst and #612 in lecture-python-programming; the re-audit checklist on QuantEcon/workspace-lectures#40.
For the validator: work in a session that did not do this work. Do not use the tool named under "Bias to test for" except where a check explicitly says to run it. Re-derive counts rather than confirming them. Where a check can be run against a surface the original session did not exercise, do that too — the margin beyond the checklist is where regressions hide. Deliver: one comment on this issue with a per-item verdict (confirmed / confirmed with caveat / refuted / not completable, with evidence), a new issue for any regression found (do not bury findings in the comment), and leave the checkboxes to the issue owner unless told otherwise.
Everything below was verified during the work, by the same session that did it — same tools, same URL forms, same environment, same mental model. This issue exists to break that circularity: run these checks in a fresh session with a diversified toolchain and report what survives.
Bias to test for: this session's verification monoculture was curl-based HTTP status/byte probes plus basename greps, and a single pinned venv (python 3.13, pandas 2.3.3, scipy 1.16.3) for every numeric claim;
scripts/build_audit.pywas run by the session itself for all four strict/dry-run measurements. Confirm reader-facing outcomes independently of all of that: open the published pages and notebooks in a browser, execute code rather than grepping it, use a different Python/pandas where a check involves parsing, and re-derive counts with your own parser rather than confirming the session's numbers.What landed (2026-08-18, all merged the same day)
jb clean . --htmlin ci+publish, 6ff5ab3), #375 (wave C2 repoint, 878b87a), #376 (wave C2 deletion, 0c96791), tagpublish-2026aug18(rerun of run 32087672065 after a 75-min hang on the texlive apt step; deploy had not run when cancelled)sources/dataBHS.matunder LFS, f42eeaf), #99 (flip all four to repointed, f09485c)1. Reader-facing outcomes
https://python-advanced.quantecon.org/_notebooks/five_preferences.ipynbdownloads, and executes end-to-end in a clean environment with nodataBHS.maton disk (Colab or local jupyter). Before this work the notebook calledloadmat('dataBHS.mat')against a file the site serves at 404, so it could not run. The session verified the URL swap by grep, never by executing the published notebook — this check is the unexercised surface./_notebooks/risk_aversion_or_mistaken_beliefs.ipynb(live FRED-shaped read from data-lectures) and/_notebooks/match_transport.ipynb— at minimum their data-read cells.risk_aversion_or_mistaken_beliefs.html,match_transport.html,five_preferences.html) render their data-driven figures — in particular five_preferences' consumption-growth histogram with two density curves (its figure was claimed shape-preserved through the loadmat→read_csv conversion).https://github.com/QuantEcon/data-lectures/raw/main/lectures/<f>serves 200 with sizes 27963 / 14365 / 10160 / 793 forfred_data.csv/acs_data_summary.csv/dataBHS.csv/test_pwt.csv, and a never-existed control path 404s.https://raw.githubusercontent.com/QuantEcon/lecture-python-advanced.myst/main/lectures/_static/lecture_specific/risk_aversion_or_mistaken_beliefs/fred_data.csvis 404, and the published site still serves/_static/.../fred_data.csvat 200 — expected under the settle policy until the next cache+publish cycle, and the distinction is the point: runtime reads were repointed before the blob left main, stale-serving clears later (re-audit on QuantEcon/workspace-lectures#40).2. Artifact integrity
lectures/dataBHS.csv(sha25613116a3d90ddc7f8b272b3ca903a136552147b21b8e9b3829472daa3d0d09c63) parses back bit-exactly fromsources/dataBHS.mat(sha25628c5f85286718e70b205f6a3fb269ebb49bd635194e2d0d488409b017be5e890) underfloat_precision='round_trip', and the lecture's 30-bin histogram ofc[1:]-c[:-1]has identical counts and edges under pandas' default parser. Use a pandas other than 2.3.3.sources/dataBHS.matis a real LFS object (pointer oid = the sha256 above), andgit check-attr filter -- sources/dataBHS.matprintslfs.lectures/<f>files are byte-identical to the copies the lectures read before migration: check against advanced.myst @ 878b87a^ paths and lecture-python-programming @ 55c87c9^ (git history, not the session's recorded hashes).3. Highest-value claim: fred_data.csv reproduces from live FRED byte-for-byte
Everything about this file's
committedbuilder status rests on it. Re-runbuilders/fred_data.py(pinned env per requirements.txt, then once more on a different pandas) and diff against the committed file. The claim's load-bearing details, each falsifiable: DFII5/DFII10 must be fetched with fredgraph'sfq=Monthly&fam=avgaggregation (the bare series is daily); fredgraph now serves headerobservation_datewhere the file saysDATE(the builder renames on read); the window is pinned 1953-04-01..2024-12-01. If the diff is non-empty, check whether FRED revised a value before concluding the builder is wrong — that distinction decides between fixing the builder and re-recordingintegrity.upstream.45a4fd41aeadf55072ea8e753c12dcb50ccb89bc34fb7eeb5e451ea0796811bcon separate days if possible (the session's three runs were minutes apart — stability over time is the unexercised margin).4. Records written
schemablocks match the measured bytes (row counts 861/351/236/8, the declared null structure — DFII pair 597 nulls each before 2003-01, zero nulls elsewhere), and eachintegrity.sha256matches the committed file.lectures/test_pwt.csv.yml's central negative claim: the committed values match no downloadable PWT vintage — re-derive for at least PWT 7.0 (pwt70_06032011version.zipmemberpwt70_w_country_names.csv) and PWT 6.3 (pwt63_nov182009version.zip): Argentina/Australia POP match 6.3 but cc/cg do not, and 7.0 differs on tcgdp/cc/cg for every row. The archive sha256s are in the manifest header; re-derive rather than trust.sources/README.md's dataBHS un-refetchability trail: tomsargent.com/source_code.html 404s, larspeterhansen.org lists no code/data for the 2009 JET paper, the article page shows no supplement, and a GitHub-wide code search fordataBHSfinds only QuantEcon-descended copies — withNEWQDATAas the search's positive control.5. Tracker consistency
migration.ymlparsed (never grep): 37 records, allstatus: repointed, zero landed/pending/final; the four new records cite Land wave C2 + Track D — the four remaining static datasets #98 and the repoint PRs #375/#612 with date 2026-08-18.CATALOG.mdregenerates with an empty diff.scripts/audit_annotations.ymlno longer contains entries forfred_data.csv,acs_data_summary.csv,test_pwt.csv, ordataBHS.mat— but does still contain the lecture-dp orphan entry foracs_data_summary.csvundercommitted_unreferenced:(deleting that one would have been a mistake; confirm it survived).6. Known blind spots
.pklvariant onorigin/hansenthis way).test_pwt.csvas an orphan (no pandas.md/polars.md lectures exist there). Confirm from its tree, and confirm the manifest's consumer list (8 entries, three translation repos × two files plus the source repo × two) against your own sweep..notebooksmirror self-heal claim:lecture-python-advanced.notebooks/{risk_aversion_or_mistaken_beliefs,five_preferences,match_transport}.ipynbon main each carry exactly onedata-lectures/raw/mainread and zerorefs/heads/loadmatresidue.7. Decisions and mechanisms settled today
risk_aversion_or_mistaken_beliefs.htmlandeggs_backus.pngat 200. Note the preview URL form: only the deploy-id-prefixedhttps://<id>--lustrous-melomakarona-3ee73e.netlify.appserves content; thedeploy-preview-N--form 404s everything including controls.c[1:] - c[:-1]misaligns on index and the figure silently changes; the merged cell usesdata[['c']].to_numpy()to keep (236,1). Execute both variants and confirm the Series variant is actually wrong (the session asserted but did not run the broken variant).test_pwt.csvdeletion is gated and was deliberately not done.8. Deliberately not done
test_pwt.csvdeletion from lecture-python-programming — gated on the three sync PR merges plus four site republishes; recorded in migration.yml's Track D note and PR #612's body.Where the reasoning lives
AGENTS.mdandPLAN.mdin this repo (URL forms, sources/ rules, repoint ordering); the work plan and its decisions on QuantEcon/workspace-lectures#45; the PR bodies of #98/#99 here and #374/#375/#376 in advanced.myst and #612 in lecture-python-programming; the re-audit checklist on QuantEcon/workspace-lectures#40.For the validator: work in a session that did not do this work. Do not use the tool named under "Bias to test for" except where a check explicitly says to run it. Re-derive counts rather than confirming them. Where a check can be run against a surface the original session did not exercise, do that too — the margin beyond the checklist is where regressions hide. Deliver: one comment on this issue with a per-item verdict (confirmed / confirmed with caveat / refuted / not completable, with evidence), a new issue for any regression found (do not bury findings in the comment), and leave the checkboxes to the issue owner unless told otherwise.