From 61e329a861912fab75758f6d16858cf4d07363d6 Mon Sep 17 00:00:00 2001 From: ledger Date: Mon, 2 Nov 2026 09:31:11 +0000 Subject: [PATCH] ledger: extract replies index 2026-11-02 --- wizard-work/ledger/extract_replies_index.py | 115 +++++ .../ledger/replies-catalog-2026-11-02.md | 477 ++++++++++++++++++ .../ledger/replies-catalog-2026-11-02.tsv | 431 ++++++++++++++++ .../ledger/verify_replies_index_2026-11-02.py | 84 +++ 4 files changed, 1107 insertions(+) create mode 100644 wizard-work/ledger/extract_replies_index.py create mode 100644 wizard-work/ledger/replies-catalog-2026-11-02.md create mode 100644 wizard-work/ledger/replies-catalog-2026-11-02.tsv create mode 100644 wizard-work/ledger/verify_replies_index_2026-11-02.py diff --git a/wizard-work/ledger/extract_replies_index.py b/wizard-work/ledger/extract_replies_index.py new file mode 100644 index 0000000..f0775e3 --- /dev/null +++ b/wizard-work/ledger/extract_replies_index.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python3 +"""Extract the reply index from the troupe-standup replies/ directory. + +Lane: Extract -- data extraction and tables. +Writes a per-reply catalog (TSV) plus a per-recipient summary (Markdown table). + +Accepted filenames: + YYYY-MM-DD-to--.md + YYYY-MM-DD-to--interview.md (interview, no number by construction) + YYYY-MM-DD-to-.md (bare reply, no number) +""" +import glob +import os +import re +import sys +from collections import Counter +from datetime import date + +REPO = "/root/troupe-standup" +REPLIES_DIR = os.path.join(REPO, "replies") +OUT_DIR = os.path.join(REPO, "wizard-work", "ledger") +CATALOG_TSV = os.path.join(OUT_DIR, "replies-catalog-2026-11-02.tsv") +SUMMARY_MD = os.path.join(OUT_DIR, "replies-catalog-2026-11-02.md") + +FILENAME_RE = re.compile( + r"^(?P\d{4}-\d{2}-\d{2})-to-(?P[A-Za-z0-9_-]+)" + r"(?:-(?P\d+|interview|preview))?\.md$" +) + + +def categorize(suffix): + if suffix == "interview": + return "interview" + if suffix == "preview": + return "preview" + return "reply" + + +def main(): + md_files = sorted(glob.glob(os.path.join(REPLIES_DIR, "*.md"))) + assert md_files, "no .md files found" + + rows = [] + other_files = [] + for path in md_files: + fn = os.path.basename(path) + m = FILENAME_RE.match(fn) + if m: + suffix = m.group("suffix") or "" + rows.append({ + "date": m.group("date"), + "recipient": m.group("recipient"), + "number": suffix if suffix.isdigit() else "", + "category": categorize(suffix), + "file": fn, + }) + else: + other_files.append(fn) + + os.makedirs(OUT_DIR, exist_ok=True) + with open(CATALOG_TSV, "w", encoding="utf-8", newline="") as f: + f.write("date\trecipient\tnumber\tcategory\tfile\n") + for r in rows: + f.write("%s\t%s\t%s\t%s\t%s\n" % ( + r["date"], r["recipient"], r["number"], r["category"], r["file"])) + + recipient_counts = Counter(r["recipient"] for r in rows) + total = len(rows) + by_date = Counter(r["date"] for r in rows) + cat_counts = Counter(r["category"] for r in rows) + + lines = [] + lines.append("# Reply index — extracted %s" % date.today().isoformat()) + lines.append("") + lines.append("Source: `%s/replies/*.md` (files matching `YYYY-MM-DD-to-[-|-interview|-preview].md`)." + % REPLIES_DIR) + lines.append("") + lines.append("## Per-recipient reply counts") + lines.append("") + lines.append("| recipient | replies |") + lines.append("|---|---|") + for recip in sorted(recipient_counts): + lines.append("| %s | %d |" % (recip, recipient_counts[recip])) + lines.append("| **total** | **%d** |" % total) + lines.append("") + lines.append("## Per-day reply counts") + lines.append("") + lines.append("| date | replies |") + lines.append("|---|---|") + for d in sorted(by_date): + lines.append("| %s | %d |" % (d, by_date[d])) + lines.append("| **total** | **%d** |" % total) + lines.append("") + lines.append("## Categories") + lines.append("") + lines.append("| category | count |") + lines.append("|---|---|") + for c in sorted(cat_counts): + lines.append("| %s | %d |" % (c, cat_counts[c])) + lines.append("| **total** | **%d** |" % total) + lines.append("") + + with open(SUMMARY_MD, "w", encoding="utf-8") as f: + f.write("\n".join(lines)) + + print("rows written:", total) + print("categories:", dict(cat_counts)) + print("recipients:", len(recipient_counts)) + print("other_files:", other_files) + print("catalog:", CATALOG_TSV) + print("summary:", SUMMARY_MD) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/wizard-work/ledger/replies-catalog-2026-11-02.md b/wizard-work/ledger/replies-catalog-2026-11-02.md new file mode 100644 index 0000000..75d7068 --- /dev/null +++ b/wizard-work/ledger/replies-catalog-2026-11-02.md @@ -0,0 +1,477 @@ +# Reply index — extracted 2026-11-02 + +Source: `/root/troupe-standup/replies/replies/*.md` (files matching `YYYY-MM-DD-to-[-|-interview|-preview].md`). + +## Per-recipient reply counts + +| recipient | replies | +|---|---| +| argus-01 | 1 | +| beam-01 | 1 | +| beam-02 | 1 | +| beam-03 | 1 | +| beam-04 | 1 | +| beam-05 | 1 | +| beam-06 | 1 | +| beam-07 | 1 | +| beam-08 | 1 | +| beam-09 | 1 | +| beam-10 | 1 | +| beam-11 | 1 | +| beam-12 | 1 | +| beam-13 | 1 | +| beam-14 | 1 | +| beam-15 | 1 | +| beam-16 | 1 | +| beam-17 | 1 | +| beam-18 | 1 | +| beam-19 | 1 | +| beam-20 | 1 | +| beam-21 | 1 | +| beam-22 | 1 | +| beam-23 | 1 | +| beam-24 | 1 | +| beam-25 | 1 | +| beam-26 | 1 | +| beam-27 | 1 | +| beam-28 | 1 | +| beam-29 | 1 | +| beam-30 | 1 | +| beam-31 | 1 | +| cassian-01 | 1 | +| forge-01 | 1 | +| forge-02 | 1 | +| forge-03 | 1 | +| forge-04 | 1 | +| forge-05 | 1 | +| forge-06 | 1 | +| forge-07 | 1 | +| forge-08 | 1 | +| forge-09 | 1 | +| forge-10 | 1 | +| forge-11 | 1 | +| forge-12 | 1 | +| forge-13 | 1 | +| forge-14 | 1 | +| forge-15 | 1 | +| forge-16 | 1 | +| forge-17 | 1 | +| forge-18 | 1 | +| forge-19 | 1 | +| forge-20 | 1 | +| forge-21 | 1 | +| gemini-01 | 1 | +| ledger-01 | 1 | +| ledger-02 | 1 | +| ledger-03 | 1 | +| ledger-04 | 1 | +| ledger-05 | 1 | +| ledger-06 | 1 | +| ledger-07 | 1 | +| ledger-08 | 1 | +| ledger-09 | 1 | +| ledger-10 | 1 | +| ledger-11 | 1 | +| ledger-12 | 1 | +| ledger-13 | 1 | +| ledger-14 | 1 | +| ledger-15 | 1 | +| ledger-16 | 1 | +| ledger-17 | 1 | +| ledger-18 | 1 | +| ledger-19 | 1 | +| mercury-01 | 1 | +| mercury-02 | 1 | +| mercury-03 | 1 | +| mercury-04 | 1 | +| mercury-05 | 1 | +| mercury-06 | 1 | +| mercury-07 | 1 | +| mercury-08 | 1 | +| mercury-09 | 1 | +| mercury-10 | 1 | +| mercury-11 | 1 | +| mercury-12 | 1 | +| merlin-01 | 1 | +| merlin-02 | 1 | +| merlin-03 | 1 | +| merlin-04 | 1 | +| merlin-05 | 1 | +| merlin-06 | 1 | +| merlin-07 | 1 | +| merlin-08 | 1 | +| merlin-09 | 1 | +| merlin-10 | 1 | +| merlin-11 | 1 | +| merlin-12 | 1 | +| merlin-13 | 1 | +| merlin-14 | 1 | +| merlin-15 | 1 | +| merlin-16 | 1 | +| merlin-17 | 1 | +| merlin-18 | 1 | +| merlin-19 | 1 | +| merlin-20 | 1 | +| merlin-21 | 1 | +| merlin-22 | 1 | +| merlin-23 | 1 | +| merlin-24 | 1 | +| merlin-25 | 1 | +| merlin-26 | 1 | +| merlin-27 | 1 | +| merlin-28 | 1 | +| merlin-29 | 1 | +| merlin-30 | 1 | +| merlin-31 | 1 | +| merlin-32 | 1 | +| merlin-33 | 1 | +| merlin-34 | 1 | +| merlin-35 | 1 | +| merlin-36 | 1 | +| merlin-37 | 1 | +| merlin-38 | 1 | +| merlin-39 | 1 | +| merlin-40 | 1 | +| merlin-41 | 1 | +| merlin-42 | 1 | +| merlin-43 | 1 | +| merlin-44 | 1 | +| merlin-45 | 1 | +| merlin-46 | 1 | +| merlin-47 | 1 | +| merlin-48 | 1 | +| merlin-49 | 1 | +| merlin-50 | 1 | +| merlin-51 | 1 | +| merlin-52 | 1 | +| merlin-53 | 1 | +| merlin-54 | 1 | +| merlin-55 | 1 | +| merlin-56 | 1 | +| merlin-57 | 1 | +| merlin-58 | 1 | +| merlin-59 | 1 | +| merlin-60 | 1 | +| merlin-61 | 1 | +| merlin-62 | 1 | +| merlin-63 | 1 | +| merlin-64 | 1 | +| merlin-65 | 1 | +| merlin-66 | 1 | +| merlin-67 | 1 | +| null-01 | 1 | +| null-02 | 1 | +| null-03 | 1 | +| null-04 | 1 | +| null-05 | 1 | +| null-06 | 1 | +| null-07 | 1 | +| quill-01 | 1 | +| quill-02 | 1 | +| quill-03 | 1 | +| quill-04 | 1 | +| quill-05 | 1 | +| quill-06 | 1 | +| quill-07 | 1 | +| quill-08 | 1 | +| sol-01 | 1 | +| sol-02 | 1 | +| sol-03 | 1 | +| sol-04 | 1 | +| sol-05 | 1 | +| sol-06 | 1 | +| sol-07 | 1 | +| sol-08 | 1 | +| sol-09 | 1 | +| sol-10 | 1 | +| sol-11 | 1 | +| sol-12 | 1 | +| sol-13 | 1 | +| sol-14 | 1 | +| sol-15 | 1 | +| spark-01 | 1 | +| spark-02 | 1 | +| spark-03 | 1 | +| spark-04 | 1 | +| spark-05 | 1 | +| spark-06 | 1 | +| spark-07 | 1 | +| spark-08 | 1 | +| spark-09 | 1 | +| spark-10 | 1 | +| spark-11 | 1 | +| spark-12 | 1 | +| spark-13 | 1 | +| spark-14 | 1 | +| spark-15 | 1 | +| spark-16 | 1 | +| spark-17 | 1 | +| spark-18 | 1 | +| spark-19 | 1 | +| spark-20 | 1 | +| spark-21 | 1 | +| spark-22 | 1 | +| sphinx-01 | 1 | +| sphinx-02 | 1 | +| sphinx-03 | 1 | +| sphinx-04 | 1 | +| sphinx-05 | 1 | +| sphinx-06 | 1 | +| timmy-56 | 1 | +| timmy-57 | 1 | +| timmy-60 | 1 | +| timmy-61 | 1 | +| timmy-62 | 1 | +| volt-01 | 1 | +| volt-02 | 1 | +| volt-03 | 1 | +| volt-04 | 1 | +| volt-05 | 1 | +| volt-06 | 1 | +| volt-07 | 1 | +| volt-08 | 1 | +| volt-09 | 1 | +| volt-10 | 1 | +| volt-11 | 1 | +| volt-12 | 1 | +| volt-13 | 1 | +| volt-14 | 1 | +| volt-15 | 1 | +| volt-16 | 1 | +| volt-17 | 1 | +| volt-18 | 1 | +| volt-19 | 1 | +| volt-20 | 1 | +| volt-21 | 1 | +| volt-22 | 1 | +| volt-23 | 1 | +| volt-24 | 1 | +| volt-25 | 1 | +| volt-26 | 1 | +| volt-27 | 1 | +| volt-28 | 1 | +| volt-29 | 1 | +| volt-30 | 1 | +| volt-31 | 1 | +| volt-32 | 1 | +| volt-33 | 1 | +| volt-34 | 1 | +| volt-35 | 1 | +| volt-36 | 1 | +| volt-37 | 1 | +| volt-38 | 1 | +| volt-39 | 1 | +| volt-40 | 1 | +| volt-41 | 1 | +| volt-42 | 1 | +| volt-43 | 1 | +| volt-44 | 1 | +| volt-45 | 1 | +| volt-46 | 1 | +| volt-47 | 1 | +| volt-48 | 1 | +| volt-49 | 1 | +| volt-50 | 1 | +| volt-51 | 1 | +| volt-52 | 1 | +| volt-53 | 1 | +| volt-54 | 1 | +| volt-55 | 1 | +| zephyrus | 1 | +| zephyrus-02 | 1 | +| zephyrus-03 | 1 | +| zephyrus-04 | 1 | +| zephyrus-05 | 1 | +| zephyrus-06 | 1 | +| zephyrus-07 | 1 | +| zephyrus-08 | 1 | +| zephyrus-09 | 1 | +| zephyrus-10 | 1 | +| zephyrus-100 | 1 | +| zephyrus-101 | 1 | +| zephyrus-102 | 1 | +| zephyrus-103 | 1 | +| zephyrus-104 | 1 | +| zephyrus-105 | 1 | +| zephyrus-106 | 1 | +| zephyrus-107 | 1 | +| zephyrus-108 | 1 | +| zephyrus-109 | 1 | +| zephyrus-11 | 1 | +| zephyrus-110 | 1 | +| zephyrus-111 | 1 | +| zephyrus-112 | 1 | +| zephyrus-113 | 1 | +| zephyrus-114 | 1 | +| zephyrus-115 | 1 | +| zephyrus-116 | 1 | +| zephyrus-118 | 1 | +| zephyrus-119 | 1 | +| zephyrus-12 | 1 | +| zephyrus-120 | 1 | +| zephyrus-121 | 1 | +| zephyrus-122 | 1 | +| zephyrus-123 | 1 | +| zephyrus-124 | 1 | +| zephyrus-125 | 1 | +| zephyrus-126 | 1 | +| zephyrus-127 | 1 | +| zephyrus-128 | 1 | +| zephyrus-129 | 1 | +| zephyrus-13 | 1 | +| zephyrus-130 | 1 | +| zephyrus-131 | 1 | +| zephyrus-132 | 1 | +| zephyrus-133 | 1 | +| zephyrus-134 | 1 | +| zephyrus-135 | 1 | +| zephyrus-136 | 1 | +| zephyrus-137 | 1 | +| zephyrus-138 | 1 | +| zephyrus-139 | 1 | +| zephyrus-14 | 1 | +| zephyrus-140 | 1 | +| zephyrus-141 | 1 | +| zephyrus-142 | 1 | +| zephyrus-143 | 1 | +| zephyrus-144 | 1 | +| zephyrus-145 | 1 | +| zephyrus-146 | 1 | +| zephyrus-147 | 1 | +| zephyrus-148 | 1 | +| zephyrus-149 | 1 | +| zephyrus-15 | 1 | +| zephyrus-150 | 1 | +| zephyrus-16 | 1 | +| zephyrus-17 | 1 | +| zephyrus-18 | 1 | +| zephyrus-19 | 1 | +| zephyrus-20 | 1 | +| zephyrus-21 | 1 | +| zephyrus-22 | 1 | +| zephyrus-23 | 1 | +| zephyrus-24 | 1 | +| zephyrus-25 | 1 | +| zephyrus-26 | 1 | +| zephyrus-27 | 1 | +| zephyrus-28 | 1 | +| zephyrus-29 | 1 | +| zephyrus-30 | 1 | +| zephyrus-31 | 1 | +| zephyrus-32 | 1 | +| zephyrus-33 | 1 | +| zephyrus-34 | 1 | +| zephyrus-35 | 1 | +| zephyrus-36 | 1 | +| zephyrus-37 | 1 | +| zephyrus-38 | 1 | +| zephyrus-39 | 1 | +| zephyrus-40 | 1 | +| zephyrus-41 | 1 | +| zephyrus-42 | 1 | +| zephyrus-43 | 1 | +| zephyrus-44 | 1 | +| zephyrus-45 | 1 | +| zephyrus-46 | 1 | +| zephyrus-47 | 1 | +| zephyrus-48 | 1 | +| zephyrus-49 | 1 | +| zephyrus-50 | 1 | +| zephyrus-51 | 1 | +| zephyrus-52 | 1 | +| zephyrus-53 | 1 | +| zephyrus-54 | 1 | +| zephyrus-55 | 1 | +| zephyrus-56 | 1 | +| zephyrus-57 | 1 | +| zephyrus-58 | 1 | +| zephyrus-59 | 1 | +| zephyrus-60 | 1 | +| zephyrus-61 | 1 | +| zephyrus-62 | 1 | +| zephyrus-63 | 1 | +| zephyrus-64 | 1 | +| zephyrus-65 | 1 | +| zephyrus-66 | 1 | +| zephyrus-67 | 1 | +| zephyrus-68 | 1 | +| zephyrus-69 | 1 | +| zephyrus-70 | 1 | +| zephyrus-71 | 1 | +| zephyrus-72 | 1 | +| zephyrus-73 | 1 | +| zephyrus-74 | 1 | +| zephyrus-75 | 1 | +| zephyrus-76 | 1 | +| zephyrus-77 | 1 | +| zephyrus-78 | 1 | +| zephyrus-79 | 1 | +| zephyrus-80 | 1 | +| zephyrus-81 | 1 | +| zephyrus-82 | 1 | +| zephyrus-83 | 1 | +| zephyrus-84 | 1 | +| zephyrus-85 | 1 | +| zephyrus-86 | 1 | +| zephyrus-87 | 1 | +| zephyrus-88 | 1 | +| zephyrus-89 | 1 | +| zephyrus-90 | 1 | +| zephyrus-91 | 1 | +| zephyrus-92 | 1 | +| zephyrus-93 | 1 | +| zephyrus-94 | 1 | +| zephyrus-95 | 1 | +| zephyrus-96 | 1 | +| zephyrus-97 | 1 | +| zephyrus-98 | 1 | +| zephyrus-99 | 1 | +| zephyrus-interview | 10 | +| **total** | **430** | + +## Per-day reply counts + +| date | replies | +|---|---| +| 2026-09-24 | 6 | +| 2026-09-25 | 1 | +| 2026-09-26 | 7 | +| 2026-09-27 | 1 | +| 2026-09-28 | 2 | +| 2026-09-30 | 1 | +| 2026-10-01 | 4 | +| 2026-10-02 | 1 | +| 2026-10-03 | 4 | +| 2026-10-04 | 3 | +| 2026-10-05 | 3 | +| 2026-10-06 | 7 | +| 2026-10-07 | 6 | +| 2026-10-08 | 4 | +| 2026-10-09 | 2 | +| 2026-10-10 | 8 | +| 2026-10-11 | 11 | +| 2026-10-12 | 26 | +| 2026-10-13 | 18 | +| 2026-10-14 | 22 | +| 2026-10-15 | 14 | +| 2026-10-16 | 8 | +| 2026-10-17 | 13 | +| 2026-10-18 | 11 | +| 2026-10-19 | 15 | +| 2026-10-20 | 25 | +| 2026-10-21 | 39 | +| 2026-10-22 | 28 | +| 2026-10-23 | 20 | +| 2026-10-24 | 33 | +| 2026-10-25 | 25 | +| 2026-10-26 | 17 | +| 2026-10-27 | 18 | +| 2026-10-28 | 27 | +| **total** | **430** | + +## Categories + +| category | count | +|---|---| +| reply | 430 | +| **total** | **430** | diff --git a/wizard-work/ledger/replies-catalog-2026-11-02.tsv b/wizard-work/ledger/replies-catalog-2026-11-02.tsv new file mode 100644 index 0000000..74324a6 --- /dev/null +++ b/wizard-work/ledger/replies-catalog-2026-11-02.tsv @@ -0,0 +1,431 @@ +date recipient number category file +2026-09-24 zephyrus-02 reply 2026-09-24-to-zephyrus-02.md +2026-09-24 zephyrus-03 reply 2026-09-24-to-zephyrus-03.md +2026-09-24 zephyrus-04 reply 2026-09-24-to-zephyrus-04.md +2026-09-24 zephyrus-05 reply 2026-09-24-to-zephyrus-05.md +2026-09-24 zephyrus-06 reply 2026-09-24-to-zephyrus-06.md +2026-09-24 zephyrus reply 2026-09-24-to-zephyrus.md +2026-09-25 zephyrus-07 reply 2026-09-25-to-zephyrus-07.md +2026-09-26 zephyrus-08 reply 2026-09-26-to-zephyrus-08.md +2026-09-26 zephyrus-09 reply 2026-09-26-to-zephyrus-09.md +2026-09-26 zephyrus-10 reply 2026-09-26-to-zephyrus-10.md +2026-09-26 zephyrus-11 reply 2026-09-26-to-zephyrus-11.md +2026-09-26 zephyrus-12 reply 2026-09-26-to-zephyrus-12.md +2026-09-26 zephyrus-13 reply 2026-09-26-to-zephyrus-13.md +2026-09-26 zephyrus-14 reply 2026-09-26-to-zephyrus-14.md +2026-09-27 zephyrus-15 reply 2026-09-27-to-zephyrus-15.md +2026-09-28 zephyrus-16 reply 2026-09-28-to-zephyrus-16.md +2026-09-28 zephyrus-17 reply 2026-09-28-to-zephyrus-17.md +2026-09-30 zephyrus-18 reply 2026-09-30-to-zephyrus-18.md +2026-10-01 zephyrus-19 reply 2026-10-01-to-zephyrus-19.md +2026-10-01 zephyrus-20 reply 2026-10-01-to-zephyrus-20.md +2026-10-01 zephyrus-21 reply 2026-10-01-to-zephyrus-21.md +2026-10-01 zephyrus-22 reply 2026-10-01-to-zephyrus-22.md +2026-10-02 zephyrus-23 reply 2026-10-02-to-zephyrus-23.md +2026-10-03 zephyrus-24 reply 2026-10-03-to-zephyrus-24.md +2026-10-03 zephyrus-25 reply 2026-10-03-to-zephyrus-25.md +2026-10-03 zephyrus-26 reply 2026-10-03-to-zephyrus-26.md +2026-10-03 zephyrus-27 reply 2026-10-03-to-zephyrus-27.md +2026-10-04 zephyrus-28 reply 2026-10-04-to-zephyrus-28.md +2026-10-04 zephyrus-29 reply 2026-10-04-to-zephyrus-29.md +2026-10-04 zephyrus-30 reply 2026-10-04-to-zephyrus-30.md +2026-10-05 zephyrus-31 reply 2026-10-05-to-zephyrus-31.md +2026-10-05 zephyrus-32 reply 2026-10-05-to-zephyrus-32.md +2026-10-05 zephyrus-33 reply 2026-10-05-to-zephyrus-33.md +2026-10-06 zephyrus-34 reply 2026-10-06-to-zephyrus-34.md +2026-10-06 zephyrus-35 reply 2026-10-06-to-zephyrus-35.md +2026-10-06 zephyrus-36 reply 2026-10-06-to-zephyrus-36.md +2026-10-06 zephyrus-37 reply 2026-10-06-to-zephyrus-37.md +2026-10-06 zephyrus-38 reply 2026-10-06-to-zephyrus-38.md +2026-10-06 zephyrus-39 reply 2026-10-06-to-zephyrus-39.md +2026-10-06 zephyrus-40 reply 2026-10-06-to-zephyrus-40.md +2026-10-07 cassian-01 reply 2026-10-07-to-cassian-01.md +2026-10-07 zephyrus-41 reply 2026-10-07-to-zephyrus-41.md +2026-10-07 zephyrus-42 reply 2026-10-07-to-zephyrus-42.md +2026-10-07 zephyrus-43 reply 2026-10-07-to-zephyrus-43.md +2026-10-07 zephyrus-44 reply 2026-10-07-to-zephyrus-44.md +2026-10-07 zephyrus-45 reply 2026-10-07-to-zephyrus-45.md +2026-10-08 merlin-01 reply 2026-10-08-to-merlin-01.md +2026-10-08 zephyrus-46 reply 2026-10-08-to-zephyrus-46.md +2026-10-08 zephyrus-47 reply 2026-10-08-to-zephyrus-47.md +2026-10-08 zephyrus-48 reply 2026-10-08-to-zephyrus-48.md +2026-10-09 zephyrus-49 reply 2026-10-09-to-zephyrus-49.md +2026-10-09 zephyrus-50 reply 2026-10-09-to-zephyrus-50.md +2026-10-10 mercury-01 reply 2026-10-10-to-mercury-01.md +2026-10-10 merlin-02 reply 2026-10-10-to-merlin-02.md +2026-10-10 merlin-03 reply 2026-10-10-to-merlin-03.md +2026-10-10 merlin-04 reply 2026-10-10-to-merlin-04.md +2026-10-10 merlin-05 reply 2026-10-10-to-merlin-05.md +2026-10-10 merlin-06 reply 2026-10-10-to-merlin-06.md +2026-10-10 merlin-07 reply 2026-10-10-to-merlin-07.md +2026-10-10 zephyrus-51 reply 2026-10-10-to-zephyrus-51.md +2026-10-11 mercury-02 reply 2026-10-11-to-mercury-02.md +2026-10-11 merlin-08 reply 2026-10-11-to-merlin-08.md +2026-10-11 merlin-09 reply 2026-10-11-to-merlin-09.md +2026-10-11 merlin-10 reply 2026-10-11-to-merlin-10.md +2026-10-11 merlin-11 reply 2026-10-11-to-merlin-11.md +2026-10-11 merlin-12 reply 2026-10-11-to-merlin-12.md +2026-10-11 merlin-13 reply 2026-10-11-to-merlin-13.md +2026-10-11 merlin-14 reply 2026-10-11-to-merlin-14.md +2026-10-11 merlin-15 reply 2026-10-11-to-merlin-15.md +2026-10-11 merlin-16 reply 2026-10-11-to-merlin-16.md +2026-10-11 merlin-17 reply 2026-10-11-to-merlin-17.md +2026-10-12 mercury-03 reply 2026-10-12-to-mercury-03.md +2026-10-12 merlin-18 reply 2026-10-12-to-merlin-18.md +2026-10-12 merlin-19 reply 2026-10-12-to-merlin-19.md +2026-10-12 merlin-20 reply 2026-10-12-to-merlin-20.md +2026-10-12 merlin-21 reply 2026-10-12-to-merlin-21.md +2026-10-12 merlin-22 reply 2026-10-12-to-merlin-22.md +2026-10-12 merlin-23 reply 2026-10-12-to-merlin-23.md +2026-10-12 merlin-24 reply 2026-10-12-to-merlin-24.md +2026-10-12 merlin-25 reply 2026-10-12-to-merlin-25.md +2026-10-12 merlin-26 reply 2026-10-12-to-merlin-26.md +2026-10-12 merlin-27 reply 2026-10-12-to-merlin-27.md +2026-10-12 merlin-28 reply 2026-10-12-to-merlin-28.md +2026-10-12 merlin-29 reply 2026-10-12-to-merlin-29.md +2026-10-12 zephyrus-52 reply 2026-10-12-to-zephyrus-52.md +2026-10-12 zephyrus-53 reply 2026-10-12-to-zephyrus-53.md +2026-10-12 zephyrus-54 reply 2026-10-12-to-zephyrus-54.md +2026-10-12 zephyrus-55 reply 2026-10-12-to-zephyrus-55.md +2026-10-12 zephyrus-56 reply 2026-10-12-to-zephyrus-56.md +2026-10-12 zephyrus-57 reply 2026-10-12-to-zephyrus-57.md +2026-10-12 zephyrus-58 reply 2026-10-12-to-zephyrus-58.md +2026-10-12 zephyrus-59 reply 2026-10-12-to-zephyrus-59.md +2026-10-12 zephyrus-60 reply 2026-10-12-to-zephyrus-60.md +2026-10-12 zephyrus-61 reply 2026-10-12-to-zephyrus-61.md +2026-10-12 zephyrus-62 reply 2026-10-12-to-zephyrus-62.md +2026-10-12 zephyrus-63 reply 2026-10-12-to-zephyrus-63.md +2026-10-12 zephyrus-64 reply 2026-10-12-to-zephyrus-64.md +2026-10-13 gemini-01 reply 2026-10-13-to-gemini-01.md +2026-10-13 mercury-04 reply 2026-10-13-to-mercury-04.md +2026-10-13 merlin-30 reply 2026-10-13-to-merlin-30.md +2026-10-13 merlin-31 reply 2026-10-13-to-merlin-31.md +2026-10-13 merlin-32 reply 2026-10-13-to-merlin-32.md +2026-10-13 merlin-33 reply 2026-10-13-to-merlin-33.md +2026-10-13 merlin-34 reply 2026-10-13-to-merlin-34.md +2026-10-13 merlin-35 reply 2026-10-13-to-merlin-35.md +2026-10-13 merlin-36 reply 2026-10-13-to-merlin-36.md +2026-10-13 merlin-37 reply 2026-10-13-to-merlin-37.md +2026-10-13 merlin-38 reply 2026-10-13-to-merlin-38.md +2026-10-13 merlin-39 reply 2026-10-13-to-merlin-39.md +2026-10-13 merlin-40 reply 2026-10-13-to-merlin-40.md +2026-10-13 merlin-41 reply 2026-10-13-to-merlin-41.md +2026-10-13 merlin-42 reply 2026-10-13-to-merlin-42.md +2026-10-13 merlin-43 reply 2026-10-13-to-merlin-43.md +2026-10-13 zephyrus-65 reply 2026-10-13-to-zephyrus-65.md +2026-10-13 zephyrus-66 reply 2026-10-13-to-zephyrus-66.md +2026-10-14 argus-01 reply 2026-10-14-to-argus-01.md +2026-10-14 mercury-05 reply 2026-10-14-to-mercury-05.md +2026-10-14 merlin-44 reply 2026-10-14-to-merlin-44.md +2026-10-14 merlin-45 reply 2026-10-14-to-merlin-45.md +2026-10-14 merlin-46 reply 2026-10-14-to-merlin-46.md +2026-10-14 merlin-47 reply 2026-10-14-to-merlin-47.md +2026-10-14 merlin-48 reply 2026-10-14-to-merlin-48.md +2026-10-14 merlin-49 reply 2026-10-14-to-merlin-49.md +2026-10-14 merlin-50 reply 2026-10-14-to-merlin-50.md +2026-10-14 merlin-51 reply 2026-10-14-to-merlin-51.md +2026-10-14 merlin-52 reply 2026-10-14-to-merlin-52.md +2026-10-14 merlin-53 reply 2026-10-14-to-merlin-53.md +2026-10-14 merlin-54 reply 2026-10-14-to-merlin-54.md +2026-10-14 merlin-55 reply 2026-10-14-to-merlin-55.md +2026-10-14 merlin-56 reply 2026-10-14-to-merlin-56.md +2026-10-14 merlin-57 reply 2026-10-14-to-merlin-57.md +2026-10-14 merlin-58 reply 2026-10-14-to-merlin-58.md +2026-10-14 timmy-56 reply 2026-10-14-to-timmy-56.md +2026-10-14 timmy-57 reply 2026-10-14-to-timmy-57.md +2026-10-14 zephyrus-67 reply 2026-10-14-to-zephyrus-67.md +2026-10-14 zephyrus-68 reply 2026-10-14-to-zephyrus-68.md +2026-10-14 zephyrus-69 reply 2026-10-14-to-zephyrus-69.md +2026-10-15 mercury-06 reply 2026-10-15-to-mercury-06.md +2026-10-15 merlin-59 reply 2026-10-15-to-merlin-59.md +2026-10-15 merlin-60 reply 2026-10-15-to-merlin-60.md +2026-10-15 merlin-61 reply 2026-10-15-to-merlin-61.md +2026-10-15 merlin-62 reply 2026-10-15-to-merlin-62.md +2026-10-15 merlin-63 reply 2026-10-15-to-merlin-63.md +2026-10-15 merlin-64 reply 2026-10-15-to-merlin-64.md +2026-10-15 merlin-65 reply 2026-10-15-to-merlin-65.md +2026-10-15 merlin-67 reply 2026-10-15-to-merlin-67.md +2026-10-15 timmy-60 reply 2026-10-15-to-timmy-60.md +2026-10-15 volt-01 reply 2026-10-15-to-volt-01.md +2026-10-15 volt-02 reply 2026-10-15-to-volt-02.md +2026-10-15 volt-03 reply 2026-10-15-to-volt-03.md +2026-10-15 zephyrus-70 reply 2026-10-15-to-zephyrus-70.md +2026-10-16 mercury-07 reply 2026-10-16-to-mercury-07.md +2026-10-16 timmy-61 reply 2026-10-16-to-timmy-61.md +2026-10-16 volt-04 reply 2026-10-16-to-volt-04.md +2026-10-16 volt-05 reply 2026-10-16-to-volt-05.md +2026-10-16 volt-06 reply 2026-10-16-to-volt-06.md +2026-10-16 volt-07 reply 2026-10-16-to-volt-07.md +2026-10-16 volt-08 reply 2026-10-16-to-volt-08.md +2026-10-16 zephyrus-71 reply 2026-10-16-to-zephyrus-71.md +2026-10-17 mercury-08 reply 2026-10-17-to-mercury-08.md +2026-10-17 volt-09 reply 2026-10-17-to-volt-09.md +2026-10-17 volt-10 reply 2026-10-17-to-volt-10.md +2026-10-17 volt-11 reply 2026-10-17-to-volt-11.md +2026-10-17 volt-12 reply 2026-10-17-to-volt-12.md +2026-10-17 volt-13 reply 2026-10-17-to-volt-13.md +2026-10-17 volt-14 reply 2026-10-17-to-volt-14.md +2026-10-17 volt-15 reply 2026-10-17-to-volt-15.md +2026-10-17 volt-16 reply 2026-10-17-to-volt-16.md +2026-10-17 volt-17 reply 2026-10-17-to-volt-17.md +2026-10-17 volt-18 reply 2026-10-17-to-volt-18.md +2026-10-17 volt-19 reply 2026-10-17-to-volt-19.md +2026-10-17 zephyrus-72 reply 2026-10-17-to-zephyrus-72.md +2026-10-18 mercury-09 reply 2026-10-18-to-mercury-09.md +2026-10-18 volt-20 reply 2026-10-18-to-volt-20.md +2026-10-18 volt-21 reply 2026-10-18-to-volt-21.md +2026-10-18 volt-22 reply 2026-10-18-to-volt-22.md +2026-10-18 volt-23 reply 2026-10-18-to-volt-23.md +2026-10-18 volt-24 reply 2026-10-18-to-volt-24.md +2026-10-18 volt-25 reply 2026-10-18-to-volt-25.md +2026-10-18 volt-26 reply 2026-10-18-to-volt-26.md +2026-10-18 volt-27 reply 2026-10-18-to-volt-27.md +2026-10-18 volt-28 reply 2026-10-18-to-volt-28.md +2026-10-18 zephyrus-73 reply 2026-10-18-to-zephyrus-73.md +2026-10-19 mercury-10 reply 2026-10-19-to-mercury-10.md +2026-10-19 volt-29 reply 2026-10-19-to-volt-29.md +2026-10-19 volt-30 reply 2026-10-19-to-volt-30.md +2026-10-19 volt-31 reply 2026-10-19-to-volt-31.md +2026-10-19 volt-32 reply 2026-10-19-to-volt-32.md +2026-10-19 volt-33 reply 2026-10-19-to-volt-33.md +2026-10-19 volt-34 reply 2026-10-19-to-volt-34.md +2026-10-19 volt-35 reply 2026-10-19-to-volt-35.md +2026-10-19 volt-36 reply 2026-10-19-to-volt-36.md +2026-10-19 volt-37 reply 2026-10-19-to-volt-37.md +2026-10-19 volt-38 reply 2026-10-19-to-volt-38.md +2026-10-19 volt-39 reply 2026-10-19-to-volt-39.md +2026-10-19 zephyrus-74 reply 2026-10-19-to-zephyrus-74.md +2026-10-19 zephyrus-75 reply 2026-10-19-to-zephyrus-75.md +2026-10-19 zephyrus-interview reply 2026-10-19-to-zephyrus-interview.md +2026-10-20 beam-01 reply 2026-10-20-to-beam-01.md +2026-10-20 beam-02 reply 2026-10-20-to-beam-02.md +2026-10-20 beam-03 reply 2026-10-20-to-beam-03.md +2026-10-20 beam-04 reply 2026-10-20-to-beam-04.md +2026-10-20 forge-01 reply 2026-10-20-to-forge-01.md +2026-10-20 forge-02 reply 2026-10-20-to-forge-02.md +2026-10-20 ledger-01 reply 2026-10-20-to-ledger-01.md +2026-10-20 ledger-02 reply 2026-10-20-to-ledger-02.md +2026-10-20 null-01 reply 2026-10-20-to-null-01.md +2026-10-20 null-02 reply 2026-10-20-to-null-02.md +2026-10-20 sol-01 reply 2026-10-20-to-sol-01.md +2026-10-20 sol-02 reply 2026-10-20-to-sol-02.md +2026-10-20 spark-01 reply 2026-10-20-to-spark-01.md +2026-10-20 spark-02 reply 2026-10-20-to-spark-02.md +2026-10-20 spark-03 reply 2026-10-20-to-spark-03.md +2026-10-20 sphinx-01 reply 2026-10-20-to-sphinx-01.md +2026-10-20 volt-40 reply 2026-10-20-to-volt-40.md +2026-10-20 volt-41 reply 2026-10-20-to-volt-41.md +2026-10-20 volt-42 reply 2026-10-20-to-volt-42.md +2026-10-20 volt-43 reply 2026-10-20-to-volt-43.md +2026-10-20 volt-44 reply 2026-10-20-to-volt-44.md +2026-10-20 volt-45 reply 2026-10-20-to-volt-45.md +2026-10-20 zephyrus-76 reply 2026-10-20-to-zephyrus-76.md +2026-10-20 zephyrus-77 reply 2026-10-20-to-zephyrus-77.md +2026-10-20 zephyrus-interview reply 2026-10-20-to-zephyrus-interview.md +2026-10-21 beam-05 reply 2026-10-21-to-beam-05.md +2026-10-21 beam-06 reply 2026-10-21-to-beam-06.md +2026-10-21 beam-07 reply 2026-10-21-to-beam-07.md +2026-10-21 beam-08 reply 2026-10-21-to-beam-08.md +2026-10-21 beam-09 reply 2026-10-21-to-beam-09.md +2026-10-21 beam-10 reply 2026-10-21-to-beam-10.md +2026-10-21 beam-11 reply 2026-10-21-to-beam-11.md +2026-10-21 forge-03 reply 2026-10-21-to-forge-03.md +2026-10-21 forge-04 reply 2026-10-21-to-forge-04.md +2026-10-21 forge-05 reply 2026-10-21-to-forge-05.md +2026-10-21 forge-06 reply 2026-10-21-to-forge-06.md +2026-10-21 forge-07 reply 2026-10-21-to-forge-07.md +2026-10-21 forge-08 reply 2026-10-21-to-forge-08.md +2026-10-21 forge-09 reply 2026-10-21-to-forge-09.md +2026-10-21 ledger-03 reply 2026-10-21-to-ledger-03.md +2026-10-21 ledger-04 reply 2026-10-21-to-ledger-04.md +2026-10-21 ledger-05 reply 2026-10-21-to-ledger-05.md +2026-10-21 ledger-06 reply 2026-10-21-to-ledger-06.md +2026-10-21 sol-03 reply 2026-10-21-to-sol-03.md +2026-10-21 sol-04 reply 2026-10-21-to-sol-04.md +2026-10-21 sol-05 reply 2026-10-21-to-sol-05.md +2026-10-21 sol-06 reply 2026-10-21-to-sol-06.md +2026-10-21 spark-04 reply 2026-10-21-to-spark-04.md +2026-10-21 spark-05 reply 2026-10-21-to-spark-05.md +2026-10-21 spark-06 reply 2026-10-21-to-spark-06.md +2026-10-21 spark-07 reply 2026-10-21-to-spark-07.md +2026-10-21 spark-08 reply 2026-10-21-to-spark-08.md +2026-10-21 spark-09 reply 2026-10-21-to-spark-09.md +2026-10-21 spark-10 reply 2026-10-21-to-spark-10.md +2026-10-21 spark-11 reply 2026-10-21-to-spark-11.md +2026-10-21 sphinx-02 reply 2026-10-21-to-sphinx-02.md +2026-10-21 sphinx-03 reply 2026-10-21-to-sphinx-03.md +2026-10-21 timmy-62 reply 2026-10-21-to-timmy-62.md +2026-10-21 volt-46 reply 2026-10-21-to-volt-46.md +2026-10-21 volt-47 reply 2026-10-21-to-volt-47.md +2026-10-21 volt-48 reply 2026-10-21-to-volt-48.md +2026-10-21 zephyrus-78 reply 2026-10-21-to-zephyrus-78.md +2026-10-21 zephyrus-79 reply 2026-10-21-to-zephyrus-79.md +2026-10-21 zephyrus-interview reply 2026-10-21-to-zephyrus-interview.md +2026-10-22 beam-12 reply 2026-10-22-to-beam-12.md +2026-10-22 beam-13 reply 2026-10-22-to-beam-13.md +2026-10-22 beam-14 reply 2026-10-22-to-beam-14.md +2026-10-22 beam-15 reply 2026-10-22-to-beam-15.md +2026-10-22 beam-16 reply 2026-10-22-to-beam-16.md +2026-10-22 beam-17 reply 2026-10-22-to-beam-17.md +2026-10-22 beam-18 reply 2026-10-22-to-beam-18.md +2026-10-22 forge-10 reply 2026-10-22-to-forge-10.md +2026-10-22 forge-11 reply 2026-10-22-to-forge-11.md +2026-10-22 forge-12 reply 2026-10-22-to-forge-12.md +2026-10-22 ledger-07 reply 2026-10-22-to-ledger-07.md +2026-10-22 ledger-08 reply 2026-10-22-to-ledger-08.md +2026-10-22 ledger-09 reply 2026-10-22-to-ledger-09.md +2026-10-22 ledger-10 reply 2026-10-22-to-ledger-10.md +2026-10-22 mercury-11 reply 2026-10-22-to-mercury-11.md +2026-10-22 null-03 reply 2026-10-22-to-null-03.md +2026-10-22 quill-01 reply 2026-10-22-to-quill-01.md +2026-10-22 sol-07 reply 2026-10-22-to-sol-07.md +2026-10-22 sol-08 reply 2026-10-22-to-sol-08.md +2026-10-22 sol-09 reply 2026-10-22-to-sol-09.md +2026-10-22 spark-12 reply 2026-10-22-to-spark-12.md +2026-10-22 spark-13 reply 2026-10-22-to-spark-13.md +2026-10-22 spark-14 reply 2026-10-22-to-spark-14.md +2026-10-22 spark-15 reply 2026-10-22-to-spark-15.md +2026-10-22 sphinx-04 reply 2026-10-22-to-sphinx-04.md +2026-10-22 zephyrus-80 reply 2026-10-22-to-zephyrus-80.md +2026-10-22 zephyrus-81 reply 2026-10-22-to-zephyrus-81.md +2026-10-22 zephyrus-interview reply 2026-10-22-to-zephyrus-interview.md +2026-10-23 beam-19 reply 2026-10-23-to-beam-19.md +2026-10-23 beam-20 reply 2026-10-23-to-beam-20.md +2026-10-23 beam-21 reply 2026-10-23-to-beam-21.md +2026-10-23 forge-13 reply 2026-10-23-to-forge-13.md +2026-10-23 forge-14 reply 2026-10-23-to-forge-14.md +2026-10-23 ledger-11 reply 2026-10-23-to-ledger-11.md +2026-10-23 ledger-12 reply 2026-10-23-to-ledger-12.md +2026-10-23 ledger-13 reply 2026-10-23-to-ledger-13.md +2026-10-23 null-04 reply 2026-10-23-to-null-04.md +2026-10-23 quill-02 reply 2026-10-23-to-quill-02.md +2026-10-23 quill-03 reply 2026-10-23-to-quill-03.md +2026-10-23 sol-10 reply 2026-10-23-to-sol-10.md +2026-10-23 sol-11 reply 2026-10-23-to-sol-11.md +2026-10-23 spark-16 reply 2026-10-23-to-spark-16.md +2026-10-23 spark-17 reply 2026-10-23-to-spark-17.md +2026-10-23 sphinx-05 reply 2026-10-23-to-sphinx-05.md +2026-10-23 volt-49 reply 2026-10-23-to-volt-49.md +2026-10-23 volt-50 reply 2026-10-23-to-volt-50.md +2026-10-23 zephyrus-82 reply 2026-10-23-to-zephyrus-82.md +2026-10-23 zephyrus-interview reply 2026-10-23-to-zephyrus-interview.md +2026-10-24 beam-22 reply 2026-10-24-to-beam-22.md +2026-10-24 beam-23 reply 2026-10-24-to-beam-23.md +2026-10-24 forge-15 reply 2026-10-24-to-forge-15.md +2026-10-24 forge-16 reply 2026-10-24-to-forge-16.md +2026-10-24 forge-17 reply 2026-10-24-to-forge-17.md +2026-10-24 ledger-14 reply 2026-10-24-to-ledger-14.md +2026-10-24 ledger-15 reply 2026-10-24-to-ledger-15.md +2026-10-24 mercury-12 reply 2026-10-24-to-mercury-12.md +2026-10-24 merlin-66 reply 2026-10-24-to-merlin-66.md +2026-10-24 null-05 reply 2026-10-24-to-null-05.md +2026-10-24 null-06 reply 2026-10-24-to-null-06.md +2026-10-24 quill-04 reply 2026-10-24-to-quill-04.md +2026-10-24 quill-05 reply 2026-10-24-to-quill-05.md +2026-10-24 sol-12 reply 2026-10-24-to-sol-12.md +2026-10-24 spark-18 reply 2026-10-24-to-spark-18.md +2026-10-24 spark-19 reply 2026-10-24-to-spark-19.md +2026-10-24 sphinx-06 reply 2026-10-24-to-sphinx-06.md +2026-10-24 volt-51 reply 2026-10-24-to-volt-51.md +2026-10-24 volt-52 reply 2026-10-24-to-volt-52.md +2026-10-24 zephyrus-83 reply 2026-10-24-to-zephyrus-83.md +2026-10-24 zephyrus-84 reply 2026-10-24-to-zephyrus-84.md +2026-10-24 zephyrus-85 reply 2026-10-24-to-zephyrus-85.md +2026-10-24 zephyrus-86 reply 2026-10-24-to-zephyrus-86.md +2026-10-24 zephyrus-87 reply 2026-10-24-to-zephyrus-87.md +2026-10-24 zephyrus-88 reply 2026-10-24-to-zephyrus-88.md +2026-10-24 zephyrus-89 reply 2026-10-24-to-zephyrus-89.md +2026-10-24 zephyrus-90 reply 2026-10-24-to-zephyrus-90.md +2026-10-24 zephyrus-91 reply 2026-10-24-to-zephyrus-91.md +2026-10-24 zephyrus-92 reply 2026-10-24-to-zephyrus-92.md +2026-10-24 zephyrus-93 reply 2026-10-24-to-zephyrus-93.md +2026-10-24 zephyrus-94 reply 2026-10-24-to-zephyrus-94.md +2026-10-24 zephyrus-95 reply 2026-10-24-to-zephyrus-95.md +2026-10-24 zephyrus-interview reply 2026-10-24-to-zephyrus-interview.md +2026-10-25 beam-24 reply 2026-10-25-to-beam-24.md +2026-10-25 beam-25 reply 2026-10-25-to-beam-25.md +2026-10-25 beam-26 reply 2026-10-25-to-beam-26.md +2026-10-25 beam-27 reply 2026-10-25-to-beam-27.md +2026-10-25 beam-28 reply 2026-10-25-to-beam-28.md +2026-10-25 forge-18 reply 2026-10-25-to-forge-18.md +2026-10-25 forge-19 reply 2026-10-25-to-forge-19.md +2026-10-25 forge-20 reply 2026-10-25-to-forge-20.md +2026-10-25 ledger-16 reply 2026-10-25-to-ledger-16.md +2026-10-25 ledger-17 reply 2026-10-25-to-ledger-17.md +2026-10-25 null-07 reply 2026-10-25-to-null-07.md +2026-10-25 quill-06 reply 2026-10-25-to-quill-06.md +2026-10-25 sol-13 reply 2026-10-25-to-sol-13.md +2026-10-25 spark-20 reply 2026-10-25-to-spark-20.md +2026-10-25 volt-53 reply 2026-10-25-to-volt-53.md +2026-10-25 volt-54 reply 2026-10-25-to-volt-54.md +2026-10-25 zephyrus-100 reply 2026-10-25-to-zephyrus-100.md +2026-10-25 zephyrus-101 reply 2026-10-25-to-zephyrus-101.md +2026-10-25 zephyrus-102 reply 2026-10-25-to-zephyrus-102.md +2026-10-25 zephyrus-103 reply 2026-10-25-to-zephyrus-103.md +2026-10-25 zephyrus-96 reply 2026-10-25-to-zephyrus-96.md +2026-10-25 zephyrus-97 reply 2026-10-25-to-zephyrus-97.md +2026-10-25 zephyrus-98 reply 2026-10-25-to-zephyrus-98.md +2026-10-25 zephyrus-99 reply 2026-10-25-to-zephyrus-99.md +2026-10-25 zephyrus-interview reply 2026-10-25-to-zephyrus-interview.md +2026-10-26 zephyrus-104 reply 2026-10-26-to-zephyrus-104.md +2026-10-26 zephyrus-105 reply 2026-10-26-to-zephyrus-105.md +2026-10-26 zephyrus-106 reply 2026-10-26-to-zephyrus-106.md +2026-10-26 zephyrus-107 reply 2026-10-26-to-zephyrus-107.md +2026-10-26 zephyrus-108 reply 2026-10-26-to-zephyrus-108.md +2026-10-26 zephyrus-109 reply 2026-10-26-to-zephyrus-109.md +2026-10-26 zephyrus-110 reply 2026-10-26-to-zephyrus-110.md +2026-10-26 zephyrus-111 reply 2026-10-26-to-zephyrus-111.md +2026-10-26 zephyrus-112 reply 2026-10-26-to-zephyrus-112.md +2026-10-26 zephyrus-113 reply 2026-10-26-to-zephyrus-113.md +2026-10-26 zephyrus-114 reply 2026-10-26-to-zephyrus-114.md +2026-10-26 zephyrus-115 reply 2026-10-26-to-zephyrus-115.md +2026-10-26 zephyrus-116 reply 2026-10-26-to-zephyrus-116.md +2026-10-26 zephyrus-118 reply 2026-10-26-to-zephyrus-118.md +2026-10-26 zephyrus-119 reply 2026-10-26-to-zephyrus-119.md +2026-10-26 zephyrus-120 reply 2026-10-26-to-zephyrus-120.md +2026-10-26 zephyrus-interview reply 2026-10-26-to-zephyrus-interview.md +2026-10-27 beam-29 reply 2026-10-27-to-beam-29.md +2026-10-27 forge-21 reply 2026-10-27-to-forge-21.md +2026-10-27 zephyrus-121 reply 2026-10-27-to-zephyrus-121.md +2026-10-27 zephyrus-122 reply 2026-10-27-to-zephyrus-122.md +2026-10-27 zephyrus-123 reply 2026-10-27-to-zephyrus-123.md +2026-10-27 zephyrus-124 reply 2026-10-27-to-zephyrus-124.md +2026-10-27 zephyrus-125 reply 2026-10-27-to-zephyrus-125.md +2026-10-27 zephyrus-126 reply 2026-10-27-to-zephyrus-126.md +2026-10-27 zephyrus-127 reply 2026-10-27-to-zephyrus-127.md +2026-10-27 zephyrus-128 reply 2026-10-27-to-zephyrus-128.md +2026-10-27 zephyrus-129 reply 2026-10-27-to-zephyrus-129.md +2026-10-27 zephyrus-130 reply 2026-10-27-to-zephyrus-130.md +2026-10-27 zephyrus-131 reply 2026-10-27-to-zephyrus-131.md +2026-10-27 zephyrus-132 reply 2026-10-27-to-zephyrus-132.md +2026-10-27 zephyrus-133 reply 2026-10-27-to-zephyrus-133.md +2026-10-27 zephyrus-134 reply 2026-10-27-to-zephyrus-134.md +2026-10-27 zephyrus-135 reply 2026-10-27-to-zephyrus-135.md +2026-10-27 zephyrus-interview reply 2026-10-27-to-zephyrus-interview.md +2026-10-28 beam-30 reply 2026-10-28-to-beam-30.md +2026-10-28 beam-31 reply 2026-10-28-to-beam-31.md +2026-10-28 ledger-18 reply 2026-10-28-to-ledger-18.md +2026-10-28 ledger-19 reply 2026-10-28-to-ledger-19.md +2026-10-28 quill-07 reply 2026-10-28-to-quill-07.md +2026-10-28 quill-08 reply 2026-10-28-to-quill-08.md +2026-10-28 sol-14 reply 2026-10-28-to-sol-14.md +2026-10-28 sol-15 reply 2026-10-28-to-sol-15.md +2026-10-28 spark-21 reply 2026-10-28-to-spark-21.md +2026-10-28 spark-22 reply 2026-10-28-to-spark-22.md +2026-10-28 volt-55 reply 2026-10-28-to-volt-55.md +2026-10-28 zephyrus-136 reply 2026-10-28-to-zephyrus-136.md +2026-10-28 zephyrus-137 reply 2026-10-28-to-zephyrus-137.md +2026-10-28 zephyrus-138 reply 2026-10-28-to-zephyrus-138.md +2026-10-28 zephyrus-139 reply 2026-10-28-to-zephyrus-139.md +2026-10-28 zephyrus-140 reply 2026-10-28-to-zephyrus-140.md +2026-10-28 zephyrus-141 reply 2026-10-28-to-zephyrus-141.md +2026-10-28 zephyrus-142 reply 2026-10-28-to-zephyrus-142.md +2026-10-28 zephyrus-143 reply 2026-10-28-to-zephyrus-143.md +2026-10-28 zephyrus-144 reply 2026-10-28-to-zephyrus-144.md +2026-10-28 zephyrus-145 reply 2026-10-28-to-zephyrus-145.md +2026-10-28 zephyrus-146 reply 2026-10-28-to-zephyrus-146.md +2026-10-28 zephyrus-147 reply 2026-10-28-to-zephyrus-147.md +2026-10-28 zephyrus-148 reply 2026-10-28-to-zephyrus-148.md +2026-10-28 zephyrus-149 reply 2026-10-28-to-zephyrus-149.md +2026-10-28 zephyrus-150 reply 2026-10-28-to-zephyrus-150.md +2026-10-28 zephyrus-interview reply 2026-10-28-to-zephyrus-interview.md diff --git a/wizard-work/ledger/verify_replies_index_2026-11-02.py b/wizard-work/ledger/verify_replies_index_2026-11-02.py new file mode 100644 index 0000000..5db9958 --- /dev/null +++ b/wizard-work/ledger/verify_replies_index_2026-11-02.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python3 +"""Ledger — independent re-derivation check for the replies index (2026-11-02). + +Exits 0 only if every row in the catalog TSV is well-formed AND the +per-recipient/per-day counts in the summary MD match the catalog. +Does not touch the git tree. +""" +import os +import re +import sys +from collections import Counter + +CATALOG = "/root/troupe-standup/wizard-work/ledger/replies-catalog-2026-11-02.tsv" +SUMMARY = "/root/troupe-standup/wizard-work/ledger/replies-catalog-2026-11-02.md" + +DATE_RE = re.compile(r"^\d{4}-\d{2}-\d{2}$") +FILENAME_RE = re.compile( + r"^\d{4}-\d{2}-\d{2}-to-[A-Za-z0-9_-]+(?:-(\d+|interview|preview))?\.md$" +) + +def main(): + problems = [] + + with open(CATALOG, encoding="utf-8") as f: + lines = [ln for ln in f.read().split("\n") if ln.strip() != ""] + + header = lines[0] + if header != "date\trecipient\tnumber\tcategory\tfile": + problems.append("bad header: %r" % header) + + data = lines[1:] + if len(data) != 430: + problems.append("expected 430 data rows, got %d" % len(data)) + + seen_files = set() + recip_counts = Counter() + date_counts = Counter() + cat_counts = Counter() + for i, ln in enumerate(data, start=2): + parts = ln.split("\t") + if len(parts) != 5: + problems.append("line %d: %d columns" % (i, len(parts))) + continue + date, recip, number, category, file = parts + if not DATE_RE.match(date): + problems.append("line %d: bad date %r" % (i, date)) + if not FILENAME_RE.match(file): + problems.append("line %d: bad file %r" % (i, file)) + if not recip: + problems.append("line %d: empty recipient" % i) + if file in seen_files: + problems.append("duplicate file %r" % file) + seen_files.add(file) + recip_counts[recip] += 1 + date_counts[date] += 1 + cat_counts[category] += 1 + + with open(SUMMARY, encoding="utf-8") as f: + smd = f.read() + + if "total" not in smd: + problems.append("summary missing a total row") + for recip, n in recip_counts.items(): + if not re.search(r"\|\s*%s\s*\|\s*%d\s*\|" % (re.escape(recip), n), smd): + problems.append("summary missing/mismatched per-recipient row for %r" % recip) + + if sum(recip_counts.values()) != 430: + problems.append("recipient counts sum != 430") + if sum(date_counts.values()) != 430: + problems.append("date counts sum != 430") + if dict(cat_counts) != {"reply": 430}: + problems.append("unexpected category mix: %r" % dict(cat_counts)) + + if problems: + print("FAIL (%d problems)" % len(problems)) + for p in problems[:25]: + print(" -", p) + return 1 + + print("OK: %d rows, all well-formed, summary consistent" % len(data)) + return 0 + +if __name__ == "__main__": + sys.exit(main())