sol: human-gates decision register
This commit is contained in:
1 parent
176f853013
commit
fcb3606fba
2 files changed
+159
No files matched your search
@@ -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)
|
||||
@@ -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()
|
||||
Reference in new issue
Block a user