You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part of QuantEcon/meta#336 (design thread) — this issue documents the scaffolding and initial maintenance work to take this repo from its current state to the canonical data-lectures repository described in the draft convention (QuantEcon/QuantEcon.manual#108). The pilot (QuantEcon/meta#338) lands its migrations here, so the early items below are its prerequisites.
Checklist refreshed 2026-08-06 — boxes reflect verified state of main, not intent. PLAN.md remains the roadmap; this issue is the scaffolding subset of it.
Current state (audit, 2026-07-15 — superseded, kept for the record)
The repo holds 10 files for lecture-python-intro under a consumer-keyed layout (lecture-python-intro/static/, dynamic/, scripts/), has one manual refresh script (business_cycle.py), no .github/ directory at all (no CI, no automation, no scheduled refresh), no LFS, no per-dataset metadata, and is referenced by zero lectures — the sweep in #4 never happened.
Where it stands 2026-08-06: flat published tree, 10 datasets with manifests, all 10 repointed, .github/ with three workflows, Pages live and CORS-clean, branch protection with a required check. The audit dashboard is green against all 8 lecture repos: 41 static files, 35 orphans, 22 live-API lectures, 0 legacy refs.
Decide where non-published assets live (scripts/, per-dataset manifest.yml, tests) relative to the published tree — settled in Flatten the consumer-keyed tree into the published layout #10: scripts/ and manifest-schema.yml at the root, manifests as sidecars insidelectures/ named <full filename>.yml
One layout question from the flatten is still open: whether business_cycle's two .md provenance dumps belong in the published tree at all — #13. Both are live public URLs today, so this got more expensive since it was raised.
Storage
Per-path LFS via .gitattributes — large binaries only, small teaching files plain git (Setup Git LFS for large file support #1; avoid high_dim_data's blanket *.csv rule) — not started; note the upstream rule is *.csvand*.dta. Worth re-testing the premise: both SCF minis (31.3 MiB and 72.4 MiB) fit plain git under GitHub's 100 MiB limit, so LFS may only be needed for SCF_plus.dta (99.12 MiB), which has no lecture consumer
Verify access-control-allow-origin: * on the served files (pyodide/JupyterLite requirement, [Plan/Idea] Supporting WASM based introductory series meta#143) — verified 2026-08-06 on the default Pages domain: quantecon.github.io/data-lectures/lectures/lingcod_msy_recovery.csv returns access-control-allow-origin: *. The requirement is satisfied today and does not wait on the custom domain; re-verify once DNS moves
Monitor Pages soft limits (~1GB site, 100GB/month) — ongoing, nothing near the limit yet. Becomes live when the SCF files land
Automation (.github/)
Go-live guardrails, added ahead of the first repoint:
Branch protection on main — PRs required, force-push and deletion blocked (protect-main ruleset, 2026-07-17)
Consumed-file check as a required status check — .github/workflows/consumed-file-check.yml (2026-07-17)
PR validation: manifest schema check + per-dataset validate stage on every PR touching data — blocked on Builder architecture: four-stage template, traceback-clean failures, notebook policy (Phase 5) #14's three schema decisions (column patterns, known_nulls exact-vs-ceiling, dtype vocabulary). The dtype vocabulary has already drifted across the ten manifests, so this is no longer cost-free to defer
[~] Per-dataset manifest for the existing files — 10 of 19 done. The ten migrated datasets all have sidecars; the 8 static intro files in the published tree (mpd2020.xlsx, longprices.xls, chapter_3.xlsx, assignat.xlsx, dette.xlsx, fig_3.xlsx, caron.npy, nom_balances.npy) still have none, and neither does business_cycle_data.csv. This is the next tranche of work
License check per file before the repo is promoted as the canonical public home — policy settled 2026-08-06: licensing does not gate migration. Data already served publicly by the lectures migrates with its status recorded in the manifest; anything needing further thought is tracked for review before data.quantecon.org is promoted as a public open-data host. See the inventory issue and QuantEcon/workspace-lectures#20
Adoption (the step that stalled in Feb 2025)
[~] Repoint the consuming lectures as datasets land here (Add data and scripts #4's unticked box) — 10 of 41 done, all repointed in migration.yml. The remaining 31 are waved in PLAN.md
Two sequencing rules learned since and now recorded in PLAN.md: a dataset a sibling repo reads (every lecture-wasm case) must have that sibling repointed before the owning repo's copy is deleted, or the sibling 404s; and because the strict audit has no green state for a partially-repointed dataset, all consumers of one dataset must be repointed together. Sixteen of the thirty-one remaining datasets are multi-consumer, every one of them lecture-python-intro + lecture-wasm.
Part of QuantEcon/meta#336 (design thread) — this issue documents the scaffolding and initial maintenance work to take this repo from its current state to the canonical
data-lecturesrepository described in the draft convention (QuantEcon/QuantEcon.manual#108). The pilot (QuantEcon/meta#338) lands its migrations here, so the early items below are its prerequisites.Checklist refreshed 2026-08-06 — boxes reflect verified state of
main, not intent.PLAN.mdremains the roadmap; this issue is the scaffolding subset of it.Current state (audit, 2026-07-15 — superseded, kept for the record)
The repo holds 10 files for lecture-python-intro under a consumer-keyed layout (
lecture-python-intro/static/,dynamic/,scripts/), has one manual refresh script (business_cycle.py), no.github/directory at all (no CI, no automation, no scheduled refresh), no LFS, no per-dataset metadata, and is referenced by zero lectures — the sweep in #4 never happened.Where it stands 2026-08-06: flat published tree, 10 datasets with manifests, all 10
repointed,.github/with three workflows, Pages live and CORS-clean, branch protection with a required check. The audit dashboard is green against all 8 lecture repos: 41 static files, 35 orphans, 22 live-API lectures, 0 legacy refs.Identity
QuantEcon/data→data-lecturesonce the name settles in Proposal: a single canonical QuantEcon datasets repository, with a documented convention meta#336 (GitHub redirects preserve existing URLs, so this is non-breaking and can go first) — done 2026-07-16, old raw URLs verified to 200 through the redirectREADME.md: purpose, the routing rule, how to add a dataset, link to the manual page — done in Add PLAN.md, AGENTS.md and rewrite README (Phase 0 scaffolding) #9 (2026-07-16), together withPLAN.md(the phased roadmap for this issue) andAGENTS.mdLayout
lecture-python-intro/...) to the flat published tree in the draft convention — no folder implies ownership by a series — done in Flatten the consumer-keyed tree into the published layout #10 (2026-07-16)scripts/, per-datasetmanifest.yml, tests) relative to the published tree — settled in Flatten the consumer-keyed tree into the published layout #10:scripts/andmanifest-schema.ymlat the root, manifests as sidecars insidelectures/named<full filename>.ymlscripts/build_catalog.py→CATALOG.md, done in Add generated dataset catalog (CATALOG.md + build_catalog.py) #19One layout question from the flatten is still open: whether
business_cycle's two.mdprovenance dumps belong in the published tree at all — #13. Both are live public URLs today, so this got more expensive since it was raised.Storage
.gitattributes— large binaries only, small teaching files plain git (Setup Git LFS for large file support #1; avoid high_dim_data's blanket*.csvrule) — not started; note the upstream rule is*.csvand*.dta. Worth re-testing the premise: both SCF minis (31.3 MiB and 72.4 MiB) fit plain git under GitHub's 100 MiB limit, so LFS may only be needed forSCF_plus.dta(99.12 MiB), which has no lecture consumerhigh_dim_datacontent (Migratehigh-dim-datato this repo #2; coordinates with Lecture data: fix live hosting risks and bring high_dim_data into shape meta#337 for the consuming-lecture repoints and the branch-only SCF file) — not started; the branch-only file is resolved upstream, so the fold starts from a clean basePublishing
lfs: trueat checkout so LFS objects publish as bytes rather than pointer files — done 2026-07-17 in Add the generated data-audit dashboard (gh-pages): audit + migration tracker #21; dashboard at/, published tree at/lectures/data.quantecon.orgDNS + custom domain (an old NestJS box currently answers this name — see Proposal: a single canonical QuantEcon datasets repository, with a documented convention meta#336 discussion) — still blocked; re-checked 2026-08-06, the name is still a bare A record to52.64.86.66and HTTPS fails on a certificate mismatch. This is the one item with external lead time and it gates Phase 4 cutover: swap interim raw URLs → data.quantecon.org/lectures #15access-control-allow-origin: *on the served files (pyodide/JupyterLite requirement, [Plan/Idea] Supporting WASM based introductory series meta#143) — verified 2026-08-06 on the default Pages domain:quantecon.github.io/data-lectures/lectures/lingcod_msy_recovery.csvreturnsaccess-control-allow-origin: *. The requirement is satisfied today and does not wait on the custom domain; re-verify once DNS movesAutomation (
.github/)Go-live guardrails, added ahead of the first repoint:
main— PRs required, force-push and deletion blocked (protect-mainruleset, 2026-07-17).github/workflows/consumed-file-check.yml(2026-07-17).github/workflows/audit-dashboard.yml(Build a generated data-audit dashboard (gh-pages) across the 8 Python-family repos #20, closed 2026-08-06), with a drift-alarm inbox added in Give the drift alarm an inbox — assign a failure issue to mmcky #29Remaining:
known_nullsexact-vs-ceiling, dtype vocabulary). The dtype vocabulary has already drifted across the ten manifests, so this is no longer cost-free to deferscripts/business_cycle.pyto the four-stage contract — it still has no validate stageThe fetch-layer question these builders depend on is #26 (
pandas_datareaderis maintained again).Metadata backfill for existing holdings
manifest-schema.yml, revised by P1 (P1 pilot: add lingcod_msy_recovery.csv with its manifest #12) and exercised by nine more datasets sincempd2020.xlsx,longprices.xls,chapter_3.xlsx,assignat.xlsx,dette.xlsx,fig_3.xlsx,caron.npy,nom_balances.npy) still have none, and neither doesbusiness_cycle_data.csv. This is the next tranche of workfig_3.ods), recoverable from historydata.quantecon.orgis promoted as a public open-data host. See the inventory issue and QuantEcon/workspace-lectures#20Adoption (the step that stalled in Feb 2025)
repointedinmigration.yml. The remaining 31 are waved inPLAN.mdTwo sequencing rules learned since and now recorded in
PLAN.md: a dataset a sibling repo reads (everylecture-wasmcase) must have that sibling repointed before the owning repo's copy is deleted, or the sibling 404s; and because the strict audit has no green state for a partially-repointed dataset, all consumers of one dataset must be repointed together. Sixteen of the thirty-one remaining datasets are multi-consumer, every one of themlecture-python-intro+lecture-wasm.