mpd2020.xlsx: record the repoint (hold until the lecture PRs merge) - #41
Conversation
Flips the tracker once both consuming lectures read this repo, and records them in the manifest's consumers list so a future correction knows what to rebuild. Held as a draft deliberately. The strict audit has no green state for a dataset whose consumers have only partly moved, so this must not merge before QuantEcon/lecture-python-intro#823 and QuantEcon/lecture-wasm#52. Verified both ways: against the lecture repos' current main this fails with "marked repointed but consumers still read via ['own-repo', 'sibling']"; against their repoint branches it passes clean, and the orphan count falls 35 -> 34 as wasm's mirror copy goes. mpd2020 is the first dataset to exercise the two-repo rule end to end. intro's copy could not be deleted while wasm fetched that exact blob by URL, so the pair moved together and this flip trails both. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Both lecture PRs are merged — this is now the green side, and
|
| Branch | Strict audit |
|---|---|
| this PR | ✅ exit 0, orphans 35 → 34 |
main |
❌ mpd2020.xlsx: marked landed but some consumer already reads data-lectures |
So the inconsistency has flipped sides exactly as designed, and main is red until this merges. That is the unavoidable window: with two consuming repos there is no ordering of three PRs that keeps every one of them green, so the choice is which side is briefly wrong. Lectures-first is the right side to be wrong on — a stale tracker entry is a bookkeeping error, whereas flipping the tracker first would have meant published lectures reading a file that had already been deleted.
Worth merging promptly rather than leaving open: while the window is open, any push to main or the Monday 05:17 UTC scheduled run will fail the build, skip the Pages deploy, and open a drift issue via the #29 notifier. Nothing is broken for readers — the published dashboard simply freezes at the last green build — but the alarm will ring for a known, expected reason, which is exactly the noise that trains people to ignore it.
Lecture CI passed on both halves before merge, so the repoint is verified at the level that matters: lecture-wasm build-and-deploy 2m1s, lecture-python-intro test 11m0s and preview 8m21s — both lectures genuinely rendered against the new URL.
There was a problem hiding this comment.
Pull request overview
Records mpd2020.xlsx as fully repointed by updating the migration tracker and the dataset manifest’s consumers, and regenerates the catalog so downstream rebuild targets are discoverable.
Changes:
- Flip
mpd2020.xlsxinmigration.ymlfromlandedtorepointedand record the two lecture PR repoints. - Populate
lectures/mpd2020.xlsx.ymlconsumerswith the two consuming repos / lecture files. - Regenerate
CATALOG.mdto reflect the updated “Used by” column and counts.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| migration.yml | Marks mpd2020.xlsx as repointed and records the repoint PRs for both consuming lecture repos. |
| lectures/mpd2020.xlsx.yml | Adds the two consuming lectures to consumers so future corrections can identify rebuild targets. |
| CATALOG.md | Regenerated catalog reflecting the new mpd2020.xlsx consumer links and updated rollup counts. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Copilot caught mpd2020's Consumers comment still reading "Empty until the Track A repoint lands ... lectures read this file from intro's own copy" while sitting directly above a populated consumers list naming both repos reading it from here. It flatly contradicted the data beneath it. The mistake is structural rather than a typo: the comment described the field's CURRENT VALUE, so it was guaranteed to go stale the moment its own PR landed. The identical comment was in all eight manifests from #38, so it would have gone stale again on repoint sets 2 and 3 and been flagged both times. All eight now describe what the field MEANS, which stays true in either state: every lecture that reads this file from this repo, empty not implying the file is unused since it may still be read from a lecture repo's own copy -- which is exactly what a repoint moves -- and populated in the repoint PR alongside the migration.yml flip. Comments only. Verified: every manifest still parses, consumers values are untouched (mpd2020 two, the other seven zero), CATALOG.md regenerates byte-identical, and the strict audit stays green. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Draft on purpose — do not merge before QuantEcon/lecture-python-intro#823 and QuantEcon/lecture-wasm#52.
Flips
mpd2020.xlsxfromlandedtorepointedand records both consuming lectures in the manifest'sconsumerslist, so a future correction knows what to rebuild.Why this is a third PR rather than part of the other two
The strict audit has no green state for a partially-repointed dataset — it fails a record marked
landedonce any consumer reads this repo, and fails one markedrepointedwhile any consumer still does not. With two consuming repos there is no ordering of three PRs that keeps every one of them green on its own, so the tracker update trails the lectures and merges last.Verified in both directions rather than assumed:
main(PRs unmerged)mpd2020.xlsx: marked repointed but consumers still read via ['own-repo', 'sibling']repoint/long-run-growthbranchesThat second row is the state this PR merges into.
What this set proves
mpd2020.xlsxis the first dataset to exercise the two-repo rule end to end.lecture-wasmfetched intro's committed blob by URL, so intro's copy could not be deleted on its own without 404-ing the wasm build — silently, since nothing in intro would have signalled it. The pair therefore moved together and this flip trails both. Both rules are written up under "Repoint rules" inPLAN.md.Sixteen of the thirty-one remaining datasets have this same intro + wasm shape, so the pattern established here is the one the rest of Track A follows.
Part of #8 and #4.