spark: add self-validating checksum verifier script
This commit is contained in:
1 parent
26def52aad
commit
891b044d7a
31 files changed
+34436
No files matched your search
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,22 @@
|
||||
import re
|
||||
SRC = "/root/troupe-standup/WORK-QUEUE.md"
|
||||
text = open(SRC, encoding="utf-8").read().splitlines()
|
||||
# map q -> first line number
|
||||
qline = {}
|
||||
for i, raw in enumerate(text):
|
||||
m = re.match(r"^## Q(\d+)\s", raw)
|
||||
if m:
|
||||
qline.setdefault(int(m.group(1)), i)
|
||||
qs = [17, 18, 30, 37, 72, 78, 91, 92, 93, 94]
|
||||
for q in qs:
|
||||
start = qline[q]
|
||||
# end = next "## " line
|
||||
end = len(text)
|
||||
for j in range(start + 1, len(text)):
|
||||
if text[j].startswith("## "):
|
||||
end = j
|
||||
break
|
||||
print(f"===== Q{q} lines {start+1}-{end} ({end-start} lines) =====")
|
||||
for k in range(start, min(end, start + 25)):
|
||||
print(f"{k+1:>4} | {text[k][:100]}")
|
||||
print()
|
||||
@@ -0,0 +1,17 @@
|
||||
import re
|
||||
SRC = "/root/troupe-standup/WORK-QUEUE.md"
|
||||
text = open(SRC, encoding="utf-8").read().splitlines()
|
||||
Q = re.compile(r"^## Q(\d+)\s?(.*)$")
|
||||
other = []
|
||||
qcount = 0
|
||||
for i, raw in enumerate(text):
|
||||
line = raw.rstrip()
|
||||
if line.startswith("## "):
|
||||
if Q.match(line):
|
||||
qcount += 1
|
||||
else:
|
||||
other.append((i, line))
|
||||
print("Q headings:", qcount)
|
||||
print("non-Q '## ' headings:", len(other))
|
||||
for i, line in other:
|
||||
print(f" {i}: {line[:110]}")
|
||||
@@ -0,0 +1,31 @@
|
||||
import re
|
||||
SRC = "/root/troupe-standup/WORK-QUEUE.md"
|
||||
text = open(SRC, encoding="utf-8").read().splitlines()
|
||||
Q = re.compile(r"^## Q(\d+)\s?(.*)$")
|
||||
TOP = re.compile(r"^## ")
|
||||
# Simulate the extractor, tracking which Q got a status.
|
||||
current_q = None
|
||||
status = None
|
||||
no_status = []
|
||||
for raw in text:
|
||||
line = raw.rstrip()
|
||||
m = Q.match(line)
|
||||
if m:
|
||||
if current_q is not None and status is None:
|
||||
no_status.append(current_q)
|
||||
current_q = int(m.group(1))
|
||||
status = None
|
||||
continue
|
||||
if TOP.match(line):
|
||||
if current_q is not None and status is None:
|
||||
no_status.append(current_q)
|
||||
current_q = None
|
||||
status = None
|
||||
continue
|
||||
if current_q is not None and status is None:
|
||||
m2 = re.match(r"^\*\*\s*Status\s*:(.*)$", line)
|
||||
if m2:
|
||||
status = m2.group(1).strip()
|
||||
if current_q is not None and status is None:
|
||||
no_status.append(current_q)
|
||||
print("Q numbers with NO status line:", no_status)
|
||||
@@ -0,0 +1,15 @@
|
||||
import re
|
||||
|
||||
SRC = "/root/troupe-standup/WORK-QUEUE.md"
|
||||
text = open(SRC, encoding="utf-8").read().splitlines()
|
||||
|
||||
TOP = re.compile(r"^## ")
|
||||
Q = re.compile(r"^## Q(\d+)\s?(.*)$")
|
||||
ST = re.compile(r"^Status:(.*)$")
|
||||
|
||||
# Show match behavior on a window of lines around Q1.
|
||||
for i, raw in enumerate(text):
|
||||
line = raw.rstrip()
|
||||
if 40 <= i <= 60:
|
||||
print(i, repr(line[:70]), "|Q=", bool(Q.match(line)), "|ST=", bool(ST.match(line)))
|
||||
PY
|
||||
@@ -0,0 +1,13 @@
|
||||
import csv
|
||||
path = "/root/troupe-standup/wizard-work/ledger/2026-10-29-queue-ledger/queue-ledger.tsv"
|
||||
with open(path, encoding="utf-8", newline="") as fh:
|
||||
rows = list(csv.reader(fh, delimiter="\t"))
|
||||
data = rows[1:]
|
||||
qs = [int(r[0]) for r in data]
|
||||
present = set(qs)
|
||||
missing = [q for q in range(1, 126) if q not in present]
|
||||
print("total rows:", len(data))
|
||||
print("missing q:", missing)
|
||||
for r in data:
|
||||
if r[0] in ("30", "37", "78", "91", "92", "94"):
|
||||
print("found", r[0], "->", r[2][:55], "|", repr(r[3][:70]))
|
||||
@@ -0,0 +1,16 @@
|
||||
import csv
|
||||
path = "/root/troupe-standup/wizard-work/ledger/2026-10-29-queue-ledger/queue-ledger.tsv"
|
||||
with open(path, encoding="utf-8", newline="") as fh:
|
||||
rows = list(csv.reader(fh, delimiter="\t"))
|
||||
data = rows[1:]
|
||||
from collections import Counter
|
||||
c = Counter(r[4] for r in data)
|
||||
print("state counts:", c)
|
||||
print("unclassified rows:")
|
||||
for r in data:
|
||||
if r[4] == "unclassified":
|
||||
print(" q", r[0], "|", r[2][:60], "|", repr(r[3][:100]))
|
||||
print("status='' rows:")
|
||||
for r in data:
|
||||
if r[3] == "":
|
||||
print(" q", r[0], "|", r[2][:60])
|
||||
@@ -0,0 +1,13 @@
|
||||
import csv
|
||||
path = "/root/troupe-standup/wizard-work/ledger/2026-10-29-queue-ledger/queue-ledger.tsv"
|
||||
with open(path, encoding="utf-8", newline="") as fh:
|
||||
rows = list(csv.reader(fh, delimiter="\t"))
|
||||
data = rows[1:]
|
||||
unclassified = [r for r in data if r[4] == "unclassified"]
|
||||
print("unclassified:", len(unclassified))
|
||||
for r in unclassified:
|
||||
print(" q", r[0], "| status=", repr(r[3]), "| note")
|
||||
# check no-marker blocks: which q in 30,37,78,91,92,94
|
||||
for r in data:
|
||||
if r[0] in ("30","37","78","91","92","94"):
|
||||
print("found", r[0], "| status_len", len(r[3]), "|", r[2][:50])
|
||||
@@ -0,0 +1,19 @@
|
||||
import re, csv
|
||||
SRC = "/root/troupe-standup/WORK-QUEUE.md"
|
||||
text = open(SRC, encoding="utf-8").read().splitlines()
|
||||
Q = re.compile(r"^## Q(\d+)\s?(.*)$")
|
||||
heads = []
|
||||
for i, raw in enumerate(text):
|
||||
m = Q.match(raw)
|
||||
if m:
|
||||
heads.append((i + 1, int(m.group(1)), m.group(2).strip().lstrip("—").strip()))
|
||||
print("total Q headings:", len(heads))
|
||||
print("first 5:", heads[:5])
|
||||
|
||||
with open("/root/troupe-standup/wizard-work/ledger/2026-10-29-queue-ledger/queue-ledger.tsv", encoding="utf-8", newline="") as fh:
|
||||
rows = list(csv.reader(fh, delimiter="\t"))
|
||||
present = set(int(r[0]) for r in rows[1:])
|
||||
missing = [h for h in heads if h[1] not in present]
|
||||
print("missing headings:", len(missing))
|
||||
for m in missing:
|
||||
print(" line", m[0], "q", m[1], "|", m[2][:60])
|
||||
@@ -0,0 +1,11 @@
|
||||
import csv
|
||||
path = "/root/troupe-standup/wizard-work/ledger/2026-10-29-queue-ledger/queue-ledger.tsv"
|
||||
with open(path, encoding="utf-8", newline="") as fh:
|
||||
rows = list(csv.reader(fh, delimiter="\t"))
|
||||
data = rows[1:]
|
||||
print("total rows:", len(data))
|
||||
print("status='no Status line':")
|
||||
for r in data:
|
||||
if r[3] == "no Status line":
|
||||
print(" q", r[0], "|", r[2][:55])
|
||||
print("state counts:", dict(__import__('collections').Counter(r[4] for r in data)))
|
||||
@@ -0,0 +1,15 @@
|
||||
import csv
|
||||
path = "/root/troupe-standup/wizard-work/ledger/2026-10-29-queue-ledger/queue-ledger.tsv"
|
||||
with open(path, encoding="utf-8", newline="") as fh:
|
||||
rows = list(csv.reader(fh, delimiter="\t"))
|
||||
print("header:", rows[0])
|
||||
data = rows[1:]
|
||||
print("row count:", len(data))
|
||||
qs = [int(r[0]) for r in data]
|
||||
print("q values:", qs)
|
||||
missing = [q for q in range(1, 95) if q not in qs]
|
||||
print("missing q (1-94):", missing)
|
||||
# show q72 specifically
|
||||
for r in data:
|
||||
if r[0] == "72":
|
||||
print("found 72:", r)
|
||||
@@ -0,0 +1,153 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Extract every `## Q<n>` block from WORK-QUEUE.md into a queue-ledger table.
|
||||
|
||||
Ledger (Extract lane) — data extraction, today 2026-10-29.
|
||||
|
||||
Source: /root/troupe-standup/WORK-QUEUE.md (revision HEAD).
|
||||
|
||||
Output:
|
||||
queue-ledger.tsv q | seq | title | status | state
|
||||
queue-ledger.md rendered markdown table
|
||||
queue-ledger.json structured + counts
|
||||
|
||||
Every row is derived from the raw `## Q<n>` heading lines and the first line
|
||||
"Status:" (optionally bold "**Status:") inside each block, so the artifact is
|
||||
a faithful replay of the file. The CHECK re-parses the source with an
|
||||
independent inline parser and diffs the committed TSV.
|
||||
"""
|
||||
|
||||
import csv
|
||||
import json
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
REPO = Path("/root/troupe-standup")
|
||||
SRC = REPO / "WORK-QUEUE.md"
|
||||
OUT_DIR = REPO / "wizard-work" / "ledger" / "2026-10-29-queue-ledger"
|
||||
|
||||
TOP_HEADING = re.compile(r"^## ")
|
||||
Q_HEADING = re.compile(r"^## Q(\d+)\s?(.*)$")
|
||||
STATUS_LINE = re.compile(r"^\*\*\s*Status\s*[:,]\s*(.*)$")
|
||||
|
||||
CLOSED_MARKERS = (
|
||||
"DONE", "CLOSED", "COMPLETE", "RESOLVED",
|
||||
"VERIFIED", "SATISFIED", "RE-SCOPED",
|
||||
)
|
||||
OPEN_MARKERS = ("OPEN", "OPEN AND", "UNCLAIMED", "AWAITING", "OPEN-AND")
|
||||
|
||||
|
||||
def classify(status_text):
|
||||
"""Classify a replayed status line into closed / open / unclassified.
|
||||
|
||||
Deterministic rules over the verbatim status text only:
|
||||
- closed: contains a completion marker (DONE/CLOSED/COMPLETE/RESOLVED/
|
||||
VERIFIED/SATISFIED, case-insensitive);
|
||||
- open: contains an open marker (OPEN/UNCLAIMED/AWAITING, case-insensitive);
|
||||
- otherwise unclassified (e.g. a status that reads as partial or tbd).
|
||||
"""
|
||||
u = (status_text or "").strip().upper()
|
||||
if not u:
|
||||
return "unclassified"
|
||||
closed = ("DONE" in u) or ("CLOSED" in u) or ("COMPLETE" in u) or (
|
||||
"RESOLVED" in u
|
||||
) or ("VERIFIED" in u) or ("SATISFIED" in u)
|
||||
if closed:
|
||||
return "closed"
|
||||
open_ = ("OPEN" in u) or ("UNCLAIMED" in u) or ("AWAITING" in u)
|
||||
if open_:
|
||||
return "open"
|
||||
return "unclassified"
|
||||
|
||||
|
||||
def extract_rows(src_path):
|
||||
rows = []
|
||||
current_q = None
|
||||
current_title = None
|
||||
status = None
|
||||
|
||||
def flush():
|
||||
nonlocal current_q, current_title, status
|
||||
if current_q is not None:
|
||||
rows.append({
|
||||
"q": current_q,
|
||||
"seq": len(rows) + 1,
|
||||
"title": current_title,
|
||||
"status": status if status is not None else "no Status line",
|
||||
"state": classify(status) if status is not None else "unclassified",
|
||||
})
|
||||
current_q = None
|
||||
current_title = None
|
||||
status = None
|
||||
|
||||
for raw in src_path.read_text(encoding="utf-8").splitlines():
|
||||
line = raw.rstrip()
|
||||
m = Q_HEADING.match(line)
|
||||
if m:
|
||||
flush()
|
||||
current_q = int(m.group(1))
|
||||
raw_title = m.group(2).strip()
|
||||
if raw_title.startswith("—"):
|
||||
raw_title = raw_title[1:].strip()
|
||||
current_title = raw_title
|
||||
continue
|
||||
if TOP_HEADING.match(line):
|
||||
flush()
|
||||
continue
|
||||
if current_q is not None and status is None:
|
||||
sm = STATUS_LINE.match(line)
|
||||
if sm:
|
||||
status = sm.group(1).strip()
|
||||
# Drop a stray leading asterisk pair that can survive "**Status".
|
||||
if status.startswith("**"):
|
||||
status = status[2:].strip()
|
||||
flush()
|
||||
return rows
|
||||
|
||||
|
||||
def main():
|
||||
rows = extract_rows(SRC)
|
||||
OUT_DIR.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
tsv_path = OUT_DIR / "queue-ledger.tsv"
|
||||
with tsv_path.open("w", encoding="utf-8", newline="") as fh:
|
||||
w = csv.writer(fh, delimiter="\t")
|
||||
w.writerow(["q", "seq", "title", "status", "state"])
|
||||
for r in rows:
|
||||
w.writerow([r["q"], r["seq"], r["title"], r["status"], r["state"]])
|
||||
|
||||
json_path = OUT_DIR / "queue-ledger.json"
|
||||
counts = {"closed": 0, "open": 0, "unclassified": 0}
|
||||
for r in rows:
|
||||
counts[r["state"]] += 1
|
||||
payload = {
|
||||
"source": str(SRC),
|
||||
"generated_at": "2026-10-29T16:30:00Z",
|
||||
"total_rows": len(rows),
|
||||
"counts": counts,
|
||||
"rows": rows,
|
||||
}
|
||||
json_path.write_text(json.dumps(payload, ensure_ascii=False, indent=2),
|
||||
encoding="utf-8")
|
||||
|
||||
md_path = OUT_DIR / "queue-ledger.md"
|
||||
with md_path.open("w", encoding="utf-8") as fh:
|
||||
fh.write("# Queue ledger\n\n")
|
||||
fh.write("Every `## Q<n>` block in `WORK-QUEUE.md` at HEAD, replayed "
|
||||
"verbatim from its `Status:` line.\n\n")
|
||||
fh.write("| q | title | status | state |\n")
|
||||
fh.write("|---|---|---|---|\n")
|
||||
for r in rows:
|
||||
fh.write(f"| {r['q']} | {r['title']} | {r['status']} | {r['state']} |\n")
|
||||
fh.write(f"\n**Total rows: {len(rows)}** "
|
||||
f"(closed {counts['closed']}, open {counts['open']}, "
|
||||
f"unclassified {counts['unclassified']}).\n")
|
||||
|
||||
print(f"rows: {len(rows)}")
|
||||
print(f"counts: {counts}")
|
||||
print(f"wrote {tsv_path}")
|
||||
print(f"wrote {json_path}")
|
||||
print(f"wrote {md_path}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,43 @@
|
||||
import re
|
||||
SRC = "/root/troupe-standup/WORK-QUEUE.md"
|
||||
text = open(SRC, encoding="utf-8").read().splitlines()
|
||||
TOP = re.compile(r"^## ")
|
||||
Q = re.compile(r"^## Q(\d+)\s?(.*)$")
|
||||
STCOL = re.compile(r"^\*\*\s*Status\s*:(.*)$")
|
||||
STCOM = re.compile(r"^\*\*\s*Status\s*,(.*)$")
|
||||
|
||||
# Build blocks
|
||||
blocks = [] # list of (q, title, lines)
|
||||
cur = None
|
||||
for i, raw in enumerate(text):
|
||||
line = raw.rstrip()
|
||||
m = Q.match(line)
|
||||
if m:
|
||||
if cur:
|
||||
blocks.append(cur)
|
||||
cur = {"q": int(m.group(1)), "title": m.group(2).strip().lstrip("—").strip(), "start": i, "end": None}
|
||||
continue
|
||||
if TOP.match(line):
|
||||
if cur:
|
||||
blocks.append(cur)
|
||||
cur = None
|
||||
continue
|
||||
if cur is not None:
|
||||
cur["end"] = i
|
||||
if cur:
|
||||
blocks.append(cur)
|
||||
for b in blocks:
|
||||
b["end"] = b["end"] if b["end"] is not None else len(text)
|
||||
|
||||
print("total blocks:", len(blocks))
|
||||
missing_col = []
|
||||
missing_com = []
|
||||
for b in blocks:
|
||||
has_col = any(STCOL.match(text[i]) for i in range(b["start"], b["end"]))
|
||||
has_com = any(STCOM.match(text[i]) for i in range(b["start"], b["end"]))
|
||||
if not has_col:
|
||||
missing_col.append(b["q"])
|
||||
if not has_com:
|
||||
missing_com.append(b["q"])
|
||||
print("blocks without 'Status:' colon:", sorted(set(missing_col)))
|
||||
print("blocks without 'Status,' comma:", sorted(set(missing_com)))
|
||||
@@ -0,0 +1,9 @@
|
||||
import csv
|
||||
path = "/root/troupe-standup/wizard-work/ledger/2026-10-29-queue-ledger/queue-ledger.tsv"
|
||||
with open(path, encoding="utf-8", newline="") as fh:
|
||||
rows = list(csv.reader(fh, delimiter="\t"))
|
||||
for r in rows:
|
||||
if r[0] == "72":
|
||||
print("status repr:", repr(r[3]))
|
||||
print("len:", len(r[3]))
|
||||
print("first 60:", r[3][:60])
|
||||
@@ -0,0 +1,691 @@
|
||||
{
|
||||
"source": "/root/troupe-standup/WORK-QUEUE.md",
|
||||
"generated_at": "2026-10-29T16:30:00Z",
|
||||
"total_rows": 97,
|
||||
"counts": {
|
||||
"closed": 50,
|
||||
"open": 36,
|
||||
"unclassified": 11
|
||||
},
|
||||
"rows": [
|
||||
{
|
||||
"q": 1,
|
||||
"seq": 1,
|
||||
"title": "Recover the fifteen silent rooms *(highest value; no dependencies)*",
|
||||
"status": "CLOSED — 0/15 recovered, and every public avenue is now exhausted with receipts.**",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 2,
|
||||
"seq": 2,
|
||||
"title": "Chase the one dead link",
|
||||
"status": "DONE — recovered.** `recoveries/dead-link.md` (`3ca3d3c`, zephyrus-sparkborn) found the `x.com` snapshot",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 3,
|
||||
"seq": 3,
|
||||
"title": "Independent audit of the published ledger",
|
||||
"status": "DONE — both passes complete (`2ebcbe7` pass 1, `6f31cde` pass 2, zephyrus-sparkborn; material `2118b3e`).",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 4,
|
||||
"seq": 4,
|
||||
"title": "Falsification pass",
|
||||
"status": "DONE — `recoveries/falsification-pass.md` (`f50f052`, zephyrus-sparkborn), all three verdicts re-verified",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 8,
|
||||
"seq": 5,
|
||||
"title": "Summary fidelity: does each entry's machine-written summary overstate its article?",
|
||||
"status": "pilot CLOSED at `dcf91a1` (zephyrus-sparkborn), corrected at `9cc6879`; the full sweep is CLOSED at `f1fe38d` (2026-10-06) — 91/91, 1,101 rows, verified independently from the published file. The one contested grade was ruled and applied by zephyrus at `f122f8e` (`082` clause 3 → `contradicted`) and both batch-8 one-liners landed in the same commit, so the item owes nothing further from him on",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 5,
|
||||
"seq": 6,
|
||||
"title": "Issue triage in the organisation's public repos",
|
||||
"status": "re-scoped 2026-09-26 (reply 08 §5) after a census, because as written it invites busywork.** Measured over",
|
||||
"state": "unclassified"
|
||||
},
|
||||
{
|
||||
"q": 6,
|
||||
"seq": 7,
|
||||
"title": "A public guide to checking this archive",
|
||||
"status": "DONE at `8bd0b09` (Merlin, 2026-10-08T17:28:47Z) — verified from this host figure by figure;",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 7,
|
||||
"seq": 8,
|
||||
"title": "Propose the next items",
|
||||
"status": "satisfied for the 2026-09-25 cycle.** Zeph's three proposals (`2a0cb01`) are now queue items: the Q8",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 9,
|
||||
"seq": 9,
|
||||
"title": "Independent QC of the sovereign music candidates *(second opinion, no listening required)*",
|
||||
"status": "unclaimed. Pre-verified by Timmy against the delivered files — record `recoveries/music-master-verification.md`",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 10,
|
||||
"seq": 10,
|
||||
"title": "Summary fidelity for the non-magazine entries",
|
||||
"status": "COMPLETE 2026-10-10 (verified from raw sources; closure record below). Originally claimed by zephyrus-sparkborn at `3c9ad5b` (2026-10-07, `checkins/2026-10-07-zephyrus.md` §3).",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 11,
|
||||
"seq": 11,
|
||||
"title": "Close the eight pass-2 date mismatches",
|
||||
"status": "DONE — `recoveries/ledger-date-closure.md`, Merlin, 2026-10-09. 8 / 8 resolved, all",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 12,
|
||||
"seq": 12,
|
||||
"title": "Are the evidence tiers earned?",
|
||||
"status": "DONE — `recoveries/evidence-tier-audit.md`, Merlin, 2026-10-10. 18/18 `justified`, 0 `too",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 13,
|
||||
"seq": 13,
|
||||
"title": "Publish the archive-side wording fixes, one at a time",
|
||||
"status": "1 of 8 has a decision and staged correction (`magazine-091`; reply 09 §3), but its decided note carries",
|
||||
"state": "unclassified"
|
||||
},
|
||||
{
|
||||
"q": 14,
|
||||
"seq": 14,
|
||||
"title": "Put the Inbox on `alexanderwhitestone.com` behind a gate",
|
||||
"status": "DONE — finished by `616794c` (2026-09-26), then re-measured by a later run the same day instead of being",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 15,
|
||||
"seq": 15,
|
||||
"title": "Stop the monitor from waking on the pipe's own writes *(pipe; no dependencies)*",
|
||||
"status": "DONE — 2026-09-26 ≈19:05 UTC.** Fixed in `/root/.hermes/scripts/troupe_pipe_monitor.py` (outside this",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 16,
|
||||
"seq": 16,
|
||||
"title": "Per-platform ATS gate census *(career lane; opened 2026-10-01 by reply 21 §3, drafted by zephyrus)*",
|
||||
"status": "draft v0.1 landed `f29425a` (`career-lane/ats-gate-census-draft.md`, 2026-10-01; check-in `2f83e08`);",
|
||||
"state": "unclassified"
|
||||
},
|
||||
{
|
||||
"q": 17,
|
||||
"seq": 17,
|
||||
"title": "Employer-side AI-authorship refusal gates *(career lane; opened 2026-10-03 by reply 26, per Q7)*",
|
||||
"status": "2026-10-03 (third tick) — Q17 seeded at `a686a1b`, row 1 verified; correction 21 landed and verified; Q16 stays `done`.** Two counterparty commits this tick: `a686a1b` (census v0.4 → v0.5, `8783df5775c0` → `0405d58a9d0a`, +39/−1 — the one deletion is the header's version word) and `7d6bd60` (check-in `checkins/2026-10-03-zephyrus-03.md`, 3,037 bytes). Worked back in `replies/2026-10-03-to-zephyrus-27.md` (`e78de74`).",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 18,
|
||||
"seq": 18,
|
||||
"title": "Employer-side lead intake must be deduped against the prepared index *(career lane; opened 2026-10-04 by reply 28, per the G2i miss)*",
|
||||
"status": "2026-10-04 — opened; the rule is stated above and the G2i reconciliation is recorded in reply 28 §2.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 19,
|
||||
"seq": 19,
|
||||
"title": "Three proposed members (local Mac wizard, Grok, Mistral) *(wizard onboarding; opened 2026-10-06 by zephyrus-sparkborn, `checkins/2026-10-06-zephyrus-wizards*.md` + `JOIN-THE-TROUPE.md`)*",
|
||||
"status": "RESOLVED — provisional (2026-10-06).**",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 20,
|
||||
"seq": 20,
|
||||
"title": "Excerpt fidelity and placement for the 91 magazine entries *(archive verification; opened 2026-10-08 by the pipe, per Q7's never-dry obligation)*",
|
||||
"status": "DONE — `recoveries/excerpt-placement-audit.md` (12,914 B) and `recoveries/excerpt-placement-rows.md`",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 21,
|
||||
"seq": 21,
|
||||
"title": "Does every quoted excerpt resolve at the URL it is printed against?",
|
||||
"status": "open and unclaimed. Opened by the pipe 2026-10-10** because Q12 closed at `67b892d` and the unclaimed",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 22,
|
||||
"seq": 22,
|
||||
"title": "Do the named-but-unlinked sources resolve? *(proposed 2026-10-10 by Merlin, per Q7; not yet opened)*",
|
||||
"status": "DONE — `recoveries/named-source-liveness.md`, Merlin, 2026-10-10. 28 fetches → 27 distinct",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 23,
|
||||
"seq": 23,
|
||||
"title": "The prose-named sources the `@` token rule cannot see *(archive verification; opened 2026-10-10 by the pipe, per Q7's never-dry obligation)*",
|
||||
"status": "DONE 2026-10-10 — `recoveries/named-source-liveness-unlinked.md` (Merlin), verified from the published file this tick (control plane).**",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 24,
|
||||
"seq": 24,
|
||||
"title": "The Q13 fix pack: stage every verified live-page fix as one reviewable approval *(archive-side; opened 2026-10-10 by the pipe, per Q7's never-dry obligation)*",
|
||||
"status": "open and unclaimed. Opened by the pipe 2026-10-10** because Q23 closed at `8b56abe` and the unclaimed",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 25,
|
||||
"seq": 25,
|
||||
"title": "A prose-anchor convention for the ledger build *(archive-side; proposed 2026-10-10 by Merlin, per Q7's never-dry obligation — Q24 closed and the unclaimed executable set fell to zero)*",
|
||||
"status": "DONE — `recoveries/prose-anchor-convention.md`, Merlin, 2026-10-10. Designed, prototyped and",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 26,
|
||||
"seq": 26,
|
||||
"title": "Make the silent token classes loud, and measure the fifth slot *(archive-side; opened 2026-10-10 by the pipe, per Q7's never-dry obligation — Q25 closed at `a9f23a6` and the unclaimed executable set fell to zero)*",
|
||||
"status": "DONE — `recoveries/prose-anchor-hardening.md`, Merlin, 2026-10-10→11 (~00:20–00:24 UTC).",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 27,
|
||||
"seq": 27,
|
||||
"title": "A fixture at every render site: make the token sentinel's coverage total *(archive-side; opened 2026-10-11 by the pipe, per Q7's never-dry obligation — Q26 closed at `f05179e`)*",
|
||||
"status": "DONE 2026-10-11 — `recoveries/render-site-coverage.md` (Merlin). 32 sites: 28 covered by fixture, 4 structural exclusions; 35 fixtures, every negative writes 0 files; the scope clause closed with option (a), all four token classes now pre-write; no-token build still byte-identical at `91ecf6bf`.**",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 28,
|
||||
"seq": 28,
|
||||
"title": "The channels the entry walk cannot see: state the guarantee, then cover what it cannot reach",
|
||||
"status": "DONE 2026-10-11 — `recoveries/render-site-channels.md` (Merlin), scratch tree",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 29,
|
||||
"seq": 29,
|
||||
"title": "The guards that are not the walk: what protects a page when the value is not a token",
|
||||
"status": "DONE 2026-10-11 — `recoveries/render-site-guards.md` (Merlin), scratch tree `/root/crucible/q29/`. 22 fixtures plus the control, every negative or escape claim measured against the emitted byte; the second guarantee stated in one sentence; one finding: an unguarded `int(sats)` can still leave a partial tree (2 files).**",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 30,
|
||||
"seq": 30,
|
||||
"title": "The renderer's entry point: the one path no gate executes",
|
||||
"status": "no Status line",
|
||||
"state": "unclassified"
|
||||
},
|
||||
{
|
||||
"q": 31,
|
||||
"seq": 31,
|
||||
"title": "The collector's entry point: the sibling path no gate has executed either",
|
||||
"status": "DONE at Merlin's Run 6 (2026-10-11 ≈13:19–13:35Z) — deliverable `recoveries/helm-collector-run.md`; the collector's entry point is executed, its destination is gated, and G8 asserts it.** The item's four steps: (1) the two safe legs run — `--dry-run --skip-tests` exit 0 / 15,187 B pure-JSON stdout and `--out <scratch>` exit 0 / 15,187 B, both with the live snapshot unchanged (`aa842b0f…`); the two bodies are the same measurement (only `observed_at` clocks and one `rtt_seconds` differ, `q31-compare.py`). (2) **The destination rule: `SNAPSHOT_PATH` is gated behind an explicit `--deploy`** — the same shape as the renderer's `OUT_DEFAULT` gate, so both entry points now behave alike; `--dry-run` is never gated (it writes nothing), a scratch `--out` is the default expectation, and the live path (bare default *or* explicit `--out`, matched by `.resolve()`) is refused at exit 2 **before any collector runs** (0.13 s refusal vs ~1.9 s collect). Gated collector `60229227216fb4ab…` (701 lines / 28,808 B). (3) **Gate G8 — the collector's CLI in a subprocess, 18 assertions** → `helm-selftest: 137 passed, 0 failed`, VERDICT: ALL GATES PASS; the gate discriminates (pre-gate `ee0b36a8…` with `SNAPSHOT_PATH` patched to scratch writes its default bare; gated refuses). (4) **`email` UNREACHABLE is correct** — `himalaya` is ABSENT on PATH and both config paths are absent, so `collect_email()` fails closed with `himalaya unavailable: command not found: himalaya` and lands in `red_sources`, never `green`. **An incident, logged first in the deliverable §6:** the first negative control ran the pre-gate revision bare against the live default and overwrote the live snapshot; restored byte-exact from a pre-run `snap-before.json` (`aa842b0f…`, 14,039 B, mtime back to `2026-10-08T17:12:59.475780303Z`), and the control now patches `SNAPSHOT_PATH` before any run. **Nothing deployed** — the gated collector and G8 selftest are scratch-local in `/root/crucible/q31/`; the deployed `helm-collect.py` is unchanged at `ee0b36a8…` and `helm-selftest.py` at `7ed1bca8…` (still 119 passed). Adoption is a §4 deploy decision, Alexander's, the same gate Q26–Q30 state. Mercury's day-3 unit is Q31's first slice (the two safe legs); this run executed them first and Mercury's `/tmp/mercury-q31/` was empty at 13:29Z, so no duplication occurred — the unit is satisfied here and stays open for Mercury to land his own artifact.",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 32,
|
||||
"seq": 32,
|
||||
"title": "The G8 two-run agreement check is nondeterministic: `age_seconds` is not scrubbed *(Helm lane; opened 2026-10-11 by the pipe, per Q7's never-dry obligation — Q31's adoption is blocked behind it)*",
|
||||
"status": "OPEN — named to the Helm lane**, ahead of the Q31 `cp` decision so that the gate that ships is the one that",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 33,
|
||||
"seq": 33,
|
||||
"title": "Split the newest-file pointer out of `evidence.source_path` *(collector-side; opened 2026-10-11 by the pipe, per Q7's never-dry obligation — Q32 closed at `7e12c82`)*",
|
||||
"status": "OPEN — named to the Helm lane.** A snapshot key rename touches every consumer of `evidence.source_path`",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 34,
|
||||
"seq": 34,
|
||||
"title": "Gate the pointer's null case *(collector-side gate; opened 2026-10-11 by the pipe, per Q7's never-dry obligation — Q33 closed at `8bb88da`)*",
|
||||
"status": "DONE 2026-10-12 — `recoveries/helm-null-gate.md` (Merlin), scratch tree `/root/crucible/q34/`.**",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 35,
|
||||
"seq": 35,
|
||||
"title": "The gate must refuse a subject collector that carries no destination rule *(Helm lane; opened 2026-10-12 by the pipe, per Q7's never-dry obligation — Q34 verified and closed at `ac98bfb`)*",
|
||||
"status": "DONE — `recoveries/helm-precondition-gate.md` (8,261 B / sha256",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 36,
|
||||
"seq": 36,
|
||||
"title": "The monitor cannot see a counterparty write that carries this pipe's identity *(pipe tooling; opened 2026-10-12 by the pipe, per Q7's never-dry obligation — Q20 verified and closed at `9a1de9a` and the pre-existing executable set fell to empty)*",
|
||||
"status": "DONE — the rule holds, and the predicted transition arrived exactly as stated.** Measured at the first",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 37,
|
||||
"seq": 37,
|
||||
"title": "The identity rule closes one class, not the class *(pipe tooling; opened 2026-10-12 by the pipe, per Q7's never-dry obligation — Q36 closed at `9584984` and the unclaimed executable set fell to empty)*",
|
||||
"status": "no Status line",
|
||||
"state": "unclassified"
|
||||
},
|
||||
{
|
||||
"q": 38,
|
||||
"seq": 38,
|
||||
"title": "The behavioural destination guard *(Helm lane; opened 2026-10-12 by Merlin — Q36's candidate 2, on Alexander's direction to continue the Helm lane)*",
|
||||
"status": "DONE — `recoveries/helm-behavioural-guard.md` (10,232 B), Merlin, 2026-10-12T06:5x–07:1xZ, this host.**",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 38,
|
||||
"seq": 39,
|
||||
"title": "The behavioural destination guard *(Helm lane; opened 2026-10-12 by Merlin — Q36's candidate 2, on Alexander's direction to continue the Helm lane; **direction unrecorded in this repo — Testimony only**)*",
|
||||
"status": "the deliverable is verified and the item is DONE, and its protective claim is FALSIFIED. It is not adoptable as it stands.** Finished by `0776480` (guard + queue block + Run 4 check-in) and `4ed1da9` (landing evidence); verified from this host by reply 21, `replies/2026-10-12-to-merlin-21.md`.",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 39,
|
||||
"seq": 40,
|
||||
"title": "The Q38 guard's admission admits a writer, and its legs run the unrewritten subject *(Helm lane; opened 2026-10-12 by the pipe, per Q7's never-dry obligation — Q38 is closed and verified and its protective claim is falsified, so the executable set is not empty)*",
|
||||
"status": "DONE — `recoveries/helm-destination-guard-fix.md` (12,253 B), Merlin, 2026-10-12, scratch tree `/root/crucible/q39/`. Fixed gate `9b09f328…` (1,412 lines / 77,704 B, +309/−38 against Q38's `74aba348…`); subject collector byte-identical at `4e45021d…`; nothing deployed, no `cp` into `/root/.helm/bin/`, live snapshot `aa842b0f…` delta 0 across every run.**",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 39,
|
||||
"seq": 41,
|
||||
"title": "closure — verified from this host by the pipe (2026-10-12, reply 22)",
|
||||
"status": "DONE. Finished by `fad802c` (record + queue block + Run 5 check-in) and `4e87c8f` (landing evidence); verified by `replies/2026-10-12-to-merlin-22.md` with my own harness `/root/troupe-verify/q39/indep-negatives.py` → `INDEP-NEGATIVES.json`, `pair-run.log`.**",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 40,
|
||||
"seq": 42,
|
||||
"title": "the deployed gate admits all five negatives, and has no admission path at all *(Helm lane; opened 2026-10-12 by Merlin, discharging the Q39 closure's C26)*",
|
||||
"status": "DONE — `recoveries/helm-deployed-gate-admission.md` (5,633 B / sha256",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 37,
|
||||
"seq": 43,
|
||||
"title": "claimed by this pipe; first increment landed (the v1.3 census)",
|
||||
"status": "OPEN and claimed by the pipe (Merlin's §Next 2 read it correctly; it is this lane's tooling). Landed this tick:** the `branch-head` census line in `troupe_pipe_monitor.py` v1.3, sha256 `bb532da8c4f01b98eab4034ce74dc76b0e3939508bfd6cadd5d3d650020449f8`; v1.2 preserved at `/root/troupe-verify/q37/troupe_pipe_monitor.py.v1.2.bak` (`ce3950b5…`), reversible with one `cp`; record `recoveries/monitor-identity-census.md`.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 43,
|
||||
"seq": 44,
|
||||
"title": "The legs run the rewritten subject: prevention, not detect-and-restore *(Helm lane; opened 2026-10-12 by Merlin, per the Q39 closure's own recommendation — \"open the stronger form (the legs against a rewritten copy) as the Helm lane's next item\")*",
|
||||
"status": "DONE — `recoveries/helm-leg-sandbox.md` (13,561 B), Merlin, 2026-10-12. Scratch tree `/root/crucible/q43/`; nothing deployed, no `cp` into `/root/.helm/bin/`, `decisions/` and `inbox/` untouched.**",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 43,
|
||||
"seq": 45,
|
||||
"title": "closure — verified from this host by the pipe (2026-10-12, reply 27)",
|
||||
"status": "VERIFIED AND CLOSED from the pipe, 2026-10-12 18:5x–19:1xZ.** Finished by `0fb8b20` (deliverable + queue block + Run 9 check-in section) and `2ddbe68` (landing evidence); verified by `replies/2026-10-12-to-merlin-27.md` with the pipe's own harness `/root/crucible/q43z/timmy_verify_q43.py` (reads Merlin's tree, writes nothing into `/root/crucible/q43/`). Adoption is unchanged and stays Alexander's: subject `4e45021d…` + gate `c22601ec…`, nothing `cp`ed, deployed bin still `ee0b36a8…` / `7ed1bca8…` / `5c67473d…`.",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 44,
|
||||
"seq": 46,
|
||||
"title": "The pin class: redirect every constant composed from the live data root, not only `SNAPSHOT_PATH` *(Helm lane; opened 2026-10-12 by the pipe, per Q43's own closing sentence — \"extend the redirect beyond `SNAPSHOT_PATH` to every constant composed from the live data root, which is what would close the `--pin` class structurally instead of by argv rule\")*",
|
||||
"status": "DONE 2026-10-12 — `recoveries/helm-root-redirect.md` (Merlin, Helm lane); the closure block is at the foot",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 48,
|
||||
"seq": 47,
|
||||
"title": "The runtime-resolution redirect: close the class Q45's literals cannot see",
|
||||
"status": "DONE 2026-10-13 — `recoveries/helm-runtime-redirect.md` (Merlin, Helm lane), scratch tree",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 49,
|
||||
"seq": 48,
|
||||
"title": "The runtime-resolved root's live write path: name it, reproduce it, then close it",
|
||||
"status": "open and unclaimed. Opened by the pipe 2026-10-13**, because the Helm lane's executable set is empty",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 45,
|
||||
"seq": 49,
|
||||
"title": "§9 follow-on — the home-directory channel *(Helm lane; Merlin)*",
|
||||
"status": "OPEN — awaiting Alexander's zoom/whole-shop answer; build is the pipe's.** Evidence paths: `/var/www/leathermint/v2/index.html` (+ `phaser.min.js`), ledger commit `58e7eaa` (15:25:39Z) holding the verification record; queue index re-rendered in that same commit. No issue, PR, release or deploy surface beyond this static path; no secret printed.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 57,
|
||||
"seq": 50,
|
||||
"title": "Bind a standup entry to the bytes it grades *(Codeforge lane; opened 2026-10-24 by the pipe, per reply 05's corrections 1 and 2)*",
|
||||
"status": "open and unclaimed. Opened by the pipe 2026-10-24; null's lane.**",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 58,
|
||||
"seq": 51,
|
||||
"title": "The lane-activity instrument reads a surface that was retired on 2026-10-16 *(Sol lane; opened 2026-10-24 by the pipe, per reply 12 to sol)*",
|
||||
"status": "closed at `809466f` (2026-10-26, spark in sol's lane); the closure record sits at the foot of this file.** Opened by the pipe 2026-10-24.",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 59,
|
||||
"seq": 52,
|
||||
"title": "beam's jump hash matches the C reference, and not one test would notice if it stopped *(beam lane; opened 2026-10-24 by the pipe, per reply 84 to zephyrus)*",
|
||||
"status": "open and unclaimed. Beam's lane.**",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 60,
|
||||
"seq": 53,
|
||||
"title": "Every truncated identifier in the archive: which ones can still be checked *(pipe tooling; opened 2026-10-24 by the pipe, per reply 86 §6 and reply 87 §1)*",
|
||||
"status": "open and unclaimed.** Opened by the pipe 2026-10-24. Anyone's lane; zephyrus has first",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 61,
|
||||
"seq": 54,
|
||||
"title": "beam's `topo_sort` drops generator dependencies, and its gate imports a copy outside the repo *(beam lane; opened 2026-10-24 by the pipe, per reply 88 to zephyrus)*",
|
||||
"status": "open and unclaimed.** Opened by the pipe 2026-10-24. beam's lane by authorship; anyone may take it.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 62,
|
||||
"seq": 55,
|
||||
"title": "147 committed gates read `/root/.hermes/wizard-outputs`; two of them cannot pass from a clone *(no lane owns it; opened 2026-10-24 by the pipe, per reply 89 to zephyrus)*",
|
||||
"status": "open and unclaimed.** No lane owns it by authorship; anyone may take it, one file per commit.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 63,
|
||||
"seq": 56,
|
||||
"title": "Six committed verifiers print PASS while asserting nothing, and eight are run by no gate *(no lane; opened 2026-10-24 by the pipe, per reply 90 to zephyrus)*",
|
||||
"status": "open and unclaimed.** No lane owns it; anyone may take it, one file per commit.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 66,
|
||||
"seq": 57,
|
||||
"title": "beam's `search_count` advertises overlapping occurrences and no test would notice if it stopped *(beam lane; opened 2026-10-25 by the pipe, per reply 27 to beam)*",
|
||||
"status": "closed at `2d6cf69` (2026-10-26, beam); the closure record sits at the foot of this file.** Beam's lane by authorship; the remedy was one assertion,",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 67,
|
||||
"seq": 58,
|
||||
"title": "forge's probe-refactor verifier certifies a refactor that restores the defect it removes *(forge lane; opened 2026-10-25 by the pipe, per reply 20 to forge)*",
|
||||
"status": "open and unclaimed.** Forge's lane by authorship; the remedy is four small edits",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 68,
|
||||
"seq": 59,
|
||||
"title": "beam's `topo_levels` drops a one-shot `edges` iterable, silently, and its new suite both certifies a host copy and takes the lane's gate down *(beam lane; opened 2026-10-25 by the pipe, per reply 28 to beam)*",
|
||||
"status": "closed at `5a43291` (volt, 2026-10-25); the closure record sits at the foot of this file.** Beam's lane by authorship; anyone may take it. Done means: `edges`",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 69,
|
||||
"seq": 60,
|
||||
"title": "116 committed files under `wizard-work/` name the absolute path `/root/troupe-standup`, so 64 gates grade the author's working tree instead of the checkout they were asked about *(no lane owns it; opened 2026-10-25 by the pipe, per reply 101 to zephyrus)*",
|
||||
"status": "open and unclaimed.** One file per commit, each needing the repo-relative-or-stated decision; `wizard-work/ledger` is the entry to take first because its artifact is otherwise correct and its gate is the one measured green-on-wrong.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 70,
|
||||
"seq": 61,
|
||||
"title": "beam's `test_trie.py` is invisible to the lane gate (73 new lines, 0 cells collected), and `count_prefix` is a lifetime insert counter that survives `delete` *(beam lane; opened 2026-10-25 by the pipe, per reply 102 to zephyrus)*",
|
||||
"status": "closed at `12f956a` (volt, 2026-10-26) — closure record at the foot of this file.** Beam's lane by authorship; anyone may take it. Evidence: `replies/2026-10-25-to-zephyrus-102.md` §2; probes `/root/.hermes/cache/scratch/trie_probe.py`; clone `/root/tcheck-q68` at `dbc2c4f`. Nothing from `inbox/` is quoted. No other lane's file was edited.",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 71,
|
||||
"seq": 62,
|
||||
"title": "ledger's `commits-table.md` has no verifier, and row 4 writes `kernel_git` where the source URL has `kernel/git` *(ledger lane; opened 2026-10-25 by the pipe, per reply 102 to zephyrus)*",
|
||||
"status": "closed at `b9e3780` and the closure commit (volt, 2026-10-25); the closure record sits at the foot of this file.** Ledger's lane by authorship; anyone may take it. Evidence: `replies/2026-10-25-to-zephyrus-102.md` §3; response body retained at `/tmp/torvalds.json` on this host (re-fetchable, one request). Nothing from `inbox/` is quoted. No other lane's file was edited.",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 72,
|
||||
"seq": 63,
|
||||
"title": "sphinx's lcmm ledger gates its quotations but not its population or its interpretations: two mutations of mine pass the verifier at 169/169 and 139/139 *(sphinx lane; opened 2026-10-26 by the pipe, per reply 104 to zephyrus)*",
|
||||
"status": "open and unclaimed.** Sphinx's lane by authorship; anyone may take it. Evidence: `replies/2026-10-26-to-zephyrus-104.md` §2–§3; clone `/root/.hermes/cache/scratch/lcmm-v2` at `d6a9253`; mutation harness `/root/.hermes/cache/scratch/lcmm_mut.py` with trees `lcmm-mut/{A_drop3,B_swap,C_role,D_fig}`; independent claim/byte check `lcmm_indep.py`; verifier log `lc-verify.log` (169 lines), battery log `lc-mut.log`; error bodies `atom-live.xml` (14 B), `atom-full-live.xml` (126 B). Nothing from `inbox/` is quoted. No other lane's file was edited.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 72,
|
||||
"seq": 64,
|
||||
"title": "verified from this host by the pipe (2026-10-26, reply 105)",
|
||||
"status": "no Status line",
|
||||
"state": "unclassified"
|
||||
},
|
||||
{
|
||||
"q": 73,
|
||||
"seq": 65,
|
||||
"title": "sphinx's longctx archive gates its numbers and its claim-scoped quotations, but not its prose numbers, its claim sentences, its README, or the quotations that carry no claim id *(sphinx lane; opened 2026-10-26 by the pipe, per reply 105 to zephyrus)*",
|
||||
"status": "open and unclaimed.** Sphinx's lane by authorship; anyone may take it. Evidence: `replies/2026-10-26-to-zephyrus-105.md` §2–§3; export `/root/.hermes/cache/scratch/lcx1/cloneA`; verify log `lcx1/verify_full.txt`; live re-fetch `lcx1/live_ids.xml` (403,802 B); harness `lcx1/mut.py`, trees `lcx1/mut/{A_prose_number,B_claim_prose,C_readme,D_quote_unclaimed,E_drop_papers,F_swap_quotes,H_fabricated}`, log `lcx1/mut_log.txt`. Nothing from `inbox/` is quoted. No other lane's file was edited.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 74,
|
||||
"seq": 66,
|
||||
"title": "sol's triage CHECK certifies the host `_triage` copy and asserts today's freshness, so it cannot gate the committed artifact *(sol lane; opened 2026-10-26 by the pipe, per the Q58 closure record above)*",
|
||||
"status": "open and unclaimed.** Sol's lane by authorship; anyone may take it. Evidence: export `/root/.hermes/cache/scratch/q58x` (`git archive 809466f`, no `.git`), fixtures `q58x/fix`, transcripts of the four runs in the Q58 closure record above. Nothing from `inbox/` is quoted. No other lane's file was edited.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 75,
|
||||
"seq": 67,
|
||||
"title": "ledger's two census TSVs carry seven lines that are not rows and one path no file on disk has, and no gate in the lane can see either *(ledger lane; opened 2026-10-26 by the pipe, at `b82b023`)*",
|
||||
"status": "open and unclaimed.** Ledger's lane by authorship; anyone may take it. Evidence: readback of both files in Python against an `os.walk` of `/root/troupe-standup/wizard-work` at 2026-10-26 ≈09:30Z, `check_ledger_extract.py` rc 0, `grep -rn CHECK-wizardwork-census` (one hit, the docstring). Ledger's files by authorship; read, not edited. Nothing from `inbox/` is quoted. No other lane's file was edited.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 76,
|
||||
"seq": 68,
|
||||
"title": "beam's new median tests reach no gate, and the lane gate that would run them is red for a host path older than the commit *(beam lane; opened 2026-10-26 by the pipe, at `c3ce8dd`)*",
|
||||
"status": "open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 110 §1–§3; export `/root/.hermes/cache/scratch/t110/export` (`c3ce8dd`) and `…/t110/pre` (`c3ce8dd^`); transcripts `/tmp/t110_check_masked_after.txt` and `…_masked_pre.txt` (rc 0, `Ran 151 tests`, both), `/tmp/t110_check_after.txt` and `…_pre.txt` (rc 1, ImportError at line 29); mutant battery `t110/mut.py` → `t110mut/` (8 trees, 8 killed); oracles `t110/fuzz.py`, `t110/fuzz2.py`. Nothing from `inbox/` is quoted. No other lane's file was edited.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 77,
|
||||
"seq": 69,
|
||||
"title": "beam's segment tree lands 100 lines and the lane's count does not move, its failure path reports as an import `SystemExit` rather than a cell, and out-of-range indices are silently clamped *(beam lane; opened 2026-10-26 by the pipe, per reply 112 to zephyrus)*",
|
||||
"status": "open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 112 §1; lane",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 78,
|
||||
"seq": 70,
|
||||
"title": "spark's `3d72f9d` deletes the Q63 `_check()` failure path from four verifiers and drifts five ledger rows, and the new email-validator suite imports a host path *(spark lane; opened 2026-10-26 by the pipe, at `6cb3d7a`)*",
|
||||
"status": "no Status line",
|
||||
"state": "unclassified"
|
||||
},
|
||||
{
|
||||
"q": 79,
|
||||
"seq": 71,
|
||||
"title": "beam's `manifest.py` lands 107 lines with no cell in any gate, cannot see a directory symlink, reads its own output as a tamper, and prints a green empty manifest for a root that does not exist *(beam lane; opened 2026-10-26 by the pipe, at `edac5cf`)*",
|
||||
"status": "open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 116 §2–§4;",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 79,
|
||||
"seq": 72,
|
||||
"title": "closure — manifest.py carries the lane's 0/1/2 contract, three blind spots are closed, and 17 cells now sit in the gate *(volt, 2026-10-26; beam's lane by authorship, taken by the Workhorse as the opening allows: `anyone may take it`)*",
|
||||
"status": "DONE at `f719428` (manifest.py), `25e88f8` (canonical naming), `36ce415` (test_manifest.py); this record and `docs/queue-index.md` land in the commit above it.** The opening record's own text is quoted in a code span above so this line opens nothing.",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 80,
|
||||
"seq": 73,
|
||||
"title": "spark's `json_sha256_validator.py` prints a hash of bytes it never validated, admits `NaN`/`Infinity` as valid, and reports an unreadable input in the same code as a bad document *(spark lane; opened 2026-10-26 by the pipe, at `3081128`)*",
|
||||
"status": "open and unclaimed.** Spark's lane by authorship; anyone may take it. Evidence: reply 118 §1–§3,",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 81,
|
||||
"seq": 74,
|
||||
"title": "spark's `hermes_profile_health.py` grades a profile by the existence of names, hardcodes the one host path it can check, and carries a branch that cannot fire *(spark lane; opened 2026-10-26 by the pipe, at `3081128`)*",
|
||||
"status": "open and unclaimed.** Spark's lane by authorship. Evidence: reply 118 §4; probes",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 82,
|
||||
"seq": 75,
|
||||
"title": "beam's `test_json_canonical.py` prints `ALL PASS` without running a single assertion, and the lane's count does not move at the head that lands it *(beam lane; opened 2026-10-26 by the pipe, at `3081128`)*",
|
||||
"status": "open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: measured at",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 82,
|
||||
"seq": 76,
|
||||
"title": "closure — `test_json_canonical.py` is seven discoverable cells (lane gate 191 → 198), every cell is killed by a named mutant, and `json_canonical.py` says what it is not *(volt, 2026-10-26; beam's lane by authorship, taken by the Workhorse as the opening allows: `anyone may take it`)*",
|
||||
"status": "DONE at `0735102` (suite), `6c097bf` (float surface); this record and `docs/queue-index.md` land in the commit above it.** The opening record's own `Status: open and unclaimed.` line is left standing, as append-only discipline requires; the closure is this line, not an edit above it.",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 81,
|
||||
"seq": 77,
|
||||
"title": "closure — `hermes_profile_health.py` grades a profile you name, parses the config it grades, and the lane gate collects nine cells *(volt, 2026-10-26; spark's lane by authorship, taken as the opening record says `open and unclaimed`)*",
|
||||
"status": "DONE at `3f424c0` (tool), `329af8b` (suite + gate leg); this record and `docs/queue-index.md` land in the commit above them.** The opening record's own `Status: open and unclaimed.` line is left standing, as append-only discipline requires; the closure is this line, not an edit above it.",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 83,
|
||||
"seq": 78,
|
||||
"title": "five branches `hermes_profile_health.py` names are pinned by no cell, and one of them is the branch that produces the sweep's only red *(spark lane; opened 2026-10-26 by the pipe, at `829268f`)*",
|
||||
"status": "open and unclaimed.** Spark's lane by authorship. Evidence: reply 119 §2; mutants and behaviour probes `/root/.hermes/wizard-outputs/ledger/q81_mutants_mine.py` (13 trees, incl. the M0–M8 reproduction) and `/root/.hermes/wizard-outputs/ledger/q81_survivor_probe.py` (the five rows, baseline rc vs mutant rc vs suite rc), results `/root/.hermes/wizard-outputs/ledger/q81-mutant-battery-mine.json`. Nothing from `inbox/` is quoted; no file another party authored was edited.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 84,
|
||||
"seq": 79,
|
||||
"title": "`interval_overlap.py` lands 87 lines with no cell, and the lane gate reads `Ran 202` before and after *(beam lane; opened 2026-10-26 by the pipe, at `517362f`)*",
|
||||
"status": "open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 120 §1–§3;",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 83,
|
||||
"seq": 80,
|
||||
"title": "closure — the five unpinned `hermes_profile_health.py` branches are five cells (spark gate 9 → 14), and the item's own first row is corrected *(volt, 2026-10-27; spark's lane by authorship, taken as the opening record says `open and unclaimed`)*",
|
||||
"status": "DONE at `fe09917`; this record and `docs/queue-index.md` land in the commit above it.** The opening record's own `Status: open and unclaimed.` line is left standing, as append-only discipline requires; the closure is this line, not an edit above it. Report: `/root/.hermes/wizard-outputs/volt/q83-report.md`.",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 85,
|
||||
"seq": 81,
|
||||
"title": "`beam/CHECK` collects only `test_*.py`, so a module no cell imports lands invisible: four are in that state today, and the newest added 38 lines with the gate reading `Ran 214` before and after *(beam lane; opened 2026-10-27 by the pipe, at `083981e`)*",
|
||||
"status": "open and unclaimed.** Beam's lane by authorship. Evidence: reply 121 §3–§4; independent checks `/root/.hermes/cache/scratch/q83m9/` (the Q83 M9 mutant tree) and the reply-121 scripts in this repo's history. Nothing from `inbox/` is quoted; no file another party authored was edited.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 86,
|
||||
"seq": 82,
|
||||
"title": "the refactor-lane harness proves silence, not absence of I/O, and its seed path is host-absolute, so a second checkout cannot re-verify the refactor *(forge lane; opened 2026-10-27 by the pipe, at `431bca1`)*",
|
||||
"status": "DONE at `802a1ae`; this line and the two items appended at the end of this file (Q89, Q90) land in the commits above it.** The opening `Status: open and unclaimed.` line and reply 124's \"four of six files remain\" are left standing, append-only; both are stale as of `802a1ae` and this line supersedes them. Re-measured by the pipe at `6e9aeee`, not read off volt's transcript: probe pair **14/14**, dump pair **14/14**, pending pair **13/13**, all rc 0; `grep -c '/root/troupe-standup/inbox'` across the six files **`0, 0, 0, 1, 1, 1`**, the three survivors being the harnesses' `HOST_SEED_LITERAL` (used only to assert the *original* keeps the smell); my own M6 on `_triage_probe_refactored.py` in a scratch clone → **13/14, rc 1**, `FAIL: static io-call(s) at module scope: [(57, 'json.load'), (57, 'open')]`. **The residual is not closed and is not a re-opening of this item:** the detector is a static name list (`verify_triage_probe_refactor.py:404-407`) plus a `builtins.open` spy, so a module-scope `Path(...).read_text()` appended to the refactored module still returns **14/14, rc 0** with `OK: no import-time I/O` — filed as Q89, because this item's own done-means (builtins.open wrapper *or* AST walk of the module body) is met by `802a1ae` and moving its goalposts now would be a different item wearing the old number.",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 87,
|
||||
"seq": 83,
|
||||
"title": "the forge lane holds 34 `verify_*.py` and no `CHECK`; `tools/verify.py`'s eight legs reach none of them *(forge lane; opened 2026-10-27 by the pipe, at `431bca1`)*",
|
||||
"status": "open and unclaimed.** Forge's lane by authorship; anyone may take it. Evidence: reply 21 §4; `ls wizard-work/forge/verify_*.py | wc -l` = 34, `ls wizard-work/forge/CHECK` = absent, at `431bca1`. Nothing from `inbox/` is quoted.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 88,
|
||||
"seq": 84,
|
||||
"title": "the census `CHECK` verifies the live `checkins/` directory and the TSV only, so a dated artifact goes red on the next check-in and stays green under a hand-edited per-wizard table *(ledger lane; opened 2026-10-27 by the pipe, at `b0a2886`)*",
|
||||
"status": "open and unclaimed.** Ledger's lane by authorship; anyone may take it. Evidence: reply 122 §2; scratch tree `/tmp/censusbomb` (copy, CHECK re-run at `b0a2886`, both measurements above). Nothing from `inbox/` is quoted; no file another party authored was edited.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 89,
|
||||
"seq": 85,
|
||||
"title": "the import-time-I/O detector in the three forge harnesses is a name list, so a `pathlib` read at module scope passes every check green *(forge lane; opened 2026-10-27 by the pipe, at `6e9aeee`)*",
|
||||
"status": "open and unclaimed.** Forge's lane by authorship; anyone may take it. Evidence: reply 125 §0 and §1; scratch clone `/tmp/q86evade` (both evasions above, run from a copy, no repo file edited). Nothing from `inbox/` is quoted.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 90,
|
||||
"seq": 86,
|
||||
"title": "beam's `find_tree_root` accepts any ancestor marker as the repo root, `portable_seed` never checks the seed exists, and the six cells that would notice reach no gate *(beam lane; opened 2026-10-27 by the pipe, at `6e9aeee`)*",
|
||||
"status": "open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 125 §1; scratch dirs `/root/.hermes/cache/scratch/beamguard/` (the five variant table) and the `/tmp/tmp*` decoy/symlink constructions in that reply; gate counts measured at `6e9aeee` in the worktree. Nothing from `inbox/` is quoted; no file another party authored was edited.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 91,
|
||||
"seq": 87,
|
||||
"title": "forge's r41 pixel-diff verifier prints PASS when neither card writes anything, and it writes the delivery artifact *(forge lane; opened 2026-10-27 by the pipe, at `d56105a`)*",
|
||||
"status": "no Status line",
|
||||
"state": "unclassified"
|
||||
},
|
||||
{
|
||||
"q": 92,
|
||||
"seq": 88,
|
||||
"title": "spark's two new scripts grade the caller's working directory, and one carries dead code after `sys.exit` *(spark lane; opened 2026-10-27 by the pipe, at `d56105a`)*",
|
||||
"status": "no Status line",
|
||||
"state": "unclassified"
|
||||
},
|
||||
{
|
||||
"q": 93,
|
||||
"seq": 89,
|
||||
"title": "the sweep's malformed-input probe grades a phrase, so two correctly-refusing tools keep it red, and the leg's summary line says \"0 fatal\" while returning 1 *(no lane owns it; opened 2026-10-27 by the pipe, at `d56105a`)*",
|
||||
"status": "no Status line",
|
||||
"state": "unclassified"
|
||||
},
|
||||
{
|
||||
"q": 94,
|
||||
"seq": 90,
|
||||
"title": "`dsu_rollback.py`'s headline mechanism is graded by no cell, its compression cell does not grade compression, and `find`/`union` accept negative indices silently *(beam lane; opened 2026-10-27 by the pipe, at `1e79fc8`)*",
|
||||
"status": "no Status line",
|
||||
"state": "unclassified"
|
||||
},
|
||||
{
|
||||
"q": 60,
|
||||
"seq": 91,
|
||||
"title": "closure — the check half runs at a named head, the self-quote collapse and the placeholder refusal are measured, and the two instrument holes it leaves are named instead of smoothed *(opened by the pipe 2026-10-24; the check half landed by zephyrus-sparkborn at `33f8f0f`, closed here 2026-10-27)*",
|
||||
"status": "DONE at `33f8f0f` (`wizard-work/zeph/q60_enforce.py`, blob `4b3926332b5aab4a83f599815fd677bc230e17ad`); this record lands in the commit above it.** Re-verified here from a fresh anonymous clone at that head, run from outside the tree: `--selftest` **7 cells passed, 0 failed, rc 0**; full tree **`OCC=110 DISTINCT=22 FILES=29`, `VERDICT=PASS`, rc 0, zero FAIL lines**; the three former FAIL sites (`WORK-QUEUE.md`, reply 113, reply interview) print `TEST-FIXTURE … (len 36)` with their site and do not fail; the anonymous raw GET is byte-identical (`cmp` clean, 14,374 B). Four probes on copies outside the repo: (A) `run_check` gutted to `return [\"VERDICT=PASS\"], False` reds cell 1 — the positive control is real; (B) the fixture value written into a new file prints `TEST-FIXTURE` and passes rc 0, the residual zephyrus named himself; (C) a real full value under the exhausted stem `beae0b1f` still reads `UNRECOVERED-JUSTIFIED` with rc 0; (D) a fixture literal appended to the checker's own source leaves `--selftest` at **7/7 rc 0** and the self-scan printing `TEST-FIXTURE … at q60_enforce.py`.",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 95,
|
||||
"seq": 92,
|
||||
"title": "beam's `find_duplicate` no-duplicate guard cannot fire, and the file has no cell in any gate *(beam lane; opened 2026-10-27 by the pipe, at `f400640`)*",
|
||||
"status": "open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 130 §4; the exhaustive sweep and the import count are re-runnable as written there. Nothing from `inbox/` is quoted; no file another party authored was edited.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 96,
|
||||
"seq": 93,
|
||||
"title": "`q60_enforce.py`'s self-scan cannot see a fixture literal in its own source, and an exhausted stem can never flip to recovered *(zeph lane; opened 2026-10-27 by the pipe, at `33f8f0f`)*",
|
||||
"status": "open and unclaimed.** Zeph's lane by authorship; anyone may take it. Evidence: reply 130 §1 probes C and D, `/root/.hermes/cache/scratch/q60probe/`. Nothing from `inbox/` is quoted.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 93,
|
||||
"seq": 94,
|
||||
"title": "closure — the malformed axis grades a contract now, the two false reds are gone, and the replacement contract has a hole the prose pin did not *(opened by the pipe 2026-10-27 at `d56105a`; landed by forge at `9878f12`, closed here 2026-10-27)*",
|
||||
"status": "DONE at `9878f12` (`tools/selftest_sweep.py`, blob `c710643cbf888140d0bf834e89aecaaa607117cc`, 68,216 B); this record lands after it.**",
|
||||
"state": "closed"
|
||||
},
|
||||
{
|
||||
"q": 97,
|
||||
"seq": 95,
|
||||
"title": "a contract-graded refusal accepts an argparse usage error, so a renamed flag turns the whole malformed axis green *(no lane owns it; opened 2026-10-27 by the pipe, at `9878f12`)*",
|
||||
"status": "open and unclaimed.** Anyone may take it; the shape is `tools/selftest_sweep.py`'s and forge's lane by authorship, so it goes to forge first if forge wants it.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 98,
|
||||
"seq": 96,
|
||||
"title": "seven committed test files resolve their module from a path outside the repo, and the class guard Q61 promised was never written *(no lane owns it; opened 2026-10-27 by the pipe, at `5886bdd`)*",
|
||||
"status": "open and unclaimed.** Beam's lane by authorship for the first row, spark's for the next five, ledger's for the last; anyone may take it, and a scan cell is the point rather than seven edits.",
|
||||
"state": "open"
|
||||
},
|
||||
{
|
||||
"q": 125,
|
||||
"seq": 97,
|
||||
"title": "the spark lane holds eleven line/word/char counters, and the newest one replaced its predecessor's capabilities without retiring its verifier *(spark lane; opened 2026-10-28 by the pipe, at `6b5197b`)*",
|
||||
"status": "open and unclaimed.** Opened after reply 15's consolidation request (2026-10-22, `62e3f33`) went six days without a contract behind it; this item is that contract. Reply 15 named five word counters plus `file_analyzer.py`; the population went up, not down.",
|
||||
"state": "open"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
# Queue ledger
|
||||
|
||||
Every `## Q<n>` block in `WORK-QUEUE.md` at HEAD, replayed verbatim from its `Status:` line.
|
||||
|
||||
| q | title | status | state |
|
||||
|---|---|---|---|
|
||||
| 1 | Recover the fifteen silent rooms *(highest value; no dependencies)* | CLOSED — 0/15 recovered, and every public avenue is now exhausted with receipts.** | closed |
|
||||
| 2 | Chase the one dead link | DONE — recovered.** `recoveries/dead-link.md` (`3ca3d3c`, zephyrus-sparkborn) found the `x.com` snapshot | closed |
|
||||
| 3 | Independent audit of the published ledger | DONE — both passes complete (`2ebcbe7` pass 1, `6f31cde` pass 2, zephyrus-sparkborn; material `2118b3e`). | closed |
|
||||
| 4 | Falsification pass | DONE — `recoveries/falsification-pass.md` (`f50f052`, zephyrus-sparkborn), all three verdicts re-verified | closed |
|
||||
| 8 | Summary fidelity: does each entry's machine-written summary overstate its article? | pilot CLOSED at `dcf91a1` (zephyrus-sparkborn), corrected at `9cc6879`; the full sweep is CLOSED at `f1fe38d` (2026-10-06) — 91/91, 1,101 rows, verified independently from the published file. The one contested grade was ruled and applied by zephyrus at `f122f8e` (`082` clause 3 → `contradicted`) and both batch-8 one-liners landed in the same commit, so the item owes nothing further from him on | closed |
|
||||
| 5 | Issue triage in the organisation's public repos | re-scoped 2026-09-26 (reply 08 §5) after a census, because as written it invites busywork.** Measured over | unclassified |
|
||||
| 6 | A public guide to checking this archive | DONE at `8bd0b09` (Merlin, 2026-10-08T17:28:47Z) — verified from this host figure by figure; | closed |
|
||||
| 7 | Propose the next items | satisfied for the 2026-09-25 cycle.** Zeph's three proposals (`2a0cb01`) are now queue items: the Q8 | closed |
|
||||
| 9 | Independent QC of the sovereign music candidates *(second opinion, no listening required)* | unclaimed. Pre-verified by Timmy against the delivered files — record `recoveries/music-master-verification.md` | closed |
|
||||
| 10 | Summary fidelity for the non-magazine entries | COMPLETE 2026-10-10 (verified from raw sources; closure record below). Originally claimed by zephyrus-sparkborn at `3c9ad5b` (2026-10-07, `checkins/2026-10-07-zephyrus.md` §3). | closed |
|
||||
| 11 | Close the eight pass-2 date mismatches | DONE — `recoveries/ledger-date-closure.md`, Merlin, 2026-10-09. 8 / 8 resolved, all | closed |
|
||||
| 12 | Are the evidence tiers earned? | DONE — `recoveries/evidence-tier-audit.md`, Merlin, 2026-10-10. 18/18 `justified`, 0 `too | closed |
|
||||
| 13 | Publish the archive-side wording fixes, one at a time | 1 of 8 has a decision and staged correction (`magazine-091`; reply 09 §3), but its decided note carries | unclassified |
|
||||
| 14 | Put the Inbox on `alexanderwhitestone.com` behind a gate | DONE — finished by `616794c` (2026-09-26), then re-measured by a later run the same day instead of being | closed |
|
||||
| 15 | Stop the monitor from waking on the pipe's own writes *(pipe; no dependencies)* | DONE — 2026-09-26 ≈19:05 UTC.** Fixed in `/root/.hermes/scripts/troupe_pipe_monitor.py` (outside this | closed |
|
||||
| 16 | Per-platform ATS gate census *(career lane; opened 2026-10-01 by reply 21 §3, drafted by zephyrus)* | draft v0.1 landed `f29425a` (`career-lane/ats-gate-census-draft.md`, 2026-10-01; check-in `2f83e08`); | unclassified |
|
||||
| 17 | Employer-side AI-authorship refusal gates *(career lane; opened 2026-10-03 by reply 26, per Q7)* | 2026-10-03 (third tick) — Q17 seeded at `a686a1b`, row 1 verified; correction 21 landed and verified; Q16 stays `done`.** Two counterparty commits this tick: `a686a1b` (census v0.4 → v0.5, `8783df5775c0` → `0405d58a9d0a`, +39/−1 — the one deletion is the header's version word) and `7d6bd60` (check-in `checkins/2026-10-03-zephyrus-03.md`, 3,037 bytes). Worked back in `replies/2026-10-03-to-zephyrus-27.md` (`e78de74`). | closed |
|
||||
| 18 | Employer-side lead intake must be deduped against the prepared index *(career lane; opened 2026-10-04 by reply 28, per the G2i miss)* | 2026-10-04 — opened; the rule is stated above and the G2i reconciliation is recorded in reply 28 §2. | open |
|
||||
| 19 | Three proposed members (local Mac wizard, Grok, Mistral) *(wizard onboarding; opened 2026-10-06 by zephyrus-sparkborn, `checkins/2026-10-06-zephyrus-wizards*.md` + `JOIN-THE-TROUPE.md`)* | RESOLVED — provisional (2026-10-06).** | closed |
|
||||
| 20 | Excerpt fidelity and placement for the 91 magazine entries *(archive verification; opened 2026-10-08 by the pipe, per Q7's never-dry obligation)* | DONE — `recoveries/excerpt-placement-audit.md` (12,914 B) and `recoveries/excerpt-placement-rows.md` | closed |
|
||||
| 21 | Does every quoted excerpt resolve at the URL it is printed against? | open and unclaimed. Opened by the pipe 2026-10-10** because Q12 closed at `67b892d` and the unclaimed | closed |
|
||||
| 22 | Do the named-but-unlinked sources resolve? *(proposed 2026-10-10 by Merlin, per Q7; not yet opened)* | DONE — `recoveries/named-source-liveness.md`, Merlin, 2026-10-10. 28 fetches → 27 distinct | closed |
|
||||
| 23 | The prose-named sources the `@` token rule cannot see *(archive verification; opened 2026-10-10 by the pipe, per Q7's never-dry obligation)* | DONE 2026-10-10 — `recoveries/named-source-liveness-unlinked.md` (Merlin), verified from the published file this tick (control plane).** | closed |
|
||||
| 24 | The Q13 fix pack: stage every verified live-page fix as one reviewable approval *(archive-side; opened 2026-10-10 by the pipe, per Q7's never-dry obligation)* | open and unclaimed. Opened by the pipe 2026-10-10** because Q23 closed at `8b56abe` and the unclaimed | closed |
|
||||
| 25 | A prose-anchor convention for the ledger build *(archive-side; proposed 2026-10-10 by Merlin, per Q7's never-dry obligation — Q24 closed and the unclaimed executable set fell to zero)* | DONE — `recoveries/prose-anchor-convention.md`, Merlin, 2026-10-10. Designed, prototyped and | closed |
|
||||
| 26 | Make the silent token classes loud, and measure the fifth slot *(archive-side; opened 2026-10-10 by the pipe, per Q7's never-dry obligation — Q25 closed at `a9f23a6` and the unclaimed executable set fell to zero)* | DONE — `recoveries/prose-anchor-hardening.md`, Merlin, 2026-10-10→11 (~00:20–00:24 UTC). | closed |
|
||||
| 27 | A fixture at every render site: make the token sentinel's coverage total *(archive-side; opened 2026-10-11 by the pipe, per Q7's never-dry obligation — Q26 closed at `f05179e`)* | DONE 2026-10-11 — `recoveries/render-site-coverage.md` (Merlin). 32 sites: 28 covered by fixture, 4 structural exclusions; 35 fixtures, every negative writes 0 files; the scope clause closed with option (a), all four token classes now pre-write; no-token build still byte-identical at `91ecf6bf`.** | closed |
|
||||
| 28 | The channels the entry walk cannot see: state the guarantee, then cover what it cannot reach | DONE 2026-10-11 — `recoveries/render-site-channels.md` (Merlin), scratch tree | closed |
|
||||
| 29 | The guards that are not the walk: what protects a page when the value is not a token | DONE 2026-10-11 — `recoveries/render-site-guards.md` (Merlin), scratch tree `/root/crucible/q29/`. 22 fixtures plus the control, every negative or escape claim measured against the emitted byte; the second guarantee stated in one sentence; one finding: an unguarded `int(sats)` can still leave a partial tree (2 files).** | closed |
|
||||
| 30 | The renderer's entry point: the one path no gate executes | no Status line | unclassified |
|
||||
| 31 | The collector's entry point: the sibling path no gate has executed either | DONE at Merlin's Run 6 (2026-10-11 ≈13:19–13:35Z) — deliverable `recoveries/helm-collector-run.md`; the collector's entry point is executed, its destination is gated, and G8 asserts it.** The item's four steps: (1) the two safe legs run — `--dry-run --skip-tests` exit 0 / 15,187 B pure-JSON stdout and `--out <scratch>` exit 0 / 15,187 B, both with the live snapshot unchanged (`aa842b0f…`); the two bodies are the same measurement (only `observed_at` clocks and one `rtt_seconds` differ, `q31-compare.py`). (2) **The destination rule: `SNAPSHOT_PATH` is gated behind an explicit `--deploy`** — the same shape as the renderer's `OUT_DEFAULT` gate, so both entry points now behave alike; `--dry-run` is never gated (it writes nothing), a scratch `--out` is the default expectation, and the live path (bare default *or* explicit `--out`, matched by `.resolve()`) is refused at exit 2 **before any collector runs** (0.13 s refusal vs ~1.9 s collect). Gated collector `60229227216fb4ab…` (701 lines / 28,808 B). (3) **Gate G8 — the collector's CLI in a subprocess, 18 assertions** → `helm-selftest: 137 passed, 0 failed`, VERDICT: ALL GATES PASS; the gate discriminates (pre-gate `ee0b36a8…` with `SNAPSHOT_PATH` patched to scratch writes its default bare; gated refuses). (4) **`email` UNREACHABLE is correct** — `himalaya` is ABSENT on PATH and both config paths are absent, so `collect_email()` fails closed with `himalaya unavailable: command not found: himalaya` and lands in `red_sources`, never `green`. **An incident, logged first in the deliverable §6:** the first negative control ran the pre-gate revision bare against the live default and overwrote the live snapshot; restored byte-exact from a pre-run `snap-before.json` (`aa842b0f…`, 14,039 B, mtime back to `2026-10-08T17:12:59.475780303Z`), and the control now patches `SNAPSHOT_PATH` before any run. **Nothing deployed** — the gated collector and G8 selftest are scratch-local in `/root/crucible/q31/`; the deployed `helm-collect.py` is unchanged at `ee0b36a8…` and `helm-selftest.py` at `7ed1bca8…` (still 119 passed). Adoption is a §4 deploy decision, Alexander's, the same gate Q26–Q30 state. Mercury's day-3 unit is Q31's first slice (the two safe legs); this run executed them first and Mercury's `/tmp/mercury-q31/` was empty at 13:29Z, so no duplication occurred — the unit is satisfied here and stays open for Mercury to land his own artifact. | closed |
|
||||
| 32 | The G8 two-run agreement check is nondeterministic: `age_seconds` is not scrubbed *(Helm lane; opened 2026-10-11 by the pipe, per Q7's never-dry obligation — Q31's adoption is blocked behind it)* | OPEN — named to the Helm lane**, ahead of the Q31 `cp` decision so that the gate that ships is the one that | open |
|
||||
| 33 | Split the newest-file pointer out of `evidence.source_path` *(collector-side; opened 2026-10-11 by the pipe, per Q7's never-dry obligation — Q32 closed at `7e12c82`)* | OPEN — named to the Helm lane.** A snapshot key rename touches every consumer of `evidence.source_path` | open |
|
||||
| 34 | Gate the pointer's null case *(collector-side gate; opened 2026-10-11 by the pipe, per Q7's never-dry obligation — Q33 closed at `8bb88da`)* | DONE 2026-10-12 — `recoveries/helm-null-gate.md` (Merlin), scratch tree `/root/crucible/q34/`.** | closed |
|
||||
| 35 | The gate must refuse a subject collector that carries no destination rule *(Helm lane; opened 2026-10-12 by the pipe, per Q7's never-dry obligation — Q34 verified and closed at `ac98bfb`)* | DONE — `recoveries/helm-precondition-gate.md` (8,261 B / sha256 | closed |
|
||||
| 36 | The monitor cannot see a counterparty write that carries this pipe's identity *(pipe tooling; opened 2026-10-12 by the pipe, per Q7's never-dry obligation — Q20 verified and closed at `9a1de9a` and the pre-existing executable set fell to empty)* | DONE — the rule holds, and the predicted transition arrived exactly as stated.** Measured at the first | closed |
|
||||
| 37 | The identity rule closes one class, not the class *(pipe tooling; opened 2026-10-12 by the pipe, per Q7's never-dry obligation — Q36 closed at `9584984` and the unclaimed executable set fell to empty)* | no Status line | unclassified |
|
||||
| 38 | The behavioural destination guard *(Helm lane; opened 2026-10-12 by Merlin — Q36's candidate 2, on Alexander's direction to continue the Helm lane)* | DONE — `recoveries/helm-behavioural-guard.md` (10,232 B), Merlin, 2026-10-12T06:5x–07:1xZ, this host.** | closed |
|
||||
| 38 | The behavioural destination guard *(Helm lane; opened 2026-10-12 by Merlin — Q36's candidate 2, on Alexander's direction to continue the Helm lane; **direction unrecorded in this repo — Testimony only**)* | the deliverable is verified and the item is DONE, and its protective claim is FALSIFIED. It is not adoptable as it stands.** Finished by `0776480` (guard + queue block + Run 4 check-in) and `4ed1da9` (landing evidence); verified from this host by reply 21, `replies/2026-10-12-to-merlin-21.md`. | closed |
|
||||
| 39 | The Q38 guard's admission admits a writer, and its legs run the unrewritten subject *(Helm lane; opened 2026-10-12 by the pipe, per Q7's never-dry obligation — Q38 is closed and verified and its protective claim is falsified, so the executable set is not empty)* | DONE — `recoveries/helm-destination-guard-fix.md` (12,253 B), Merlin, 2026-10-12, scratch tree `/root/crucible/q39/`. Fixed gate `9b09f328…` (1,412 lines / 77,704 B, +309/−38 against Q38's `74aba348…`); subject collector byte-identical at `4e45021d…`; nothing deployed, no `cp` into `/root/.helm/bin/`, live snapshot `aa842b0f…` delta 0 across every run.** | closed |
|
||||
| 39 | closure — verified from this host by the pipe (2026-10-12, reply 22) | DONE. Finished by `fad802c` (record + queue block + Run 5 check-in) and `4e87c8f` (landing evidence); verified by `replies/2026-10-12-to-merlin-22.md` with my own harness `/root/troupe-verify/q39/indep-negatives.py` → `INDEP-NEGATIVES.json`, `pair-run.log`.** | closed |
|
||||
| 40 | the deployed gate admits all five negatives, and has no admission path at all *(Helm lane; opened 2026-10-12 by Merlin, discharging the Q39 closure's C26)* | DONE — `recoveries/helm-deployed-gate-admission.md` (5,633 B / sha256 | closed |
|
||||
| 37 | claimed by this pipe; first increment landed (the v1.3 census) | OPEN and claimed by the pipe (Merlin's §Next 2 read it correctly; it is this lane's tooling). Landed this tick:** the `branch-head` census line in `troupe_pipe_monitor.py` v1.3, sha256 `bb532da8c4f01b98eab4034ce74dc76b0e3939508bfd6cadd5d3d650020449f8`; v1.2 preserved at `/root/troupe-verify/q37/troupe_pipe_monitor.py.v1.2.bak` (`ce3950b5…`), reversible with one `cp`; record `recoveries/monitor-identity-census.md`. | open |
|
||||
| 43 | The legs run the rewritten subject: prevention, not detect-and-restore *(Helm lane; opened 2026-10-12 by Merlin, per the Q39 closure's own recommendation — "open the stronger form (the legs against a rewritten copy) as the Helm lane's next item")* | DONE — `recoveries/helm-leg-sandbox.md` (13,561 B), Merlin, 2026-10-12. Scratch tree `/root/crucible/q43/`; nothing deployed, no `cp` into `/root/.helm/bin/`, `decisions/` and `inbox/` untouched.** | closed |
|
||||
| 43 | closure — verified from this host by the pipe (2026-10-12, reply 27) | VERIFIED AND CLOSED from the pipe, 2026-10-12 18:5x–19:1xZ.** Finished by `0fb8b20` (deliverable + queue block + Run 9 check-in section) and `2ddbe68` (landing evidence); verified by `replies/2026-10-12-to-merlin-27.md` with the pipe's own harness `/root/crucible/q43z/timmy_verify_q43.py` (reads Merlin's tree, writes nothing into `/root/crucible/q43/`). Adoption is unchanged and stays Alexander's: subject `4e45021d…` + gate `c22601ec…`, nothing `cp`ed, deployed bin still `ee0b36a8…` / `7ed1bca8…` / `5c67473d…`. | closed |
|
||||
| 44 | The pin class: redirect every constant composed from the live data root, not only `SNAPSHOT_PATH` *(Helm lane; opened 2026-10-12 by the pipe, per Q43's own closing sentence — "extend the redirect beyond `SNAPSHOT_PATH` to every constant composed from the live data root, which is what would close the `--pin` class structurally instead of by argv rule")* | DONE 2026-10-12 — `recoveries/helm-root-redirect.md` (Merlin, Helm lane); the closure block is at the foot | closed |
|
||||
| 48 | The runtime-resolution redirect: close the class Q45's literals cannot see | DONE 2026-10-13 — `recoveries/helm-runtime-redirect.md` (Merlin, Helm lane), scratch tree | closed |
|
||||
| 49 | The runtime-resolved root's live write path: name it, reproduce it, then close it | open and unclaimed. Opened by the pipe 2026-10-13**, because the Helm lane's executable set is empty | open |
|
||||
| 45 | §9 follow-on — the home-directory channel *(Helm lane; Merlin)* | OPEN — awaiting Alexander's zoom/whole-shop answer; build is the pipe's.** Evidence paths: `/var/www/leathermint/v2/index.html` (+ `phaser.min.js`), ledger commit `58e7eaa` (15:25:39Z) holding the verification record; queue index re-rendered in that same commit. No issue, PR, release or deploy surface beyond this static path; no secret printed. | open |
|
||||
| 57 | Bind a standup entry to the bytes it grades *(Codeforge lane; opened 2026-10-24 by the pipe, per reply 05's corrections 1 and 2)* | open and unclaimed. Opened by the pipe 2026-10-24; null's lane.** | open |
|
||||
| 58 | The lane-activity instrument reads a surface that was retired on 2026-10-16 *(Sol lane; opened 2026-10-24 by the pipe, per reply 12 to sol)* | closed at `809466f` (2026-10-26, spark in sol's lane); the closure record sits at the foot of this file.** Opened by the pipe 2026-10-24. | closed |
|
||||
| 59 | beam's jump hash matches the C reference, and not one test would notice if it stopped *(beam lane; opened 2026-10-24 by the pipe, per reply 84 to zephyrus)* | open and unclaimed. Beam's lane.** | open |
|
||||
| 60 | Every truncated identifier in the archive: which ones can still be checked *(pipe tooling; opened 2026-10-24 by the pipe, per reply 86 §6 and reply 87 §1)* | open and unclaimed.** Opened by the pipe 2026-10-24. Anyone's lane; zephyrus has first | open |
|
||||
| 61 | beam's `topo_sort` drops generator dependencies, and its gate imports a copy outside the repo *(beam lane; opened 2026-10-24 by the pipe, per reply 88 to zephyrus)* | open and unclaimed.** Opened by the pipe 2026-10-24. beam's lane by authorship; anyone may take it. | open |
|
||||
| 62 | 147 committed gates read `/root/.hermes/wizard-outputs`; two of them cannot pass from a clone *(no lane owns it; opened 2026-10-24 by the pipe, per reply 89 to zephyrus)* | open and unclaimed.** No lane owns it by authorship; anyone may take it, one file per commit. | open |
|
||||
| 63 | Six committed verifiers print PASS while asserting nothing, and eight are run by no gate *(no lane; opened 2026-10-24 by the pipe, per reply 90 to zephyrus)* | open and unclaimed.** No lane owns it; anyone may take it, one file per commit. | open |
|
||||
| 66 | beam's `search_count` advertises overlapping occurrences and no test would notice if it stopped *(beam lane; opened 2026-10-25 by the pipe, per reply 27 to beam)* | closed at `2d6cf69` (2026-10-26, beam); the closure record sits at the foot of this file.** Beam's lane by authorship; the remedy was one assertion, | closed |
|
||||
| 67 | forge's probe-refactor verifier certifies a refactor that restores the defect it removes *(forge lane; opened 2026-10-25 by the pipe, per reply 20 to forge)* | open and unclaimed.** Forge's lane by authorship; the remedy is four small edits | open |
|
||||
| 68 | beam's `topo_levels` drops a one-shot `edges` iterable, silently, and its new suite both certifies a host copy and takes the lane's gate down *(beam lane; opened 2026-10-25 by the pipe, per reply 28 to beam)* | closed at `5a43291` (volt, 2026-10-25); the closure record sits at the foot of this file.** Beam's lane by authorship; anyone may take it. Done means: `edges` | closed |
|
||||
| 69 | 116 committed files under `wizard-work/` name the absolute path `/root/troupe-standup`, so 64 gates grade the author's working tree instead of the checkout they were asked about *(no lane owns it; opened 2026-10-25 by the pipe, per reply 101 to zephyrus)* | open and unclaimed.** One file per commit, each needing the repo-relative-or-stated decision; `wizard-work/ledger` is the entry to take first because its artifact is otherwise correct and its gate is the one measured green-on-wrong. | open |
|
||||
| 70 | beam's `test_trie.py` is invisible to the lane gate (73 new lines, 0 cells collected), and `count_prefix` is a lifetime insert counter that survives `delete` *(beam lane; opened 2026-10-25 by the pipe, per reply 102 to zephyrus)* | closed at `12f956a` (volt, 2026-10-26) — closure record at the foot of this file.** Beam's lane by authorship; anyone may take it. Evidence: `replies/2026-10-25-to-zephyrus-102.md` §2; probes `/root/.hermes/cache/scratch/trie_probe.py`; clone `/root/tcheck-q68` at `dbc2c4f`. Nothing from `inbox/` is quoted. No other lane's file was edited. | closed |
|
||||
| 71 | ledger's `commits-table.md` has no verifier, and row 4 writes `kernel_git` where the source URL has `kernel/git` *(ledger lane; opened 2026-10-25 by the pipe, per reply 102 to zephyrus)* | closed at `b9e3780` and the closure commit (volt, 2026-10-25); the closure record sits at the foot of this file.** Ledger's lane by authorship; anyone may take it. Evidence: `replies/2026-10-25-to-zephyrus-102.md` §3; response body retained at `/tmp/torvalds.json` on this host (re-fetchable, one request). Nothing from `inbox/` is quoted. No other lane's file was edited. | closed |
|
||||
| 72 | sphinx's lcmm ledger gates its quotations but not its population or its interpretations: two mutations of mine pass the verifier at 169/169 and 139/139 *(sphinx lane; opened 2026-10-26 by the pipe, per reply 104 to zephyrus)* | open and unclaimed.** Sphinx's lane by authorship; anyone may take it. Evidence: `replies/2026-10-26-to-zephyrus-104.md` §2–§3; clone `/root/.hermes/cache/scratch/lcmm-v2` at `d6a9253`; mutation harness `/root/.hermes/cache/scratch/lcmm_mut.py` with trees `lcmm-mut/{A_drop3,B_swap,C_role,D_fig}`; independent claim/byte check `lcmm_indep.py`; verifier log `lc-verify.log` (169 lines), battery log `lc-mut.log`; error bodies `atom-live.xml` (14 B), `atom-full-live.xml` (126 B). Nothing from `inbox/` is quoted. No other lane's file was edited. | open |
|
||||
| 72 | verified from this host by the pipe (2026-10-26, reply 105) | no Status line | unclassified |
|
||||
| 73 | sphinx's longctx archive gates its numbers and its claim-scoped quotations, but not its prose numbers, its claim sentences, its README, or the quotations that carry no claim id *(sphinx lane; opened 2026-10-26 by the pipe, per reply 105 to zephyrus)* | open and unclaimed.** Sphinx's lane by authorship; anyone may take it. Evidence: `replies/2026-10-26-to-zephyrus-105.md` §2–§3; export `/root/.hermes/cache/scratch/lcx1/cloneA`; verify log `lcx1/verify_full.txt`; live re-fetch `lcx1/live_ids.xml` (403,802 B); harness `lcx1/mut.py`, trees `lcx1/mut/{A_prose_number,B_claim_prose,C_readme,D_quote_unclaimed,E_drop_papers,F_swap_quotes,H_fabricated}`, log `lcx1/mut_log.txt`. Nothing from `inbox/` is quoted. No other lane's file was edited. | open |
|
||||
| 74 | sol's triage CHECK certifies the host `_triage` copy and asserts today's freshness, so it cannot gate the committed artifact *(sol lane; opened 2026-10-26 by the pipe, per the Q58 closure record above)* | open and unclaimed.** Sol's lane by authorship; anyone may take it. Evidence: export `/root/.hermes/cache/scratch/q58x` (`git archive 809466f`, no `.git`), fixtures `q58x/fix`, transcripts of the four runs in the Q58 closure record above. Nothing from `inbox/` is quoted. No other lane's file was edited. | open |
|
||||
| 75 | ledger's two census TSVs carry seven lines that are not rows and one path no file on disk has, and no gate in the lane can see either *(ledger lane; opened 2026-10-26 by the pipe, at `b82b023`)* | open and unclaimed.** Ledger's lane by authorship; anyone may take it. Evidence: readback of both files in Python against an `os.walk` of `/root/troupe-standup/wizard-work` at 2026-10-26 ≈09:30Z, `check_ledger_extract.py` rc 0, `grep -rn CHECK-wizardwork-census` (one hit, the docstring). Ledger's files by authorship; read, not edited. Nothing from `inbox/` is quoted. No other lane's file was edited. | open |
|
||||
| 76 | beam's new median tests reach no gate, and the lane gate that would run them is red for a host path older than the commit *(beam lane; opened 2026-10-26 by the pipe, at `c3ce8dd`)* | open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 110 §1–§3; export `/root/.hermes/cache/scratch/t110/export` (`c3ce8dd`) and `…/t110/pre` (`c3ce8dd^`); transcripts `/tmp/t110_check_masked_after.txt` and `…_masked_pre.txt` (rc 0, `Ran 151 tests`, both), `/tmp/t110_check_after.txt` and `…_pre.txt` (rc 1, ImportError at line 29); mutant battery `t110/mut.py` → `t110mut/` (8 trees, 8 killed); oracles `t110/fuzz.py`, `t110/fuzz2.py`. Nothing from `inbox/` is quoted. No other lane's file was edited. | open |
|
||||
| 77 | beam's segment tree lands 100 lines and the lane's count does not move, its failure path reports as an import `SystemExit` rather than a cell, and out-of-range indices are silently clamped *(beam lane; opened 2026-10-26 by the pipe, per reply 112 to zephyrus)* | open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 112 §1; lane | open |
|
||||
| 78 | spark's `3d72f9d` deletes the Q63 `_check()` failure path from four verifiers and drifts five ledger rows, and the new email-validator suite imports a host path *(spark lane; opened 2026-10-26 by the pipe, at `6cb3d7a`)* | no Status line | unclassified |
|
||||
| 79 | beam's `manifest.py` lands 107 lines with no cell in any gate, cannot see a directory symlink, reads its own output as a tamper, and prints a green empty manifest for a root that does not exist *(beam lane; opened 2026-10-26 by the pipe, at `edac5cf`)* | open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 116 §2–§4; | open |
|
||||
| 79 | closure — manifest.py carries the lane's 0/1/2 contract, three blind spots are closed, and 17 cells now sit in the gate *(volt, 2026-10-26; beam's lane by authorship, taken by the Workhorse as the opening allows: `anyone may take it`)* | DONE at `f719428` (manifest.py), `25e88f8` (canonical naming), `36ce415` (test_manifest.py); this record and `docs/queue-index.md` land in the commit above it.** The opening record's own text is quoted in a code span above so this line opens nothing. | closed |
|
||||
| 80 | spark's `json_sha256_validator.py` prints a hash of bytes it never validated, admits `NaN`/`Infinity` as valid, and reports an unreadable input in the same code as a bad document *(spark lane; opened 2026-10-26 by the pipe, at `3081128`)* | open and unclaimed.** Spark's lane by authorship; anyone may take it. Evidence: reply 118 §1–§3, | open |
|
||||
| 81 | spark's `hermes_profile_health.py` grades a profile by the existence of names, hardcodes the one host path it can check, and carries a branch that cannot fire *(spark lane; opened 2026-10-26 by the pipe, at `3081128`)* | open and unclaimed.** Spark's lane by authorship. Evidence: reply 118 §4; probes | open |
|
||||
| 82 | beam's `test_json_canonical.py` prints `ALL PASS` without running a single assertion, and the lane's count does not move at the head that lands it *(beam lane; opened 2026-10-26 by the pipe, at `3081128`)* | open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: measured at | open |
|
||||
| 82 | closure — `test_json_canonical.py` is seven discoverable cells (lane gate 191 → 198), every cell is killed by a named mutant, and `json_canonical.py` says what it is not *(volt, 2026-10-26; beam's lane by authorship, taken by the Workhorse as the opening allows: `anyone may take it`)* | DONE at `0735102` (suite), `6c097bf` (float surface); this record and `docs/queue-index.md` land in the commit above it.** The opening record's own `Status: open and unclaimed.` line is left standing, as append-only discipline requires; the closure is this line, not an edit above it. | closed |
|
||||
| 81 | closure — `hermes_profile_health.py` grades a profile you name, parses the config it grades, and the lane gate collects nine cells *(volt, 2026-10-26; spark's lane by authorship, taken as the opening record says `open and unclaimed`)* | DONE at `3f424c0` (tool), `329af8b` (suite + gate leg); this record and `docs/queue-index.md` land in the commit above them.** The opening record's own `Status: open and unclaimed.` line is left standing, as append-only discipline requires; the closure is this line, not an edit above it. | closed |
|
||||
| 83 | five branches `hermes_profile_health.py` names are pinned by no cell, and one of them is the branch that produces the sweep's only red *(spark lane; opened 2026-10-26 by the pipe, at `829268f`)* | open and unclaimed.** Spark's lane by authorship. Evidence: reply 119 §2; mutants and behaviour probes `/root/.hermes/wizard-outputs/ledger/q81_mutants_mine.py` (13 trees, incl. the M0–M8 reproduction) and `/root/.hermes/wizard-outputs/ledger/q81_survivor_probe.py` (the five rows, baseline rc vs mutant rc vs suite rc), results `/root/.hermes/wizard-outputs/ledger/q81-mutant-battery-mine.json`. Nothing from `inbox/` is quoted; no file another party authored was edited. | open |
|
||||
| 84 | `interval_overlap.py` lands 87 lines with no cell, and the lane gate reads `Ran 202` before and after *(beam lane; opened 2026-10-26 by the pipe, at `517362f`)* | open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 120 §1–§3; | open |
|
||||
| 83 | closure — the five unpinned `hermes_profile_health.py` branches are five cells (spark gate 9 → 14), and the item's own first row is corrected *(volt, 2026-10-27; spark's lane by authorship, taken as the opening record says `open and unclaimed`)* | DONE at `fe09917`; this record and `docs/queue-index.md` land in the commit above it.** The opening record's own `Status: open and unclaimed.` line is left standing, as append-only discipline requires; the closure is this line, not an edit above it. Report: `/root/.hermes/wizard-outputs/volt/q83-report.md`. | closed |
|
||||
| 85 | `beam/CHECK` collects only `test_*.py`, so a module no cell imports lands invisible: four are in that state today, and the newest added 38 lines with the gate reading `Ran 214` before and after *(beam lane; opened 2026-10-27 by the pipe, at `083981e`)* | open and unclaimed.** Beam's lane by authorship. Evidence: reply 121 §3–§4; independent checks `/root/.hermes/cache/scratch/q83m9/` (the Q83 M9 mutant tree) and the reply-121 scripts in this repo's history. Nothing from `inbox/` is quoted; no file another party authored was edited. | open |
|
||||
| 86 | the refactor-lane harness proves silence, not absence of I/O, and its seed path is host-absolute, so a second checkout cannot re-verify the refactor *(forge lane; opened 2026-10-27 by the pipe, at `431bca1`)* | DONE at `802a1ae`; this line and the two items appended at the end of this file (Q89, Q90) land in the commits above it.** The opening `Status: open and unclaimed.` line and reply 124's "four of six files remain" are left standing, append-only; both are stale as of `802a1ae` and this line supersedes them. Re-measured by the pipe at `6e9aeee`, not read off volt's transcript: probe pair **14/14**, dump pair **14/14**, pending pair **13/13**, all rc 0; `grep -c '/root/troupe-standup/inbox'` across the six files **`0, 0, 0, 1, 1, 1`**, the three survivors being the harnesses' `HOST_SEED_LITERAL` (used only to assert the *original* keeps the smell); my own M6 on `_triage_probe_refactored.py` in a scratch clone → **13/14, rc 1**, `FAIL: static io-call(s) at module scope: [(57, 'json.load'), (57, 'open')]`. **The residual is not closed and is not a re-opening of this item:** the detector is a static name list (`verify_triage_probe_refactor.py:404-407`) plus a `builtins.open` spy, so a module-scope `Path(...).read_text()` appended to the refactored module still returns **14/14, rc 0** with `OK: no import-time I/O` — filed as Q89, because this item's own done-means (builtins.open wrapper *or* AST walk of the module body) is met by `802a1ae` and moving its goalposts now would be a different item wearing the old number. | closed |
|
||||
| 87 | the forge lane holds 34 `verify_*.py` and no `CHECK`; `tools/verify.py`'s eight legs reach none of them *(forge lane; opened 2026-10-27 by the pipe, at `431bca1`)* | open and unclaimed.** Forge's lane by authorship; anyone may take it. Evidence: reply 21 §4; `ls wizard-work/forge/verify_*.py | wc -l` = 34, `ls wizard-work/forge/CHECK` = absent, at `431bca1`. Nothing from `inbox/` is quoted. | open |
|
||||
| 88 | the census `CHECK` verifies the live `checkins/` directory and the TSV only, so a dated artifact goes red on the next check-in and stays green under a hand-edited per-wizard table *(ledger lane; opened 2026-10-27 by the pipe, at `b0a2886`)* | open and unclaimed.** Ledger's lane by authorship; anyone may take it. Evidence: reply 122 §2; scratch tree `/tmp/censusbomb` (copy, CHECK re-run at `b0a2886`, both measurements above). Nothing from `inbox/` is quoted; no file another party authored was edited. | open |
|
||||
| 89 | the import-time-I/O detector in the three forge harnesses is a name list, so a `pathlib` read at module scope passes every check green *(forge lane; opened 2026-10-27 by the pipe, at `6e9aeee`)* | open and unclaimed.** Forge's lane by authorship; anyone may take it. Evidence: reply 125 §0 and §1; scratch clone `/tmp/q86evade` (both evasions above, run from a copy, no repo file edited). Nothing from `inbox/` is quoted. | open |
|
||||
| 90 | beam's `find_tree_root` accepts any ancestor marker as the repo root, `portable_seed` never checks the seed exists, and the six cells that would notice reach no gate *(beam lane; opened 2026-10-27 by the pipe, at `6e9aeee`)* | open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 125 §1; scratch dirs `/root/.hermes/cache/scratch/beamguard/` (the five variant table) and the `/tmp/tmp*` decoy/symlink constructions in that reply; gate counts measured at `6e9aeee` in the worktree. Nothing from `inbox/` is quoted; no file another party authored was edited. | open |
|
||||
| 91 | forge's r41 pixel-diff verifier prints PASS when neither card writes anything, and it writes the delivery artifact *(forge lane; opened 2026-10-27 by the pipe, at `d56105a`)* | no Status line | unclassified |
|
||||
| 92 | spark's two new scripts grade the caller's working directory, and one carries dead code after `sys.exit` *(spark lane; opened 2026-10-27 by the pipe, at `d56105a`)* | no Status line | unclassified |
|
||||
| 93 | the sweep's malformed-input probe grades a phrase, so two correctly-refusing tools keep it red, and the leg's summary line says "0 fatal" while returning 1 *(no lane owns it; opened 2026-10-27 by the pipe, at `d56105a`)* | no Status line | unclassified |
|
||||
| 94 | `dsu_rollback.py`'s headline mechanism is graded by no cell, its compression cell does not grade compression, and `find`/`union` accept negative indices silently *(beam lane; opened 2026-10-27 by the pipe, at `1e79fc8`)* | no Status line | unclassified |
|
||||
| 60 | closure — the check half runs at a named head, the self-quote collapse and the placeholder refusal are measured, and the two instrument holes it leaves are named instead of smoothed *(opened by the pipe 2026-10-24; the check half landed by zephyrus-sparkborn at `33f8f0f`, closed here 2026-10-27)* | DONE at `33f8f0f` (`wizard-work/zeph/q60_enforce.py`, blob `4b3926332b5aab4a83f599815fd677bc230e17ad`); this record lands in the commit above it.** Re-verified here from a fresh anonymous clone at that head, run from outside the tree: `--selftest` **7 cells passed, 0 failed, rc 0**; full tree **`OCC=110 DISTINCT=22 FILES=29`, `VERDICT=PASS`, rc 0, zero FAIL lines**; the three former FAIL sites (`WORK-QUEUE.md`, reply 113, reply interview) print `TEST-FIXTURE … (len 36)` with their site and do not fail; the anonymous raw GET is byte-identical (`cmp` clean, 14,374 B). Four probes on copies outside the repo: (A) `run_check` gutted to `return ["VERDICT=PASS"], False` reds cell 1 — the positive control is real; (B) the fixture value written into a new file prints `TEST-FIXTURE` and passes rc 0, the residual zephyrus named himself; (C) a real full value under the exhausted stem `beae0b1f` still reads `UNRECOVERED-JUSTIFIED` with rc 0; (D) a fixture literal appended to the checker's own source leaves `--selftest` at **7/7 rc 0** and the self-scan printing `TEST-FIXTURE … at q60_enforce.py`. | closed |
|
||||
| 95 | beam's `find_duplicate` no-duplicate guard cannot fire, and the file has no cell in any gate *(beam lane; opened 2026-10-27 by the pipe, at `f400640`)* | open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 130 §4; the exhaustive sweep and the import count are re-runnable as written there. Nothing from `inbox/` is quoted; no file another party authored was edited. | open |
|
||||
| 96 | `q60_enforce.py`'s self-scan cannot see a fixture literal in its own source, and an exhausted stem can never flip to recovered *(zeph lane; opened 2026-10-27 by the pipe, at `33f8f0f`)* | open and unclaimed.** Zeph's lane by authorship; anyone may take it. Evidence: reply 130 §1 probes C and D, `/root/.hermes/cache/scratch/q60probe/`. Nothing from `inbox/` is quoted. | open |
|
||||
| 93 | closure — the malformed axis grades a contract now, the two false reds are gone, and the replacement contract has a hole the prose pin did not *(opened by the pipe 2026-10-27 at `d56105a`; landed by forge at `9878f12`, closed here 2026-10-27)* | DONE at `9878f12` (`tools/selftest_sweep.py`, blob `c710643cbf888140d0bf834e89aecaaa607117cc`, 68,216 B); this record lands after it.** | closed |
|
||||
| 97 | a contract-graded refusal accepts an argparse usage error, so a renamed flag turns the whole malformed axis green *(no lane owns it; opened 2026-10-27 by the pipe, at `9878f12`)* | open and unclaimed.** Anyone may take it; the shape is `tools/selftest_sweep.py`'s and forge's lane by authorship, so it goes to forge first if forge wants it. | open |
|
||||
| 98 | seven committed test files resolve their module from a path outside the repo, and the class guard Q61 promised was never written *(no lane owns it; opened 2026-10-27 by the pipe, at `5886bdd`)* | open and unclaimed.** Beam's lane by authorship for the first row, spark's for the next five, ledger's for the last; anyone may take it, and a scan cell is the point rather than seven edits. | open |
|
||||
| 125 | the spark lane holds eleven line/word/char counters, and the newest one replaced its predecessor's capabilities without retiring its verifier *(spark lane; opened 2026-10-28 by the pipe, at `6b5197b`)* | open and unclaimed.** Opened after reply 15's consolidation request (2026-10-22, `62e3f33`) went six days without a contract behind it; this item is that contract. Reply 15 named five word counters plus `file_analyzer.py`; the population went up, not down. | open |
|
||||
|
||||
**Total rows: 97** (closed 50, open 36, unclassified 11).
|
||||
@@ -0,0 +1,98 @@
|
||||
q seq title status state
|
||||
1 1 Recover the fifteen silent rooms *(highest value; no dependencies)* CLOSED — 0/15 recovered, and every public avenue is now exhausted with receipts.** closed
|
||||
2 2 Chase the one dead link DONE — recovered.** `recoveries/dead-link.md` (`3ca3d3c`, zephyrus-sparkborn) found the `x.com` snapshot closed
|
||||
3 3 Independent audit of the published ledger DONE — both passes complete (`2ebcbe7` pass 1, `6f31cde` pass 2, zephyrus-sparkborn; material `2118b3e`). closed
|
||||
4 4 Falsification pass DONE — `recoveries/falsification-pass.md` (`f50f052`, zephyrus-sparkborn), all three verdicts re-verified closed
|
||||
8 5 Summary fidelity: does each entry's machine-written summary overstate its article? pilot CLOSED at `dcf91a1` (zephyrus-sparkborn), corrected at `9cc6879`; the full sweep is CLOSED at `f1fe38d` (2026-10-06) — 91/91, 1,101 rows, verified independently from the published file. The one contested grade was ruled and applied by zephyrus at `f122f8e` (`082` clause 3 → `contradicted`) and both batch-8 one-liners landed in the same commit, so the item owes nothing further from him on closed
|
||||
5 6 Issue triage in the organisation's public repos re-scoped 2026-09-26 (reply 08 §5) after a census, because as written it invites busywork.** Measured over unclassified
|
||||
6 7 A public guide to checking this archive DONE at `8bd0b09` (Merlin, 2026-10-08T17:28:47Z) — verified from this host figure by figure; closed
|
||||
7 8 Propose the next items satisfied for the 2026-09-25 cycle.** Zeph's three proposals (`2a0cb01`) are now queue items: the Q8 closed
|
||||
9 9 Independent QC of the sovereign music candidates *(second opinion, no listening required)* unclaimed. Pre-verified by Timmy against the delivered files — record `recoveries/music-master-verification.md` closed
|
||||
10 10 Summary fidelity for the non-magazine entries COMPLETE 2026-10-10 (verified from raw sources; closure record below). Originally claimed by zephyrus-sparkborn at `3c9ad5b` (2026-10-07, `checkins/2026-10-07-zephyrus.md` §3). closed
|
||||
11 11 Close the eight pass-2 date mismatches DONE — `recoveries/ledger-date-closure.md`, Merlin, 2026-10-09. 8 / 8 resolved, all closed
|
||||
12 12 Are the evidence tiers earned? DONE — `recoveries/evidence-tier-audit.md`, Merlin, 2026-10-10. 18/18 `justified`, 0 `too closed
|
||||
13 13 Publish the archive-side wording fixes, one at a time 1 of 8 has a decision and staged correction (`magazine-091`; reply 09 §3), but its decided note carries unclassified
|
||||
14 14 Put the Inbox on `alexanderwhitestone.com` behind a gate DONE — finished by `616794c` (2026-09-26), then re-measured by a later run the same day instead of being closed
|
||||
15 15 Stop the monitor from waking on the pipe's own writes *(pipe; no dependencies)* DONE — 2026-09-26 ≈19:05 UTC.** Fixed in `/root/.hermes/scripts/troupe_pipe_monitor.py` (outside this closed
|
||||
16 16 Per-platform ATS gate census *(career lane; opened 2026-10-01 by reply 21 §3, drafted by zephyrus)* draft v0.1 landed `f29425a` (`career-lane/ats-gate-census-draft.md`, 2026-10-01; check-in `2f83e08`); unclassified
|
||||
17 17 Employer-side AI-authorship refusal gates *(career lane; opened 2026-10-03 by reply 26, per Q7)* 2026-10-03 (third tick) — Q17 seeded at `a686a1b`, row 1 verified; correction 21 landed and verified; Q16 stays `done`.** Two counterparty commits this tick: `a686a1b` (census v0.4 → v0.5, `8783df5775c0` → `0405d58a9d0a`, +39/−1 — the one deletion is the header's version word) and `7d6bd60` (check-in `checkins/2026-10-03-zephyrus-03.md`, 3,037 bytes). Worked back in `replies/2026-10-03-to-zephyrus-27.md` (`e78de74`). closed
|
||||
18 18 Employer-side lead intake must be deduped against the prepared index *(career lane; opened 2026-10-04 by reply 28, per the G2i miss)* 2026-10-04 — opened; the rule is stated above and the G2i reconciliation is recorded in reply 28 §2. open
|
||||
19 19 Three proposed members (local Mac wizard, Grok, Mistral) *(wizard onboarding; opened 2026-10-06 by zephyrus-sparkborn, `checkins/2026-10-06-zephyrus-wizards*.md` + `JOIN-THE-TROUPE.md`)* RESOLVED — provisional (2026-10-06).** closed
|
||||
20 20 Excerpt fidelity and placement for the 91 magazine entries *(archive verification; opened 2026-10-08 by the pipe, per Q7's never-dry obligation)* DONE — `recoveries/excerpt-placement-audit.md` (12,914 B) and `recoveries/excerpt-placement-rows.md` closed
|
||||
21 21 Does every quoted excerpt resolve at the URL it is printed against? open and unclaimed. Opened by the pipe 2026-10-10** because Q12 closed at `67b892d` and the unclaimed closed
|
||||
22 22 Do the named-but-unlinked sources resolve? *(proposed 2026-10-10 by Merlin, per Q7; not yet opened)* DONE — `recoveries/named-source-liveness.md`, Merlin, 2026-10-10. 28 fetches → 27 distinct closed
|
||||
23 23 The prose-named sources the `@` token rule cannot see *(archive verification; opened 2026-10-10 by the pipe, per Q7's never-dry obligation)* DONE 2026-10-10 — `recoveries/named-source-liveness-unlinked.md` (Merlin), verified from the published file this tick (control plane).** closed
|
||||
24 24 The Q13 fix pack: stage every verified live-page fix as one reviewable approval *(archive-side; opened 2026-10-10 by the pipe, per Q7's never-dry obligation)* open and unclaimed. Opened by the pipe 2026-10-10** because Q23 closed at `8b56abe` and the unclaimed closed
|
||||
25 25 A prose-anchor convention for the ledger build *(archive-side; proposed 2026-10-10 by Merlin, per Q7's never-dry obligation — Q24 closed and the unclaimed executable set fell to zero)* DONE — `recoveries/prose-anchor-convention.md`, Merlin, 2026-10-10. Designed, prototyped and closed
|
||||
26 26 Make the silent token classes loud, and measure the fifth slot *(archive-side; opened 2026-10-10 by the pipe, per Q7's never-dry obligation — Q25 closed at `a9f23a6` and the unclaimed executable set fell to zero)* DONE — `recoveries/prose-anchor-hardening.md`, Merlin, 2026-10-10→11 (~00:20–00:24 UTC). closed
|
||||
27 27 A fixture at every render site: make the token sentinel's coverage total *(archive-side; opened 2026-10-11 by the pipe, per Q7's never-dry obligation — Q26 closed at `f05179e`)* DONE 2026-10-11 — `recoveries/render-site-coverage.md` (Merlin). 32 sites: 28 covered by fixture, 4 structural exclusions; 35 fixtures, every negative writes 0 files; the scope clause closed with option (a), all four token classes now pre-write; no-token build still byte-identical at `91ecf6bf`.** closed
|
||||
28 28 The channels the entry walk cannot see: state the guarantee, then cover what it cannot reach DONE 2026-10-11 — `recoveries/render-site-channels.md` (Merlin), scratch tree closed
|
||||
29 29 The guards that are not the walk: what protects a page when the value is not a token DONE 2026-10-11 — `recoveries/render-site-guards.md` (Merlin), scratch tree `/root/crucible/q29/`. 22 fixtures plus the control, every negative or escape claim measured against the emitted byte; the second guarantee stated in one sentence; one finding: an unguarded `int(sats)` can still leave a partial tree (2 files).** closed
|
||||
30 30 The renderer's entry point: the one path no gate executes no Status line unclassified
|
||||
31 31 The collector's entry point: the sibling path no gate has executed either DONE at Merlin's Run 6 (2026-10-11 ≈13:19–13:35Z) — deliverable `recoveries/helm-collector-run.md`; the collector's entry point is executed, its destination is gated, and G8 asserts it.** The item's four steps: (1) the two safe legs run — `--dry-run --skip-tests` exit 0 / 15,187 B pure-JSON stdout and `--out <scratch>` exit 0 / 15,187 B, both with the live snapshot unchanged (`aa842b0f…`); the two bodies are the same measurement (only `observed_at` clocks and one `rtt_seconds` differ, `q31-compare.py`). (2) **The destination rule: `SNAPSHOT_PATH` is gated behind an explicit `--deploy`** — the same shape as the renderer's `OUT_DEFAULT` gate, so both entry points now behave alike; `--dry-run` is never gated (it writes nothing), a scratch `--out` is the default expectation, and the live path (bare default *or* explicit `--out`, matched by `.resolve()`) is refused at exit 2 **before any collector runs** (0.13 s refusal vs ~1.9 s collect). Gated collector `60229227216fb4ab…` (701 lines / 28,808 B). (3) **Gate G8 — the collector's CLI in a subprocess, 18 assertions** → `helm-selftest: 137 passed, 0 failed`, VERDICT: ALL GATES PASS; the gate discriminates (pre-gate `ee0b36a8…` with `SNAPSHOT_PATH` patched to scratch writes its default bare; gated refuses). (4) **`email` UNREACHABLE is correct** — `himalaya` is ABSENT on PATH and both config paths are absent, so `collect_email()` fails closed with `himalaya unavailable: command not found: himalaya` and lands in `red_sources`, never `green`. **An incident, logged first in the deliverable §6:** the first negative control ran the pre-gate revision bare against the live default and overwrote the live snapshot; restored byte-exact from a pre-run `snap-before.json` (`aa842b0f…`, 14,039 B, mtime back to `2026-10-08T17:12:59.475780303Z`), and the control now patches `SNAPSHOT_PATH` before any run. **Nothing deployed** — the gated collector and G8 selftest are scratch-local in `/root/crucible/q31/`; the deployed `helm-collect.py` is unchanged at `ee0b36a8…` and `helm-selftest.py` at `7ed1bca8…` (still 119 passed). Adoption is a §4 deploy decision, Alexander's, the same gate Q26–Q30 state. Mercury's day-3 unit is Q31's first slice (the two safe legs); this run executed them first and Mercury's `/tmp/mercury-q31/` was empty at 13:29Z, so no duplication occurred — the unit is satisfied here and stays open for Mercury to land his own artifact. closed
|
||||
32 32 The G8 two-run agreement check is nondeterministic: `age_seconds` is not scrubbed *(Helm lane; opened 2026-10-11 by the pipe, per Q7's never-dry obligation — Q31's adoption is blocked behind it)* OPEN — named to the Helm lane**, ahead of the Q31 `cp` decision so that the gate that ships is the one that open
|
||||
33 33 Split the newest-file pointer out of `evidence.source_path` *(collector-side; opened 2026-10-11 by the pipe, per Q7's never-dry obligation — Q32 closed at `7e12c82`)* OPEN — named to the Helm lane.** A snapshot key rename touches every consumer of `evidence.source_path` open
|
||||
34 34 Gate the pointer's null case *(collector-side gate; opened 2026-10-11 by the pipe, per Q7's never-dry obligation — Q33 closed at `8bb88da`)* DONE 2026-10-12 — `recoveries/helm-null-gate.md` (Merlin), scratch tree `/root/crucible/q34/`.** closed
|
||||
35 35 The gate must refuse a subject collector that carries no destination rule *(Helm lane; opened 2026-10-12 by the pipe, per Q7's never-dry obligation — Q34 verified and closed at `ac98bfb`)* DONE — `recoveries/helm-precondition-gate.md` (8,261 B / sha256 closed
|
||||
36 36 The monitor cannot see a counterparty write that carries this pipe's identity *(pipe tooling; opened 2026-10-12 by the pipe, per Q7's never-dry obligation — Q20 verified and closed at `9a1de9a` and the pre-existing executable set fell to empty)* DONE — the rule holds, and the predicted transition arrived exactly as stated.** Measured at the first closed
|
||||
37 37 The identity rule closes one class, not the class *(pipe tooling; opened 2026-10-12 by the pipe, per Q7's never-dry obligation — Q36 closed at `9584984` and the unclaimed executable set fell to empty)* no Status line unclassified
|
||||
38 38 The behavioural destination guard *(Helm lane; opened 2026-10-12 by Merlin — Q36's candidate 2, on Alexander's direction to continue the Helm lane)* DONE — `recoveries/helm-behavioural-guard.md` (10,232 B), Merlin, 2026-10-12T06:5x–07:1xZ, this host.** closed
|
||||
38 39 The behavioural destination guard *(Helm lane; opened 2026-10-12 by Merlin — Q36's candidate 2, on Alexander's direction to continue the Helm lane; **direction unrecorded in this repo — Testimony only**)* the deliverable is verified and the item is DONE, and its protective claim is FALSIFIED. It is not adoptable as it stands.** Finished by `0776480` (guard + queue block + Run 4 check-in) and `4ed1da9` (landing evidence); verified from this host by reply 21, `replies/2026-10-12-to-merlin-21.md`. closed
|
||||
39 40 The Q38 guard's admission admits a writer, and its legs run the unrewritten subject *(Helm lane; opened 2026-10-12 by the pipe, per Q7's never-dry obligation — Q38 is closed and verified and its protective claim is falsified, so the executable set is not empty)* DONE — `recoveries/helm-destination-guard-fix.md` (12,253 B), Merlin, 2026-10-12, scratch tree `/root/crucible/q39/`. Fixed gate `9b09f328…` (1,412 lines / 77,704 B, +309/−38 against Q38's `74aba348…`); subject collector byte-identical at `4e45021d…`; nothing deployed, no `cp` into `/root/.helm/bin/`, live snapshot `aa842b0f…` delta 0 across every run.** closed
|
||||
39 41 closure — verified from this host by the pipe (2026-10-12, reply 22) DONE. Finished by `fad802c` (record + queue block + Run 5 check-in) and `4e87c8f` (landing evidence); verified by `replies/2026-10-12-to-merlin-22.md` with my own harness `/root/troupe-verify/q39/indep-negatives.py` → `INDEP-NEGATIVES.json`, `pair-run.log`.** closed
|
||||
40 42 the deployed gate admits all five negatives, and has no admission path at all *(Helm lane; opened 2026-10-12 by Merlin, discharging the Q39 closure's C26)* DONE — `recoveries/helm-deployed-gate-admission.md` (5,633 B / sha256 closed
|
||||
37 43 claimed by this pipe; first increment landed (the v1.3 census) OPEN and claimed by the pipe (Merlin's §Next 2 read it correctly; it is this lane's tooling). Landed this tick:** the `branch-head` census line in `troupe_pipe_monitor.py` v1.3, sha256 `bb532da8c4f01b98eab4034ce74dc76b0e3939508bfd6cadd5d3d650020449f8`; v1.2 preserved at `/root/troupe-verify/q37/troupe_pipe_monitor.py.v1.2.bak` (`ce3950b5…`), reversible with one `cp`; record `recoveries/monitor-identity-census.md`. open
|
||||
43 44 "The legs run the rewritten subject: prevention, not detect-and-restore *(Helm lane; opened 2026-10-12 by Merlin, per the Q39 closure's own recommendation — ""open the stronger form (the legs against a rewritten copy) as the Helm lane's next item"")*" DONE — `recoveries/helm-leg-sandbox.md` (13,561 B), Merlin, 2026-10-12. Scratch tree `/root/crucible/q43/`; nothing deployed, no `cp` into `/root/.helm/bin/`, `decisions/` and `inbox/` untouched.** closed
|
||||
43 45 closure — verified from this host by the pipe (2026-10-12, reply 27) VERIFIED AND CLOSED from the pipe, 2026-10-12 18:5x–19:1xZ.** Finished by `0fb8b20` (deliverable + queue block + Run 9 check-in section) and `2ddbe68` (landing evidence); verified by `replies/2026-10-12-to-merlin-27.md` with the pipe's own harness `/root/crucible/q43z/timmy_verify_q43.py` (reads Merlin's tree, writes nothing into `/root/crucible/q43/`). Adoption is unchanged and stays Alexander's: subject `4e45021d…` + gate `c22601ec…`, nothing `cp`ed, deployed bin still `ee0b36a8…` / `7ed1bca8…` / `5c67473d…`. closed
|
||||
44 46 "The pin class: redirect every constant composed from the live data root, not only `SNAPSHOT_PATH` *(Helm lane; opened 2026-10-12 by the pipe, per Q43's own closing sentence — ""extend the redirect beyond `SNAPSHOT_PATH` to every constant composed from the live data root, which is what would close the `--pin` class structurally instead of by argv rule"")*" DONE 2026-10-12 — `recoveries/helm-root-redirect.md` (Merlin, Helm lane); the closure block is at the foot closed
|
||||
48 47 The runtime-resolution redirect: close the class Q45's literals cannot see DONE 2026-10-13 — `recoveries/helm-runtime-redirect.md` (Merlin, Helm lane), scratch tree closed
|
||||
49 48 The runtime-resolved root's live write path: name it, reproduce it, then close it open and unclaimed. Opened by the pipe 2026-10-13**, because the Helm lane's executable set is empty open
|
||||
45 49 §9 follow-on — the home-directory channel *(Helm lane; Merlin)* OPEN — awaiting Alexander's zoom/whole-shop answer; build is the pipe's.** Evidence paths: `/var/www/leathermint/v2/index.html` (+ `phaser.min.js`), ledger commit `58e7eaa` (15:25:39Z) holding the verification record; queue index re-rendered in that same commit. No issue, PR, release or deploy surface beyond this static path; no secret printed. open
|
||||
57 50 Bind a standup entry to the bytes it grades *(Codeforge lane; opened 2026-10-24 by the pipe, per reply 05's corrections 1 and 2)* open and unclaimed. Opened by the pipe 2026-10-24; null's lane.** open
|
||||
58 51 The lane-activity instrument reads a surface that was retired on 2026-10-16 *(Sol lane; opened 2026-10-24 by the pipe, per reply 12 to sol)* closed at `809466f` (2026-10-26, spark in sol's lane); the closure record sits at the foot of this file.** Opened by the pipe 2026-10-24. closed
|
||||
59 52 beam's jump hash matches the C reference, and not one test would notice if it stopped *(beam lane; opened 2026-10-24 by the pipe, per reply 84 to zephyrus)* open and unclaimed. Beam's lane.** open
|
||||
60 53 Every truncated identifier in the archive: which ones can still be checked *(pipe tooling; opened 2026-10-24 by the pipe, per reply 86 §6 and reply 87 §1)* open and unclaimed.** Opened by the pipe 2026-10-24. Anyone's lane; zephyrus has first open
|
||||
61 54 beam's `topo_sort` drops generator dependencies, and its gate imports a copy outside the repo *(beam lane; opened 2026-10-24 by the pipe, per reply 88 to zephyrus)* open and unclaimed.** Opened by the pipe 2026-10-24. beam's lane by authorship; anyone may take it. open
|
||||
62 55 147 committed gates read `/root/.hermes/wizard-outputs`; two of them cannot pass from a clone *(no lane owns it; opened 2026-10-24 by the pipe, per reply 89 to zephyrus)* open and unclaimed.** No lane owns it by authorship; anyone may take it, one file per commit. open
|
||||
63 56 Six committed verifiers print PASS while asserting nothing, and eight are run by no gate *(no lane; opened 2026-10-24 by the pipe, per reply 90 to zephyrus)* open and unclaimed.** No lane owns it; anyone may take it, one file per commit. open
|
||||
66 57 beam's `search_count` advertises overlapping occurrences and no test would notice if it stopped *(beam lane; opened 2026-10-25 by the pipe, per reply 27 to beam)* closed at `2d6cf69` (2026-10-26, beam); the closure record sits at the foot of this file.** Beam's lane by authorship; the remedy was one assertion, closed
|
||||
67 58 forge's probe-refactor verifier certifies a refactor that restores the defect it removes *(forge lane; opened 2026-10-25 by the pipe, per reply 20 to forge)* open and unclaimed.** Forge's lane by authorship; the remedy is four small edits open
|
||||
68 59 beam's `topo_levels` drops a one-shot `edges` iterable, silently, and its new suite both certifies a host copy and takes the lane's gate down *(beam lane; opened 2026-10-25 by the pipe, per reply 28 to beam)* closed at `5a43291` (volt, 2026-10-25); the closure record sits at the foot of this file.** Beam's lane by authorship; anyone may take it. Done means: `edges` closed
|
||||
69 60 116 committed files under `wizard-work/` name the absolute path `/root/troupe-standup`, so 64 gates grade the author's working tree instead of the checkout they were asked about *(no lane owns it; opened 2026-10-25 by the pipe, per reply 101 to zephyrus)* open and unclaimed.** One file per commit, each needing the repo-relative-or-stated decision; `wizard-work/ledger` is the entry to take first because its artifact is otherwise correct and its gate is the one measured green-on-wrong. open
|
||||
70 61 beam's `test_trie.py` is invisible to the lane gate (73 new lines, 0 cells collected), and `count_prefix` is a lifetime insert counter that survives `delete` *(beam lane; opened 2026-10-25 by the pipe, per reply 102 to zephyrus)* closed at `12f956a` (volt, 2026-10-26) — closure record at the foot of this file.** Beam's lane by authorship; anyone may take it. Evidence: `replies/2026-10-25-to-zephyrus-102.md` §2; probes `/root/.hermes/cache/scratch/trie_probe.py`; clone `/root/tcheck-q68` at `dbc2c4f`. Nothing from `inbox/` is quoted. No other lane's file was edited. closed
|
||||
71 62 ledger's `commits-table.md` has no verifier, and row 4 writes `kernel_git` where the source URL has `kernel/git` *(ledger lane; opened 2026-10-25 by the pipe, per reply 102 to zephyrus)* closed at `b9e3780` and the closure commit (volt, 2026-10-25); the closure record sits at the foot of this file.** Ledger's lane by authorship; anyone may take it. Evidence: `replies/2026-10-25-to-zephyrus-102.md` §3; response body retained at `/tmp/torvalds.json` on this host (re-fetchable, one request). Nothing from `inbox/` is quoted. No other lane's file was edited. closed
|
||||
72 63 sphinx's lcmm ledger gates its quotations but not its population or its interpretations: two mutations of mine pass the verifier at 169/169 and 139/139 *(sphinx lane; opened 2026-10-26 by the pipe, per reply 104 to zephyrus)* open and unclaimed.** Sphinx's lane by authorship; anyone may take it. Evidence: `replies/2026-10-26-to-zephyrus-104.md` §2–§3; clone `/root/.hermes/cache/scratch/lcmm-v2` at `d6a9253`; mutation harness `/root/.hermes/cache/scratch/lcmm_mut.py` with trees `lcmm-mut/{A_drop3,B_swap,C_role,D_fig}`; independent claim/byte check `lcmm_indep.py`; verifier log `lc-verify.log` (169 lines), battery log `lc-mut.log`; error bodies `atom-live.xml` (14 B), `atom-full-live.xml` (126 B). Nothing from `inbox/` is quoted. No other lane's file was edited. open
|
||||
72 64 verified from this host by the pipe (2026-10-26, reply 105) no Status line unclassified
|
||||
73 65 sphinx's longctx archive gates its numbers and its claim-scoped quotations, but not its prose numbers, its claim sentences, its README, or the quotations that carry no claim id *(sphinx lane; opened 2026-10-26 by the pipe, per reply 105 to zephyrus)* open and unclaimed.** Sphinx's lane by authorship; anyone may take it. Evidence: `replies/2026-10-26-to-zephyrus-105.md` §2–§3; export `/root/.hermes/cache/scratch/lcx1/cloneA`; verify log `lcx1/verify_full.txt`; live re-fetch `lcx1/live_ids.xml` (403,802 B); harness `lcx1/mut.py`, trees `lcx1/mut/{A_prose_number,B_claim_prose,C_readme,D_quote_unclaimed,E_drop_papers,F_swap_quotes,H_fabricated}`, log `lcx1/mut_log.txt`. Nothing from `inbox/` is quoted. No other lane's file was edited. open
|
||||
74 66 sol's triage CHECK certifies the host `_triage` copy and asserts today's freshness, so it cannot gate the committed artifact *(sol lane; opened 2026-10-26 by the pipe, per the Q58 closure record above)* open and unclaimed.** Sol's lane by authorship; anyone may take it. Evidence: export `/root/.hermes/cache/scratch/q58x` (`git archive 809466f`, no `.git`), fixtures `q58x/fix`, transcripts of the four runs in the Q58 closure record above. Nothing from `inbox/` is quoted. No other lane's file was edited. open
|
||||
75 67 ledger's two census TSVs carry seven lines that are not rows and one path no file on disk has, and no gate in the lane can see either *(ledger lane; opened 2026-10-26 by the pipe, at `b82b023`)* open and unclaimed.** Ledger's lane by authorship; anyone may take it. Evidence: readback of both files in Python against an `os.walk` of `/root/troupe-standup/wizard-work` at 2026-10-26 ≈09:30Z, `check_ledger_extract.py` rc 0, `grep -rn CHECK-wizardwork-census` (one hit, the docstring). Ledger's files by authorship; read, not edited. Nothing from `inbox/` is quoted. No other lane's file was edited. open
|
||||
76 68 beam's new median tests reach no gate, and the lane gate that would run them is red for a host path older than the commit *(beam lane; opened 2026-10-26 by the pipe, at `c3ce8dd`)* open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 110 §1–§3; export `/root/.hermes/cache/scratch/t110/export` (`c3ce8dd`) and `…/t110/pre` (`c3ce8dd^`); transcripts `/tmp/t110_check_masked_after.txt` and `…_masked_pre.txt` (rc 0, `Ran 151 tests`, both), `/tmp/t110_check_after.txt` and `…_pre.txt` (rc 1, ImportError at line 29); mutant battery `t110/mut.py` → `t110mut/` (8 trees, 8 killed); oracles `t110/fuzz.py`, `t110/fuzz2.py`. Nothing from `inbox/` is quoted. No other lane's file was edited. open
|
||||
77 69 beam's segment tree lands 100 lines and the lane's count does not move, its failure path reports as an import `SystemExit` rather than a cell, and out-of-range indices are silently clamped *(beam lane; opened 2026-10-26 by the pipe, per reply 112 to zephyrus)* open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 112 §1; lane open
|
||||
78 70 spark's `3d72f9d` deletes the Q63 `_check()` failure path from four verifiers and drifts five ledger rows, and the new email-validator suite imports a host path *(spark lane; opened 2026-10-26 by the pipe, at `6cb3d7a`)* no Status line unclassified
|
||||
79 71 beam's `manifest.py` lands 107 lines with no cell in any gate, cannot see a directory symlink, reads its own output as a tamper, and prints a green empty manifest for a root that does not exist *(beam lane; opened 2026-10-26 by the pipe, at `edac5cf`)* open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 116 §2–§4; open
|
||||
79 72 closure — manifest.py carries the lane's 0/1/2 contract, three blind spots are closed, and 17 cells now sit in the gate *(volt, 2026-10-26; beam's lane by authorship, taken by the Workhorse as the opening allows: `anyone may take it`)* DONE at `f719428` (manifest.py), `25e88f8` (canonical naming), `36ce415` (test_manifest.py); this record and `docs/queue-index.md` land in the commit above it.** The opening record's own text is quoted in a code span above so this line opens nothing. closed
|
||||
80 73 spark's `json_sha256_validator.py` prints a hash of bytes it never validated, admits `NaN`/`Infinity` as valid, and reports an unreadable input in the same code as a bad document *(spark lane; opened 2026-10-26 by the pipe, at `3081128`)* open and unclaimed.** Spark's lane by authorship; anyone may take it. Evidence: reply 118 §1–§3, open
|
||||
81 74 spark's `hermes_profile_health.py` grades a profile by the existence of names, hardcodes the one host path it can check, and carries a branch that cannot fire *(spark lane; opened 2026-10-26 by the pipe, at `3081128`)* open and unclaimed.** Spark's lane by authorship. Evidence: reply 118 §4; probes open
|
||||
82 75 beam's `test_json_canonical.py` prints `ALL PASS` without running a single assertion, and the lane's count does not move at the head that lands it *(beam lane; opened 2026-10-26 by the pipe, at `3081128`)* open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: measured at open
|
||||
82 76 closure — `test_json_canonical.py` is seven discoverable cells (lane gate 191 → 198), every cell is killed by a named mutant, and `json_canonical.py` says what it is not *(volt, 2026-10-26; beam's lane by authorship, taken by the Workhorse as the opening allows: `anyone may take it`)* DONE at `0735102` (suite), `6c097bf` (float surface); this record and `docs/queue-index.md` land in the commit above it.** The opening record's own `Status: open and unclaimed.` line is left standing, as append-only discipline requires; the closure is this line, not an edit above it. closed
|
||||
81 77 closure — `hermes_profile_health.py` grades a profile you name, parses the config it grades, and the lane gate collects nine cells *(volt, 2026-10-26; spark's lane by authorship, taken as the opening record says `open and unclaimed`)* DONE at `3f424c0` (tool), `329af8b` (suite + gate leg); this record and `docs/queue-index.md` land in the commit above them.** The opening record's own `Status: open and unclaimed.` line is left standing, as append-only discipline requires; the closure is this line, not an edit above it. closed
|
||||
83 78 five branches `hermes_profile_health.py` names are pinned by no cell, and one of them is the branch that produces the sweep's only red *(spark lane; opened 2026-10-26 by the pipe, at `829268f`)* open and unclaimed.** Spark's lane by authorship. Evidence: reply 119 §2; mutants and behaviour probes `/root/.hermes/wizard-outputs/ledger/q81_mutants_mine.py` (13 trees, incl. the M0–M8 reproduction) and `/root/.hermes/wizard-outputs/ledger/q81_survivor_probe.py` (the five rows, baseline rc vs mutant rc vs suite rc), results `/root/.hermes/wizard-outputs/ledger/q81-mutant-battery-mine.json`. Nothing from `inbox/` is quoted; no file another party authored was edited. open
|
||||
84 79 `interval_overlap.py` lands 87 lines with no cell, and the lane gate reads `Ran 202` before and after *(beam lane; opened 2026-10-26 by the pipe, at `517362f`)* open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 120 §1–§3; open
|
||||
83 80 closure — the five unpinned `hermes_profile_health.py` branches are five cells (spark gate 9 → 14), and the item's own first row is corrected *(volt, 2026-10-27; spark's lane by authorship, taken as the opening record says `open and unclaimed`)* DONE at `fe09917`; this record and `docs/queue-index.md` land in the commit above it.** The opening record's own `Status: open and unclaimed.` line is left standing, as append-only discipline requires; the closure is this line, not an edit above it. Report: `/root/.hermes/wizard-outputs/volt/q83-report.md`. closed
|
||||
85 81 `beam/CHECK` collects only `test_*.py`, so a module no cell imports lands invisible: four are in that state today, and the newest added 38 lines with the gate reading `Ran 214` before and after *(beam lane; opened 2026-10-27 by the pipe, at `083981e`)* open and unclaimed.** Beam's lane by authorship. Evidence: reply 121 §3–§4; independent checks `/root/.hermes/cache/scratch/q83m9/` (the Q83 M9 mutant tree) and the reply-121 scripts in this repo's history. Nothing from `inbox/` is quoted; no file another party authored was edited. open
|
||||
86 82 the refactor-lane harness proves silence, not absence of I/O, and its seed path is host-absolute, so a second checkout cannot re-verify the refactor *(forge lane; opened 2026-10-27 by the pipe, at `431bca1`)* "DONE at `802a1ae`; this line and the two items appended at the end of this file (Q89, Q90) land in the commits above it.** The opening `Status: open and unclaimed.` line and reply 124's ""four of six files remain"" are left standing, append-only; both are stale as of `802a1ae` and this line supersedes them. Re-measured by the pipe at `6e9aeee`, not read off volt's transcript: probe pair **14/14**, dump pair **14/14**, pending pair **13/13**, all rc 0; `grep -c '/root/troupe-standup/inbox'` across the six files **`0, 0, 0, 1, 1, 1`**, the three survivors being the harnesses' `HOST_SEED_LITERAL` (used only to assert the *original* keeps the smell); my own M6 on `_triage_probe_refactored.py` in a scratch clone → **13/14, rc 1**, `FAIL: static io-call(s) at module scope: [(57, 'json.load'), (57, 'open')]`. **The residual is not closed and is not a re-opening of this item:** the detector is a static name list (`verify_triage_probe_refactor.py:404-407`) plus a `builtins.open` spy, so a module-scope `Path(...).read_text()` appended to the refactored module still returns **14/14, rc 0** with `OK: no import-time I/O` — filed as Q89, because this item's own done-means (builtins.open wrapper *or* AST walk of the module body) is met by `802a1ae` and moving its goalposts now would be a different item wearing the old number." closed
|
||||
87 83 the forge lane holds 34 `verify_*.py` and no `CHECK`; `tools/verify.py`'s eight legs reach none of them *(forge lane; opened 2026-10-27 by the pipe, at `431bca1`)* open and unclaimed.** Forge's lane by authorship; anyone may take it. Evidence: reply 21 §4; `ls wizard-work/forge/verify_*.py | wc -l` = 34, `ls wizard-work/forge/CHECK` = absent, at `431bca1`. Nothing from `inbox/` is quoted. open
|
||||
88 84 the census `CHECK` verifies the live `checkins/` directory and the TSV only, so a dated artifact goes red on the next check-in and stays green under a hand-edited per-wizard table *(ledger lane; opened 2026-10-27 by the pipe, at `b0a2886`)* open and unclaimed.** Ledger's lane by authorship; anyone may take it. Evidence: reply 122 §2; scratch tree `/tmp/censusbomb` (copy, CHECK re-run at `b0a2886`, both measurements above). Nothing from `inbox/` is quoted; no file another party authored was edited. open
|
||||
89 85 the import-time-I/O detector in the three forge harnesses is a name list, so a `pathlib` read at module scope passes every check green *(forge lane; opened 2026-10-27 by the pipe, at `6e9aeee`)* open and unclaimed.** Forge's lane by authorship; anyone may take it. Evidence: reply 125 §0 and §1; scratch clone `/tmp/q86evade` (both evasions above, run from a copy, no repo file edited). Nothing from `inbox/` is quoted. open
|
||||
90 86 beam's `find_tree_root` accepts any ancestor marker as the repo root, `portable_seed` never checks the seed exists, and the six cells that would notice reach no gate *(beam lane; opened 2026-10-27 by the pipe, at `6e9aeee`)* open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 125 §1; scratch dirs `/root/.hermes/cache/scratch/beamguard/` (the five variant table) and the `/tmp/tmp*` decoy/symlink constructions in that reply; gate counts measured at `6e9aeee` in the worktree. Nothing from `inbox/` is quoted; no file another party authored was edited. open
|
||||
91 87 forge's r41 pixel-diff verifier prints PASS when neither card writes anything, and it writes the delivery artifact *(forge lane; opened 2026-10-27 by the pipe, at `d56105a`)* no Status line unclassified
|
||||
92 88 spark's two new scripts grade the caller's working directory, and one carries dead code after `sys.exit` *(spark lane; opened 2026-10-27 by the pipe, at `d56105a`)* no Status line unclassified
|
||||
93 89 "the sweep's malformed-input probe grades a phrase, so two correctly-refusing tools keep it red, and the leg's summary line says ""0 fatal"" while returning 1 *(no lane owns it; opened 2026-10-27 by the pipe, at `d56105a`)*" no Status line unclassified
|
||||
94 90 `dsu_rollback.py`'s headline mechanism is graded by no cell, its compression cell does not grade compression, and `find`/`union` accept negative indices silently *(beam lane; opened 2026-10-27 by the pipe, at `1e79fc8`)* no Status line unclassified
|
||||
60 91 closure — the check half runs at a named head, the self-quote collapse and the placeholder refusal are measured, and the two instrument holes it leaves are named instead of smoothed *(opened by the pipe 2026-10-24; the check half landed by zephyrus-sparkborn at `33f8f0f`, closed here 2026-10-27)* "DONE at `33f8f0f` (`wizard-work/zeph/q60_enforce.py`, blob `4b3926332b5aab4a83f599815fd677bc230e17ad`); this record lands in the commit above it.** Re-verified here from a fresh anonymous clone at that head, run from outside the tree: `--selftest` **7 cells passed, 0 failed, rc 0**; full tree **`OCC=110 DISTINCT=22 FILES=29`, `VERDICT=PASS`, rc 0, zero FAIL lines**; the three former FAIL sites (`WORK-QUEUE.md`, reply 113, reply interview) print `TEST-FIXTURE … (len 36)` with their site and do not fail; the anonymous raw GET is byte-identical (`cmp` clean, 14,374 B). Four probes on copies outside the repo: (A) `run_check` gutted to `return [""VERDICT=PASS""], False` reds cell 1 — the positive control is real; (B) the fixture value written into a new file prints `TEST-FIXTURE` and passes rc 0, the residual zephyrus named himself; (C) a real full value under the exhausted stem `beae0b1f` still reads `UNRECOVERED-JUSTIFIED` with rc 0; (D) a fixture literal appended to the checker's own source leaves `--selftest` at **7/7 rc 0** and the self-scan printing `TEST-FIXTURE … at q60_enforce.py`." closed
|
||||
95 92 beam's `find_duplicate` no-duplicate guard cannot fire, and the file has no cell in any gate *(beam lane; opened 2026-10-27 by the pipe, at `f400640`)* open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 130 §4; the exhaustive sweep and the import count are re-runnable as written there. Nothing from `inbox/` is quoted; no file another party authored was edited. open
|
||||
96 93 `q60_enforce.py`'s self-scan cannot see a fixture literal in its own source, and an exhausted stem can never flip to recovered *(zeph lane; opened 2026-10-27 by the pipe, at `33f8f0f`)* open and unclaimed.** Zeph's lane by authorship; anyone may take it. Evidence: reply 130 §1 probes C and D, `/root/.hermes/cache/scratch/q60probe/`. Nothing from `inbox/` is quoted. open
|
||||
93 94 closure — the malformed axis grades a contract now, the two false reds are gone, and the replacement contract has a hole the prose pin did not *(opened by the pipe 2026-10-27 at `d56105a`; landed by forge at `9878f12`, closed here 2026-10-27)* DONE at `9878f12` (`tools/selftest_sweep.py`, blob `c710643cbf888140d0bf834e89aecaaa607117cc`, 68,216 B); this record lands after it.** closed
|
||||
97 95 a contract-graded refusal accepts an argparse usage error, so a renamed flag turns the whole malformed axis green *(no lane owns it; opened 2026-10-27 by the pipe, at `9878f12`)* open and unclaimed.** Anyone may take it; the shape is `tools/selftest_sweep.py`'s and forge's lane by authorship, so it goes to forge first if forge wants it. open
|
||||
98 96 seven committed test files resolve their module from a path outside the repo, and the class guard Q61 promised was never written *(no lane owns it; opened 2026-10-27 by the pipe, at `5886bdd`)* open and unclaimed.** Beam's lane by authorship for the first row, spark's for the next five, ledger's for the last; anyone may take it, and a scan cell is the point rather than seven edits. open
|
||||
125 97 the spark lane holds eleven line/word/char counters, and the newest one replaced its predecessor's capabilities without retiring its verifier *(spark lane; opened 2026-10-28 by the pipe, at `6b5197b`)* open and unclaimed.** Opened after reply 15's consolidation request (2026-10-22, `62e3f33`) went six days without a contract behind it; this item is that contract. Reply 15 named five word counters plus `file_analyzer.py`; the population went up, not down. open
|
||||
|
@@ -0,0 +1,7 @@
|
||||
import re
|
||||
r = re.compile(r"^\*\*\s*Status\s*:(.*)$")
|
||||
test = "**Status: open and unclaimed.** Sphinx's lane by authorship; anyone may take it."
|
||||
m = r.match(test)
|
||||
print("match:", bool(m))
|
||||
if m:
|
||||
print("group1:", m.group(1))
|
||||
@@ -0,0 +1,9 @@
|
||||
import re
|
||||
path = "/root/troupe-standup/WORK-QUEUE.md"
|
||||
lines = open(path, encoding="utf-8").read().splitlines()
|
||||
for idx in [11536, 1567, 1619]:
|
||||
print(idx + 1, repr(lines[idx][:80]))
|
||||
r = re.compile(r"^\*\*\s*Status\s*:(.*)$")
|
||||
for idx in [11536, 1567, 1619]:
|
||||
m = r.match(lines[idx])
|
||||
print(idx + 1, "->", bool(m))
|
||||
@@ -0,0 +1,135 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Build the ledger tracked-file census for /root/troupe-standup.
|
||||
|
||||
Reads the live git index (git ls-files), then writes:
|
||||
|
||||
wizard-work/ledger/ledger-tracked-files.csv one data row per tracked file
|
||||
wizard-work/ledger/ledger-tracked-files.md mode counts + row tally
|
||||
|
||||
Every field is derived from real tool output (git ls-files / git cat-file -s);
|
||||
nothing is fabricated here.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import hashlib
|
||||
from collections import Counter
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from datetime import datetime, timezone
|
||||
|
||||
REPO = "/root/troupe-standup"
|
||||
OUTDIR = os.path.join(REPO, "wizard-work", "ledger")
|
||||
CSV_PATH = os.path.join(OUTDIR, "ledger-tracked-files.csv")
|
||||
SUMMARY_PATH = os.path.join(OUTDIR, "ledger-tracked-files.md")
|
||||
|
||||
BAD_CHARS = {"\t", ",", "\"", "\n", "\r"}
|
||||
|
||||
|
||||
def git(*args: str) -> str:
|
||||
return subprocess.run(
|
||||
["git", "-C", REPO] + list(args), check=True,
|
||||
capture_output=True, text=True,
|
||||
).stdout
|
||||
|
||||
|
||||
def cat_file_size(sha1: str) -> int:
|
||||
out = subprocess.run(
|
||||
["git", "cat-file", "-s", sha1], check=True,
|
||||
capture_output=True, text=True,
|
||||
).stdout
|
||||
return int(out.split()[0])
|
||||
|
||||
|
||||
def main() -> None:
|
||||
os.makedirs(OUTDIR, exist_ok=True)
|
||||
|
||||
paths = git("ls-files").splitlines()
|
||||
paths.sort()
|
||||
n = len(paths)
|
||||
print(f"tracked files: {n}", file=sys.stderr)
|
||||
|
||||
# Index metadata: path -> (sha1, mode, stage)
|
||||
sha1_of_path = {}
|
||||
mode_of_sha1 = {}
|
||||
stage_of_path = {}
|
||||
for line in git("ls-files", "-s").splitlines():
|
||||
head, sep, path = line.partition("\t")
|
||||
if not sep:
|
||||
continue
|
||||
mode, sha1, stage = head.split()
|
||||
sha1_of_path[path] = sha1
|
||||
mode_of_sha1[sha1] = mode
|
||||
stage_of_path[path] = stage
|
||||
|
||||
# Object length for each sha1 (git cat-file -s), parallelised.
|
||||
def size_at(i: int) -> int:
|
||||
return cat_file_size(sha1_of_path[paths[i]])
|
||||
|
||||
lengths = [0] * n
|
||||
with ThreadPoolExecutor(max_workers=16) as pool:
|
||||
future_to_i = {pool.submit(size_at, i): i for i in range(n)}
|
||||
for fut in future_to_i:
|
||||
lengths[future_to_i[fut]] = fut.result()
|
||||
|
||||
# Guard: raw paths must not contain CSV-special characters, else the
|
||||
# row text would not round-trip through a plain one-line-per-row file.
|
||||
weird = [p for p in paths if any(ch in BAD_CHARS for ch in p)]
|
||||
if weird:
|
||||
print(f"ABORT: paths contain CSV-special chars: {weird[:5]}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
rows = []
|
||||
mode_counter = Counter()
|
||||
for i, p in enumerate(paths, start=1):
|
||||
sha1 = sha1_of_path[p]
|
||||
mode = mode_of_sha1[sha1]
|
||||
stage = stage_of_path[p]
|
||||
mode_counter[mode] += 1
|
||||
rows.append(f"{i},{p},{mode},{sha1},{lengths[i-1]},{stage}")
|
||||
|
||||
with open(CSV_PATH, "w", encoding="utf-8", newline="\n") as fh:
|
||||
fh.write("row,path,mode,sha1,length_bytes,stage\n")
|
||||
fh.write("\n".join(rows))
|
||||
fh.write("\n")
|
||||
|
||||
md5 = hashlib.md5(open(CSV_PATH, "rb").read()).hexdigest()
|
||||
print(f"wrote {CSV_PATH} md5={md5}", file=sys.stderr)
|
||||
|
||||
lines = [
|
||||
"# Ledger: tracked-file census",
|
||||
"",
|
||||
f"- Generated: {datetime.now(timezone.utc).isoformat()}Z",
|
||||
f"- Repository: {REPO}",
|
||||
f"- Tracked files (git ls-files): {n}",
|
||||
"",
|
||||
"## Mode counts",
|
||||
"",
|
||||
"| mode | count |",
|
||||
"| --- | --- |",
|
||||
]
|
||||
for m in sorted(mode_counter):
|
||||
lines.append(f"| {m} | {mode_counter[m]} |")
|
||||
lines += [
|
||||
"",
|
||||
"## Row tally",
|
||||
"",
|
||||
f"Total data rows: {n}",
|
||||
"",
|
||||
"## Verification",
|
||||
"",
|
||||
"A companion CHECK (printed in the standup note) diffs the CSV data rows, sorted,",
|
||||
"against `git ls-files | sort`; it must be empty, and the data-row count must equal",
|
||||
"the live `git ls-files | wc -l` count.",
|
||||
"",
|
||||
]
|
||||
with open(SUMMARY_PATH, "w", encoding="utf-8", newline="\n") as fh:
|
||||
fh.write("\n".join(lines))
|
||||
|
||||
print(f"wrote {SUMMARY_PATH}", file=sys.stderr)
|
||||
print(f"modes: {dict(mode_counter)}", file=sys.stderr)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,43 @@
|
||||
path,kind,total_files,mp4,json,txt,md,jpg,other,size_bytes
|
||||
2026-09-19,dir,55,3,7,2,3,28,12,20255870
|
||||
2026-09-21,dir,53,2,13,1,1,21,15,13862791
|
||||
2026-09-23,dir,102,3,21,4,2,38,34,19779368
|
||||
2026-09-24,dir,45,3,10,2,2,11,17,12797773
|
||||
2026-09-25,dir,74,3,8,1,1,45,16,22421228
|
||||
2026-09-26,dir,106,2,12,4,1,60,27,25570489
|
||||
2026-09-27,dir,76,3,15,3,2,26,27,19721911
|
||||
2026-09-28,dir,20,0,10,3,3,0,4,208777
|
||||
2026-09-29,dir,68,2,13,3,2,26,22,8917985
|
||||
2026-09-30,dir,80,3,16,2,1,32,26,12620731
|
||||
2026-10-01,dir,105,3,16,25,1,24,36,12116572
|
||||
2026-10-02,dir,72,3,12,13,1,24,19,10959982
|
||||
2026-10-03,dir,65,3,7,16,1,26,12,12625009
|
||||
2026-10-04,dir,75,3,8,18,1,29,16,13013202
|
||||
2026-10-05,dir,83,3,11,22,1,29,17,13521026
|
||||
2026-10-06,dir,92,3,13,7,1,35,33,14031911
|
||||
2026-10-07,dir,88,3,12,4,1,35,33,15181995
|
||||
2026-10-08,dir,94,3,12,5,1,35,38,14868396
|
||||
2026-10-09,dir,110,3,12,6,1,45,43,18791472
|
||||
2026-10-10,dir,99,3,13,7,1,44,31,18735831
|
||||
2026-10-11,dir,106,3,17,5,1,44,36,18891285
|
||||
2026-10-12,dir,108,3,18,5,1,44,37,19163409
|
||||
2026-10-13,dir,105,3,17,5,1,53,26,22196387
|
||||
2026-10-14,dir,96,3,17,5,1,44,26,19271381
|
||||
2026-10-15,dir,96,3,17,5,1,44,26,18828419
|
||||
2026-10-16,dir,107,3,23,5,1,50,25,20745986
|
||||
2026-10-17,dir,80,3,17,3,1,39,17,15946424
|
||||
2026-10-18,dir,81,3,16,3,1,42,16,17826297
|
||||
2026-10-19,dir,83,3,16,3,2,42,17,17156198
|
||||
2026-10-20,dir,109,3,26,3,2,45,30,21676155
|
||||
2026-10-21,dir,96,3,16,3,1,53,20,19768436
|
||||
2026-10-22,dir,78,3,18,2,1,34,20,14325859
|
||||
2026-10-23,dir,79,3,18,5,2,35,16,12666243
|
||||
2026-10-23-probe-blocks.json,file,1,0,0,0,0,0,0,563
|
||||
2026-10-24,dir,67,2,16,2,2,26,19,10184557
|
||||
2026-10-25,dir,117,3,21,2,2,66,23,26722428
|
||||
2026-10-26,dir,59,3,13,2,2,22,17,10727728
|
||||
2026-10-27,dir,103,3,13,2,2,67,16,18466867
|
||||
2026-10-28,dir,130,3,15,2,2,83,25,33832288
|
||||
2026-10-29,dir,95,3,20,2,2,45,23,18906621
|
||||
checksums.sha256,file,1,0,0,0,0,0,0,50914
|
||||
checksums.sha256.NOTES.md,file,1,0,0,0,0,0,0,1627
|
||||
|
@@ -0,0 +1,50 @@
|
||||
# Stackchain library drops catalog
|
||||
|
||||
Source: `/root/stackchain-library-updates/drops`. One row per top-level entry (39 day-drop folders, one probe JSON, two checksum files). `md` counts reproduced `MANIFEST.md` files.
|
||||
|
||||
| Path | Kind | Files | MP4 | JSON | TXT | MANIFEST(md) | JPG | Other | Size(B) |
|
||||
|---|------|-------|-----|------|-----|--------------|-----|-----|---------|
|
||||
| `2026-09-19` | dir | 55 | 3 | 7 | 2 | 3 | 28 | 12 | 20255870 |
|
||||
| `2026-09-21` | dir | 53 | 2 | 13 | 1 | 1 | 21 | 15 | 13862791 |
|
||||
| `2026-09-23` | dir | 102 | 3 | 21 | 4 | 2 | 38 | 34 | 19779368 |
|
||||
| `2026-09-24` | dir | 45 | 3 | 10 | 2 | 2 | 11 | 17 | 12797773 |
|
||||
| `2026-09-25` | dir | 74 | 3 | 8 | 1 | 1 | 45 | 16 | 22421228 |
|
||||
| `2026-09-26` | dir | 106 | 2 | 12 | 4 | 1 | 60 | 27 | 25570489 |
|
||||
| `2026-09-27` | dir | 76 | 3 | 15 | 3 | 2 | 26 | 27 | 19721911 |
|
||||
| `2026-09-28` | dir | 20 | 0 | 10 | 3 | 3 | 0 | 4 | 208777 |
|
||||
| `2026-09-29` | dir | 68 | 2 | 13 | 3 | 2 | 26 | 22 | 8917985 |
|
||||
| `2026-09-30` | dir | 80 | 3 | 16 | 2 | 1 | 32 | 26 | 12620731 |
|
||||
| `2026-10-01` | dir | 105 | 3 | 16 | 25 | 1 | 24 | 36 | 12116572 |
|
||||
| `2026-10-02` | dir | 72 | 3 | 12 | 13 | 1 | 24 | 19 | 10959982 |
|
||||
| `2026-10-03` | dir | 65 | 3 | 7 | 16 | 1 | 26 | 12 | 12625009 |
|
||||
| `2026-10-04` | dir | 75 | 3 | 8 | 18 | 1 | 29 | 16 | 13013202 |
|
||||
| `2026-10-05` | dir | 83 | 3 | 11 | 22 | 1 | 29 | 17 | 13521026 |
|
||||
| `2026-10-06` | dir | 92 | 3 | 13 | 7 | 1 | 35 | 33 | 14031911 |
|
||||
| `2026-10-07` | dir | 88 | 3 | 12 | 4 | 1 | 35 | 33 | 15181995 |
|
||||
| `2026-10-08` | dir | 94 | 3 | 12 | 5 | 1 | 35 | 38 | 14868396 |
|
||||
| `2026-10-09` | dir | 110 | 3 | 12 | 6 | 1 | 45 | 43 | 18791472 |
|
||||
| `2026-10-10` | dir | 99 | 3 | 13 | 7 | 1 | 44 | 31 | 18735831 |
|
||||
| `2026-10-11` | dir | 106 | 3 | 17 | 5 | 1 | 44 | 36 | 18891285 |
|
||||
| `2026-10-12` | dir | 108 | 3 | 18 | 5 | 1 | 44 | 37 | 19163409 |
|
||||
| `2026-10-13` | dir | 105 | 3 | 17 | 5 | 1 | 53 | 26 | 22196387 |
|
||||
| `2026-10-14` | dir | 96 | 3 | 17 | 5 | 1 | 44 | 26 | 19271381 |
|
||||
| `2026-10-15` | dir | 96 | 3 | 17 | 5 | 1 | 44 | 26 | 18828419 |
|
||||
| `2026-10-16` | dir | 107 | 3 | 23 | 5 | 1 | 50 | 25 | 20745986 |
|
||||
| `2026-10-17` | dir | 80 | 3 | 17 | 3 | 1 | 39 | 17 | 15946424 |
|
||||
| `2026-10-18` | dir | 81 | 3 | 16 | 3 | 1 | 42 | 16 | 17826297 |
|
||||
| `2026-10-19` | dir | 83 | 3 | 16 | 3 | 2 | 42 | 17 | 17156198 |
|
||||
| `2026-10-20` | dir | 109 | 3 | 26 | 3 | 2 | 45 | 30 | 21676155 |
|
||||
| `2026-10-21` | dir | 96 | 3 | 16 | 3 | 1 | 53 | 20 | 19768436 |
|
||||
| `2026-10-22` | dir | 78 | 3 | 18 | 2 | 1 | 34 | 20 | 14325859 |
|
||||
| `2026-10-23` | dir | 79 | 3 | 18 | 5 | 2 | 35 | 16 | 12666243 |
|
||||
| `2026-10-23-probe-blocks.json` | file | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 563 |
|
||||
| `2026-10-24` | dir | 67 | 2 | 16 | 2 | 2 | 26 | 19 | 10184557 |
|
||||
| `2026-10-25` | dir | 117 | 3 | 21 | 2 | 2 | 66 | 23 | 26722428 |
|
||||
| `2026-10-26` | dir | 59 | 3 | 13 | 2 | 2 | 22 | 17 | 10727728 |
|
||||
| `2026-10-27` | dir | 103 | 3 | 13 | 2 | 2 | 67 | 16 | 18466867 |
|
||||
| `2026-10-28` | dir | 130 | 3 | 15 | 2 | 2 | 83 | 25 | 33832288 |
|
||||
| `2026-10-29` | dir | 95 | 3 | 20 | 2 | 2 | 45 | 23 | 18906621 |
|
||||
| `checksums.sha256` | file | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 50914 |
|
||||
| `checksums.sha256.NOTES.md` | file | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1627 |
|
||||
|
||||
**Summary:** 42 entries · 3360 total files · 56 with MANIFEST.md · 110 mp4 · 575 json · 212 txt · 1491 jpg · 913 other · 657358391 bytes.
|
||||
@@ -0,0 +1,161 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Build the Stackchain Library drops catalog from the source folder.
|
||||
|
||||
Source: /root/stackchain-library-updates/drops (42 top-level entries:
|
||||
39 day-drop folders, one probe JSON, and two global checksum files).
|
||||
|
||||
One row per entry with a recursive file-type breakdown. Idempotent:
|
||||
re-running re-derives the same numbers from the same files.
|
||||
|
||||
Artifacts written to BOTH:
|
||||
- /root/.hermes/profiles/ledger/wizard-outputs/ledger/ (profile outputs)
|
||||
- /root/troupe-standup/wizard-work/ledger/ (troupe repo)
|
||||
"""
|
||||
import csv
|
||||
import os
|
||||
from collections import Counter
|
||||
|
||||
DROPS = "/root/stackchain-library-updates/drops"
|
||||
OUT_JSON = None # not used here
|
||||
OUT_CSV = "drops-catalog.csv"
|
||||
OUT_MD = "drops-catalog.md"
|
||||
|
||||
TARGETS = (
|
||||
"/root/.hermes/profiles/ledger/wizard-outputs/ledger",
|
||||
"/root/troupe-standup/wizard-work/ledger",
|
||||
)
|
||||
|
||||
# Explicit top-level entries that are files, not folders.
|
||||
FILE_ENTRIES = (
|
||||
"2026-10-23-probe-blocks.json",
|
||||
"checksums.sha256",
|
||||
"checksums.sha256.NOTES.md",
|
||||
)
|
||||
|
||||
|
||||
def classify(name):
|
||||
"""Return a category key for a filename."""
|
||||
low = name.lower()
|
||||
if low.endswith(".mp4"):
|
||||
return "mp4"
|
||||
if low.endswith(".json"):
|
||||
return "json"
|
||||
if low.endswith(".txt"):
|
||||
return "txt"
|
||||
if low.endswith(".md"):
|
||||
return "md"
|
||||
if low.endswith((".jpg", ".jpeg", ".png", ".gif", ".webp", ".webm")):
|
||||
return "jpg"
|
||||
return "other"
|
||||
|
||||
|
||||
def catalog_entry(path):
|
||||
is_file = os.path.isfile(path)
|
||||
if is_file:
|
||||
try:
|
||||
size = os.path.getsize(path)
|
||||
except OSError:
|
||||
size = 0
|
||||
return {
|
||||
"path": os.path.basename(path),
|
||||
"kind": "file",
|
||||
"total_files": 1,
|
||||
"mp4": 0, "json": 0, "txt": 0, "md": 0, "jpg": 0, "other": 0,
|
||||
"size_bytes": size,
|
||||
}
|
||||
total = 0
|
||||
counts = Counter()
|
||||
size = 0
|
||||
for root, _dirs, files in os.walk(path):
|
||||
for fn in files:
|
||||
fp = os.path.join(root, fn)
|
||||
total += 1
|
||||
counts[classify(fn)] += 1
|
||||
try:
|
||||
size += os.path.getsize(fp)
|
||||
except OSError:
|
||||
pass
|
||||
return {
|
||||
"path": os.path.basename(path.rstrip("/")),
|
||||
"kind": "dir",
|
||||
"total_files": total,
|
||||
"mp4": counts["mp4"],
|
||||
"json": counts["json"],
|
||||
"txt": counts["txt"],
|
||||
"md": counts["md"],
|
||||
"jpg": counts["jpg"],
|
||||
"other": counts["other"],
|
||||
"size_bytes": size,
|
||||
}
|
||||
|
||||
|
||||
def build_rows():
|
||||
rows = []
|
||||
if os.path.isdir(DROPS):
|
||||
for name in sorted(os.listdir(DROPS)):
|
||||
p = os.path.join(DROPS, name)
|
||||
rows.append(catalog_entry(p))
|
||||
for name in sorted(FILE_ENTRIES):
|
||||
p = os.path.join(DROPS, name)
|
||||
if os.path.isfile(p) and not any(r["path"] == name for r in rows):
|
||||
rows.append(catalog_entry(p))
|
||||
return rows
|
||||
|
||||
|
||||
def write_csv(rows, target):
|
||||
path = os.path.join(target, OUT_CSV)
|
||||
with open(path, "w", encoding="utf-8", newline="") as f:
|
||||
writer = csv.DictWriter(f, fieldnames=list(rows[0].keys()))
|
||||
writer.writeheader()
|
||||
writer.writerows(rows)
|
||||
return path
|
||||
|
||||
|
||||
def write_md(rows, target):
|
||||
path = os.path.join(target, OUT_MD)
|
||||
lines = []
|
||||
lines.append("# Stackchain library drops catalog")
|
||||
lines.append("")
|
||||
lines.append("Source: `%s`. One row per top-level entry (39 day-drop folders, "
|
||||
"one probe JSON, two checksum files). `md` counts reproduced "
|
||||
"`MANIFEST.md` files." % DROPS)
|
||||
lines.append("")
|
||||
lines.append("| Path | Kind | Files | MP4 | JSON | TXT | MANIFEST(md) | JPG | Other | Size(B) |")
|
||||
lines.append("|---|------|-------|-----|------|-----|--------------|-----|-----|---------|")
|
||||
for r in rows:
|
||||
lines.append(
|
||||
"| `{path}` | {kind} | {total} | {mp4} | {json} | {txt} | {md} | {jpg} | "
|
||||
"{other} | {size} |".format(
|
||||
path=r["path"], kind=r["kind"], total=r["total_files"],
|
||||
mp4=r["mp4"], json=r["json"], txt=r["txt"], md=r["md"],
|
||||
jpg=r["jpg"], other=r["other"], size=r["size_bytes"]))
|
||||
lines.append("")
|
||||
totals = {k: sum(r[k] for r in rows) for k in
|
||||
("total_files", "mp4", "json", "txt", "md", "jpg", "other", "size_bytes")}
|
||||
lines.append("**Summary:** {n} entries · {files} total files · {md} with "
|
||||
"MANIFEST.md · {mp4} mp4 · {json} json · {txt} txt · {jpg} jpg · "
|
||||
"{other} other · {size} bytes.".format(
|
||||
n=len(rows), files=totals["total_files"], md=totals["md"],
|
||||
mp4=totals["mp4"], json=totals["json"], txt=totals["txt"],
|
||||
jpg=totals["jpg"], other=totals["other"], size=totals["size_bytes"]))
|
||||
lines.append("")
|
||||
with open(path, "w", encoding="utf-8") as f:
|
||||
f.write("\n".join(lines))
|
||||
return path
|
||||
|
||||
|
||||
def main():
|
||||
rows = build_rows()
|
||||
for target in TARGETS:
|
||||
os.makedirs(target, exist_ok=True)
|
||||
csv_path = write_csv(rows, target)
|
||||
md_path = write_md(rows, target)
|
||||
print("wrote", csv_path)
|
||||
print("wrote", md_path)
|
||||
print("total entries:", len(rows))
|
||||
print("by kind:", {k: sum(1 for r in rows if r["kind"] == k)
|
||||
for k in ("dir", "file")})
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,111 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Extract the committed file tree of the troupe repo into a verified manifest.
|
||||
|
||||
Source of truth: `git ls-files` (tracked files) in the repo root.
|
||||
Outputs (in the same directory as this script, wizard-work/ledger/):
|
||||
- 2026-10-29-git-tree-manifest.csv : relpath, ext, size_bytes, sha256
|
||||
- 2026-10-29-git-tree-manifest.json : structured manifest
|
||||
- 2026-10-29-git-tree-manifest.md : human-readable table
|
||||
|
||||
The independent re-derivation lives in verify_git_tree_manifest.py;
|
||||
the committed CHECK runs that verifier and exits 0 iff it matches.
|
||||
"""
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
import pathlib
|
||||
|
||||
REPO_ROOT = pathlib.Path(__file__).resolve().parent.parent.parent # troupe-standup
|
||||
HERE = pathlib.Path(__file__).resolve().parent
|
||||
OUT_DIR = HERE
|
||||
|
||||
|
||||
def find_repo_root(start: pathlib.Path) -> pathlib.Path:
|
||||
"""Walk up from `start` until a directory containing `.git` is found."""
|
||||
current = start.resolve()
|
||||
for _ in range(12):
|
||||
if (current / ".git").exists():
|
||||
return current
|
||||
if current.parent == current:
|
||||
break
|
||||
current = current.parent
|
||||
raise SystemExit(f"no .git found above {start}")
|
||||
|
||||
|
||||
def sha256_of(path: pathlib.Path) -> str:
|
||||
h = hashlib.sha256()
|
||||
with path.open("rb") as fh:
|
||||
for chunk in iter(lambda: fh.read(1024 * 1024), b""):
|
||||
h.update(chunk)
|
||||
return h.hexdigest()
|
||||
|
||||
|
||||
def main() -> None:
|
||||
REPO_ROOT = find_repo_root(HERE)
|
||||
import subprocess
|
||||
out = subprocess.run(
|
||||
["git", "ls-files"], cwd=REPO_ROOT, check=True,
|
||||
capture_output=True, text=True, env=os.environ,
|
||||
).stdout.splitlines()
|
||||
|
||||
rows = []
|
||||
for rel in sorted(out):
|
||||
p = (REPO_ROOT / rel).resolve()
|
||||
ext = p.suffix.lower() if p.suffix else "-"
|
||||
rows.append({
|
||||
"relpath": rel,
|
||||
"ext": ext,
|
||||
"size_bytes": p.stat().st_size,
|
||||
"sha256": sha256_of(p),
|
||||
})
|
||||
|
||||
ext_counts = {}
|
||||
total_bytes = 0
|
||||
for r in rows:
|
||||
ext_counts[r["ext"]] = ext_counts.get(r["ext"], 0) + 1
|
||||
total_bytes += r["size_bytes"]
|
||||
|
||||
manifest = {
|
||||
"repo": str(REPO_ROOT),
|
||||
"generated_at": __import__("datetime").datetime.now(__import__("datetime").UTC).isoformat(),
|
||||
"tracked_file_count": len(rows),
|
||||
"total_bytes": total_bytes,
|
||||
"extension_counts": ext_counts,
|
||||
"top_extensions": sorted(ext_counts.items(), key=lambda kv: (-kv[1], kv[0]))[:15],
|
||||
"files": rows,
|
||||
}
|
||||
|
||||
(OUT_DIR / "2026-10-29-git-tree-manifest.json").write_text(
|
||||
json.dumps(manifest, indent=2) + "\n", encoding="utf-8"
|
||||
)
|
||||
|
||||
with (OUT_DIR / "2026-10-29-git-tree-manifest.csv").open("w", encoding="utf-8",
|
||||
newline="") as fh:
|
||||
fh.write("relpath\text\tytes_sha256\n")
|
||||
for r in rows:
|
||||
fh.write(f'{r["relpath"]}\t{r["ext"]}\t{r["size_bytes"]}\t{r["sha256"]}\n')
|
||||
|
||||
lines = [
|
||||
"# Git tree manifest — 2026-10-29",
|
||||
"",
|
||||
f"- repo: `{REPO_ROOT}`",
|
||||
f"- tracked files: {manifest['tracked_file_count']}",
|
||||
f"- total bytes: {manifest['total_bytes']:,}",
|
||||
"",
|
||||
"## Top extensions",
|
||||
"",
|
||||
"| extension | files |",
|
||||
"|---|---|",
|
||||
]
|
||||
for ext, cnt in manifest["top_extensions"]:
|
||||
lines.append(f"| {ext or '(no extension)'} | {cnt} |")
|
||||
lines += ["", "## Full file list", "", "| # | relpath | ext | bytes |", "|---|---|---|---|"]
|
||||
for i, r in enumerate(manifest["files"], 1):
|
||||
lines.append(f"| {i} | {r['relpath']} | {r['ext']} | {r['size_bytes']} |")
|
||||
(OUT_DIR / "2026-10-29-git-tree-manifest.md").write_text("\n".join(lines) + "\n", encoding="utf-8")
|
||||
|
||||
print(f"wrote {len(rows)} files -> {OUT_DIR}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,22 @@
|
||||
# Ledger: tracked-file census
|
||||
|
||||
- Generated: 2026-10-29T21:48:01.911131+00:00Z
|
||||
- Repository: /root/troupe-standup
|
||||
- Tracked files (git ls-files): 4216
|
||||
|
||||
## Mode counts
|
||||
|
||||
| mode | count |
|
||||
| --- | --- |
|
||||
| 100644 | 4119 |
|
||||
| 100755 | 97 |
|
||||
|
||||
## Row tally
|
||||
|
||||
Total data rows: 4216
|
||||
|
||||
## Verification
|
||||
|
||||
A companion CHECK (printed in the standup note) diffs the CSV data rows, sorted,
|
||||
against `git ls-files | sort`; it must be empty, and the data-row count must equal
|
||||
the live `git ls-files | wc -l` count.
|
||||
@@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Independent verification of the ledger tracked-file census artifact."""
|
||||
import subprocess
|
||||
import sys
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
|
||||
CSV = "/root/troupe-standup/wizard-work/ledger/ledger-tracked-files.csv"
|
||||
REPO = "/root/troupe-standup"
|
||||
|
||||
def git(*args):
|
||||
return subprocess.run(["git", "-C", REPO] + list(args),
|
||||
check=True, capture_output=True, text=True).stdout
|
||||
|
||||
def size_of(sha1):
|
||||
return int(subprocess.run(["git", "cat-file", "-s", sha1],
|
||||
check=True, capture_output=True, text=True).stdout.split()[0])
|
||||
|
||||
def main():
|
||||
paths = git("ls-files").splitlines()
|
||||
path_set = set(paths)
|
||||
print(f"live tracked-file count: {len(paths)}", file=sys.stderr)
|
||||
|
||||
rows = open(CSV, encoding="utf-8").read().splitlines()
|
||||
assert rows[0] == "row,path,mode,sha1,length_bytes,stage", rows[0]
|
||||
data = rows[1:]
|
||||
print(f"csv data rows: {len(data)}", file=sys.stderr)
|
||||
assert len(data) == len(paths), "row count mismatch"
|
||||
|
||||
sha1_of_path = {}
|
||||
for line in git("ls-files", "-s").splitlines():
|
||||
head, sep, p = line.partition("\t")
|
||||
if not sep:
|
||||
continue
|
||||
mode, sha1, stage = head.split()
|
||||
sha1_of_path[p] = (sha1, mode, stage)
|
||||
|
||||
bad = []
|
||||
with ThreadPoolExecutor(max_workers=16) as ex:
|
||||
futs = {ex.submit(size_of, sha1_of_path[p][0]): p for p in path_set}
|
||||
lengths = {futs[f]: f.result() for f in futs}
|
||||
|
||||
for i, line in enumerate(data, start=1):
|
||||
parts = line.split(",")
|
||||
if len(parts) != 6:
|
||||
bad.append((i, "field-count", line)); continue
|
||||
rrow, p, mode, sha1, lev, stage = parts
|
||||
if int(rrow) != i: bad.append((i, "row-number", line))
|
||||
if p not in sha1_of_path: bad.append((i, "path-not-in-index", line)); continue
|
||||
esha1, emode, estage = sha1_of_path[p]
|
||||
if sha1 != esha1 or mode != emode or stage != estage:
|
||||
bad.append((i, "meta-mismatch", line))
|
||||
if p not in lengths: bad.append((i, "no-length", line)); continue
|
||||
if int(lev) != lengths[p]:
|
||||
bad.append((i, "length-mismatch", line))
|
||||
|
||||
print(f"checked rows: {len(data)}", file=sys.stderr)
|
||||
if bad:
|
||||
print(f"FAILURES: {len(bad)}", file=sys.stderr)
|
||||
for b in bad[:10]:
|
||||
print(" ", b, file=sys.stderr)
|
||||
sys.exit(1)
|
||||
print("VERIFY_PASS: rows == git ls-files, meta and lengths match", file=sys.stderr)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,144 @@
|
||||
#!/usr/bin/env python3
|
||||
"""CHECK: re-derive the drops catalog from the source folder and diff it
|
||||
against the committed artifact drops-catalog.csv.
|
||||
|
||||
This is a real regeneration test, not a tautology: it re-walks
|
||||
/root/stackchain-library-updates/drops from scratch, recomputes every field,
|
||||
and compares row-for-row (path-sorted) against the committed CSV.
|
||||
|
||||
Exit code 0 = commit is correct; nonzero = wrong.
|
||||
"""
|
||||
import csv
|
||||
import os
|
||||
import sys
|
||||
from collections import Counter
|
||||
|
||||
DROPS = "/root/stackchain-library-updates/drops"
|
||||
ARTIFACT = "/root/troupe-standup/wizard-work/ledger/drops-catalog.csv"
|
||||
|
||||
# Same categories the builder uses.
|
||||
_IMAGE_EXTS = (".jpg", ".jpeg", ".png", ".gif", ".webp", ".webm")
|
||||
|
||||
|
||||
def classify(name):
|
||||
low = name.lower()
|
||||
if low.endswith(".mp4"):
|
||||
return "mp4"
|
||||
if low.endswith(".json"):
|
||||
return "json"
|
||||
if low.endswith(".txt"):
|
||||
return "txt"
|
||||
if low.endswith(".md"):
|
||||
return "md"
|
||||
if low.endswith(_IMAGE_EXTS):
|
||||
return "jpg"
|
||||
return "other"
|
||||
|
||||
|
||||
def rederive():
|
||||
"""Independently re-derive the same 42 rows the builder writes.
|
||||
|
||||
Re-walks /root/stackchain-library-updates/drops from scratch: every
|
||||
top-level entry becomes either a dir-row (recursive file walk) or a
|
||||
file-row (size only). No second pass over the file entries, so the row
|
||||
count stays 39 dirs + 3 files = 42 (mirrors the builder's dedupe).
|
||||
"""
|
||||
rows = []
|
||||
for name in sorted(os.listdir(DROPS)):
|
||||
p = os.path.join(DROPS, name)
|
||||
if os.path.isfile(p):
|
||||
rows.append(_file_row(p, name))
|
||||
else:
|
||||
rows.append(_dir_row(p, name))
|
||||
return rows
|
||||
|
||||
|
||||
def _file_row(path, name):
|
||||
size = 0
|
||||
try:
|
||||
size = os.path.getsize(path)
|
||||
except OSError:
|
||||
pass
|
||||
return {
|
||||
"path": name, "kind": "file", "total_files": 1,
|
||||
"mp4": 0, "json": 0, "txt": 0, "md": 0, "jpg": 0, "other": 0,
|
||||
"size_bytes": size,
|
||||
}
|
||||
|
||||
|
||||
def _dir_row(path, name):
|
||||
total = 0
|
||||
counts = Counter()
|
||||
size = 0
|
||||
for root, _dirs, files in os.walk(path):
|
||||
for fn in files:
|
||||
fp = os.path.join(root, fn)
|
||||
total += 1
|
||||
counts[classify(fn)] += 1
|
||||
try:
|
||||
size += os.path.getsize(fp)
|
||||
except OSError:
|
||||
pass
|
||||
return {
|
||||
"path": name, "kind": "dir", "total_files": total,
|
||||
"mp4": counts["mp4"], "json": counts["json"], "txt": counts["txt"],
|
||||
"md": counts["md"], "jpg": counts["jpg"], "other": counts["other"],
|
||||
"size_bytes": size,
|
||||
}
|
||||
|
||||
|
||||
def read_csv():
|
||||
with open(ARTIFACT, encoding="utf-8", newline="") as f:
|
||||
reader = csv.DictReader(f)
|
||||
return list(reader)
|
||||
|
||||
|
||||
def to_native(row):
|
||||
"""Normalise every cell to a JSON-serialisable python type for safe compare."""
|
||||
return {k: (v.strip() if isinstance(v, str) else v) for k, v in row.items()}
|
||||
|
||||
|
||||
def main():
|
||||
errors = []
|
||||
|
||||
try:
|
||||
actual = read_csv()
|
||||
except Exception as exc:
|
||||
print("CHECK FAILED: cannot read artifact %s: %s" % (ARTIFACT, exc))
|
||||
sys.exit(1)
|
||||
|
||||
expected = rederive()
|
||||
|
||||
if len(actual) != len(expected):
|
||||
errors.append("row count: artifact=%d re-derived=%d"
|
||||
% (len(actual), len(expected)))
|
||||
|
||||
for i, (a, e) in enumerate(zip(actual, expected), 1):
|
||||
a = to_native(a)
|
||||
for key in ("path", "kind", "total_files", "mp4", "json", "txt",
|
||||
"md", "jpg", "other", "size_bytes"):
|
||||
if key not in a:
|
||||
errors.append("row %d: missing field %r" % (i, key))
|
||||
elif a[key] != str(e[key]):
|
||||
errors.append("row %d field %r: artifact=%r re-derived=%r"
|
||||
% (i, key, a[key], e[key]))
|
||||
|
||||
# Ordering check: artifact rows must be sorted by path the same way as re-derived.
|
||||
actual_paths = [to_native(r)["path"] for r in actual]
|
||||
expected_paths = [r["path"] for r in expected]
|
||||
if actual_paths != expected_paths:
|
||||
errors.append("row order/sort mismatch")
|
||||
|
||||
if errors:
|
||||
print("CHECK FAILED:")
|
||||
for e in errors:
|
||||
print(" -", e)
|
||||
sys.exit(1)
|
||||
|
||||
print("CHECK OK: %d rows re-derived from %s and identical to the committed "
|
||||
"artifact." % (len(actual), DROPS))
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Self-validating checksum script.
|
||||
Verifies its own SHA256 hash matches EXPECTED_HASH constant.
|
||||
The hash excludes the EXPECTED_HASH line (lines 11-12) for self-consistency.
|
||||
"""
|
||||
|
||||
import hashlib
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
EXPECTED_HASH = "a80cd19cb447c3f7183965bc9055cb160daf9411f598fd8028dc95cbadf33f15"
|
||||
|
||||
def compute_self_hash():
|
||||
"""Compute SHA256 hash excluding the EXPECTED_HASH value line."""
|
||||
script_path = Path(__file__).resolve()
|
||||
lines = script_path.read_text().split('\n')
|
||||
# Exclude lines 11-12 (0-indexed: 10-11) which contain EXPECTED_HASH
|
||||
relevant_lines = lines[:10] + lines[12:]
|
||||
relevant_content = '\n'.join(relevant_lines) + '\n'
|
||||
return hashlib.sha256(relevant_content.encode()).hexdigest()
|
||||
|
||||
def main():
|
||||
actual_hash = compute_self_hash()
|
||||
print(f"Computed hash: {actual_hash}")
|
||||
|
||||
script_path = Path(__file__).resolve()
|
||||
content = script_path.read_text()
|
||||
|
||||
# Extract current expected hash from file
|
||||
for line in content.split('\n'):
|
||||
if line.startswith('EXPECTED_HASH = '):
|
||||
expected = line.split('"')[1]
|
||||
break
|
||||
|
||||
if actual_hash == expected:
|
||||
print("VERIFIED")
|
||||
return 0
|
||||
else:
|
||||
print(f"FAILED: expected {expected}")
|
||||
return 1
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in new issue
Block a user