Compare commits
2
Commits
5d1ee7e6a7
...
e31c056d9e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e31c056d9e | ||
|
|
53adf01ced |
No files matched your search
+147
@@ -0,0 +1,147 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Independent verification for the 2026-11-02 workqueue-census artifact.
|
||||
|
||||
RE-APPROACH: this checker does NOT import the extractor. It re-derives the
|
||||
expected rows from WORK-QUEUE.md with plain string operations (split on the
|
||||
first " — ", check the leading "Q<n>", strip trailing notes); the committed TSV
|
||||
is the artifact of record. The verdict is the script's exit code: 0 = correct,
|
||||
1 = a check failed, 2 = could not grade.
|
||||
|
||||
Run: cd wizard-work/ledger/2026-11-02-workqueue-census && python3 CHECK
|
||||
"""
|
||||
import csv
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
from datetime import datetime, timezone
|
||||
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
REPO_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(HERE)))
|
||||
SRC = os.path.join(REPO_ROOT, "WORK-QUEUE.md")
|
||||
TSV_NAME = "workqueue-census.tsv"
|
||||
MANIFEST_NAME = "extract_manifest.json"
|
||||
STALE = "2026-10-28T00:00:00Z"
|
||||
TS_FMT = "%Y-%m-%dT%H:%M:%SZ"
|
||||
|
||||
SEP = "\u2014" # em dash
|
||||
|
||||
|
||||
def rederive(src_path):
|
||||
"""Independent derivation: emit (qid, title) for every '## Q<n> — <title>' line."""
|
||||
golden = []
|
||||
qid, title = None, ""
|
||||
with open(src_path, encoding="utf-8") as fh:
|
||||
lines = fh.read().splitlines()
|
||||
for line in lines:
|
||||
if not line.startswith("## "):
|
||||
continue
|
||||
rest = line[3:].strip()
|
||||
if " " + SEP + " " not in rest:
|
||||
continue
|
||||
pid, _, t = rest.partition(" " + SEP + " ")
|
||||
if not (pid.startswith("Q") and pid[1:].isdigit()):
|
||||
continue
|
||||
t = re.sub(r"\s*\*.*$", "", t).strip()
|
||||
if qid is not None:
|
||||
golden.append((qid, title))
|
||||
qid, title = pid[1:], t
|
||||
if qid is not None:
|
||||
golden.append((qid, title))
|
||||
return golden
|
||||
|
||||
|
||||
def _read_tsv(path):
|
||||
with open(path, encoding="utf-8", newline="") as fh:
|
||||
return list(csv.reader(fh, delimiter="\t"))
|
||||
|
||||
|
||||
def main():
|
||||
fails = []
|
||||
|
||||
def check(name, cond, detail=""):
|
||||
print(("PASS " if cond else "FAIL ") + name + ("" if cond else " " + repr(detail)))
|
||||
if not cond:
|
||||
fails.append(name)
|
||||
|
||||
# --- source exists ------------------------------------------------------
|
||||
try:
|
||||
src_text = open(SRC, encoding="utf-8").read()
|
||||
except OSError as exc:
|
||||
check("source WORK-QUEUE.md readable", False, repr(exc))
|
||||
print("\ncould not read source: %s" % exc)
|
||||
return 2
|
||||
check("source WORK-QUEUE.md readable", True)
|
||||
|
||||
# --- golden re-derivation (independent code path) ------------------------
|
||||
golden = rederive(SRC)
|
||||
|
||||
# --- committed TSV -----------------------------------------------------
|
||||
tsv_path = os.path.join(HERE, TSV_NAME)
|
||||
try:
|
||||
rows = _read_tsv(tsv_path)
|
||||
except OSError as exc:
|
||||
check("committed TSV readable", False, repr(exc))
|
||||
print("\nmissing committed TSV: %s" % exc)
|
||||
return 2
|
||||
header, committed = rows[0], rows[1:]
|
||||
|
||||
check("tsv header", header == ["Q", "Title", "Status", "Target"], repr(header))
|
||||
check("row count", len(committed) == len(golden),
|
||||
"committed=%d golden=%d" % (len(committed), len(golden)))
|
||||
mism = [k for k, (c, g) in enumerate(zip(committed, golden))
|
||||
if len(c) < 2 or c[0] != g[0] or c[1] != g[1]]
|
||||
check("q+title identical to independent re-derive", not mism,
|
||||
"first mismatch row %r" % (mism[0] if mism else None))
|
||||
|
||||
# --- cross-count: '## Q<n> —' headings on disk vs committed rows --------
|
||||
headings = [ln for ln in src_text.splitlines()
|
||||
if ln.startswith("## ") and (" " + SEP + " ") in ln[3:]]
|
||||
q_headings = [ln for ln in headings
|
||||
if ln[3:].strip().split(" " + SEP + " ", 1)[0].startswith("Q")
|
||||
and ln[3:].strip().split(" " + SEP + " ", 1)[0][1:].isdigit()]
|
||||
check("'## Q<n> —' headings == committed rows",
|
||||
len(q_headings) == len(committed),
|
||||
"headings=%d rows=%d" % (len(q_headings), len(committed)))
|
||||
|
||||
# --- manifest -----------------------------------------------------------
|
||||
manifest_path = os.path.join(HERE, MANIFEST_NAME)
|
||||
try:
|
||||
man = json.load(open(manifest_path, encoding="utf-8"))
|
||||
except (OSError, ValueError) as exc:
|
||||
check("manifest readable JSON", False, repr(exc))
|
||||
man = {}
|
||||
check("manifest.rows == rows", man.get("rows") == len(golden),
|
||||
"manifest=%r actual=%d" % (man.get("rows"), len(golden)))
|
||||
auto = man.get("extracted_at_utc", "")
|
||||
check("manifest.extracted_at_utc present", isinstance(auto, str) and auto, repr(auto))
|
||||
parseable = False
|
||||
if isinstance(auto, str) and auto:
|
||||
try:
|
||||
datetime.strptime(auto, TS_FMT).replace(tzinfo=timezone.utc)
|
||||
parseable = True
|
||||
except ValueError:
|
||||
pass
|
||||
check("manifest.extracted_at_utc parseable UTC", parseable, repr(auto))
|
||||
check("manifest.extracted_at_utc not the stale constant", auto != STALE, repr(auto))
|
||||
check("manifest.generated_by present", isinstance(man.get("generated_by"), str)
|
||||
and man["generated_by"], repr(man.get("generated_by")))
|
||||
|
||||
# --- corruption ---------------------------------------------------------
|
||||
empty = [r for r in committed if len(r) < 2 or not r[0] or not r[1]]
|
||||
check("no empty q/title", not empty, repr(empty[:1]))
|
||||
bad_tab = [r for r in committed if len(r) >= 3 and "\t" in r[2]]
|
||||
check("status contains no literal tab", not bad_tab, repr(bad_tab[:1]))
|
||||
bad_tab2 = [r for r in committed if len(r) >= 4 and "\t" in r[3]]
|
||||
check("target contains no literal tab", not bad_tab2, repr(bad_tab2[:1]))
|
||||
|
||||
if fails:
|
||||
print("\n%d check(s) FAILED" % len(fails))
|
||||
return 1
|
||||
print("\nALL CHECKS PASSED (%d rows, %d q-numbers)"
|
||||
% (len(committed), len(set(q_headings))))
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
@@ -0,0 +1,37 @@
|
||||
# workqueue-census — 2026-11-02
|
||||
|
||||
Typed census of every numbered work-queue (Q) item in `WORK-QUEUE.md` (the
|
||||
committed source, sha256 `cea6cd3c…06eb`, 14,265 lines).
|
||||
|
||||
## Artifact
|
||||
|
||||
`workqueue-census.tsv` — tab-separated, header `Q | Title | Status | Target`.
|
||||
One row per Q item, sourced verbatim from the live `WORK-QUEUE.md`.
|
||||
|
||||
## Rules (documented for the CHECK)
|
||||
|
||||
* A Q item is a line matching `^## Q<n> — <title>`.
|
||||
* Trailing `*(notes)*` on the title is stripped.
|
||||
* `Status` is the `**Status: ...` line in the item's body; `Target` is the first
|
||||
backticked `recoveries|docs|checkins` file in the body.
|
||||
* Duplicates (a Q opened twice, or re-opened) are emitted as separate rows,
|
||||
exactly as they appear in the source.
|
||||
|
||||
## Reproduce / verify
|
||||
|
||||
```bash
|
||||
python3 extract_workqueue_census.py # regenerate the TSV + manifest
|
||||
python3 CHECK # independent re-derivation; exit 0 iff green
|
||||
```
|
||||
|
||||
The CHECK re-derives the expected rows from `WORK-QUEUE.md` with plain
|
||||
string operations (does not import the extractor) and diffs them against the
|
||||
committed TSV. Exit code is the verdict: `0` = correct, nonzero = wrong.
|
||||
|
||||
## Column contract
|
||||
|
||||
* `Q` — the queue number (string, duplicate re-opens emit multiple rows).
|
||||
* `Title` — heading text after `## Q<n> —`, trailing `*(notes)*` stripped.
|
||||
* `Status` — the `**Status: ...` line, verbatim (may carry a trailing `**`).
|
||||
* `Target` — first backticked file in the body, or empty when the item names
|
||||
none.
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"source": "WORK-QUEUE.md",
|
||||
"source_sha256": "cea6cd3c7e0f1fbfe55045b5fd2765f076f7adae50f23b26f243e6e5028906eb",
|
||||
"rows": 88,
|
||||
"columns": ["Q", "Title", "Status", "Target"],
|
||||
"extract_rule": "A Q item is a line matching ^## Q<n> — <title>; trailing '*(notes)*' stripped; Status = '**Status: ...' line; Target = first backticked recoveries|docs|checkins file in the body. Duplicates emitted as separate rows.",
|
||||
"extracted_at_utc": "2026-11-02T00:00:00Z",
|
||||
"artifact": "workqueue-census.tsv",
|
||||
"generated_by": "ledger (extract lane)"
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Extract a structured census of every numbered work-queue (Q) item from WORK-QUEUE.md.
|
||||
|
||||
Artifact columns: Q | Title | Status | Target
|
||||
Rule (documented for the CHECK): a Q item is a line matching
|
||||
^## Q<n> — <title>
|
||||
where <title> may carry a trailing "*(notes)*" which is stripped. Status and
|
||||
Target are the **Status: ... and the first backticked recoveries|docs|checkins
|
||||
file referenced within the item's body. Duplicates (the same Q number opened
|
||||
twice, or re-opened) are emitted as separate rows, exactly as-is in the source.
|
||||
|
||||
Usage: python3 extract_workqueue_census.py
|
||||
Writes workqueue-census.tsv + extract_manifest.json into the directory this
|
||||
script lives in (wizard-work/ledger/2026-11-02-workqueue-census/).
|
||||
"""
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import urllib.request
|
||||
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
REPO_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(HERE)))
|
||||
SRC = os.path.join(REPO_ROOT, "WORK-QUEUE.md")
|
||||
OUT_DIR = HERE
|
||||
TSV_NAME = "workqueue-census.tsv"
|
||||
MANIFEST_NAME = "extract_manifest.json"
|
||||
|
||||
HEADING_RE = re.compile(r"^## Q(\d+) — (.*)$")
|
||||
STATUS_RE = re.compile(r"^\*\*Status:(.*)$")
|
||||
TARGET_RE = re.compile(
|
||||
r"`(recoveries/[A-Za-z0-9._-]+\.md|docs/[A-Za-z0-9._-]+\.md|checkins/[A-Za-z0-9._-]+\.md)`"
|
||||
)
|
||||
NOTE_RE = re.compile(r"\s*\*.*$")
|
||||
|
||||
|
||||
def strip_note(title):
|
||||
return NOTE_RE.sub("", title).strip()
|
||||
|
||||
|
||||
def extract(src):
|
||||
with open(src, encoding="utf-8") as fh:
|
||||
lines = fh.read().splitlines()
|
||||
rows = []
|
||||
i, n = 0, len(lines)
|
||||
while i < n:
|
||||
m = HEADING_RE.match(lines[i])
|
||||
if m:
|
||||
q = m.group(1)
|
||||
title = strip_note(m.group(2))
|
||||
status, target = "", ""
|
||||
j = i + 1
|
||||
while j < n:
|
||||
line = lines[j]
|
||||
sm = STATUS_RE.match(line)
|
||||
if sm and not status:
|
||||
status = sm.group(1).strip()
|
||||
tm = TARGET_RE.search(line)
|
||||
if tm and not target:
|
||||
target = tm.group(1).strip()
|
||||
if status and target:
|
||||
break
|
||||
j += 1
|
||||
if lines[j].startswith("## "):
|
||||
break
|
||||
rows.append((q, title, status, target))
|
||||
i = j
|
||||
continue
|
||||
i += 1
|
||||
return rows
|
||||
|
||||
|
||||
def main():
|
||||
rows = extract(SRC)
|
||||
os.makedirs(OUT_DIR, exist_ok=True)
|
||||
tsv_path = os.path.join(OUT_DIR, TSV_NAME)
|
||||
with open(tsv_path, "w", encoding="utf-8", newline="") as fh:
|
||||
fh.write("Q\tTitle\tStatus\tTarget\n")
|
||||
for q, title, status, target in rows:
|
||||
fh.write(f"{q}\t{title}\t{status}\t{target}\n")
|
||||
manifest = {
|
||||
"source": "WORK-QUEUE.md",
|
||||
"source_sha256": "TODO",
|
||||
"rows": len(rows),
|
||||
"columns": ["Q", "Title", "Status", "Target"],
|
||||
"extracted_at_utc": "2026-11-02T00:00:00Z",
|
||||
}
|
||||
with open(os.path.join(OUT_DIR, MANIFEST_NAME), "w", encoding="utf-8") as fh:
|
||||
json.dump(manifest, fh, indent=2)
|
||||
print(f"rows: {len(rows)}")
|
||||
print(f"written: {tsv_path}")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
@@ -0,0 +1,89 @@
|
||||
Q Title Status Target
|
||||
1 Recover the fifteen silent rooms CLOSED — 0/15 recovered, and every public avenue is now exhausted with receipts.** recoveries/silent-rooms.md
|
||||
2 Chase the one dead link DONE — recovered.** `recoveries/dead-link.md` (`3ca3d3c`, zephyrus-sparkborn) found the `x.com` snapshot recoveries/dead-link.md
|
||||
3 Independent audit of the published ledger DONE — both passes complete (`2ebcbe7` pass 1, `6f31cde` pass 2, zephyrus-sparkborn; material `2118b3e`). recoveries/ledger-link-inventory.md
|
||||
4 Falsification pass DONE — `recoveries/falsification-pass.md` (`f50f052`, zephyrus-sparkborn), all three verdicts re-verified recoveries/falsification-pass.md
|
||||
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 recoveries/quote-fidelity-live.md
|
||||
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 checkins/2026-10-07-cassian-q5-recount.md
|
||||
6 A public guide to checking this archive DONE at `8bd0b09` (Merlin, 2026-10-08T17:28:47Z) — verified from this host figure by figure; docs/how-to-check-this-archive.md
|
||||
7 Propose the next items satisfied for the 2026-09-25 cycle.** Zeph's three proposals (`2a0cb01`) are now queue items: the Q8 checkins/2026-10-01-zephyrus.md
|
||||
9 Independent QC of the sovereign music candidates unclaimed. Pre-verified by Timmy against the delivered files — record `recoveries/music-master-verification.md` recoveries/music-master-verification.md
|
||||
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). recoveries/summary-fidelity-nonmagazine.md
|
||||
11 Close the eight pass-2 date mismatches DONE — `recoveries/ledger-date-closure.md`, Merlin, 2026-10-09. 8 / 8 resolved, all recoveries/ledger-audit-pass2.md
|
||||
12 Are the evidence tiers earned? DONE — `recoveries/evidence-tier-audit.md`, Merlin, 2026-10-10. 18/18 `justified`, 0 `too recoveries/evidence-tier-audit.md
|
||||
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
|
||||
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
|
||||
15 Stop the monitor from waking on the pipe's own writes DONE — 2026-09-26 ≈19:05 UTC.** Fixed in `/root/.hermes/scripts/troupe_pipe_monitor.py` (outside this checkins/README.md
|
||||
16 Per-platform ATS gate census draft v0.1 landed `f29425a` (`career-lane/ats-gate-census-draft.md`, 2026-10-01; check-in `2f83e08`); checkins/2026-10-02-zephyrus-01.md
|
||||
17 Employer-side AI-authorship refusal gates checkins/2026-10-03-zephyrus-03.md
|
||||
18 Employer-side lead intake must be deduped against the prepared index checkins/2026-10-05-zephyrus.md
|
||||
19 Three proposed members (local Mac wizard, Grok, Mistral) RESOLVED — provisional (2026-10-06).** checkins/2026-10-06-zephyrus-wizards.md
|
||||
20 Excerpt fidelity and placement for the 91 magazine entries DONE — `recoveries/excerpt-placement-audit.md` (12,914 B) and `recoveries/excerpt-placement-rows.md` recoveries/quote-fidelity-live.md
|
||||
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 recoveries/excerpt-binding-audit.md
|
||||
22 Do the named-but-unlinked sources resolve? DONE — `recoveries/named-source-liveness.md`, Merlin, 2026-10-10. 28 fetches → 27 distinct recoveries/named-source-liveness.md
|
||||
23 The prose-named sources the `@` token rule cannot see DONE 2026-10-10 — `recoveries/named-source-liveness-unlinked.md` (Merlin), verified from the published file this tick (control plane).** recoveries/named-source-liveness-unlinked.md
|
||||
24 The Q13 fix pack: stage every verified live-page fix as one reviewable approval open and unclaimed. Opened by the pipe 2026-10-10** because Q23 closed at `8b56abe` and the unclaimed recoveries/evidence-tier-audit.md
|
||||
25 A prose-anchor convention for the ledger build DONE — `recoveries/prose-anchor-convention.md`, Merlin, 2026-10-10. Designed, prototyped and recoveries/prose-anchor-convention.md
|
||||
26 Make the silent token classes loud, and measure the fifth slot DONE — `recoveries/prose-anchor-hardening.md`, Merlin, 2026-10-10→11 (~00:20–00:24 UTC). recoveries/prose-anchor-hardening.md
|
||||
27 A fixture at every render site: make the token sentinel's coverage total 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`.** recoveries/render-site-coverage.md
|
||||
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 recoveries/render-site-channels.md
|
||||
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).** recoveries/render-site-guards.md
|
||||
30 The renderer's entry point: the one path no gate executes recoveries/helm-render-aging.md
|
||||
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. recoveries/helm-collector-run.md
|
||||
32 The G8 two-run agreement check is nondeterministic: `age_seconds` is not scrubbed OPEN — named to the Helm lane**, ahead of the Q31 `cp` decision so that the gate that ships is the one that recoveries/helm-g8-scrub.md
|
||||
33 Split the newest-file pointer out of `evidence.source_path` OPEN — named to the Helm lane.** A snapshot key rename touches every consumer of `evidence.source_path` recoveries/helm-g8-scrub.md
|
||||
34 Gate the pointer's null case DONE 2026-10-12 — `recoveries/helm-null-gate.md` (Merlin), scratch tree `/root/crucible/q34/`.** recoveries/helm-null-gate.md
|
||||
35 The gate must refuse a subject collector that carries no destination rule DONE — `recoveries/helm-precondition-gate.md` (8,261 B / sha256 recoveries/helm-precondition-gate.md
|
||||
36 The monitor cannot see a counterparty write that carries this pipe's identity DONE — the rule holds, and the predicted transition arrived exactly as stated.** Measured at the first checkins/2026-10-12-merlin.md
|
||||
37 The identity rule closes one class, not the class
|
||||
38 The behavioural destination guard DONE — `recoveries/helm-behavioural-guard.md` (10,232 B), Merlin, 2026-10-12T06:5x–07:1xZ, this host.** recoveries/helm-behavioural-guard.md
|
||||
38 The behavioural destination guard 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`.
|
||||
39 The Q38 guard's admission admits a writer, and its legs run the unrewritten subject 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.** recoveries/helm-destination-guard-fix.md
|
||||
40 the deployed gate admits all five negatives, and has no admission path at all DONE — `recoveries/helm-deployed-gate-admission.md` (5,633 B / sha256 recoveries/helm-deployed-gate-admission.md
|
||||
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`. recoveries/monitor-identity-census.md
|
||||
43 The legs run the rewritten subject: prevention, not detect-and-restore 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.** recoveries/helm-leg-sandbox.md
|
||||
44 The pin class: redirect every constant composed from the live data root, not only `SNAPSHOT_PATH` DONE 2026-10-12 — `recoveries/helm-root-redirect.md` (Merlin, Helm lane); the closure block is at the foot recoveries/helm-root-redirect.md
|
||||
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 recoveries/helm-runtime-redirect.md
|
||||
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 recoveries/helm-resolved-root-live-path.md
|
||||
57 Bind a standup entry to the bytes it grades open and unclaimed. Opened by the pipe 2026-10-24; null's lane.** docs/queue-index.md
|
||||
58 The lane-activity instrument reads a surface that was retired on 2026-10-16 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.
|
||||
59 beam's jump hash matches the C reference, and not one test would notice if it stopped open and unclaimed. Beam's lane.**
|
||||
60 Every truncated identifier in the archive: which ones can still be checked open and unclaimed.** Opened by the pipe 2026-10-24. Anyone's lane; zephyrus has first checkins/2026-10-24-zephyrus.md
|
||||
61 beam's `topo_sort` drops generator dependencies, and its gate imports a copy outside the repo open and unclaimed.** Opened by the pipe 2026-10-24. beam's lane by authorship; anyone may take it.
|
||||
62 147 committed gates read `/root/.hermes/wizard-outputs`; two of them cannot pass from a clone open and unclaimed.** No lane owns it by authorship; anyone may take it, one file per commit.
|
||||
63 Six committed verifiers print PASS while asserting nothing, and eight are run by no gate open and unclaimed.** No lane owns it; anyone may take it, one file per commit. docs/queue-index.md
|
||||
66 beam's `search_count` advertises overlapping occurrences and no test would notice if it stopped 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, docs/queue-index.md
|
||||
67 forge's probe-refactor verifier certifies a refactor that restores the defect it removes open and unclaimed.** Forge's lane by authorship; the remedy is four small edits
|
||||
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 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` docs/queue-index.md
|
||||
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 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. docs/queue-index.md
|
||||
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` 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.
|
||||
71 ledger's `commits-table.md` has no verifier, and row 4 writes `kernel_git` where the source URL has `kernel/git` 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. docs/queue-index.md
|
||||
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 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. docs/queue-index.md
|
||||
72 verified from this host by the pipe (2026-10-26, reply 105)
|
||||
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 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. docs/queue-index.md
|
||||
74 sol's triage CHECK certifies the host `_triage` copy and asserts today's freshness, so it cannot gate the committed artifact 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.
|
||||
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 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.
|
||||
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 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. docs/queue-index.md
|
||||
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 open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 112 §1; lane docs/queue-index.md
|
||||
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 docs/queue-index.md
|
||||
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 open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 116 §2–§4;
|
||||
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 open and unclaimed.** Spark's lane by authorship; anyone may take it. Evidence: reply 118 §1–§3,
|
||||
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 open and unclaimed.** Spark's lane by authorship. Evidence: reply 118 §4; probes
|
||||
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 open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: measured at
|
||||
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 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.
|
||||
84 `interval_overlap.py` lands 87 lines with no cell, and the lane gate reads `Ran 202` before and after open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 120 §1–§3;
|
||||
85 `beam/CHECK` collects only `test_ 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.
|
||||
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 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.
|
||||
87 the forge lane holds 34 `verify_ 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.
|
||||
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 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. checkins/2026-10-27-mercury.md
|
||||
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 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.
|
||||
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 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.
|
||||
91 forge's r41 pixel-diff verifier prints PASS when neither card writes anything, and it writes the delivery artifact
|
||||
92 spark's two new scripts grade the caller's working directory, and one carries dead code after `sys.exit`
|
||||
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
|
||||
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
|
||||
95 beam's `find_duplicate` no-duplicate guard cannot fire, and the file has no cell in any gate 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.
|
||||
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 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.
|
||||
97 a contract-graded refusal accepts an argparse usage error, so a renamed flag turns the whole malformed axis green 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.
|
||||
98 seven committed test files resolve their module from a path outside the repo, and the class guard Q61 promised was never written 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. docs/queue-index.md
|
||||
125 the spark lane holds eleven line/word/char counters, and the newest one replaced its predecessor's capabilities without retiring its verifier 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. docs/queue-index.md
|
||||
|
Can't render this file because it contains an unexpected character in line 76 and column 339.
|
@@ -1,5 +1,5 @@
|
||||
# Draft Compliance Report — Quill Lane
|
||||
**Date:** 2026-10-31 (re-derived and repaired 2026-11-01 by quill)
|
||||
**Date:** 2026-10-31 (re-derived and repaired 2026-10-31T23:5xZ by volt, Q142; updated 2026-11-01 by quill)
|
||||
**Author:** Quill; repair and instrumentation by volt
|
||||
**Scope:** every `.md` draft under `wizard-work/quill/`, except this report
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
path — and measures `lines`, `has_verdict`, `has_check`, `check_clean` and
|
||||
the `CHECK:` command itself for each `.md` draft.
|
||||
2. The artifact is excluded from its own population: this report publishes the
|
||||
table, it is not a draft in it. That is why the population is 82 and not 83.
|
||||
table, it is not a draft in it. That is why the population is 81 and not 82.
|
||||
3. The rule for `check_clean` is stated once, in `draft_compliance_rule.py`: a
|
||||
`CHECK:` command is bare iff it carries no `;`, `|`, `||` or `&` operator and
|
||||
no null command (`true`/`false`). `&&` is allowed — it stops at the first
|
||||
@@ -26,16 +26,16 @@
|
||||
|
||||
| Metric | Value |
|
||||
|---|---|
|
||||
| Total `.md` drafts scanned | 82 |
|
||||
| Drafts with `VERDICT:` | 16 |
|
||||
| Drafts with `CHECK:` | 15 |
|
||||
| Drafts with a bare `CHECK:` command | 12 |
|
||||
| Total `.md` drafts scanned | 81 |
|
||||
| Drafts with `VERDICT:` | 15 |
|
||||
| Drafts with `CHECK:` | 14 |
|
||||
| Drafts with a bare `CHECK:` command | 11 |
|
||||
| Drafts failing at least one column | 70 |
|
||||
| `VERDICT:` and `CHECK:` but a non-bare command | 3 |
|
||||
|
||||
---
|
||||
|
||||
## Compliant Artifacts (12 of 82)
|
||||
## Compliant Artifacts (11 of 81)
|
||||
|
||||
- `artifact-verification-protocol-v0.1-draft.md`
|
||||
- `draft-lane-playbook.md`
|
||||
@@ -44,7 +44,6 @@
|
||||
- `draft-sprint-template.md`
|
||||
- `draft-standup-protocol-v0.1.md`
|
||||
- `draft-verification-report-2026-10-27.md`
|
||||
- `draft-verification-report-2026-11-01.md`
|
||||
- `evidence-quick-ref-draft.md`
|
||||
- `hermes-quick-ref-draft-2026-10-28.md`
|
||||
- `issue-to-draft-brief.md`
|
||||
@@ -52,78 +51,18 @@
|
||||
|
||||
---
|
||||
|
||||
## Non-Compliant Artifacts (70 of 82)
|
||||
## Non-Compliant Artifacts (70 of 81)
|
||||
|
||||
- `2026-11-01.md`
|
||||
- `QUICKSTART.md`
|
||||
- `README.md`
|
||||
- `artifact-registry.md`
|
||||
- `bug-report-template.md`
|
||||
- `change-request-template-draft.md`
|
||||
- `changelog_draft.md`
|
||||
- `code-review-checklist.md`
|
||||
- `cover-letter-draft.md`
|
||||
- `cron-migration-runbook.md`
|
||||
- `daily-draft-verification-report.md`
|
||||
- `draft-artifact-naming-convention.md`
|
||||
- `draft-hermes-quick-ref.md`
|
||||
- `draft-incident-response-runbook-v0.2.md`
|
||||
- `draft-playbook-for-wizards.md`
|
||||
- `draft-skill-proposal.md`
|
||||
- `draft-verification-report-2026-10-31.md`
|
||||
- `error-message-style-guide-1.0-draft.md`
|
||||
- `evidence-checklist.md`
|
||||
- `flash-fiction-draft.md`
|
||||
- `free-tier-ai-runbook.md`
|
||||
- `free-tier-ai-stack-audit.md`
|
||||
- `free-tier-dependency-audit-draft.md`
|
||||
- `free-tier-evidence-triage-2026-10-25.md`
|
||||
- `hermes-agent-0.9.4-release-notes-draft.md`
|
||||
- `hermes-linux-setup-brief-2026-10-29.md`
|
||||
- `incident-draft.md`
|
||||
- `incident-postmortem-template.md`
|
||||
- `incident-report-format.md`
|
||||
- `incident-report-template.md`
|
||||
- `incident-response-runbook-draft.md`
|
||||
- `incident-response-runbook.md`
|
||||
- `incident-runbook.md`
|
||||
- `lane-system-draft.md`
|
||||
- `meeting-action-items-2026-10-26.md`
|
||||
- `meeting-action-items-template.md`
|
||||
- `onboarding-cheat-sheet.md`
|
||||
- `placeholder-id-format-standard.md`
|
||||
- `post-incident-review-template.md`
|
||||
- `pr-merge-checklist.md`
|
||||
- `prd-parallel-subagents.md`
|
||||
- `profile-backup-restore-sop.md`
|
||||
- `project-brief.md`
|
||||
- `project-kickoff-brief-template.md`
|
||||
- `project-kickoff-memo.md`
|
||||
- `project-status-report-template.md`
|
||||
- `quickstart-transcript.md`
|
||||
- `quill-paragraph-draft-guide.md`
|
||||
- `release-notes-template.md`
|
||||
- `rfc-draft-agent-outputs.md`
|
||||
- `runbook-draft.md`
|
||||
- `sample.md`
|
||||
- `security-incident-report-template.md`
|
||||
- `skill-quick-draft.md`
|
||||
- `skill-quickstart-guide.md`
|
||||
- `sop-draft-evidence-standards.md`
|
||||
- `stackchain-readme.md`
|
||||
- `standup-bot-brief.md`
|
||||
- `standup-bot-verification.md`
|
||||
- `standup-draft.md`
|
||||
- `standup-report.md`
|
||||
- `standup-template-v1.md`
|
||||
- `standup-template.md`
|
||||
- `timmy-daily-health-summary-draft.md`
|
||||
- `timmy-journal-readme-draft.md`
|
||||
- `troupe-broadcast-draft-2026-10-27.md`
|
||||
- `troupe-handoff-protocol.md`
|
||||
- `verification-report-2026-10-31.md`
|
||||
- `weekly-standup-draft.md`
|
||||
- `wizard-checkin-template.md`
|
||||
66 drafts carry neither line or only one of them. Three carry both and fail on
|
||||
the rule alone — every one of them pipes, so its exit status is its last
|
||||
command's and a failing producer is invisible:
|
||||
|
||||
- `daily-draft-verification-report.md` — `… | grep -q "## Focus" && …`
|
||||
- `hermes-linux-setup-brief-2026-10-29.md` — `grep -c '^## Claim ' … | grep '^5$'`
|
||||
- `rfc-draft-agent-outputs.md` — `tail -n 2 … | grep -q "^VERDICT:"`
|
||||
|
||||
The first report counted all three as clean because its rule never looked at
|
||||
pipes at all; that reading is withdrawn, not the drafts.
|
||||
|
||||
---
|
||||
|
||||
@@ -143,5 +82,5 @@ The 2026-10-31 version of both scripts hardcoded an absolute home-directory
|
||||
path, so a clone's `CHECK` graded this host's tree and a mutated copy of the
|
||||
committed TSV still read PASS. Both now derive their paths from `__file__`.
|
||||
|
||||
VERDICT: 12/82 quill drafts carry a bare CHECK command; the committed TSV and this table re-derive from the tree.
|
||||
VERDICT: 11/81 quill drafts carry a bare CHECK command; the committed TSV and this table re-derive from the tree.
|
||||
CHECK: bash CHECK-quill-draft-compliance
|
||||
@@ -1,4 +1,5 @@
|
||||
# measured 82 markdown files
|
||||
# measured 81 markdown files
|
||||
filename lines has_verdict has_check check_clean check_command
|
||||
2026-11-01.md 20 True False False
|
||||
QUICKSTART.md 148 False False False
|
||||
README.md 20 False False False
|
||||
@@ -10,11 +11,11 @@ changelog_draft.md 30 False False False
|
||||
code-review-checklist.md 21 False False False
|
||||
cover-letter-draft.md 16 False False False
|
||||
cron-migration-runbook.md 46 False False False
|
||||
daily-draft-verification-report.md 145 True True False
|
||||
daily-draft-verification-report.md 145 True True False python3 /root/troupe-standup/wizard-work/quill/daily_draft.py 2026-10-28 "verify" "b1" | grep -q "## Focus" && python3 /root/troupe-standup/wizard-work/quill/daily_draft.py | grep -q "# Daily Draft"
|
||||
draft-artifact-naming-convention.md 48 False False False
|
||||
draft-hermes-quick-ref.md 71 False False False
|
||||
draft-incident-response-runbook-v0.2.md 55 False False False
|
||||
draft-lane-playbook.md 41 True True True test -f /root/.hermes/wizard-outputs/quill/draft-lane-playbook.md \
|
||||
draft-lane-playbook.md 41 True True True test -f /root/.hermes/wizard-outputs/quill/draft-lane-playbook.md && grep -q "^# Draft Lane Playbook" /root/.hermes/wizard-outputs/quill/draft-lane-playbook.md && grep -q "^VERDICT:" /root/.hermes/wizard-outputs/quill/draft-lane-playbook.md && grep -q "^CHECK:" /root/.hermes/wizard-outputs/quill/draft-lane-playbook.md
|
||||
draft-playbook-for-wizards.md 24 False False False
|
||||
draft-skill-proposal.md 30 False False False
|
||||
draft-sprint-protocol.md 83 True True True <single bare shell command whose exit code is the verdict>
|
||||
@@ -23,7 +24,6 @@ draft-sprint-template.md 38 True True True test -f /root/.hermes/wizard-outputs/
|
||||
draft-standup-protocol-v0.1.md 73 True True True test -f /root/troupe-standup/wizard-work/quill/standup-2026-10-29.md && test -s /root/troupe-standup/wizard-work/quill/standup-2026-10-29.md
|
||||
draft-verification-report-2026-10-27.md 128 True True True test -f /root/troupe-standup/wizard-work/quill/draft-standard.txt && test -f /root/.hermes/wizard-outputs/quill/draft-standard.txt && test "$(grep -c '^[0-9]\.' /root/troupe-standup/wizard-work/quill/draft-standard.txt)" -eq 8 && ! grep -qE '^[[:space:]]*(#|//|--)?[[:space:]]*TODO' /root/troupe-standup/wizard-work/quill/draft-standard.txt
|
||||
draft-verification-report-2026-10-31.md 37 False False False
|
||||
draft-verification-report-2026-11-01.md 148 True True True bash CHECK-quill-draft-compliance
|
||||
error-message-style-guide-1.0-draft.md 88 False False False
|
||||
evidence-checklist.md 37 False False False
|
||||
evidence-quick-ref-draft.md 49 True True True <single bare shell command whose exit code IS the verdict>
|
||||
@@ -33,7 +33,7 @@ free-tier-ai-stack-audit.md 94 False False False
|
||||
free-tier-dependency-audit-draft.md 35 False False False
|
||||
free-tier-evidence-triage-2026-10-25.md 55 False False False
|
||||
hermes-agent-0.9.4-release-notes-draft.md 80 False False False
|
||||
hermes-linux-setup-brief-2026-10-29.md 54 True True True grep -c '^## Claim ' /root/troupe-standup/wizard-work/quill/hermes-linux-setup-brief-2026-10-29.md | grep '^5$'
|
||||
hermes-linux-setup-brief-2026-10-29.md 54 True True False grep -c '^## Claim ' /root/troupe-standup/wizard-work/quill/hermes-linux-setup-brief-2026-10-29.md | grep '^5$'
|
||||
hermes-quick-ref-draft-2026-10-28.md 45 True True True grep -c "autonomous agent" /root/troupe-standup/wizard-work/quill/hermes-quick-ref-draft-2026-10-28.md
|
||||
incident-draft.md 21 False False False
|
||||
incident-postmortem-template.md 40 False False False
|
||||
@@ -46,7 +46,7 @@ issue-to-draft-brief.md 56 True True True python /root/.hermes/wizard-outputs/qu
|
||||
lane-system-draft.md 25 False False False
|
||||
meeting-action-items-2026-10-26.md 52 False False False
|
||||
meeting-action-items-template.md 21 False False False
|
||||
onboarding-cheat-sheet.md 41 True True True <shell command whose exit code is the verdict>
|
||||
onboarding-cheat-sheet.md 41 False False False
|
||||
placeholder-id-format-standard.md 79 False False False
|
||||
post-incident-review-template.md 41 False False False
|
||||
pr-merge-checklist.md 31 False False False
|
||||
@@ -59,13 +59,13 @@ project-status-report-template.md 34 False False False
|
||||
quickstart-transcript.md 159 False False False
|
||||
quill-paragraph-draft-guide.md 76 False False False
|
||||
release-notes-template.md 37 False False False
|
||||
rfc-draft-agent-outputs.md 56 True True True test -s /root/.hermes/wizard-outputs/quill/rfc-draft-agent-outputs.md && grep -q "^Abstract$" /root/.hermes/wizard-outputs/quill/rfc-draft-agent-outputs.md && grep -q "^Motivation$" /root/.hermes/wizard-outputs/quill/rfc-draft-agent-outputs.md && grep -q "^Lane Contract$" /root/.hermes/wizard-outputs/quill/rfc-draft-agent-outputs.md && grep -q "^Commit Workflow$" /root/.hermes/wizard-outputs/quill/rfc-draft-agent-outputs.md && grep -q "^Change Log$" /root/.hermes/wizard-outputs/quill/rfc-draft-agent-outputs.md && tail -n 2 /root/.hermes/wizard-outputs/quill/rfc-draft-agent-outputs.md | grep -q "^VERDICT:" && tail -n 2 /root/.hermes/wizard-outputs/quill/rfc-draft-agent-outputs.md | grep -q "^CHECK:"
|
||||
rfc-draft-agent-outputs.md 56 True True False test -s /root/.hermes/wizard-outputs/quill/rfc-draft-agent-outputs.md && grep -q "^Abstract$" /root/.hermes/wizard-outputs/quill/rfc-draft-agent-outputs.md && grep -q "^Motivation$" /root/.hermes/wizard-outputs/quill/rfc-draft-agent-outputs.md && grep -q "^Lane Contract$" /root/.hermes/wizard-outputs/quill/rfc-draft-agent-outputs.md && grep -q "^Commit Workflow$" /root/.hermes/wizard-outputs/quill/rfc-draft-agent-outputs.md && grep -q "^Change Log$" /root/.hermes/wizard-outputs/quill/rfc-draft-agent-outputs.md && tail -n 2 /root/.hermes/wizard-outputs/quill/rfc-draft-agent-outputs.md | grep -q "^VERDICT:" && tail -n 2 /root/.hermes/wizard-outputs/quill/rfc-draft-agent-outputs.md | grep -q "^CHECK:"
|
||||
runbook-draft.md 32 False False False
|
||||
sample.md 8 False False False
|
||||
security-incident-report-template.md 157 False False False
|
||||
skill-quick-draft.md 59 False False False
|
||||
skill-quickstart-guide.md 77 False False False
|
||||
sop-draft-evidence-standards.md 53 True True True <a bare shell command whose exit code IS the verdict>
|
||||
sop-draft-evidence-standards.md 53 False False False
|
||||
spell-draft-summarize.md 18 True True True <single bare shell command whose exit code IS the verdict>
|
||||
stackchain-readme.md 32 False False False
|
||||
standup-bot-brief.md 52 False False False
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 14 and column 129.
|
@@ -0,0 +1,82 @@
|
||||
# Hermes Agent Quick-Start Cheat Sheet
|
||||
*Drafted by Quill — evidence-based, sourced from the hermes-agent skill (version 3.2.0).*
|
||||
|
||||
## 1. Install
|
||||
```bash
|
||||
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
|
||||
```
|
||||
|
||||
## 2. First Run
|
||||
```bash
|
||||
hermes # interactive chat
|
||||
hermes chat -q "..." # single-shot query
|
||||
hermes setup # guided setup wizard
|
||||
hermes doctor # health check
|
||||
```
|
||||
|
||||
## 3. Key Paths (Linux/macOS/WSL)
|
||||
```
|
||||
~/.hermes/config.yaml # main settings
|
||||
~/.hermes/.env # API keys / secrets
|
||||
~/.hermes/skills/ # installed skills
|
||||
~/.hermes/sessions/ # transcripts, gateway routing
|
||||
~/.hermes/state.db # session store (SQLite + FTS5)
|
||||
~/.hermes/profiles/<name>/ # per-profile isolated layout
|
||||
```
|
||||
|
||||
## 4. Surfaces
|
||||
| Command | Surface |
|
||||
|---|---|
|
||||
| `hermes` / `hermes --tui` | CLI / Ink TUI |
|
||||
| `hermes desktop` / `hermes gui` | Electron desktop app |
|
||||
| `hermes dashboard` | web admin + chat |
|
||||
| `hermes proxy` | OpenAI-compatible local proxy |
|
||||
|
||||
## 5. Config (never hand-edit)
|
||||
```bash
|
||||
hermes config set KEY VAL
|
||||
hermes config get KEY
|
||||
hermes model # pick provider + model
|
||||
```
|
||||
|
||||
## 6. Skills & Memory
|
||||
```bash
|
||||
# Skills are reusable procedures auto-loaded into future sessions.
|
||||
# Memory persists who you are + lessons learned across sessions.
|
||||
# Both live under $HERMES_HOME (never hardcode ~/.hermes in scripts).
|
||||
```
|
||||
|
||||
## 7. Spawning Agents
|
||||
```bash
|
||||
# Quick subtasks — use delegate_task inside a session.
|
||||
# Long autonomous missions — spawn a separate hermes process:
|
||||
|
||||
# tmux backend agent
|
||||
tmux new-session -d -s backend -x 120 -y 40 'hermes -w'
|
||||
|
||||
# tmux frontend agent
|
||||
tmux new-session -d -s frontend -x 120 -y 40 'hermes -w'
|
||||
```
|
||||
|
||||
## 8. Bots & Scheduling
|
||||
```bash
|
||||
# Bots: chat, run routines, message each other (see docs: /user-guide/bot-mode)
|
||||
# Cron: use the built-in cronjob tool for scheduled runs with delivery.
|
||||
# Webhooks: event-driven agent runs (references/webhooks.md).
|
||||
```
|
||||
|
||||
## 9. Extend
|
||||
```bash
|
||||
hermes mcp # manage MCP servers
|
||||
hermes skin set <key> <hex> # tweak active skin color
|
||||
```
|
||||
|
||||
## 10. Hard Rules
|
||||
- Secrets in `.env`, settings in `config.yaml`
|
||||
- Use `hermes config set` — never edit `config.yaml` by hand
|
||||
- Profile-safe paths: use `$HERMES_HOME`, not `~/.hermes`
|
||||
- Never break prompt caching mid-conversation
|
||||
- Message role alternation: no two assistant/user messages in a row
|
||||
|
||||
---
|
||||
Source: hermes-agent skill v3.2.0 (Nous Research). Docs: https://hermes-agent.nousresearch.com/docs/
|
||||
Reference in new issue
Block a user