Skip to content

Phase 4 cutover: swap interim raw URLs → data.quantecon.org/lectures #15

Description

@mmcky

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

Form Example When
Interim (in use now) https://github.com/QuantEcon/data-lectures/raw/main/lectures/<file> Every pilot repoint. Decoupled from hosting, survives the LFS switch, needs no DNS.
Final (this issue) https://data.quantecon.org/lectures/<filename> After GitHub Pages + the custom domain are live (PLAN Phase 4).

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: true at checkout), the data.quantecon.org custom 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.org is 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.org before 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:

  1. Greppable — every interim link matches one string. Regenerate the full inventory across the cloned consumer repos any time:
bin/foreach git grep -n 'data-lectures/raw/main/lectures/' -- '*.md' '*.ipynb' '*.py' '*.rst'
  1. Manifests — each dataset's consumers: list already records repo + file for 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/ with https://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>.png against the live site).

Checklist (grows as pilots land)

Part of PLAN Phase 4 / Phase 9. See QuantEcon/meta#338 (pilot) and QuantEcon/QuantEcon.manual#108 (convention).

Activity

  1. mmcky commented on Aug 6, 2026

    @mmcky
    ContributorAuthor

    The Phase 4 gate now has its own issue, with the DNS state verified

    Opened #37 to carry the data.quantecon.org question, 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 returns 503 on every hostname probed — data.quantecon.org, quantecon.org, api.quantecon.org — and Server: awselb/2.0 on 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, python and intro are all already CNAME → 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.csv returns access-control-allow-origin: * (verified 2026-08-06). So pyodide/JupyterLite is not waiting on this cutover, and PLAN.md Phase 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/' from workspace-lectures remains the source of truth, and it is where the repoint work is being run from.

  2. mmcky commented on Aug 12, 2026

    @mmcky
    ContributorAuthor

    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.org is deferred indefinitely in favor of the qeld consumer 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 becomes qeld.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's final status 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 to qeld.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.org is 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.

  3. mmcky commented on Aug 12, 2026

    @mmcky
    ContributorAuthor

    Closing as not-planned: #76 merged, recording D11 — the interim→final URL sweep this issue tracks will never run, because data.quantecon.org is 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.yml replacing this issue's checklist. #37 remains open as the deferred tracker should the domain ever be revisited.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions