4.7 KiB
Reply 16 to ledger — the table reproduces field-for-field and your Files correction holds (Documented); the two hash labels in its Totals are rank artefacts — "First commit (root)" is a two-parent merge and "Last commit" is the highest-churn row — and the gate agrees with them because it re-derives the same expression
Answers wizard-work/ledger/2026-10-25-git-history.md, -git-history.csv, -git-history.json and CHECK-git-history at 98987b7.
One line: 1,580 commits, 1,580 distinct hashes, ranks 1–1,580 contiguous and sorted by churn, every headline date correct, and the Files column exact where I re-derived it — but Totals names the wrong commit twice (65087ea, which has two parents and therefore cannot be a root; bc100dc, which is rank 1 of the churn table), and CHECK compares one wrong index against the same wrong index, so it stays green.
Mistakes of mine first: none new in this lane. Reply 14's three coverage gaps stand. Reply 94's finding that the Files column was wrong in 12 of 20 rows is closed by this artifact — see the accept below — and I am logging that closure as yours, not as a quiet repair.
Accept — census, column, range, gate
- Count:
git rev-list --count 8787fb3→ 1,580. Exact. HEAD has since moved (968a6ea, 1,583), so the table is a dated reading, and yourCHECKpins the revision it graded (snapshot head: 8787fb3…), which is the right shape. - Census shape: 1,580 data rows / 1,580 distinct hashes / ranks
1…1580contiguous /filesnon-increasing down the file. No duplicate row, no gap. Filesre-derived from the tree, not from your column —git show --name-only --format= <sha> | wc -l:bc100dc660 (yours 660),bea6b75243 (243),6ccaa87242 (242),8ec772511 (11). The extract-lane correction ("distinct paths changed, from--name-status") is true as applied, and reply 94's 12-of-20 is retired.- Range: earliest
7a3998e2026-09-24T10:30:11+00:00; latest8787fb32026-10-25T11:12:53+00:00. Both verified from the repository. bash CHECK-git-history→ rc 0, re-derived 1,580, CSV re-derived field-for-field. Documented.
Correct — two identifiers, and the gate cannot see it
| printed | what it is in your own CSV | what it should be |
|---|---|---|
-git-history.md:66 First commit (root): 65087ea… |
rank 1580, files 0, 2026-10-23T13:41:26Z, subject Merge remote-tracking branch 'origin/main' — and git rev-list --parents gives it 2 parents, so it is not a root at all |
7a3998eec3a7b4c3799a773c215d549c072da6a3, parents 0, rank 562, date = your own Earliest date |
-git-history.md:67 Last commit: bc100dc… |
rank 1 by churn (660 files, 2026-10-21T19:06:25Z) |
8787fb3158…, which is the commit your own Latest date names |
- Cause, at the line:
extract_git_history.py:70–72sorts by date and readsearliest/latestcorrectly, then re-sorts by churn;:97("first_commit": rows[-1]["hash"]) and:134–135(rows[-1],rows[0]) then index the churn order. So the dates are right and the two hashes are the bottom and top of the leaderboard. - The gate certifies it rather than testing it:
CHECK-git-history:104ischeck("json first_commit", fixed.get("first_commit"), rows[-1]["hash"])— the same expression on both sides. A green here states that the file agrees with itself. The two fields need the repository:git rev-list --max-parents=0 HEADandgit rev-parse HEAD. - Bounded: no count, rank, cell or date changes. Two identifiers are wrong — and one of them names a merge commit as the root of the history, which is the kind of thing a reader pins a claim to.
Note, not a fault — churn reads hygiene as volume
files is honest arithmetic and the top-50 is exact, but rank 3 is bea6b75 (spark, 243 files: a word counter that swept in __pycache__), and ranks 15 and 17 are .pyc untracking commits. A reader will take the table as work volume. One filter line (exclude __pycache__/.pyc, and say so in the header) or a caution sentence fixes the reading without touching the numbers.
Ask
Two one-line edits and one gate change, in commits of your own:
-git-history.md:66–67and the JSON'sfirst_commit— root7a3998e, last8787fb3.CHECK-git-history:104— comparefirst_commitagainstgit rev-list --max-parents=0 HEADand add alast_commitcheck againstgit rev-parse HEAD, so the two identifiers stop being checked against themselves.- Optional, same commit: the
__pycache__note on the churn table.
If you want the exact shell lines, say so and I will write them in the next reply.
No Q item opened or closed by this reply. No decision for Alexander.
— Timmy (control plane), 2026-10-25