ledger: file-tree census gate grades the checkout it is run in (Q69 ledger leg)
verify.sh no longer cds to /root/troupe-standup; repo root comes from $0 /
__file__. Paths are read with ls-tree -z (raw), the census is pinned to the
commit it describes (repo_census.pin), and the verifier grades that pin, so a
later commit does not redden the gate. New committed extractor regenerates the
three TSVs; artifacts re-derived from 716c3b3 (5311 files, 217 dirs, 34 exts).
This commit is contained in:
1 parent
46ba684047
commit
a2a5f6ee3a
8 files changed
+5777
-3568
No files matched your search
@@ -1,40 +1,63 @@
|
||||
# ledger: File-tree census & extension census of the troupe repo
|
||||
|
||||
## Artifact
|
||||
Inventory extracted from the troupe repository at its HEAD commit
|
||||
(`363c608555c3995f8b015bb80a24e0b4c6bb8b68`), branch `main`, run in
|
||||
`/root/troupe-standup`. Two summary tables plus a full file listing:
|
||||
Inventory of the tracked tree at the pinned commit `716c3b3`
|
||||
(`716c3b36e027af35df5e3630af28b99decd0f2da`, branch `main`). Two summary tables
|
||||
plus a full listing and the pin they were derived from:
|
||||
|
||||
| file | columns | rows | meaning |
|
||||
|---|---|---|---|
|
||||
| `repo_tree.tsv` | rank, directory, file_count | 150 (header + 149 directories) | tracked files grouped by directory; root files under `(root)` |
|
||||
| `repo_exts.tsv` | rank, extension, file_count | 30 (header + 29 extensions) | tracked files grouped by lowercased extension; suffix-less files under `(none)` |
|
||||
| `repo_files.tsv` | rank, path | 3354 | every tracked file, full path, one row |
|
||||
| `repo_tree.tsv` | rank, directory, file_count | 218 (header + 217 directories) | tracked files grouped by directory; root files under `(root)` |
|
||||
| `repo_exts.tsv` | rank, extension, file_count | 35 (header + 34 extensions) | tracked files grouped by lowercased extension; suffix-less files under `(none)` |
|
||||
| `repo_files.tsv` | rank, path | 5311 | every tracked file at the pin, repo-relative path, one row |
|
||||
| `repo_census.pin` | commit, files | 2 lines | the immutable commit graded and the path count |
|
||||
|
||||
A census cannot contain itself: `extract_tree_census.py` and `repo_census.pin`
|
||||
are one commit newer than the tree they describe, so they are the two paths
|
||||
`repo_files.tsv` does not list. The verifier drops them from an export walk for
|
||||
the same reason.
|
||||
|
||||
## Method
|
||||
- **Source of truth:** `git ls-tree -r --name-only HEAD` in `/root/troupe-standup`.
|
||||
- **Source of truth:** `git rev-parse HEAD` for the pin, then
|
||||
`git ls-tree -r -z --name-only <pin>` for the paths, run in the repository
|
||||
root derived from `extract_tree_census.py`'s own `__file__`. `-z` is
|
||||
deliberate: without it git's quoted rendering puts an escaped blob into the
|
||||
TSV instead of a path (the fault recorded in
|
||||
`replies/2026-10-25-to-zephyrus-101.md` §Fault 2).
|
||||
- **Regenerate:** `python3 wizard-work/ledger/extract_tree_census.py` (pins the
|
||||
commit that is checked out).
|
||||
- **Directory grouping:** `os.path.dirname` of each path; paths with no parent
|
||||
grouped under `(root)`.
|
||||
- **Extension grouping:** suffix after the last `.`, lowercased; paths with no
|
||||
suffix under `(none)`.
|
||||
- **Ordering:** `file_count` descending, then name ascending.
|
||||
- **Ordering:** `file_count` descending, then name ascending; `repo_files.tsv`
|
||||
is sorted by path.
|
||||
|
||||
## Evidence (measured from a fresh recompute)
|
||||
- Total tracked files: **3354** (confirmed by `git ls-files | wc -l` at HEAD).
|
||||
- Directory groups: **149**; extension groups: **29**; every group sum equals 3354.
|
||||
## Evidence (measured from a fresh recompute, 2026-11-05)
|
||||
- Total tracked files at the pin: **5311**; directory groups **217**; extension
|
||||
groups **34**; every group sum equals 5311.
|
||||
- Top directories: `wizard-work/sphinx/archive-memgallery-2026-10-21/figures`
|
||||
(635), `wizard-work/spark` (372), `replies` (366).
|
||||
- Top extensions: `md` (829), `png` (803), `py` (653), `txt` (551),
|
||||
`json` (231).
|
||||
- SHA-256 (content): repo_tree.tsv `352423e46b965828…`,
|
||||
repo_exts.tsv `c442c841a0db95d3…`, repo_files.tsv `8e6a87f7f5f0d13c…`.
|
||||
(635), `wizard-work/ledger` (589), `wizard-work/spark` (560),
|
||||
`wizard-work/sol` (489), `replies` (434).
|
||||
- Top extensions: `py` (1424), `md` (1298), `png` (804), `txt` (626),
|
||||
`json` (426).
|
||||
- SHA-256 (content): repo_tree.tsv `e33ca81f335092c5…`,
|
||||
repo_exts.tsv `38c37ac14e94ba15…`, repo_files.tsv `936e3ef0de8b4c99…`.
|
||||
|
||||
## Verification (the verdict gate)
|
||||
`verify_tree_census.py` independently re-enumerates the repo from git and diffs
|
||||
the recomputed tables field-for-field against the committed artifacts.
|
||||
Exit code 0 = artifact matches a fresh source recompute (all checks passed);
|
||||
nonzero = mismatch.
|
||||
`verify_tree_census.py` independently re-enumerates the pinned commit and diffs
|
||||
the recomputed tables field-for-field against the committed artifacts: path
|
||||
count, rank sequences, exact path set, both groupings, group sums, and no
|
||||
control character in a path. Exit code 0 = artifact matches the pin; 1 =
|
||||
mismatch; 2 = could not enumerate.
|
||||
|
||||
```
|
||||
cd /root/troupe-standup && ./wizard-work/ledger/verify.sh
|
||||
bash wizard-work/ledger/verify.sh # from anywhere; it locates the repo from $0
|
||||
```
|
||||
|
||||
The gate derives the repo root from `$0`/`__file__` and never names a host
|
||||
path, so it grades the checkout or `git archive` export it is invoked from.
|
||||
Inside an export of the pinned commit (no `.git`) it walks the export's files
|
||||
instead of asking git, which is the Q69 test: same verdict, no host present.
|
||||
Because the subject is the pin rather than `HEAD`, a later commit does not
|
||||
redden the gate; regenerating the census moves the pin deliberately.
|
||||
@@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Regenerate the ledger file-tree census TSVs from a pinned commit.
|
||||
|
||||
Writes, beside this script:
|
||||
repo_tree.tsv rank, directory, file_count tracked files grouped by directory
|
||||
repo_exts.tsv rank, extension, file_count tracked files grouped by lowercased extension
|
||||
repo_files.tsv rank, path every tracked file, one row
|
||||
repo_census.pin the commit and path count this census describes
|
||||
|
||||
The subject is the commit checked out when this runs (`git rev-parse HEAD`), so
|
||||
the census is a stable snapshot: the verifier grades it against that immutable
|
||||
commit, not against a moving HEAD, and a later commit does not redden the gate.
|
||||
A census cannot contain itself -- the files this run lands, including the pin,
|
||||
are one commit newer than the tree it describes; that is stated in the README.
|
||||
|
||||
The repository root is derived from __file__, never a hardcoded host path.
|
||||
Paths are read with `git ls-tree -r -z`, raw rather than through git's quoted
|
||||
rendering, which is how an escaped blob once landed in repo_files.tsv.
|
||||
|
||||
Ordering is file_count descending then name ascending; repo_files.tsv is sorted
|
||||
by path. Exit codes: 0 wrote all four files, 2 could not read the tree.
|
||||
"""
|
||||
from pathlib import Path
|
||||
|
||||
import csv
|
||||
import subprocess
|
||||
import sys
|
||||
from collections import Counter
|
||||
|
||||
HERE = Path(__file__).resolve().parent
|
||||
REPO = HERE.parents[1]
|
||||
PIN_NAME = "repo_census.pin"
|
||||
|
||||
|
||||
def git(repo, *args):
|
||||
proc = subprocess.run(["git", "-C", str(repo)] + list(args),
|
||||
capture_output=True)
|
||||
if proc.returncode != 0:
|
||||
print("FATAL git %s rc=%d: %s" % (" ".join(args), proc.returncode,
|
||||
proc.stderr.decode("utf-8", "replace").strip()))
|
||||
return None
|
||||
return proc.stdout
|
||||
|
||||
|
||||
def main():
|
||||
commit_out = git(REPO, "rev-parse", "HEAD")
|
||||
if commit_out is None:
|
||||
return 2
|
||||
commit = commit_out.decode().strip()
|
||||
|
||||
raw = git(REPO, "ls-tree", "-r", "-z", "--name-only", commit)
|
||||
if raw is None:
|
||||
return 2
|
||||
paths = [p for p in raw.decode("utf-8", "surrogateescape").split("\0") if p]
|
||||
if not paths:
|
||||
print("FATAL commit %s listed no files" % commit)
|
||||
return 2
|
||||
|
||||
dir_counts = Counter()
|
||||
ext_counts = Counter()
|
||||
for p in paths:
|
||||
d = str(Path(p).parent).replace("\\", "/")
|
||||
dir_counts[d if d != "." else "(root)"] += 1
|
||||
ext = Path(p).suffix.lstrip(".").lower() or "(none)"
|
||||
ext_counts[ext] += 1
|
||||
|
||||
tree_rows = sorted(dir_counts.items(), key=lambda kv: (-kv[1], kv[0]))
|
||||
ext_rows = sorted(ext_counts.items(), key=lambda kv: (-kv[1], kv[0]))
|
||||
file_rows = [(p,) for p in sorted(paths)]
|
||||
|
||||
def write_tsv(name, header, rows):
|
||||
with open(HERE / name, "w", newline="", encoding="utf-8") as f:
|
||||
w = csv.writer(f, delimiter="\t")
|
||||
w.writerow(header)
|
||||
for i, row in enumerate(rows, 1):
|
||||
w.writerow([i] + list(row))
|
||||
print("wrote %s: %d data row(s)" % (name, len(rows)))
|
||||
|
||||
write_tsv("repo_tree.tsv", ["rank", "directory", "file_count"], tree_rows)
|
||||
write_tsv("repo_exts.tsv", ["rank", "extension", "file_count"], ext_rows)
|
||||
write_tsv("repo_files.tsv", ["rank", "path"], file_rows)
|
||||
(HERE / PIN_NAME).write_text("commit %s\nfiles %d\n" % (commit, len(paths)))
|
||||
|
||||
print("pinned commit %s: %d files, %d directories, %d extensions"
|
||||
% (commit, len(paths), len(tree_rows), len(ext_rows)))
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
@@ -0,0 +1,2 @@
|
||||
commit 716c3b36e027af35df5e3630af28b99decd0f2da
|
||||
files 5311
|
||||
@@ -1,30 +1,35 @@
|
||||
rank extension file_count
|
||||
1 md 832
|
||||
2 png 803
|
||||
3 py 656
|
||||
4 txt 551
|
||||
5 json 231
|
||||
6 sh 57
|
||||
7 html 55
|
||||
8 csv 43
|
||||
9 svg 31
|
||||
10 tsv 18
|
||||
11 (none) 16
|
||||
12 age 16
|
||||
13 xml 12
|
||||
14 log 5
|
||||
15 pdf 4
|
||||
16 sha256 4
|
||||
17 jsonl 3
|
||||
18 mp3 3
|
||||
19 c 2
|
||||
20 diff 2
|
||||
21 jpg 2
|
||||
22 check 1
|
||||
23 dl 1
|
||||
24 goyiwz 1
|
||||
25 gz 1
|
||||
26 md5 1
|
||||
27 "py""" 1
|
||||
28 rc 1
|
||||
29 yaml 1
|
||||
1 py 1424
|
||||
2 md 1298
|
||||
3 png 804
|
||||
4 txt 626
|
||||
5 json 426
|
||||
6 (none) 180
|
||||
7 csv 155
|
||||
8 sh 99
|
||||
9 tsv 90
|
||||
10 html 71
|
||||
11 svg 31
|
||||
12 xml 24
|
||||
13 age 16
|
||||
14 pdf 16
|
||||
15 jsonl 11
|
||||
16 log 7
|
||||
17 sha256 6
|
||||
18 files 3
|
||||
19 mp3 3
|
||||
20 awk 2
|
||||
21 c 2
|
||||
22 check 2
|
||||
23 diff 2
|
||||
24 jpg 2
|
||||
25 md5 2
|
||||
26 0 1
|
||||
27 dl 1
|
||||
28 goyiwz 1
|
||||
29 gz 1
|
||||
30 out 1
|
||||
31 pin 1
|
||||
32 rc 1
|
||||
33 test 1
|
||||
34 yaml 1
|
||||
|
+5311
-3354
File diff suppressed because it is too large.
Load diff
+216
-148
@@ -1,150 +1,218 @@
|
||||
rank directory file_count
|
||||
1 wizard-work/sphinx/archive-memgallery-2026-10-21/figures 635
|
||||
2 wizard-work/spark 372
|
||||
3 replies 366
|
||||
4 wizard-work/sphinx/longctx-needle-grounding-2026-10-22/chunks 229
|
||||
5 wizard-work/ledger 165
|
||||
6 wizard-work/forge 104
|
||||
7 wizard-work/sol 99
|
||||
8 checkins 92
|
||||
9 wizard-work/beam 78
|
||||
10 recoveries 63
|
||||
11 wizard-work/volt 60
|
||||
12 wizard-work/sphinx/longctx-figure-grounding-2026-10-21/figures 50
|
||||
13 wizard-work/sphinx/longctx-figure-grounding-2026-10-21/ocr 50
|
||||
14 wizard-work/sphinx/longctx-figure-grounding-2026-10-21/renders 50
|
||||
15 wizard-work/quill 35
|
||||
16 tools 26
|
||||
17 wizard-work/sphinx/arxiv-digest-verified-2026-10-25 23
|
||||
18 wizard-work/sphinx/archive-gemini25-2026-10-24/figures 22
|
||||
19 wizard-work/sphinx/archive-memgallery-2026-10-21 22
|
||||
20 wizard-work/sphinx/archive-memlens-2026-10-22 22
|
||||
21 wizard-work/sphinx/archive-mm-prm-2026-10-22/chunks 18
|
||||
22 access 17
|
||||
23 wizard-work/null 17
|
||||
24 wizard-work/sphinx/archive-mm-prm-2026-10-22/tables 17
|
||||
25 career-lane 16
|
||||
26 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/sources 16
|
||||
27 wizard-work/sphinx/phonon-reel-audio-archive-2026-10-21 16
|
||||
28 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/captions 15
|
||||
29 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/corpus 15
|
||||
30 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/text 15
|
||||
31 wizard-work/sphinx/archive-transformer-pdf-modality-2026-10-23/text 15
|
||||
32 wizard-work/sphinx/archive-transformer-pdf-modality-2026-10-23/text-layout 15
|
||||
33 wizard-work/sphinx/archive-arxiv-lc-2026-10-22 14
|
||||
34 wizard-work/sphinx/archive-remember-r1-figures-2026-10-23 14
|
||||
35 wizard-work/sphinx/longctx-arxiv-archive-2026-10-20 13
|
||||
36 wizard-work/sphinx/longctx-citations-2026-10-21 13
|
||||
37 wizard-work/sphinx/archive-kvcc-reconcile-2026-10-23/sources 12
|
||||
38 wizard-work/sphinx/archive-remember-r1-figures-2026-10-23/figures 12
|
||||
39 wizard-work/sphinx/longctx-arxiv-archive-2026-10-20/corpus 12
|
||||
40 wizard-work/sphinx/longctx-citations-2026-10-21/sources 12
|
||||
41 wizard-work/sphinx/longctx-niah-bench-2026-10-21/corpus 12
|
||||
42 wizard-work/null/jsonpatch 11
|
||||
43 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23 11
|
||||
44 wizard-work/sphinx/longctx-figure-grounding-2026-10-21 11
|
||||
45 wizard-work/sphinx/longctx-niah-bench-2026-10-21 11
|
||||
46 wizard-work/sphinx/archive-gemini25-2026-10-24 10
|
||||
47 wizard-work/sphinx/archive-transformer-pdf-modality-2026-10-23 10
|
||||
48 wizard-work/sphinx/longctx-needle-grounding-2026-10-22 10
|
||||
49 wizard-work/sphinx/longctx-needle-grounding-2026-10-22/tools 10
|
||||
50 (root) 9
|
||||
51 harness-reflections 9
|
||||
52 wizard-work/null/base32c 9
|
||||
53 wizard-work/sphinx 9
|
||||
54 wizard-work/sphinx/archive-lcmm-metadata-2026-10-25 9
|
||||
55 docs 8
|
||||
56 wizard-work/sphinx/archive-kvcc-reconcile-2026-10-23 8
|
||||
57 wizard-work/sphinx/archive-lc-coverage-crossindex-2026-10-23 8
|
||||
58 wizard-work/sphinx/archive-lc-coverage-crossindex-2026-10-23/raw 8
|
||||
59 wizard-work/ledger/2026-10-24-countries-gdp-nominal 7
|
||||
60 wizard-work/ledger/2026-10-25-git-history-live-b1edd09 7
|
||||
61 wizard-work/ledger/2026-10-25-head-20-commits 7
|
||||
62 wizard-work/sphinx/archive-mmlongcite-2026-10-25 7
|
||||
63 wizard-work/sphinx/figure-locator-llama3-2026-10-24 7
|
||||
64 wizard-work/sphinx/longctx-needle-grounding-2026-10-22/raw 7
|
||||
65 wizard-work/sphinx/longctx-needle-grounding-2026-10-22/text 7
|
||||
66 wizard-work/null/diffkit 6
|
||||
67 wizard-work/null/schedkit 6
|
||||
68 wizard-work/sphinx/archive-agentic-memory-5paper-dossier-2026-10-25 6
|
||||
69 wizard-work/sphinx/archive-gutenberg/raw 6
|
||||
70 wizard-work/sphinx/archive-gutenberg/txt 6
|
||||
71 wizard-work/sphinx/archive-mm-prm-2026-10-22 6
|
||||
72 wizard-work/sphinx/archive-transformer-pdf-modality-2026-10-23/figures 6
|
||||
73 wizard-work/sphinx/longcontext-archive-2026-10-21/raw 6
|
||||
74 wizard-work/sphinx/longctx-figure-grounding-2026-10-21/figverify-egmmujuw 6
|
||||
75 wizard-work/sphinx/phonon-reel-audio-archive-2026-10-21/spectra 6
|
||||
76 wizard-work/sphinx/transformer-archive 6
|
||||
77 wizard-work/ledger/2026-10-22-top-ml-repos 5
|
||||
78 wizard-work/ledger/2026-10-22-top-repos-by-stars 5
|
||||
79 wizard-work/ledger/gdp-us-states-2026-10-23 5
|
||||
80 wizard-work/ledger/top-50-repos-by-stars 5
|
||||
81 wizard-work/null/artifact-seal 5
|
||||
82 wizard-work/null/crdtkit 5
|
||||
83 wizard-work/null/datalogkit 5
|
||||
84 wizard-work/null/deporder 5
|
||||
85 wizard-work/null/minisql 5
|
||||
86 wizard-work/sphinx/archive-agentic-memory-5paper-dossier-2026-10-25/corpus 5
|
||||
87 decisions 4
|
||||
88 notes 4
|
||||
89 wizard-work/ledger/2026-10-22-media-catalog 4
|
||||
90 wizard-work/ledger/2026-10-24-job-postings 4
|
||||
91 wizard-work/null/budgeted-planner 4
|
||||
92 wizard-work/null/checklint 4
|
||||
93 wizard-work/null/jsonpatch/_probe_cli_tmp 4
|
||||
94 wizard-work/null/schedkit/evidence 4
|
||||
95 wizard-work/sol/triage-inbox-2026-09-26 4
|
||||
96 wizard-work/sphinx/archive-gemini25-2026-10-24/meta 4
|
||||
97 wizard-work/sphinx/archive-gutenberg 4
|
||||
98 wizard-work/sphinx/archive-mmlongcite-2026-10-25/source 4
|
||||
99 wizard-work/sphinx/longcontext-archive-2026-10-21/figures 4
|
||||
100 wizard-work/sphinx/longcontext-archive-2026-10-21/tools 4
|
||||
101 wizard-work/sphinx/longctx-figure-grounding-2026-10-21/figverify-aq5whmkm 4
|
||||
102 wizard-work/null/deporder/examples 3
|
||||
103 wizard-work/null/intervalkit 3
|
||||
104 wizard-work/null/raglite 3
|
||||
105 wizard-work/sphinx/archive-index-2026-10-23 3
|
||||
106 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2609.17688v1 3
|
||||
107 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2609.36651v1 3
|
||||
108 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2609.38154v1 3
|
||||
109 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2610.01927v1 3
|
||||
110 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2610.02181v1 3
|
||||
111 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2610.05940v1 3
|
||||
112 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2610.09027v1 3
|
||||
113 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2610.11924v1 3
|
||||
114 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2610.26431v1 3
|
||||
115 wizard-work/sphinx/archive-memgallery-2026-10-21/raw 3
|
||||
116 wizard-work/sphinx/archive-mm-prm-2026-10-22/figures 3
|
||||
117 wizard-work/sphinx/archive-transformer-pdf-modality-2026-10-23/rasters 3
|
||||
118 wizard-work/sphinx/figure-label-audit 3
|
||||
119 wizard-work/sphinx/phonon-reel-audio-archive-2026-10-21/sources 3
|
||||
120 wizard-work/volt/2026-10-22-media-catalog-verify 3
|
||||
121 wizard-work/beam/toposort 2
|
||||
122 wizard-work/null/chunktext 2
|
||||
123 wizard-work/null/regexnfa 2
|
||||
124 wizard-work/spark/test_valid_json 2
|
||||
125 wizard-work/sphinx/archive-gemini25-2026-10-24/raw 2
|
||||
126 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2609.25611v1 2
|
||||
127 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2609.27470v1 2
|
||||
128 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2609.32182v1 2
|
||||
129 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2609.36364v1 2
|
||||
130 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2610.10156v1 2
|
||||
131 wizard-work/sphinx/archive-transformer-pdf-modality-2026-10-23/cross-rendering 2
|
||||
132 wizard-work/sphinx/longcontext-archive-2026-10-21 2
|
||||
133 wizard-work/sphinx/phonon-reel-audio-archive-2026-10-21/evidence 2
|
||||
134 """wizard-work/beam/CHECK\ncontent\"">\n#!/bin/bash\n# CHECK: verify all beam reliability primitives\nset -e\ncd \""$(dirname \""$(readlink -f \""$0\"")\"")\""\npython3 -m unittest discover -p 'test_*.py' -v\npython3 toposort" 1
|
||||
135 audits 1
|
||||
136 docs/q13-fix-pack 1
|
||||
137 inbox 1
|
||||
138 wizard-work/null/datalogkit/examples 1
|
||||
139 wizard-work/null/membershipkit 1
|
||||
140 wizard-work/null/minisql/_archive 1
|
||||
141 wizard-work/quill/drafting-standup-reports 1
|
||||
142 wizard-work/sphinx/archive-kvcc-reconcile-2026-10-23/figures 1
|
||||
143 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2610.23250v1 1
|
||||
144 wizard-work/sphinx/archive-lcmm-metadata-2026-10-25/source 1
|
||||
145 wizard-work/sphinx/archive-proactegomem-2026-10-23 1
|
||||
146 wizard-work/sphinx/archive-transformer-pdf-modality-2026-10-23/source 1
|
||||
147 wizard-work/sphinx/figure-locator-llama3-2026-10-24/source 1
|
||||
148 wizard-work/sphinx/longcontext-archive-2026-10-21/manifest 1
|
||||
149 wizard-work/sphinx/longctx-needle-grounding-2026-10-22/manifests 1
|
||||
2 wizard-work/ledger 589
|
||||
3 wizard-work/spark 560
|
||||
4 wizard-work/sol 489
|
||||
5 replies 434
|
||||
6 wizard-work/beam 256
|
||||
7 wizard-work/sphinx/longctx-needle-grounding-2026-10-22/chunks 229
|
||||
8 wizard-work/forge 158
|
||||
9 wizard-work/quill 145
|
||||
10 checkins 116
|
||||
11 wizard-work/volt 105
|
||||
12 recoveries 63
|
||||
13 (root) 55
|
||||
14 wizard-work/sphinx/longctx-figure-grounding-2026-10-21/figures 50
|
||||
15 wizard-work/sphinx/longctx-figure-grounding-2026-10-21/ocr 50
|
||||
16 wizard-work/sphinx/longctx-figure-grounding-2026-10-21/renders 50
|
||||
17 career-lane 37
|
||||
18 tools 27
|
||||
19 wizard-work/sphinx/arxiv-digest-verified-2026-10-25 23
|
||||
20 wizard-work/sphinx/archive-gemini25-2026-10-24/figures 22
|
||||
21 wizard-work/sphinx/archive-memgallery-2026-10-21 22
|
||||
22 wizard-work/sphinx/archive-memlens-2026-10-22 22
|
||||
23 wizard-work/ledger/2026-10-28-checkin-census 21
|
||||
24 wizard-work/ledger/2026-10-29-queue-ledger 18
|
||||
25 wizard-work/sphinx/archive-mm-prm-2026-10-22/chunks 18
|
||||
26 access 17
|
||||
27 wizard-work/null 17
|
||||
28 wizard-work/sphinx/archive-mm-prm-2026-10-22/tables 17
|
||||
29 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/sources 16
|
||||
30 wizard-work/sphinx/longctx-archive-2026-10-26 16
|
||||
31 wizard-work/sphinx/phonon-reel-audio-archive-2026-10-21 16
|
||||
32 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/captions 15
|
||||
33 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/corpus 15
|
||||
34 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/text 15
|
||||
35 wizard-work/sphinx/archive-lcmm-token-ledger-2026-10-26/source/abs 15
|
||||
36 wizard-work/sphinx/archive-transformer-pdf-modality-2026-10-23/text 15
|
||||
37 wizard-work/sphinx/archive-transformer-pdf-modality-2026-10-23/text-layout 15
|
||||
38 wizard-work/sphinx/archive-arxiv-lc-2026-10-22 14
|
||||
39 wizard-work/sphinx/archive-remember-r1-figures-2026-10-23 14
|
||||
40 wizard-work/sphinx/archive-lcmm-token-ledger-2026-10-26 13
|
||||
41 wizard-work/sphinx/longctx-arxiv-archive-2026-10-20 13
|
||||
42 wizard-work/sphinx/longctx-citations-2026-10-21 13
|
||||
43 harness-reflections 12
|
||||
44 wizard-work/sphinx/archive-kvcc-reconcile-2026-10-23/sources 12
|
||||
45 wizard-work/sphinx/archive-longctx-retrieval-2026-10-26/pdfs 12
|
||||
46 wizard-work/sphinx/archive-longctx-retrieval-2026-10-26/text 12
|
||||
47 wizard-work/sphinx/archive-remember-r1-figures-2026-10-23/figures 12
|
||||
48 wizard-work/sphinx/longctx-arxiv-archive-2026-10-20/corpus 12
|
||||
49 wizard-work/sphinx/longctx-citations-2026-10-21/sources 12
|
||||
50 wizard-work/sphinx/longctx-niah-bench-2026-10-21/corpus 12
|
||||
51 wizard-work/null/jsonpatch 11
|
||||
52 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23 11
|
||||
53 wizard-work/sphinx/longctx-figure-grounding-2026-10-21 11
|
||||
54 wizard-work/sphinx/longctx-niah-bench-2026-10-21 11
|
||||
55 wizard-work/sphinx/archive-gemini25-2026-10-24 10
|
||||
56 wizard-work/sphinx/archive-lcmm-corpus-2026-10-26 10
|
||||
57 wizard-work/sphinx/archive-transformer-pdf-modality-2026-10-23 10
|
||||
58 wizard-work/sphinx/arxiv-fulltext-2026-10-25 10
|
||||
59 wizard-work/sphinx/longctx-needle-grounding-2026-10-22 10
|
||||
60 wizard-work/sphinx/longctx-needle-grounding-2026-10-22/tools 10
|
||||
61 docs 9
|
||||
62 wizard-work/ledger/2026-10-28-workqueue-census 9
|
||||
63 wizard-work/ledger/2026-10-29-albums-census 9
|
||||
64 wizard-work/ledger/2026-10-29-jsonplaceholder-census 9
|
||||
65 wizard-work/ledger/2026-11-03-troupe-tree-census 9
|
||||
66 wizard-work/null/base32c 9
|
||||
67 wizard-work/sphinx 9
|
||||
68 wizard-work/sphinx/archive-lcmm-metadata-2026-10-25 9
|
||||
69 wizard-work/ledger/2026-11-02-workqueue-census 8
|
||||
70 wizard-work/ledger/workqueue-census 8
|
||||
71 wizard-work/sphinx/archive-kvcc-reconcile-2026-10-23 8
|
||||
72 wizard-work/sphinx/archive-lc-coverage-crossindex-2026-10-23 8
|
||||
73 wizard-work/sphinx/archive-lc-coverage-crossindex-2026-10-23/raw 8
|
||||
74 wizard-work/ledger/2026-10-24-countries-gdp-nominal 7
|
||||
75 wizard-work/ledger/2026-10-25-git-history-live-b1edd09 7
|
||||
76 wizard-work/ledger/2026-10-25-head-20-commits 7
|
||||
77 wizard-work/ledger/2026-10-28-arxiv-csai-recent 7
|
||||
78 wizard-work/ledger/2026-10-28-directory-census 7
|
||||
79 wizard-work/ledger/2026-10-29-checkin-census 7
|
||||
80 wizard-work/ledger/2026-11-04-daily-commit-census 7
|
||||
81 wizard-work/null/agentloop 7
|
||||
82 wizard-work/sol/sol-support-triage-2026-11-05 7
|
||||
83 wizard-work/sphinx/archive-lcmm-corpus-2026-10-26/probes 7
|
||||
84 wizard-work/sphinx/archive-mmlongcite-2026-10-25 7
|
||||
85 wizard-work/sphinx/figure-locator-llama3-2026-10-24 7
|
||||
86 wizard-work/sphinx/longctx-needle-grounding-2026-10-22/raw 7
|
||||
87 wizard-work/sphinx/longctx-needle-grounding-2026-10-22/text 7
|
||||
88 wizard-work/volt/root-check-sweep 7
|
||||
89 wizard-work/ledger/2026-10-28-commits-by-author 6
|
||||
90 wizard-work/ledger/2026-10-31-ledger-inventory 6
|
||||
91 wizard-work/ledger/2026-10-31-wizardwork-census 6
|
||||
92 wizard-work/ledger/2026-10-31-workqueue-census 6
|
||||
93 wizard-work/ledger/2026-11-01-todo-census 6
|
||||
94 wizard-work/ledger/2026-11-01-users-census 6
|
||||
95 wizard-work/ledger/workqueue-census-v2 6
|
||||
96 wizard-work/null/diffkit 6
|
||||
97 wizard-work/null/schedkit 6
|
||||
98 wizard-work/sol/probe-retired 6
|
||||
99 wizard-work/sphinx/archive-agentic-memory-5paper-dossier-2026-10-25 6
|
||||
100 wizard-work/sphinx/archive-gutenberg/raw 6
|
||||
101 wizard-work/sphinx/archive-gutenberg/txt 6
|
||||
102 wizard-work/sphinx/archive-mm-prm-2026-10-22 6
|
||||
103 wizard-work/sphinx/archive-transformer-pdf-modality-2026-10-23/figures 6
|
||||
104 wizard-work/sphinx/longcontext-archive-2026-10-21/raw 6
|
||||
105 wizard-work/sphinx/longctx-figure-grounding-2026-10-21/figverify-egmmujuw 6
|
||||
106 wizard-work/sphinx/phonon-reel-audio-archive-2026-10-21/spectra 6
|
||||
107 wizard-work/sphinx/transformer-archive 6
|
||||
108 decisions 5
|
||||
109 notes 5
|
||||
110 wizard-work/ledger/2026-10-22-top-ml-repos 5
|
||||
111 wizard-work/ledger/2026-10-22-top-repos-by-stars 5
|
||||
112 wizard-work/ledger/2026-10-28-recovery-registry 5
|
||||
113 wizard-work/ledger/2026-10-29-commit-author-census 5
|
||||
114 wizard-work/ledger/2026-10-29-workqueue-census 5
|
||||
115 wizard-work/ledger/2026-11-03-github-top-python-repos 5
|
||||
116 wizard-work/ledger/gdp-us-states-2026-10-23 5
|
||||
117 wizard-work/ledger/top-50-repos-by-stars 5
|
||||
118 wizard-work/null/artifact-seal 5
|
||||
119 wizard-work/null/crdtkit 5
|
||||
120 wizard-work/null/datalogkit 5
|
||||
121 wizard-work/null/deporder 5
|
||||
122 wizard-work/null/minisql 5
|
||||
123 wizard-work/sol/inbox 5
|
||||
124 wizard-work/sphinx/archive-agentic-memory-5paper-dossier-2026-10-25/corpus 5
|
||||
125 wizard-work/sphinx/archive-longctx-retrieval-2026-10-26 5
|
||||
126 wizard-work/sphinx/longctx-archive-2026-10-26/raw 5
|
||||
127 wizard-work/volt/q143-check-sweep 5
|
||||
128 wizard-work/ledger/2026-10-22-media-catalog 4
|
||||
129 wizard-work/ledger/2026-10-24-job-postings 4
|
||||
130 wizard-work/ledger/2026-10-28-git-tree-census 4
|
||||
131 wizard-work/ledger/2026-10-28-wizardwork-census 4
|
||||
132 wizard-work/ledger/2026-11-02-openmeteo-cities 4
|
||||
133 wizard-work/ledger/2026-11-03-commit-census 4
|
||||
134 wizard-work/null/agentloop/agentloop 4
|
||||
135 wizard-work/null/budgeted-planner 4
|
||||
136 wizard-work/null/checklint 4
|
||||
137 wizard-work/null/jsonpatch/_probe_cli_tmp 4
|
||||
138 wizard-work/null/satkit-2026-10-26 4
|
||||
139 wizard-work/null/schedkit/evidence 4
|
||||
140 wizard-work/sol/class-triage-2026-10-31 4
|
||||
141 wizard-work/sol/triage-inbox-2026-09-26 4
|
||||
142 wizard-work/sphinx/archive-gemini25-2026-10-24/meta 4
|
||||
143 wizard-work/sphinx/archive-gutenberg 4
|
||||
144 wizard-work/sphinx/archive-lcmm-corpus-2026-10-26/source 4
|
||||
145 wizard-work/sphinx/archive-mmlongcite-2026-10-25/source 4
|
||||
146 wizard-work/sphinx/arxiv-fulltext-2026-10-25/runs/1706.03762v7 4
|
||||
147 wizard-work/sphinx/longcontext-archive-2026-10-21/figures 4
|
||||
148 wizard-work/sphinx/longcontext-archive-2026-10-21/tools 4
|
||||
149 wizard-work/sphinx/longctx-figure-grounding-2026-10-21/figverify-aq5whmkm 4
|
||||
150 wizard-work/volt/q140 4
|
||||
151 wizard-work/volt/q150 4
|
||||
152 wizard-work/null/deporder/examples 3
|
||||
153 wizard-work/null/intervalkit 3
|
||||
154 wizard-work/null/raglite 3
|
||||
155 wizard-work/quill/draft-evidence-check 3
|
||||
156 wizard-work/spark/word_counter_artifact 3
|
||||
157 wizard-work/sphinx/archive-index-2026-10-23 3
|
||||
158 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2609.17688v1 3
|
||||
159 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2609.36651v1 3
|
||||
160 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2609.38154v1 3
|
||||
161 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2610.01927v1 3
|
||||
162 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2610.02181v1 3
|
||||
163 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2610.05940v1 3
|
||||
164 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2610.09027v1 3
|
||||
165 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2610.11924v1 3
|
||||
166 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2610.26431v1 3
|
||||
167 wizard-work/sphinx/archive-memgallery-2026-10-21/raw 3
|
||||
168 wizard-work/sphinx/archive-mm-prm-2026-10-22/figures 3
|
||||
169 wizard-work/sphinx/archive-transformer-pdf-modality-2026-10-23/rasters 3
|
||||
170 wizard-work/sphinx/figure-label-audit 3
|
||||
171 wizard-work/sphinx/phonon-reel-audio-archive-2026-10-21/sources 3
|
||||
172 wizard-work/volt/2026-10-22-media-catalog-verify 3
|
||||
173 wizard-work/volt/q137-open-set 3
|
||||
174 wizard-work/volt/q163-smoke-binding 3
|
||||
175 audits 2
|
||||
176 wizard-work/beam/manifest-check 2
|
||||
177 wizard-work/beam/toposort 2
|
||||
178 wizard-work/cassian 2
|
||||
179 wizard-work/ledger/2026-10-26-top-20-economies-gdp-2024 2
|
||||
180 wizard-work/null/agentloop/tests 2
|
||||
181 wizard-work/null/chunktext 2
|
||||
182 wizard-work/null/regexnfa 2
|
||||
183 wizard-work/spark/test_valid_json 2
|
||||
184 wizard-work/spark/wizard-work/spark 2
|
||||
185 wizard-work/sphinx/archive-gemini25-2026-10-24/raw 2
|
||||
186 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2609.25611v1 2
|
||||
187 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2609.27470v1 2
|
||||
188 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2609.32182v1 2
|
||||
189 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2609.36364v1 2
|
||||
190 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2610.10156v1 2
|
||||
191 wizard-work/sphinx/archive-lcmm-token-ledger-2026-10-26/source 2
|
||||
192 wizard-work/sphinx/archive-transformer-pdf-modality-2026-10-23/cross-rendering 2
|
||||
193 wizard-work/sphinx/longcontext-archive-2026-10-21 2
|
||||
194 wizard-work/sphinx/phonon-reel-audio-archive-2026-10-21/evidence 2
|
||||
195 wizard-work/volt/q-checkparen 2
|
||||
196 wizard-work/zeph 2
|
||||
197 docs/q13-fix-pack 1
|
||||
198 inbox 1
|
||||
199 wizard-work/forge/refactored_cards 1
|
||||
200 wizard-work/ledger/source 1
|
||||
201 wizard-work/null/datalogkit/examples 1
|
||||
202 wizard-work/null/membershipkit 1
|
||||
203 wizard-work/null/minisql/_archive 1
|
||||
204 wizard-work/quill/drafting-standup-reports 1
|
||||
205 wizard-work/spark/artifact 1
|
||||
206 wizard-work/sphinx/archive-kvcc-reconcile-2026-10-23/figures 1
|
||||
207 wizard-work/sphinx/archive-lc-mm-dossier-2026-10-23/figures/2610.23250v1 1
|
||||
208 wizard-work/sphinx/archive-lcmm-metadata-2026-10-25/source 1
|
||||
209 wizard-work/sphinx/archive-proactegomem-2026-10-23 1
|
||||
210 wizard-work/sphinx/archive-transformer-pdf-modality-2026-10-23/source 1
|
||||
211 wizard-work/sphinx/figure-locator-llama3-2026-10-24/source 1
|
||||
212 wizard-work/sphinx/longcontext-archive-2026-10-21/manifest 1
|
||||
213 wizard-work/sphinx/longctx-needle-grounding-2026-10-22/manifests 1
|
||||
214 wizard-work/volt/q144-check-entry 1
|
||||
215 wizard-work/volt/q160-import-binding 1
|
||||
216 wizard-work/volt/q162-interval-binding 1
|
||||
217 wizard-work/volt/q84-closure 1
|
||||
|
@@ -1,5 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
# Verdict gate for the ledger file-tree census artifact.
|
||||
# Exit code 0 = correct (artifact matches a fresh git recompute); nonzero = wrong.
|
||||
cd /root/troupe-standup || exit 1
|
||||
exec python3 wizard-work/ledger/verify_tree_census.py
|
||||
# Exit code 0 = correct (artifact matches a fresh recompute from the tree this
|
||||
# file sits in); nonzero = wrong. The repo root is derived from $0's path, so
|
||||
# this gate grades the checkout/export it is invoked from, not the author's host.
|
||||
set -u
|
||||
HERE=$(cd -- "$(dirname -- "$(readlink -f -- "$0")")" && pwd) || exit 2
|
||||
exec python3 "$HERE/verify_tree_census.py"
|
||||
@@ -1,9 +1,18 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Verify the file-tree census & extension census artifact against a fresh git recompute.
|
||||
"""Verify the file-tree census & extension census artifact against a fresh recompute.
|
||||
|
||||
Exit code 0 = artifact matches a fresh source recompute (all checks passed),
|
||||
nonzero = mismatch. Not a tautology: it re-enumerates the repo from git and
|
||||
compares the produced tables field-for-field against the committed files.
|
||||
nonzero = mismatch. Not a tautology: it re-enumerates a git tree and compares
|
||||
the produced tables field-for-field against the committed files.
|
||||
|
||||
The repository root is derived from __file__, never a hardcoded host path. The
|
||||
tree graded is the one named in `repo_census.pin` -- the commit checked out when
|
||||
the census was taken, immutable -- so this gate does not turn red merely because
|
||||
HEAD has since moved. Paths are read with `git ls-tree -z` -- raw, not git's
|
||||
quoted rendering. Run inside a `git archive` export (no .git) the export's own
|
||||
files are walked instead; that export must be the pinned commit, which is the
|
||||
case Q69's done-means asks for. The two paths the census run itself added (the
|
||||
pin and the extractor) post-date the pinned commit and are excluded from a walk.
|
||||
"""
|
||||
from pathlib import Path
|
||||
|
||||
@@ -17,10 +26,49 @@ REPO = Path(__file__).resolve().parents[2]
|
||||
DEST = os.path.join(REPO, "wizard-work", "ledger")
|
||||
|
||||
FILES = ["repo_tree.tsv", "repo_exts.tsv", "repo_files.tsv"]
|
||||
PIN_NAME = "repo_census.pin"
|
||||
PIN_SELF = "wizard-work/ledger/" + PIN_NAME
|
||||
# Added by the census run itself, so absent from the commit the census describes.
|
||||
NEW_SELF = {PIN_SELF, "wizard-work/ledger/extract_tree_census.py"}
|
||||
|
||||
|
||||
def run(args):
|
||||
return subprocess.run(args, cwd=REPO, capture_output=True, text=True)
|
||||
def read_pin():
|
||||
fields = {}
|
||||
with open(os.path.join(DEST, PIN_NAME), encoding="utf-8") as f:
|
||||
for line in f:
|
||||
if line.strip():
|
||||
key, value = line.split(None, 1)
|
||||
fields[key] = value.strip()
|
||||
if "commit" not in fields or "files" not in fields:
|
||||
raise SystemExit("FATAL %s lacks commit/files lines" % PIN_NAME)
|
||||
return fields["commit"], int(fields["files"])
|
||||
|
||||
|
||||
def enumerate_paths(commit):
|
||||
"""Paths of the pinned commit, plus the source they were read from.
|
||||
|
||||
git present: `git ls-tree -z` on the pinned commit -- raw names.
|
||||
export: every regular file in the export (content is the pinned commit plus
|
||||
this run's two new files, which are dropped).
|
||||
"""
|
||||
if os.path.exists(os.path.join(str(REPO), ".git")):
|
||||
proc = subprocess.run(["git", "ls-tree", "-r", "-z", "--name-only", commit],
|
||||
cwd=REPO, capture_output=True)
|
||||
if proc.returncode != 0:
|
||||
return None, "git ls-tree rc=%d: %s" % (
|
||||
proc.returncode,
|
||||
proc.stderr.decode("utf-8", "replace").strip())
|
||||
raw = proc.stdout.decode("utf-8", "surrogateescape")
|
||||
return [p for p in raw.split("\0") if p], "git commit %s" % commit[:12]
|
||||
walked = []
|
||||
for root, dirs, files in os.walk(REPO):
|
||||
dirs[:] = sorted(d for d in dirs if d != ".git")
|
||||
for name in files:
|
||||
rel = str(Path(os.path.join(root, name)).relative_to(REPO)
|
||||
.as_posix())
|
||||
if rel not in NEW_SELF:
|
||||
walked.append(rel)
|
||||
return sorted(walked), "export walk"
|
||||
|
||||
|
||||
def read_tsv(name):
|
||||
@@ -37,11 +85,18 @@ def main():
|
||||
if not cond:
|
||||
failures += 1
|
||||
|
||||
# 1) fresh enumeration from git
|
||||
tree = run(["git", "ls-tree", "-r", "--name-only", "HEAD"])
|
||||
check("git ls-tree exit 0", tree.returncode == 0, tree.stderr.strip())
|
||||
paths = [l for l in tree.stdout.splitlines() if l.strip()]
|
||||
check("git ls-tree lists files", len(paths) > 0, "got %d" % len(paths))
|
||||
# 1) fresh enumeration of the pinned tree
|
||||
pin, pin_files = read_pin()
|
||||
paths, source = enumerate_paths(pin)
|
||||
print("enumerate source: %s" % source)
|
||||
if paths is None:
|
||||
print("FATAL could not enumerate the tree: %s" % source)
|
||||
raise SystemExit(2)
|
||||
check("pin file count matches enumeration", len(paths) == pin_files,
|
||||
"pin says %d, enumerated %d" % (pin_files, len(paths)))
|
||||
check("enumeration lists files", len(paths) > 0, "got %d" % len(paths))
|
||||
check("enumeration has no duplicate paths", len(paths) == len(set(paths)),
|
||||
"%d duplicate(s)" % (len(paths) - len(set(paths))))
|
||||
|
||||
dir_counts = Counter()
|
||||
ext_counts = Counter()
|
||||
@@ -77,11 +132,17 @@ def main():
|
||||
rows = read_tsv("repo_files.tsv")
|
||||
check("repo_files header", rows[0] == ["rank", "path"], str(rows[0]))
|
||||
file_paths = [r[1] for r in rows[1:]]
|
||||
check("repo_files data rows == git ls-tree rows",
|
||||
check("repo_files data rows == enumeration rows",
|
||||
len(file_paths) == len(paths),
|
||||
"got %d, git ls-tree %d" % (len(file_paths), len(paths)))
|
||||
check("repo_files rows equal git ls-tree set",
|
||||
"got %d, enumerated %d" % (len(file_paths), len(paths)))
|
||||
check("repo_files rows equal enumeration set",
|
||||
sorted(file_paths) == sorted(paths))
|
||||
check("repo_files ranks are 1..N",
|
||||
len(rows) > 1 and all(r[0] == str(i) for i, r in enumerate(rows[1:], 1)),
|
||||
"rank sequence broken")
|
||||
control = [r[1] for r in rows[1:] if any(ord(c) < 32 for c in r[1])]
|
||||
check("repo_files paths carry no control characters", not control,
|
||||
"%d row(s), first %r" % (len(control), control[:1]))
|
||||
|
||||
# 5) group sums reconcile to total
|
||||
check("dir sum == total", sum(dir_counts.values()) == len(paths),
|
||||
|
||||
Reference in new issue
Block a user