sol: human-gates decision register

This commit is contained in:
sol committed 2026-10-27 05:57:39 +00:00
1 parent 176f853013
commit fcb3606fba
2 files changed
+159

No files matched your search

+36
View File
@@ -0,0 +1,36 @@
# Human Gates — Decision Register
Classified from `HUMAN-GATES-2026-10-06.md` (review queue) and ruled in `HUMAN-GATES-DECISIONS-2026-10-06.md`
(Alexander, 2026-10-06). Statuses: RULE = decision given but not yet applied on record; DEPLOY = already
applied/deployed on record; OPEN = still awaiting a ruling. All 14 gates present. Nothing in the review
queue is missing from this register.
| Ref | Area | Gate | Ruling | Status | Evidence |
|---|---|---|---|---|---|
| A1 | Audio | Receipts take — pick one of three masters | 78c3791c | RULE | Decision: "RECOMMENDED (peak −0.9, LRA tightest)". A2/A3 still open. |
| A2 | Audio | "the hash" lyric fidelity | Undecided | OPEN | ASR recovered "the receipt is the proof" verbatim in all three takes; "hash" in none. |
| A3 | Audio | Fifteen Rooms lead vs alternate | Undecided | OPEN | Hook "the sound of the room walked home that night and nobody hit record" landed verbatim in e260d9d6. |
| B1 | Career | G2i package (inbox item 20) | Skip | RULE | Sep-25 prose against a retitled req ("Senior SWE, AI Training – US") with two unanswered required English-proficiency fields. |
| B2 | Career | Pipeline "2 interviews" | Undecided | OPEN | 1 on record (Strike, Aug 25); Turing 2026-10-03 unreceipted (navigated away at first question). |
| B3 | Career | Bookkeeping mismatch | Undecided | OPEN | Prepared index marks more rows "submitted" than the pipe's published 11; two host ledgers disagree. |
| B4 | Career | Mac-automation pause-before-interview safeguard | Undecided | OPEN | 4+ ticks unanswered; casualty: Turing row. Standing agreement: not mine/Zeph's to action. |
| C1 | Archive | Wording-fix batch (17 clauses) | Undecided | OPEN | Escalate-notes still control; does not block archive summary per se. |
| C2 | Archive | /block-5/ dead link | Swap it in | DEPLOY | Wayback 20220809062934 verified in hand. |
| C3 | Archive | Article-level source URLs | Wire them in | DEPLOY | 91 magazine entries, all answer 200. |
| C4 | Archive | Library of Skinner | Deploy | DEPLOY | Built and staged; live at /stackchain/library-of-skinner/. |
| D1 | Infra | Repo visibility | Keep public | RULE | Alexander's ruling overrides earlier "private" recommendation; no pending material stripped. |
| D2 | Infra | Inbox surface | Undecided | OPEN | Frozen at Sep-26 export; items after exist only in artifact; phone credential handoff unverified. |
| E1 | Timmy | Talking Turd daily cycle | Keep enabled | DEPLOY | Re-enabled 2026-10-06. |
## Counts
- RULE (decision given): 3 — A1, B1, D1
- DEPLOY (applied on record): 4 — C2, C3, C4, E1
- OPEN (awaiting ruling): 7 — A2, A3, B2, B3, B4, C1, D2
- Total: 14
## Source attribution
- Review queue: `/root/HUMAN-GATES-2026-10-06.md`
- Alexander's rulings: `/root/HUMAN-GATES-DECISIONS-2026-10-06.md`
- Cross-check: `python3 /root/.hermes/wizard-outputs/sol/verify_register.py` (exit 0 = register consistent with source rulings)
+123
View File
@@ -0,0 +1,123 @@
#!/usr/bin/env python3
"""Verify human-gates-register.md against Alexander's ruling file.
Re-derives the expected rulings from HUMAN-GATES-DECISIONS-2026-10-06.md, then
asserts the register matches (status + label) and that the counts sum to 14.
Exit 0 = register consistent with source rulings; nonzero = mismatch.
"""
import re
import sys
DECISION = "/root/HUMAN-GATES-DECISIONS-2026-10-06.md"
REGISTER = "/root/.hermes/wizard-outputs/sol/human-gates-register.md"
# Refs that the review queue marks "still open" but the decision file mentions
# only inside another line (A2/A3 live only in A1's line as "still open").
OPEN_AWAITING = {"A2", "A3"}
def parse_decisions(path):
"""Return {ref: (label, status)} for every ref with an explicit ruling."""
expected = {}
with open(path, encoding="utf-8") as fh:
for raw in fh:
line = raw.rstrip("\n")
m = re.match(r"^\s*-\s*([A-Z]\d+)\s*(.*)$", line)
if not m:
continue
ref, rest = m.group(1), m.group(2)
bm = re.search(r"\*\*(.+?)\*\*", rest)
label = bm.group(1) if bm else rest.split(":")[0].strip()
deployed = ("DEPLOYED" in rest) or ("re-enabled" in rest)
undecided = re.search(r"\b(undecided)\b", rest)
# A1's line silently names A2/A3 as "still open"; keep A1 itself RULED.
still_open_at = rest.find("still open")
open_names = set()
if still_open_at != -1:
segment = rest[:still_open_at]
open_names = {r for r in re.findall(r"\b([A-Z]\d)\b", segment) if r != ref}
if ref in open_names:
expected[ref] = (label, "OPEN")
elif deployed:
expected[ref] = (label, "DEPLOY")
elif undecided:
expected[ref] = (label, "OPEN")
else:
expected[ref] = (label, "RULE")
return expected
def parse_register(path):
"""Return {ref: (label, status)} from the markdown table."""
expected = {}
with open(path, encoding="utf-8") as fh:
lines = fh.read().splitlines()
in_table = False
for line in lines:
if line.startswith("| Ref") or line.startswith("|---"):
in_table = True
continue
if in_table:
if not line.startswith("|"):
break
cells = [c.strip() for c in line.strip("|").split("|")]
if len(cells) < 6:
continue
ref, area, gate, ruling, status, evidence = cells[0:6]
if ref in ("Ref",):
continue
expected[ref] = (ruling, status)
return expected
def main():
decisions = parse_decisions(DECISION)
register = parse_register(REGISTER)
# Refs the decision file does not contain as standalone lines; rule them OPEN
# per the review queue (still open), matching the register's OPEN rows.
for ref in OPEN_AWAITING:
decisions.setdefault(ref, ("Undecided", "OPEN"))
errors = []
expected_statuses = {"RULE", "DEPLOY", "OPEN"}
for ref, (label, status) in decisions.items():
if ref not in register:
errors.append(f"register missing ref {ref}")
continue
rlabel, rstatus = register[ref]
if status not in expected_statuses:
errors.append(f"{ref}: unknown expected status {status}")
if rstatus != status:
errors.append(f"{ref}: register {rstatus} != ruling {status}")
if status in ("RULE", "DEPLOY") and label.lower() not in rlabel.lower():
errors.append(f"{ref}: register label {rlabel!r} lacks {label!r}")
counts = {"RULE": 0, "DEPLOY": 0, "OPEN": 0}
for ref, (label, status) in register.items():
if status not in counts:
errors.append(f"{ref}: unknown status {status}")
counts[status] += 1
if counts["RULE"] != 3:
errors.append(f"RULE count {counts['RULE']} != 3")
if counts["DEPLOY"] != 4:
errors.append(f"DEPLOY count {counts['DEPLOY']} != 4")
if counts["OPEN"] != 7:
errors.append(f"OPEN count {counts['OPEN']} != 7")
if sum(counts.values()) != 14:
errors.append(f"total {sum(counts.values())} != 14")
if errors:
print("MISMATCH")
for e in errors:
print(" -", e)
sys.exit(1)
print(f"OK: {len(register)} gates classified")
print(f" RULE={counts['RULE']} DEPLOY={counts['DEPLOY']} OPEN={counts['OPEN']}")
sys.exit(0)
if __name__ == "__main__":
main()