diff --git a/scripts/governance-mcp.py b/scripts/governance-mcp.py index 1e4fa75..191b1fb 100644 --- a/scripts/governance-mcp.py +++ b/scripts/governance-mcp.py @@ -69,6 +69,20 @@ FILES = { "claude-md": (os.path.join(D, "CLAUDE.md"), "the executor's governing document"), "memory-index": (os.path.join(wd.MEM, "MEMORY.md"), "wake-loaded memory index"), "app-brief": (wd.BRIEF_PATH, "last generated .app Standing Context block"), + # PENDING-86 option (a), steward-authorized 2026-08-05. The jurist design-gates + # constitutional supersessions of documents it could not read; three distinct + # instances are recorded on that item. These two are the ones the loop actually + # rules on. Read-only, keyed, no path argument — the enum design is unchanged. + "chamber-spec": (os.path.join(HOME, "_Dev", "chamber-library", "docs", + "chamber-library-specification.md"), + "the chamber library constitution — ⚠ the OPERATIVE version header is " + "at the top, but roughly the next 330 lines are SUPERSEDED version " + "headers kept as the amendment trail; the operative sections start at " + "'## 0. What this document is'. Page past them (offset≈350) or you will " + "be reading obsoleted text"), + "graduation-spec": (os.path.join(HOME, "_Dev", "chamber-library", "_curation", + "graduation-spec.yaml"), + "the constitution's machine-readable convention-data + gate-list"), } REPOS = wd.REPOS @@ -351,6 +365,27 @@ def selftest(): t_read({"file": "../../.ssh/id_rsa"}).startswith("ERROR: unknown file key")) chk("governance_read ACCEPTS a listed key [positive control for the refusal above]", t_read({"file": "pending"}).startswith("[pending —")) + + print("\nPENDING-86 (a) — the documents the jurist design-gates are now reachable:") + chk("chamber-spec key reads", + t_read({"file": "chamber-spec"}).startswith("[chamber-spec —")) + chk("graduation-spec key reads", + t_read({"file": "graduation-spec"}).startswith("[graduation-spec —")) + # Reachability of the KEY is not reachability of the CLAUSE. These two controls + # test the actual thing the item exists for: the §II.3 / §V text a Q2-shaped + # ruling turns on. A key that opens onto 330 lines of superseded headers would + # pass the two checks above and still leave the gap wide open. + _spec_deep = t_read({"file": "chamber-spec", "offset": 350, "limit": 2000}) + chk("§V's inline-anchor clause is reachable in one paged call [the Q2 clause]", + "is content-for-the-reader but is **not a prose word**" in _spec_deep) + chk("§II.3's marker constraint is reachable in the same call [the Q2 clause]", + "must not corrupt the" in _spec_deep and "prose-word-identity check under §V" in _spec_deep) + chk("the superseded-header trap is disclosed on the key itself [it would cause the " + "misruling this access exists to prevent]", + "SUPERSEDED version" in FILES["chamber-spec"][1]) + chk("a first-page read lands in the SUPERSEDED region [negative control: proves the " + "trap is real, not hypothetical]", + "(obsoleted)" in t_read({"file": "chamber-spec", "limit": 300})) chk("repo_activity refuses an unlisted repo", t_repo({"repo": "/etc"}).startswith("ERROR: unknown repo")) chk("repo_activity ACCEPTS a listed repo [positive control]",