Files
David F GliddenandClaude Opus 5 89e65fceb5 docs(governance): PENDING-99 census corrected; containment's sufficiency limit named
The census arithmetic is settled by counting, not by which reading closes:
17 instances / 15 distinct, the mislocation being one defect over two instances,
so the session log was right and V2 §1.5 was wrong. My withdrawal of the
original flag was itself the error — it inferred a breakdown from a total, which
a total cannot settle. Yesterday's banked pattern: a number that matches is not
a cause; it produced two candidates and I accepted each in turn.

check_containment.py now carries the limit the PENDING-99 ruling exposed:
containment verifies that what you quoted is ACCURATE, never that you quoted
what MATTERS. An omission passes every time. The countermeasure is reading the
adjacent clauses, not a better checker.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AB3Kryoy6b1pm2Nz1DYdLh
2026-08-05 21:39:57 +02:00

142 lines
5.6 KiB
Python
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
Verbatim containment check for jurist packages.
The packages in this directory are written for a jurist with NO repository access,
under a contract stated in their own headers: "every clause reasoned about is quoted
verbatim". That contract is only worth what a mechanical check makes it worth. Reading
does not catch a fabricated terminal period, an elision presented as contiguous, or a
truncation that closes a sentence with a word the source does not contain — all three
have occurred in packages from this directory, and all three were caught by a check
like this one rather than by careful reading.
Every run carries POSITIVE CONTROLS: near-miss strings that must be absent. If a control
is found, the instrument is not discriminating and its passes mean nothing. An absence
is not evidence until the instrument is shown capable of detecting presence.
KNOWN LIMIT — CONTAINMENT IS NOT SUFFICIENCY.
This tests that what you quoted is ACCURATE. It cannot test that you quoted what
MATTERS. An omission passes every time, because nothing was misquoted.
Demonstrated 2026-08-05, PENDING-99: the package quoted chamber §II.3 verbatim and
passed 16/16 with 9/9 controls absent. The sentence that actually decided the
question — "What remains genuinely open... the marker's exact syntax" — sat in the
NEXT LINE of the same subsection, was in the executor's own read output, and was
never surfaced. The jurist found it on first contact with the primary text and
reframed the ruling. A containment proof is a floor against fabrication, never
evidence of adequacy.
The countermeasure is not a better checker. It is a different act: read the clauses
ADJACENT to every quote, and say in the package that you did.
KNOWN LIMIT — THIS INSTRUMENT CANNOT VERIFY A NEGATION.
It tests whether an exact string is present. It has no notion of polarity. So a
sentence of the form "X does NOT hold" contains, as a literal substring, the
affirmative "X holds" — and any control built from that affirmative will leak by
construction, every time, no matter how correct the text is.
Hit twice within five minutes on 2026-08-02 while verifying the Constraint 6
placement: both attempts to control for "the doctrine must not claim the
jurist-executor pair IS a check" used substrings of the very sentence that denies
it. The instrument was right to refuse certification both times; the controls were
malformed.
Build controls by INVERSION, not by extraction — a string that would appear only if
the meaning were flipped ("the jurist and the executor differ from each other in
formation", dropping the "do not"), never a fragment lifted out of the sentence
under test. And where polarity is what matters, this instrument does not settle it:
read the sentence. Report that you read it, and that containment did not cover it.
USAGE
./check_containment.py manifest.json
MANIFEST
{
"sources": {"key": "/abs/path/to/source", ...},
"claims": [["key", "quoted text"], ...],
"controls": [["key", "near-miss that MUST be absent"], ...]
}
EXIT
0 all claims contained, no control leaked
1 a claim is not contained
2 a control leaked — instrument not verified, result unusable
"""
from __future__ import annotations
import json
import re
import sys
import unicodedata
from pathlib import Path
# Typographic normalisation. Quotation is compared on content, not on which flavour of
# apostrophe an editor inserted — but NOT on punctuation the source does not contain.
_SUBS = [
("‘", "'"), ("’", "'"),
("“", '"'), ("”", '"'),
("—", "-"), ("–", "-"), ("‑", "-"),
(" ", " "),
]
def norm(s: str) -> str:
s = unicodedata.normalize("NFKC", s)
for a, b in _SUBS:
s = s.replace(a, b)
return re.sub(r"\s+", " ", s).strip().lower()
def main() -> None:
if len(sys.argv) != 2:
sys.exit(__doc__)
manifest = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))
bodies = {}
for key, path in manifest["sources"].items():
p = Path(path).expanduser()
if not p.is_file():
sys.exit(f"FATAL: source '{key}' not found: {p}")
bodies[key] = norm(p.read_text(encoding="utf-8"))
def contained(key: str, quote: str) -> bool:
if key not in bodies:
sys.exit(f"FATAL: claim references undeclared source '{key}'")
return norm(quote) in bodies[key]
print("QUOTED CLAIMS")
failures = []
for key, quote in manifest["claims"]:
ok = contained(key, quote)
if not ok:
failures.append((key, quote))
print(f" {'PASS' if ok else 'FAIL'} [{key}] {quote[:70]}")
print(f"\n {len(manifest['claims']) - len(failures)}/{len(manifest['claims'])} contained\n")
print("POSITIVE CONTROLS (must all be absent)")
leaked = []
for key, quote in manifest.get("controls", []):
ok = contained(key, quote)
if ok:
leaked.append((key, quote))
print(f" {'LEAKED' if ok else 'absent'} [{key}] {quote[:70]}")
if not manifest.get("controls"):
print("\nINSTRUMENT NOT VERIFIED — no positive controls declared.")
sys.exit(2)
if leaked:
print(f"\nINSTRUMENT NOT VERIFIED — {len(leaked)} control(s) leaked. Passes above are meaningless.")
sys.exit(2)
print("\nINSTRUMENT VERIFIED")
if failures:
print(f"CONTAINMENT FAILED — {len(failures)} quoted claim(s) not found verbatim in the named source.")
sys.exit(1)
print("CONTAINMENT PASSED")
if __name__ == "__main__":
main()