From a4b9680243ab7f54f8e1868add713a3ab44361ed Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Mon, 7 Sep 2026 18:55:16 +1000 Subject: [PATCH] Record two repository facts the 2026-09-07 validation got wrong MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two boxes of the #127 validation checklist failed on facts about this repository that nothing wrote down. Recording them where a checklist author looks stops the next validation issue from asking for the impossible. **The git history is complete.** The validation refuted the pure-rename box on the grounds that this repository has a single root at `931d626` (#57) with 50 commits, so no commit for the 2026-07-16 flatten exists. That is a shallow clone reading its own depth as the repository's history: `931d626` is an ordinary commit with parent `c044b8c`, and it is precisely the 50th ancestor of `818811b`, the head the checklist was written against. `git clone --depth=50` there reproduces the signature exactly. The real root is `77ece40` (2025-02-09) and `git log --follow` does cross the flatten. What goes into the file is the true statement plus the one-line check that would have caught it. **The hash gate covers every recorded file.** `check_consumed_files.py` hashes anything with an `integrity.sha256` whether or not `consumers` is populated — the deliberate rekeying in #56 — so `consumed-files` goes red for any change to a published file's bytes. A checklist that wants the schema gate isolated must mutate a manifest, not the data. Also, beyond the issue's scope but in the same family and verified the same way: the repo map said "41 datasets, 41 manifests", which has been three short since #114 landed the business_cycle set on 2026-09-01. The tree holds 44 of each. Documentation only; no code, no manifest fields, no data bytes. Closes #138. Co-Authored-By: Claude Opus 5 (1M context) --- AGENTS.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/AGENTS.md b/AGENTS.md index 7aa0934..16b3b56 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -174,7 +174,8 @@ The generated dashboard (`scripts/build_audit.py`, [#20](https://github.com/Quan ``` lectures/ # the published tree — flat, live on Pages; read via raw URLs # today, qeld.url() once the package ships (PLAN-QELD-PACKAGE.md) - # 41 datasets, 41 manifests (complete since 2026-09-01). + # 44 datasets, 44 manifests (complete since 2026-09-01; + # the business_cycle set added three on 2026-09-01, #114). # Manifests are sidecars: .yml builders/ # one builder per published dataset — NOT published # builders/.py builds lectures/. @@ -199,3 +200,7 @@ AGENTS.md # this file The Feb 2025 consumer-keyed layout (`lecture-python-intro/{static,dynamic,scripts}/`) was flattened into this tree on 2026-07-16, while nothing referenced the repo. **That freedom is now spent — the repo is live.** The first repoint merged on 2026-07-17 (P1: `msy_fishery` in lecture-python-intro reads `lectures/lingcod_msy_recovery.csv` from `raw/main`), so every move or rename in `lectures/` is a breaking change for a live lecture build. Treat published filenames as an API: corrections in place, new vintages under new names, and check `consumers` before touching anything. Enforced by the `protect-main` ruleset (PRs only, no force-push, and the `consumed-files` check is **required** — a PR that breaks a consumed file cannot merge). + +**The git history is complete — it does not begin at [#57](https://github.com/QuantEcon/data-lectures/pull/57).** The root commit is `77ece40` ("Initial commit", 2025-02-09) and `main` carried 104 commits at `47017ea` on 2026-09-07, so the Feb 2025 migration from `QuantEcon/data` (`c0adb7a`) and the 2026-07-16 flatten ([#10](https://github.com/QuantEcon/data-lectures/pull/10), `52dbb89`) are both in git, and `git log --follow` crosses them. A clone reporting a **single root at `931d626` with 50 commits** is shallow, not authoritative: `git clone --depth=50` at `818811b` reproduces that signature exactly, because a shallow boundary hides its parents and so is indistinguishable from a root. Run `git rev-parse --is-shallow-repository` before concluding history is missing — the 2026-09-07 validation did not, and refuted a checklist box on the artefact. + +**`check_consumed_files.py` hashes every file whose manifest records an `integrity.sha256`, with or without `consumers`.** That is the deliberate rekeying in [#56](https://github.com/QuantEcon/data-lectures/pull/56) — manifests land ahead of their repoints, so keying the hash on `consumers` made the one PR that introduces new bytes the one PR that never verified them. The consequence for a validation checklist is that `consumed-files` goes red for **any** change to a published file's bytes: measured on [#130](https://github.com/QuantEcon/data-lectures/pull/130), a manifest-only mutation left it green with only `validate` red, while appending a column to `gdp_growth_annual.csv` turned both red. A check that wants the schema gate isolated must mutate a manifest, not the data.