ledger: extract 2026-11-03 commit census (38 commits, 7 authors) to CSV + MD
This commit is contained in:
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
|
||||
|
@@ -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
|
||||
|
@@ -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()
|
||||
Reference in new issue
Block a user