ledger: extract 2026-11-03 commit census (38 commits, 7 authors) to CSV + MD

This commit is contained in:
ledger committed 2026-11-03 16:04:45 +00:00
1 parent 34a9125c88
commit 5b130c472d
5 files changed
+288

No files matched your search

@@ -0,0 +1,8 @@
date,author,count
2026-11-03,ledger,13
2026-11-03,beam,7
2026-11-03,quill,5
2026-11-03,volt,5
2026-11-03,sol,4
2026-11-03,Zephyrus Sparkborn,3
2026-11-03,Timmy,1
1 date author count
2 2026-11-03 ledger 13
3 2026-11-03 beam 7
4 2026-11-03 quill 5
5 2026-11-03 volt 5
6 2026-11-03 sol 4
7 2026-11-03 Zephyrus Sparkborn 3
8 2026-11-03 Timmy 1
@@ -0,0 +1,39 @@
date,hash,short,author,subject
2026-11-03,34a9125c887d0ce6ee43dfbe74a3c7bfb0453713,34a9125,sol,sol: refresh working-tree triage manifest and gate (306 files)
2026-11-03,58162526849491c2269e96eba557d3e0faf80d5a,5816252,quill,quill: add daily standup template draft
2026-11-03,57cea244df2c76309cfa5f710b00dd2db16d3453,57cea24,Zephyrus Sparkborn,check-in 2026-11-03
2026-11-03,07153d93649869c205386c82f531e4c7b1dd611d,07153d9,sol,sol: refresh sol-profile-triage-2026-11-03 (drop volatile size check)
2026-11-03,ea4706b72b7894d6c566d7f9abb78fc2f3aee0af,ea4706b,ledger,ledger: extract countries-by-population table to CSV
2026-11-03,7c45fceb82cffa4b6a5693d09bfc9472defbbf76,7c45fce,sol,"sol: add sol-profile-triage-2026-11-03 manifest (69 profile entries, rule-based triage)"
2026-11-03,03b2a04f24cd8df48ec8eacc6fe8a788828ec67f,03b2a04,ledger,Merge branch 'main' of https://forge.alexanderwhitestone.com/git/stackchain/troupe-standup
2026-11-03,d9d03df549fdaa0870a7c66d292e3690fa942b63,d9d03df,ledger,ledger: crypto top-10 coins by market cap extraction
2026-11-03,4794e25ba8c0520bb4388b7a1e63588c70f291f7,4794e25,quill,quill: add meeting summary template draft
2026-11-03,a9b6de95eacc1e442d20f1fa10d17f3803a97caa,a9b6de9,Zephyrus Sparkborn,career: apply-queue-2026-11-03 (Zeph lane)
2026-11-03,3b2037628e24c303efb7e251d7746e843951a47f,3b20376,Zephyrus Sparkborn,career: daily-2026-11-03 (Zeph lane)
2026-11-03,5646d774f987b4389c50fe8e48296e9323c8cf17,5646d77,beam,beam: add injectable clock to TokenBucket for deterministic testing
2026-11-03,a96da08d8b3468f5f56eadcf7728c14a1b347522,a96da08,volt,"volt: land Q163 — the class guard reads assertions, not names"
2026-11-03,f0b3a64efacb5aaeba4f7671d5aee0ecbf3e71b8,f0b3a64,ledger,volt: land Q162 — beam test binds its module beside itself
2026-11-03,bcaede7af3d907d57310d55a112a903507022c6a,bcaede7,beam,beam: regex matching (LeetCode 10) recursive+DP with cross-check tests
2026-11-03,5a9d4a277ee1d0bcc3961ccdb15791dd3c79276b,5a9d4a2,ledger,sol: working-tree triage 2026-11-03 manifest + verifier + gate
2026-11-03,11f646bee3e012702b331bb8d96d621d40340b44,11f646b,ledger,"ledger: git-tracked file LOC census (5053 files, 211MB, 2.2M lines)"
2026-11-03,c7d13545f8b390ddccccfd2aebeb0252b1372159,c7d1354,quill,quill: draft grant abstract for sovereign AI stack project
2026-11-03,8639cabff472e6d5209317828c8dd55574b127ca,8639cab,beam,beam: smoke verification for intervals half-open merge semantics
2026-11-03,19b34067a3eddaed39361b3004c947ef24739a59,19b3406,ledger,"ledger: commit census of troupe-standup main branch (2567 data commits, 24 authors)"
2026-11-03,e7ab0865db835019edb5b98e1f46e7c229703e2e,e7ab086,ledger,ledger: commit census of troupe-standup main branch (2570 commits)
2026-11-03,9488c57eb5c4488ee7ab284b5c415f3311489c8d,9488c57,ledger,ledger: commit census of troupe-standup main branch
2026-11-03,33e8ffb8284d2cbd670949467460cb485043caaf,33e8ffb,beam,beam: interval merge utility with property-tested semantics
2026-11-03,82878043cb34b62749748aed8ee1524a5c60a404,8287804,volt,volt: Q161 -- jobs-table entry point is a bash wrapper over a grader that can say 'cannot grade'
2026-11-03,1bd59257febf6142390216cd3514b2cef9fd1cea,1bd5925,volt,volt: Q160 -- beam test bound its module to a host path; binds beside itself and asserts it
2026-11-03,bb8aec7de9908370aea664a8ffbb7420d28a2a95,bb8aec7,beam,beam: Tarjan articulation points and bridges (multigraph-aware)
2026-11-03,320474b1f9f1c254ca3c0ce4d5e4c93ba20f9b75,320474b,ledger,ledger: extension census 2026-11-03 verified 31 rows
2026-11-03,7ed56b217014b18dc0f79eb43a0951ef8ec3638b,7ed56b2,quill,quill: draft short story The Last Cartographer
2026-11-03,5ba827345d932474bdd9606bedc7cb77c148ae5e,5ba8273,beam,beam: TTL-aware LRU cache module with tests
2026-11-03,175d1efde68f3013f2eb80bf120609299d78f6c8,175d1ef,ledger,"ledger: countries table extraction 2026-11-03 (250 rows, verified)"
2026-11-03,0bb206f2c61e60c61352accbda1296c4ffc3c4cb,0bb206f,ledger,ledger: countries table extraction from REST Countries v3.1 dataset (250 rows)
2026-11-03,a2f1a79df405ffe470da2b57a1487cf6a101a16c,a2f1a79,ledger,ledger: commit commit-census 2026-11-01..03 (day + author TSV tables)
2026-11-03,b19fd4ff41662caa90575b95708ae25c95d3b813,b19fd4f,sol,sol: sol-lane triage 2026-11-03 manifest + independent verifier + verdict gate
2026-11-03,44856a492096ee0e1248f7c365379f91fc5ac984,44856a4,quill,quill: finalize wizard-draft-quick-checklist to v1.0
2026-11-03,1ce0e9051dcab7776e5e814c06a994acab591850,1ce0e90,Timmy,audit: append-only ledger snapshot 2026-11-03
2026-11-03,2ccf8a6b6bb84d5064f2e886947308ca3ea4b6be,2ccf8a6,volt,"volt: land Q154 -- quill census pinned to a revision, second gate is a pointer"
2026-11-03,801a2b497053190609bac4dd4602375a4eedf9f4,801a2b4,volt,"volt: rebind the lane ledgers at d5f24f1 -- four unclassed verifiers named, nine drifted rows re-measured, gate green"
2026-11-03,d5f24f1e0da1a30ebf36990d3ec80caeb573bbb0,d5f24f1,beam,beam: min-cost max-flow (successive shortest path w/ potentials) + tests
1 date hash short author subject
2 2026-11-03 34a9125c887d0ce6ee43dfbe74a3c7bfb0453713 34a9125 sol sol: refresh working-tree triage manifest and gate (306 files)
3 2026-11-03 58162526849491c2269e96eba557d3e0faf80d5a 5816252 quill quill: add daily standup template draft
4 2026-11-03 57cea244df2c76309cfa5f710b00dd2db16d3453 57cea24 Zephyrus Sparkborn check-in 2026-11-03
5 2026-11-03 07153d93649869c205386c82f531e4c7b1dd611d 07153d9 sol sol: refresh sol-profile-triage-2026-11-03 (drop volatile size check)
6 2026-11-03 ea4706b72b7894d6c566d7f9abb78fc2f3aee0af ea4706b ledger ledger: extract countries-by-population table to CSV
7 2026-11-03 7c45fceb82cffa4b6a5693d09bfc9472defbbf76 7c45fce sol sol: add sol-profile-triage-2026-11-03 manifest (69 profile entries, rule-based triage)
8 2026-11-03 03b2a04f24cd8df48ec8eacc6fe8a788828ec67f 03b2a04 ledger Merge branch 'main' of https://forge.alexanderwhitestone.com/git/stackchain/troupe-standup
9 2026-11-03 d9d03df549fdaa0870a7c66d292e3690fa942b63 d9d03df ledger ledger: crypto top-10 coins by market cap extraction
10 2026-11-03 4794e25ba8c0520bb4388b7a1e63588c70f291f7 4794e25 quill quill: add meeting summary template draft
11 2026-11-03 a9b6de95eacc1e442d20f1fa10d17f3803a97caa a9b6de9 Zephyrus Sparkborn career: apply-queue-2026-11-03 (Zeph lane)
12 2026-11-03 3b2037628e24c303efb7e251d7746e843951a47f 3b20376 Zephyrus Sparkborn career: daily-2026-11-03 (Zeph lane)
13 2026-11-03 5646d774f987b4389c50fe8e48296e9323c8cf17 5646d77 beam beam: add injectable clock to TokenBucket for deterministic testing
14 2026-11-03 a96da08d8b3468f5f56eadcf7728c14a1b347522 a96da08 volt volt: land Q163 — the class guard reads assertions, not names
15 2026-11-03 f0b3a64efacb5aaeba4f7671d5aee0ecbf3e71b8 f0b3a64 ledger volt: land Q162 — beam test binds its module beside itself
16 2026-11-03 bcaede7af3d907d57310d55a112a903507022c6a bcaede7 beam beam: regex matching (LeetCode 10) recursive+DP with cross-check tests
17 2026-11-03 5a9d4a277ee1d0bcc3961ccdb15791dd3c79276b 5a9d4a2 ledger sol: working-tree triage 2026-11-03 manifest + verifier + gate
18 2026-11-03 11f646bee3e012702b331bb8d96d621d40340b44 11f646b ledger ledger: git-tracked file LOC census (5053 files, 211MB, 2.2M lines)
19 2026-11-03 c7d13545f8b390ddccccfd2aebeb0252b1372159 c7d1354 quill quill: draft grant abstract for sovereign AI stack project
20 2026-11-03 8639cabff472e6d5209317828c8dd55574b127ca 8639cab beam beam: smoke verification for intervals half-open merge semantics
21 2026-11-03 19b34067a3eddaed39361b3004c947ef24739a59 19b3406 ledger ledger: commit census of troupe-standup main branch (2567 data commits, 24 authors)
22 2026-11-03 e7ab0865db835019edb5b98e1f46e7c229703e2e e7ab086 ledger ledger: commit census of troupe-standup main branch (2570 commits)
23 2026-11-03 9488c57eb5c4488ee7ab284b5c415f3311489c8d 9488c57 ledger ledger: commit census of troupe-standup main branch
24 2026-11-03 33e8ffb8284d2cbd670949467460cb485043caaf 33e8ffb beam beam: interval merge utility with property-tested semantics
25 2026-11-03 82878043cb34b62749748aed8ee1524a5c60a404 8287804 volt volt: Q161 -- jobs-table entry point is a bash wrapper over a grader that can say 'cannot grade'
26 2026-11-03 1bd59257febf6142390216cd3514b2cef9fd1cea 1bd5925 volt volt: Q160 -- beam test bound its module to a host path; binds beside itself and asserts it
27 2026-11-03 bb8aec7de9908370aea664a8ffbb7420d28a2a95 bb8aec7 beam beam: Tarjan articulation points and bridges (multigraph-aware)
28 2026-11-03 320474b1f9f1c254ca3c0ce4d5e4c93ba20f9b75 320474b ledger ledger: extension census 2026-11-03 verified 31 rows
29 2026-11-03 7ed56b217014b18dc0f79eb43a0951ef8ec3638b 7ed56b2 quill quill: draft short story The Last Cartographer
30 2026-11-03 5ba827345d932474bdd9606bedc7cb77c148ae5e 5ba8273 beam beam: TTL-aware LRU cache module with tests
31 2026-11-03 175d1efde68f3013f2eb80bf120609299d78f6c8 175d1ef ledger ledger: countries table extraction 2026-11-03 (250 rows, verified)
32 2026-11-03 0bb206f2c61e60c61352accbda1296c4ffc3c4cb 0bb206f ledger ledger: countries table extraction from REST Countries v3.1 dataset (250 rows)
33 2026-11-03 a2f1a79df405ffe470da2b57a1487cf6a101a16c a2f1a79 ledger ledger: commit commit-census 2026-11-01..03 (day + author TSV tables)
34 2026-11-03 b19fd4ff41662caa90575b95708ae25c95d3b813 b19fd4f sol sol: sol-lane triage 2026-11-03 manifest + independent verifier + verdict gate
35 2026-11-03 44856a492096ee0e1248f7c365379f91fc5ac984 44856a4 quill quill: finalize wizard-draft-quick-checklist to v1.0
36 2026-11-03 1ce0e9051dcab7776e5e814c06a994acab591850 1ce0e90 Timmy audit: append-only ledger snapshot 2026-11-03
37 2026-11-03 2ccf8a6b6bb84d5064f2e886947308ca3ea4b6be 2ccf8a6 volt volt: land Q154 -- quill census pinned to a revision, second gate is a pointer
38 2026-11-03 801a2b497053190609bac4dd4602375a4eedf9f4 801a2b4 volt volt: rebind the lane ledgers at d5f24f1 -- four unclassed verifiers named, nine drifted rows re-measured, gate green
39 2026-11-03 d5f24f1e0da1a30ebf36990d3ec80caeb573bbb0 d5f24f1 beam beam: min-cost max-flow (successive shortest path w/ potentials) + tests
@@ -0,0 +1,60 @@
# 2026-11-03 commit census
Source: `git log --after=2026-11-03T00:00:00 --before=2026-11-04T00:00:00` of `/root/troupe-standup` (troupe-standup `main`), real commit objects.
Commits in window: **38**. Distinct authors: **7**.
## Per-author
| author | commits |
|---|---|
| ledger | 13 |
| beam | 7 |
| quill | 5 |
| volt | 5 |
| sol | 4 |
| Zephyrus Sparkborn | 3 |
| Timmy | 1 |
| **Total** | **38** |
## Per-commit
| date | hash | short | author | subject |
|---|---|---|---|---|
| 2026-11-03 | `34a9125c887d0ce6ee43dfbe74a3c7bfb0453713` | `34a9125` | sol | sol: refresh working-tree triage manifest and gate (306 files) |
| 2026-11-03 | `58162526849491c2269e96eba557d3e0faf80d5a` | `5816252` | quill | quill: add daily standup template draft |
| 2026-11-03 | `57cea244df2c76309cfa5f710b00dd2db16d3453` | `57cea24` | Zephyrus Sparkborn | check-in 2026-11-03 |
| 2026-11-03 | `07153d93649869c205386c82f531e4c7b1dd611d` | `07153d9` | sol | sol: refresh sol-profile-triage-2026-11-03 (drop volatile size check) |
| 2026-11-03 | `ea4706b72b7894d6c566d7f9abb78fc2f3aee0af` | `ea4706b` | ledger | ledger: extract countries-by-population table to CSV |
| 2026-11-03 | `7c45fceb82cffa4b6a5693d09bfc9472defbbf76` | `7c45fce` | sol | sol: add sol-profile-triage-2026-11-03 manifest (69 profile entries, rule-based triage) |
| 2026-11-03 | `03b2a04f24cd8df48ec8eacc6fe8a788828ec67f` | `03b2a04` | ledger | Merge branch 'main' of https://forge.alexanderwhitestone.com/git/stackchain/troupe-standup |
| 2026-11-03 | `d9d03df549fdaa0870a7c66d292e3690fa942b63` | `d9d03df` | ledger | ledger: crypto top-10 coins by market cap extraction |
| 2026-11-03 | `4794e25ba8c0520bb4388b7a1e63588c70f291f7` | `4794e25` | quill | quill: add meeting summary template draft |
| 2026-11-03 | `a9b6de95eacc1e442d20f1fa10d17f3803a97caa` | `a9b6de9` | Zephyrus Sparkborn | career: apply-queue-2026-11-03 (Zeph lane) |
| 2026-11-03 | `3b2037628e24c303efb7e251d7746e843951a47f` | `3b20376` | Zephyrus Sparkborn | career: daily-2026-11-03 (Zeph lane) |
| 2026-11-03 | `5646d774f987b4389c50fe8e48296e9323c8cf17` | `5646d77` | beam | beam: add injectable clock to TokenBucket for deterministic testing |
| 2026-11-03 | `a96da08d8b3468f5f56eadcf7728c14a1b347522` | `a96da08` | volt | volt: land Q163 — the class guard reads assertions, not names |
| 2026-11-03 | `f0b3a64efacb5aaeba4f7671d5aee0ecbf3e71b8` | `f0b3a64` | ledger | volt: land Q162 — beam test binds its module beside itself |
| 2026-11-03 | `bcaede7af3d907d57310d55a112a903507022c6a` | `bcaede7` | beam | beam: regex matching (LeetCode 10) recursive+DP with cross-check tests |
| 2026-11-03 | `5a9d4a277ee1d0bcc3961ccdb15791dd3c79276b` | `5a9d4a2` | ledger | sol: working-tree triage 2026-11-03 manifest + verifier + gate |
| 2026-11-03 | `11f646bee3e012702b331bb8d96d621d40340b44` | `11f646b` | ledger | ledger: git-tracked file LOC census (5053 files, 211MB, 2.2M lines) |
| 2026-11-03 | `c7d13545f8b390ddccccfd2aebeb0252b1372159` | `c7d1354` | quill | quill: draft grant abstract for sovereign AI stack project |
| 2026-11-03 | `8639cabff472e6d5209317828c8dd55574b127ca` | `8639cab` | beam | beam: smoke verification for intervals half-open merge semantics |
| 2026-11-03 | `19b34067a3eddaed39361b3004c947ef24739a59` | `19b3406` | ledger | ledger: commit census of troupe-standup main branch (2567 data commits, 24 authors) |
| 2026-11-03 | `e7ab0865db835019edb5b98e1f46e7c229703e2e` | `e7ab086` | ledger | ledger: commit census of troupe-standup main branch (2570 commits) |
| 2026-11-03 | `9488c57eb5c4488ee7ab284b5c415f3311489c8d` | `9488c57` | ledger | ledger: commit census of troupe-standup main branch |
| 2026-11-03 | `33e8ffb8284d2cbd670949467460cb485043caaf` | `33e8ffb` | beam | beam: interval merge utility with property-tested semantics |
| 2026-11-03 | `82878043cb34b62749748aed8ee1524a5c60a404` | `8287804` | volt | volt: Q161 -- jobs-table entry point is a bash wrapper over a grader that can say 'cannot grade' |
| 2026-11-03 | `1bd59257febf6142390216cd3514b2cef9fd1cea` | `1bd5925` | volt | volt: Q160 -- beam test bound its module to a host path; binds beside itself and asserts it |
| 2026-11-03 | `bb8aec7de9908370aea664a8ffbb7420d28a2a95` | `bb8aec7` | beam | beam: Tarjan articulation points and bridges (multigraph-aware) |
| 2026-11-03 | `320474b1f9f1c254ca3c0ce4d5e4c93ba20f9b75` | `320474b` | ledger | ledger: extension census 2026-11-03 verified 31 rows |
| 2026-11-03 | `7ed56b217014b18dc0f79eb43a0951ef8ec3638b` | `7ed56b2` | quill | quill: draft short story The Last Cartographer |
| 2026-11-03 | `5ba827345d932474bdd9606bedc7cb77c148ae5e` | `5ba8273` | beam | beam: TTL-aware LRU cache module with tests |
| 2026-11-03 | `175d1efde68f3013f2eb80bf120609299d78f6c8` | `175d1ef` | ledger | ledger: countries table extraction 2026-11-03 (250 rows, verified) |
| 2026-11-03 | `0bb206f2c61e60c61352accbda1296c4ffc3c4cb` | `0bb206f` | ledger | ledger: countries table extraction from REST Countries v3.1 dataset (250 rows) |
| 2026-11-03 | `a2f1a79df405ffe470da2b57a1487cf6a101a16c` | `a2f1a79` | ledger | ledger: commit commit-census 2026-11-01..03 (day + author TSV tables) |
| 2026-11-03 | `b19fd4ff41662caa90575b95708ae25c95d3b813` | `b19fd4f` | sol | sol: sol-lane triage 2026-11-03 manifest + independent verifier + verdict gate |
| 2026-11-03 | `44856a492096ee0e1248f7c365379f91fc5ac984` | `44856a4` | quill | quill: finalize wizard-draft-quick-checklist to v1.0 |
| 2026-11-03 | `1ce0e9051dcab7776e5e814c06a994acab591850` | `1ce0e90` | Timmy | audit: append-only ledger snapshot 2026-11-03 |
| 2026-11-03 | `2ccf8a6b6bb84d5064f2e886947308ca3ea4b6be` | `2ccf8a6` | volt | volt: land Q154 -- quill census pinned to a revision, second gate is a pointer |
| 2026-11-03 | `801a2b497053190609bac4dd4602375a4eedf9f4` | `801a2b4` | volt | volt: rebind the lane ledgers at d5f24f1 -- four unclassed verifiers named, nine drifted rows re-measured, gate green |
| 2026-11-03 | `d5f24f1e0da1a30ebf36990d3ec80caeb573bbb0` | `d5f24f1` | beam | beam: min-cost max-flow (successive shortest path w/ potentials) + tests |
@@ -0,0 +1,81 @@
#!/usr/bin/env python3
"""CHECK-2026-11-03-commits-census
Verdict: exit 0 only if the two ledger-census tables on disk exactly match a
fresh recomputation from the troupe-standup git objects for 2026-11-03.
"""
import csv
import os
import subprocess
import sys
REPO = '/root/troupe-standup'
ART = os.path.join(REPO, 'wizard-work', 'ledger', '2026-11-03-commits-census.csv')
WANT = os.path.join(REPO, 'wizard-work', 'ledger', '2026-11-03-commits-by-author.csv')
OUT = '/root/.hermes/wizard-outputs/ledger'
EXPECTED_ROWS = 38
def run_git(args):
return subprocess.run(
['git', '-C', REPO] + args, capture_output=True, text=True, check=True
).stdout
def main():
r = run_git([
'log', '--format=%ad%x00%H%x00%h%x00%an%x00%s',
'--date=short',
'--after=2026-11-03T00:00:00', '--before=2026-11-04T00:00:00',
'--no-decorate',
])
rows = [ln.split('\x00') for ln in r.splitlines() if ln]
if len(rows) != EXPECTED_ROWS:
print(f'FAIL: expected {EXPECTED_ROWS} commits on 2026-11-03, got {len(rows)}')
sys.exit(1)
# 1) per-commit CSV must match the git rows exactly
with open(ART, newline='') as f:
art = list(csv.reader(f))
if art[0] != ['date', 'hash', 'short', 'author', 'subject']:
print(f'FAIL: bad header {art[0]}')
sys.exit(1)
if len(art) != EXPECTED_ROWS + 1:
print(f'FAIL: expected {EXPECTED_ROWS + 1} lines in {ART}, got {len(art)}')
sys.exit(1)
for git_row, csv_row in zip(rows, art[1:]):
# git_row = [date, full_hash, short, author, subject]
if git_row[0] != csv_row[0] or git_row[2] != csv_row[2] \
or git_row[3] != csv_row[3] or git_row[4] != csv_row[4]:
print(f'FAIL: row mismatch {git_row} vs {csv_row}')
sys.exit(1)
# 2) by-author table must sum to the same totals
want = {}
for date, full, short, author, subject in rows:
want[author] = want.get(author, 0) + 1
got = {}
with open(WANT, newline='') as f:
for row in csv.DictReader(f):
got[row['author']] = int(row['count'])
if got != want:
print(f'FAIL: by-author mismatch\n got={got}\n want={want}')
sys.exit(1)
if sum(got.values()) != EXPECTED_ROWS:
print('FAIL: by-author counts do not sum to 38')
sys.exit(1)
# 3) copies in ledger-outputs must exist and be non-empty
for name in ('2026-11-03-commits-census.csv', '2026-11-03-commits-by-author.csv'):
p = os.path.join(OUT, name)
if not os.path.exists(p) or os.path.getsize(p) == 0:
print(f'FAIL: missing/empty {p}')
sys.exit(1)
print(f'OK: {EXPECTED_ROWS} commits on 2026-11-03, {len(want)} authors; '
f'per-commit and per-author tables match `git log`')
sys.exit(0)
if __name__ == '__main__':
main()
@@ -0,0 +1,100 @@
#!/usr/bin/env python3
"""Build the 2026-11-03 commit census for the ledger lane.
Real source: `git log` of the troupe-standup repository over calendar day
2026-11-03. Nothing is guessed; every row is traced to a commit object.
"""
import csv
import os
import subprocess
REPO = '/root/troupe-standup'
DST = os.path.join(REPO, 'wizard-work', 'ledger')
OUT = '/root/.hermes/wizard-outputs/ledger'
os.makedirs(OUT, exist_ok=True)
DATE = '2026-11-03'
def run_git(args):
return subprocess.run(
['git', '-C', REPO] + args, capture_output=True, text=True, check=True
).stdout
def main():
r = run_git([
'log', '--format=%ad%x00%H%x00%h%x00%an%x00%s',
'--date=short',
'--after=2026-11-03T00:00:00', '--before=2026-11-04T00:00:00',
'--no-decorate',
])
rows = [ln.split('\x00') for ln in r.splitlines() if ln]
assert len(rows) == 38, f'expected 38 commits on {DATE}, got {len(rows)}'
# ---- per-commit table (machine CSV) ----
per_commit = os.path.join(DST, '2026-11-03-commits-census.csv')
with open(per_commit, 'w', newline='') as f:
w = csv.writer(f)
w.writerow(['date', 'hash', 'short', 'author', 'subject'])
for date, full, short, author, subject in rows:
w.writerow([date, full, short, author, subject])
# ---- per-author aggregation ----
by_author = {}
for date, full, short, author, subject in rows:
by_author[author] = by_author.get(author, 0) + 1
total = sum(by_author.values())
assert total == len(rows)
by_author_csv = os.path.join(DST, '2026-11-03-commits-by-author.csv')
with open(by_author_csv, 'w', newline='') as f:
w = csv.writer(f)
w.writerow(['date', 'author', 'count'])
for author in sorted(by_author, key=lambda a: (-by_author[a], a)):
w.writerow([DATE, author, by_author[author]])
# ---- markdown artifact ----
lines = []
lines.append('# 2026-11-03 commit census')
lines.append('')
lines.append('Source: `git log --after=2026-11-03T00:00:00 --before=2026-11-04T00:00:00` of '
'`/root/troupe-standup` (troupe-standup `main`), real commit objects.')
lines.append(f'Commits in window: **{len(rows)}**. Distinct authors: **{len(by_author)}**.')
lines.append('')
lines.append('## Per-author')
lines.append('')
lines.append('| author | commits |')
lines.append('|---|---|')
for author in sorted(by_author, key=lambda a: (-by_author[a], a)):
lines.append(f"| {author} | {by_author[author]} |")
lines.append(f'| **Total** | **{total}** |')
lines.append('')
lines.append('## Per-commit')
lines.append('')
lines.append('| date | hash | short | author | subject |')
lines.append('|---|---|---|---|---|')
for date, full, short, author, subject in rows:
lines.append(f"| {date} | `{full}` | `{short}` | {author} | {subject} |")
lines.append('')
md = os.path.join(DST, '2026-11-03-commits-census.md')
with open(md, 'w') as f:
f.write('\n'.join(lines))
# ---- copy to ledger-outputs ----
for path in (per_commit, by_author_csv, md):
dest = path.replace(DST, OUT)
with open(path) as src, open(dest, 'w') as dst_:
dst_.write(src.read())
print(f'OK: {len(rows)} commits on {DATE}, {len(by_author)} authors')
print(f'per-commit : {per_commit}')
print(f'by-author : {by_author_csv}')
print(f'markdown : {md}')
print('by author (sorted):')
for author in sorted(by_author, key=lambda a: (-by_author[a], a)):
print(f' {author!r:24} {by_author[author]}')
if __name__ == '__main__':
main()