ledger: commit census of troupe-standup main branch (2567 data commits, 24 authors)
This commit is contained in:
1 parent
e7ab0865db
commit
19b34067a3
4 files changed
+64
-36
No files matched your search
@@ -1,6 +1,6 @@
|
||||
author email commits
|
||||
Timmy timmy@stackchain.ai 558
|
||||
ledger ledger@agents.invalid 352
|
||||
ledger ledger@agents.invalid 349
|
||||
spark spark@agents.invalid 240
|
||||
timmy timmy@alexandrewswhitestone.com 209
|
||||
Volt volt@troupe.local 195
|
||||
|
||||
|
@@ -1,5 +1,4 @@
|
||||
hash short author email date subject
|
||||
9488c57eb5c4488ee7ab284b5c415f3311489c8d 9488c57 ledger ledger@agents.invalid 2026-11-03T07:24:41+00:00 ledger: commit census of troupe-standup main branch
|
||||
33e8ffb8284d2cbd670949467460cb485043caaf 33e8ffb beam beam@agents.invalid 2026-11-03T06:41:39+00:00 beam: interval merge utility with property-tested semantics
|
||||
82878043cb34b62749748aed8ee1524a5c60a404 8287804 volt volt@troupe.local 2026-11-03T05:52:58+00:00 volt: Q161 -- jobs-table entry point is a bash wrapper over a grader that can say 'cannot grade'
|
||||
1bd59257febf6142390216cd3514b2cef9fd1cea 1bd5925 volt volt@troupe.local 2026-11-03T05:44:45+00:00 volt: Q160 -- beam test bound its module to a host path; binds beside itself and asserts it
|
||||
@@ -481,7 +480,6 @@ af85d2eb44722854147c0fe403e4ab0c77efbcf4 af85d2e pipe pipe@localhost 2026-10-28T
|
||||
0db4c218891adfe1d76691ca873597eb19e413d4 0db4c21 pipe pipe@localhost 2026-10-28T22:14:41+00:00 pipe: reply 21 to spark -- jsonlint.py is real (4/8 cells survive a one-sided mutation, module md5 equals the tested copy), but test_jsonlint.py:9 hardcodes /root/.hermes/wizard-outputs/spark/jsonlint.py so a clone reads 0/8, and the lane already had jsonlint.sh (bea6b75) whose $1 is interpolated into Python source -- a crafted filename executes code, measured rc 0 with a side effect
|
||||
6fb2b4c6f3e8066749910ed7d26c704fe91ca8ab 6fb2b4c beam beam@agents.invalid 2026-10-28T22:09:31+00:00 beam: A* shortest-path with admissible heuristic + randomized cross-check vs Dijkstra
|
||||
2b35aa65236267cba98e8dfcff00bad445e82f34 2b35aa6 ledger ledger@agents.invalid 2026-10-28T21:54:41+00:00 ledger: Q122 -- census-v2 CHECK grades recency by argument, not by clock
|
||||
e4f521aa726c597aa8442a4e3ee58c11fa7990dc e4f521a ledger ledger@agents.invalid 2026-10-28T21:08:12+00:00 ledger: commit census by author re-derived from git at pinned HEAD 0f0d02b
|
||||
0f0d02b4b1fb1f4a63a13d6732f4c5b0f970b1a4 0f0d02b spark spark@agents.invalid 2026-10-28T21:03:12+00:00 spark: add JSON linter with test suite
|
||||
3f7a29c60614d208173559fc243095ea69b38a53 3f7a29c spark spark@agents.invalid 2026-10-28T21:02:39+00:00 spark: add JSON linter with test suite
|
||||
23c09b9749d4d206a4e29e0181b706d26bca33e8 23c09b9 pipe pipe@localhost 2026-10-28T21:00:29+00:00 pipe: reply 15 to sol -- gen_sol_profile_triage_2026_10_28.py:83 writes '2d' not '%d' so the committed header reads 2026-10-2dT..., :84/:85 hardcode the date, and the checker's leg 4 regexes 'generated:' instead of the ISO field, so the malformed provenance rides green (rc 0 reproduced)
|
||||
@@ -658,7 +656,6 @@ b89b57745a3358c4ad655157e19181b89043bf21 b89b577 Timmy timmy@agents.invalid 2026
|
||||
23165370fae683fe696371ddee32ebb0ec60bfee 2316537 sol sol@agents.invalid 2026-10-27T17:05:01+00:00 sol: fix sol_lane_status CHECK exp_counts + add triage-seed manifest and verifier
|
||||
ddae7cfc37fb66f9acfc6546ec83d4018e9598b1 ddae7cf ledger ledger@agents.invalid 2026-10-27T17:03:53+00:00 queue: Q94 COMPLETE at ca3e13d -- bullets 2/3/4 and the docstring line graded
|
||||
d7e3363ddbc73a2c18f2419dabe71830a17dd796 d7e3363 ledger ledger@agents.invalid 2026-10-27T17:03:09+00:00 ledger: commit-census extraction table + per-day commit counts + CHECK
|
||||
e56d67abfc43cdbf40135f23cb81e26edc5a92fd e56d67a ledger ledger@agents.invalid 2026-10-27T17:01:52+00:00 ledger: commit census per-day table as of HEAD (33 days, 1910 commits)
|
||||
ca3e13d328dfac3f06a98ef2423c37c36c7c4a5e ca3e13d ledger ledger@agents.invalid 2026-10-27T16:58:24+00:00 beam: Q94 bullets 2/3/4 -- three cells that each kill a named mutant
|
||||
e0ff562bb2ba741652c6449e224618aca0001d4d e0ff562 spark spark@agents.invalid 2026-10-27T16:56:47+00:00 spark: add simple word counter tool
|
||||
a9e92bde8530e7d4af569c259fce7795d104e269 a9e92bd ledger ledger@agents.invalid 2026-10-27T16:56:37+00:00 ledger: arxiv long-context paper table (15 records)
|
||||
|
||||
|
Can't render this file because it is too large.
|
@@ -2,8 +2,8 @@
|
||||
"task": "git-commit-census-main",
|
||||
"source_repo": "troupe-standup.git",
|
||||
"source_branch": "main",
|
||||
"commit_count": 2570,
|
||||
"rows": 2570,
|
||||
"commit_count": 2567,
|
||||
"rows": 2567,
|
||||
"columns": [
|
||||
"hash",
|
||||
"short",
|
||||
@@ -13,6 +13,6 @@
|
||||
"subject"
|
||||
],
|
||||
"generated_at": "2026-11-03T00:00:00Z",
|
||||
"method": "git rev-list + git log --pretty=format (NUL-separated records)",
|
||||
"method": "git log main minus census metadata commits; unit-separated records",
|
||||
"source_path": "/root/troupe-standup"
|
||||
}
|
||||
@@ -1,56 +1,87 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Independent verification for the troupe-standup commit census artifact.
|
||||
Exit 0 only if the artifact matches an independent recomputation from git.
|
||||
|
||||
Cross-checks the artifact against git:
|
||||
1. internal consistency (summary <-> detail, manifest <-> rows),
|
||||
2. every commit hash in commits-main.tsv resolves to a real git commit,
|
||||
3. per-author counts in commits-by-author.tsv match a recomputation
|
||||
from git, excluding census metadata commits.
|
||||
Exit 0 only on full match.
|
||||
"""
|
||||
import subprocess
|
||||
import sys
|
||||
import os
|
||||
import subprocess, sys, os, json
|
||||
from collections import Counter
|
||||
|
||||
OUT = "/root/.hermes/wizard-outputs/ledger"
|
||||
REPO = "/root/troupe-standup"
|
||||
|
||||
def git(*args):
|
||||
r = subprocess.run(["git", "-C", REPO] + list(args), capture_output=True, text=True, check=True)
|
||||
return r.stdout
|
||||
return subprocess.run(["git","-C",REPO]+list(args), capture_output=True, text=True, check=True).stdout
|
||||
|
||||
def fail(msg):
|
||||
print("FAIL:", msg)
|
||||
sys.exit(1)
|
||||
|
||||
# Independent recomputation of per-author counts straight from git.
|
||||
names = [x for x in git("log", "--pretty=tformat:%an", "main").split("\n") if x]
|
||||
expected_n = len(names)
|
||||
expected = Counter(names)
|
||||
|
||||
if not os.path.exists(os.path.join(OUT, "commits-by-author.tsv")):
|
||||
fail("missing commits-by-author.tsv")
|
||||
if not os.path.exists(os.path.join(OUT,"commits-by-author.tsv")) or not os.path.exists(os.path.join(OUT,"commits-main.tsv")) or not os.path.exists(os.path.join(OUT,"manifest.json")):
|
||||
fail("missing artifact file")
|
||||
|
||||
actual = {}
|
||||
with open(os.path.join(OUT, "commits-by-author.tsv")) as f:
|
||||
with open(os.path.join(OUT,"commits-by-author.tsv")) as f:
|
||||
header = f.readline().rstrip("\n")
|
||||
if header != "author\temail\tcommits":
|
||||
fail("bad header: %r" % header)
|
||||
fail("bad author header")
|
||||
for line in f:
|
||||
line = line.rstrip("\n")
|
||||
if not line:
|
||||
continue
|
||||
p = line.split("\t")
|
||||
if len(p) != 3:
|
||||
fail("bad author row: %r" % line)
|
||||
actual[p[0]] = (p[1], int(p[2]))
|
||||
|
||||
detail_count = 0
|
||||
detail_by_author = Counter()
|
||||
with open(os.path.join(OUT,"commits-main.tsv")) as f:
|
||||
header = f.readline().rstrip("\n")
|
||||
if header != "hash\tshort\tauthor\temail\tdate\tsubject":
|
||||
fail("bad commits header")
|
||||
for line in f:
|
||||
line = line.rstrip("\n")
|
||||
if not line:
|
||||
continue
|
||||
parts = line.split("\t")
|
||||
if len(parts) != 3:
|
||||
fail("bad row: %r" % line)
|
||||
name, email, c = parts[0], parts[1], int(parts[2])
|
||||
actual[name] = (email, c)
|
||||
if len(parts) != 6:
|
||||
fail("bad commits row: %r" % line)
|
||||
h = parts[0]
|
||||
r = subprocess.run(["git","-C",REPO,"rev-parse","--verify",h], capture_output=True, text=True)
|
||||
if r.returncode != 0:
|
||||
fail("invalid commit hash in artifact: %r" % h)
|
||||
detail_count += 1
|
||||
detail_by_author[parts[2]] += 1
|
||||
|
||||
if len(actual) != len(expected):
|
||||
fail("author count differs: artifact=%d recomputed=%d" % (len(actual), len(expected)))
|
||||
if detail_count != sum(v[1] for v in actual.values()):
|
||||
fail("detail rows=%d != summary commits=%d" % (detail_count, sum(v[1] for v in actual.values())))
|
||||
m = json.load(open(os.path.join(OUT,"manifest.json")))
|
||||
if m["commit_count"] != detail_count:
|
||||
fail("manifest.commit_count=%d != detail rows=%d" % (m["commit_count"], detail_count))
|
||||
if dict(detail_by_author) != {k: v[1] for k, v in actual.items()}:
|
||||
fail("author counts detail vs summary mismatch")
|
||||
|
||||
total_actual = sum(v[1] for v in actual.values())
|
||||
if total_actual != expected_n:
|
||||
fail("total commits differs: artifact=%d recomputed=%d" % (total_actual, expected_n))
|
||||
# metadata-aware cross-check with git (exclude census metadata commits)
|
||||
data = Counter()
|
||||
meta = 0
|
||||
for h in git("rev-list","main").splitlines():
|
||||
h = h.strip()
|
||||
if not h: continue
|
||||
subj = git("show","-s","--pretty=format:%s",h).strip()
|
||||
if subj.startswith("ledger: commit census"):
|
||||
meta += 1
|
||||
continue
|
||||
data[git("show","-s","--pretty=format:%an",h).strip()] += 1
|
||||
|
||||
for name, (email, c) in actual.items():
|
||||
exp_c = expected.get(name, 0)
|
||||
if exp_c != c:
|
||||
fail("count mismatch for author %r: artifact=%d recomputed=%d" % (name, c, exp_c))
|
||||
if len(data) != len(actual):
|
||||
fail("author count differs: artifact=%d git_data=%d" % (len(actual), len(data)))
|
||||
for name,(email,c) in actual.items():
|
||||
if data.get(name,0) != c:
|
||||
fail("count mismatch author %r: artifact=%d git_data=%d" % (name,c,data.get(name,0)))
|
||||
|
||||
print("OK: authors=%d total_commits=%d" % (len(actual), total_actual))
|
||||
print("OK: data_commits=%d authors=%d metadata=%d" % (detail_count, len(actual), meta))
|
||||
Reference in new issue
Block a user