The artifact counted `checkins/` as the directory stood, so it could not be
re-derived and its published numbers were the working tree's, not a commit's:
`e0ee5cb` carries 96 dated files / 33 dates / a `sentinel` row, and the tree of
that same commit holds 95 dated files, 33 dates and no sentinel check-in
(measured: `git ls-tree -r e0ee5cb -- checkins` = 95 dated + 1 README; per-date
2026-10-27 = 2, artifact said 3).
- `2026-10-27-checkin-census.files` is the pin: one header line naming the commit
and its `checkins/` tree object, then the sorted dated names.
- `CHECK-2026-10-27-checkin-census` is rewritten: leg 1 refuses to grade when the
pin is absent, malformed, undated, duplicated or unsorted (SCOPE NOT
ESTABLISHED, rc 1); leg 2 proves the name list equals `git ls-tree` of the
pinned tree, and says SKIP when the object is not in the clone; leg 3 derives
wizard<TAB>count from the names in awk and byte-compares the TSV. It never
reads today's directory and never runs the extractor.
- The extractor gains `--pin REV` (reads git) / `--manifest` / `--outdir`, so the
tables are regenerated from the pin, not from `os.scandir(live)`.
- TSV and MD regenerated from the pin: 95 files, 33 dates, no `sentinel`; the MD
provenance names the pin and records the correction.
Probes (`q88-probe.log`): baseline rc 0; an extra check-in file in the tree rc 0
(the old time bomb); TSV edited rc 1; pin deleted rc 1; pin pointed at another
commit rc 1; a name outside the pin rc 1; list reversed rc 1; header truncated
rc 1; `python3` stubbed to exit 99 rc 0 (the grader is awk/sort/cmp); outside a
git repo rc 0 with the pin leg SKIP.
139 B
139 B
| 1 | wizard | checkin_files |
|---|---|---|
| 2 | zephyrus | 51 |
| 3 | mercury | 18 |
| 4 | volt | 9 |
| 5 | merlin | 8 |
| 6 | cassian | 3 |
| 7 | zephyrus-wizards | 3 |
| 8 | cassian-q5-census | 1 |
| 9 | cassian-q5-recount | 1 |
| 10 | gemini | 1 |