Repository navigation
Phase 4 cutover: swap interim raw URLs → data.quantecon.org/lectures #15
Description
Activity
The Phase 4 gate now has its own issue, with the DNS state verified
Opened #37 to carry the
data.quantecon.orgquestion, since it is the only piece of this programme with external lead time and it should be in flight rather than discovered as a blocker when the sweep is otherwise ready.The finding worth surfacing here: the name resolves to a bare A record at
52.64.86.66, which is an AWS Elastic Load Balancer with no healthy targets. It returns503on every hostname probed —data.quantecon.org,quantecon.org,api.quantecon.org— andServer: awselb/2.0on both the HTTP redirect and the HTTPS response. So the service it fronted is already gone; what is left is an empty load balancer still holding the DNS name. That is a much easier decommission conversation than "is this box still in use".The target configuration is not novel either:
www,pythonandintroare all alreadyCNAME → quantecon.github.io, so this is the same change made a fourth time.One correction to this issue's framing while I am here. The gate section says CORS must be verified before the swap, which is right, but the requirement is already satisfied on the current host —
quantecon.github.io/data-lectures/lectures/lingcod_msy_recovery.csvreturnsaccess-control-allow-origin: *(verified 2026-08-06). So pyodide/JupyterLite is not waiting on this cutover, andPLAN.mdPhase 4's CORS box is now ticked. Re-verify on the new host after the swap, but it is not an open risk today.The recipe and the derivable-inventory rule in this issue stand unchanged —
bin/foreach git grep -n 'data-lectures/raw/main/lectures/'fromworkspace-lecturesremains the source of truth, and it is where the repoint work is being run from.Superseded, 2026-08-12 — the sweep this issue tracks will not run in this form
Decision recorded in PLAN-QELD-PACKAGE.md §2.2 (D11) via #76:
data.quantecon.orgis deferred indefinitely in favor of theqeldconsumer package (#65), so there is no interim→final URL swap. The direct raw forms are now standing, not interim, and the terminal state for a dataset is qeld adoption — each code read becomesqeld.url('<filename>'), swept by win in qeld Q6–Q7 (#66), with the §4.1 carve-outs (prose links,{download}targets, URL-is-the-lesson reads) keeping the direct form permanently.migration.yml'sfinalstatus is redefined accordingly in #76.What this issue got right transfers: the derivable-inventory rule (grep + manifests, never a hand-kept list) is exactly how the qeld sweep will enumerate its call sites, and the qeld plan's call-site audit (
.dev/qeld/callsites.yml) is that inventory's successor. The gate logic transfers too — a lecture switches toqeld.url()only after the package resolves that key correctly for its runtime, which is what the Q5/Q6 pilot checklists exist to prove.Recommend closing as not-planned once #76 merges, pointing at #65/#66 — the P1/P2 checklist items here are already covered by the call-site worklist there. If
data.quantecon.orgis ever revived (#37 stays open as the deferred tracker), the sweep it would trigger is a qeld constant bump, not a lecture edit — which is rather the point.- added a commit that references this issue
on Aug 12, 2026 Closing as not-planned: #76 merged, recording D11 — the interim→final URL sweep this issue tracks will never run, because
data.quantecon.orgis deferred indefinitely and the terminal state is qeld adoption instead (see the comment above for the full mapping). The sweep's successors: qeld Q6–Q7 in PLAN-QELD-PACKAGE.md, tracked through #65/#66, with the call-site worklist at.dev/qeld/callsites.ymlreplacing this issue's checklist. #37 remains open as the deferred tracker should the domain ever be revisited.
Tracks the one-time swap of every interim data URL to the final
data.quantecon.org/lectures/form, once Phase 4 (Publishing) is live. Opened now, while the first interim link is still on a single unmerged branch, so the cutover is inventoried from the start rather than reconstructed later.The two URL forms
https://github.com/QuantEcon/data-lectures/raw/main/lectures/<file>https://data.quantecon.org/lectures/<filename>The interim→final swap is a mechanical find-replace that changes zero lecture behaviour — the bytes served are the same, only the host differs. That is the whole point of the decoupled interim form.
The gate — do not start the swap until this is true
Phase 4 must be live first: GitHub Pages deploying the
lectures/tree (lfs: trueat checkout), thedata.quantecon.orgcustom domain resolving to Pages, and CORS (access-control-allow-origin: *) verified for pyodide/JupyterLite. Phase 4 is itself blocked on a DNS decision:data.quantecon.orgis currently a bare A record →52.64.86.66(an AWS Sydney box, HTTPS timing out) that must be confirmed decommissionable before the record is repointed. See PLAN.md Phase 4.Swapping a lecture to
data.quantecon.orgbefore that host serves the file reintroduces exactly the 404 this project spent effort removing. Final URL second, never first.Source of truth — do not hand-maintain a URL list
The inventory is derivable, so it is never a stale hand-kept list:
consumers:list already recordsrepo+filefor everything that points here (required on every repoint). The grep and the manifests should agree; a mismatch is the signal something was repointed without updating its manifest.The swap recipe (per consumer file, once the gate is open)
Replace
https://github.com/QuantEcon/data-lectures/raw/main/lectures/withhttps://data.quantecon.org/lectures/in each file below, one PR per consumer repo, then rebuild and confirm the page's figure hashes are unchanged (the P1 method: diff_images/<sha>.pngagainst the live site).Checklist (grows as pilots land)
lingcod_msy_recovery.csv→lecture-python-introlectures/msy_fishery.md— interim link live on main (P1 pilot: read lingcod data from data-lectures lecture-python-intro#792 merged 2026-07-17); awaiting final-URL swaprealwage.csv/countries.csv/employ.csv→lecture-python-programming+lecture-python.mystlectures/pandas_panel.md— interim links live on both mains (P2 pilot: read pandas_panel data from data-lectures lecture-python-programming#578 + P2 pilot: read pandas_panel data from data-lectures lecture-python.myst#973 merged 2026-07-17); awaiting final-URL swapPart of PLAN Phase 4 / Phase 9. See QuantEcon/meta#338 (pilot) and QuantEcon/QuantEcon.manual#108 (convention).