core/docs/specs
Claude 39331dbce1
docs(specs): the M2 trust-boundary table — measured, and three boundaries CLOSED (PR-7, H-7)
formation/ declares its trust boundary explicitly (forge.py's five ordered
rules + hashing.py's content-addressing, no-floats, no-pickle, self-sealing).
ingest/gate.py — the PRODUCTION boundary, the only point where raw data enters
the versor manifold, facing untrusted user text every turn — had no comparable
table. H-7: asymmetric rigor invites the assumption that the un-tabled boundary
is the less important one, when it is the opposite.

Written per H-7's authority: documentation first, evidence decides whether code
follows. Every row measured against the code at edf6c2a4, not assumed — and the
measurement reframes the entry.

  ALREADY MET (2)   no floats in hashed payloads — _stable_digest hashes
                    salt + name, both UTF-8 strings, no float reaches a digest
                    no pickle — absent from all of ingest/

  CATEGORY          content-addressed artifacts, self-sealing, source
  DIFFERENCE (3)    allow-list. All three presuppose a PERSISTED ARTIFACT WITH
                    CITATIONS. formation validates artifacts it will store; the
                    gate transforms text it will not. Recording these as owed
                    obligations would have manufactured three hardening tasks
                    that cannot be done, and sent a future reader to do them.
                    Closing them is the load-bearing half of this table.

  REAL DELTA (1)    no audit record per rejection. The gate refuses with typed
                    exceptions (KeyError :235/:286, RuntimeError :318/:424) and
                    records nothing about what it refused;
                    vocab.record_unknown_token :331 records OOV observation,
                    which is not a rejection record.

On the delta, stated so it is not over-read: it is NOT a containment hole —
refusal is fail-closed and nothing unvalidated crosses into the manifold. It
costs forensics. It is the same failure class as H-11, which PR-9 closed on the
turn spine hours ago: a guard that works correctly and leaves no trace of having
worked. And it has a named downstream consumer — a widening program (G-3) must
be able to ask "what shapes is this boundary refusing, and how often", which
today it cannot.

Hardening for B6 is a separate PR per this entry's own authority, sized against
whether anything consumes gate-rejection telemetry today.

AGENTS.md §Security-and-trust-boundaries defaults also checked row by row for
completeness: four are n/a to a component that executes nothing, touches no
filesystem, and mutates nothing; the display/log default is met.

Docs only. Registers: H-7 CLOSED, PR-7 marked LANDED.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wcw2pnMBwyvmNyQg4uPEt4
2026-07-28 04:30:00 +00:00
..
foundational-families docs(kernel): authorize unary state-change delta slice (#854) 2026-06-20 22:19:35 -07:00
runtime_contracts.md docs(specs): the M2 trust-boundary table — measured, and three boundaries CLOSED (PR-7, H-7) 2026-07-28 04:30:00 +00:00