You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Boundary register: never assume an identifier
Boundary register (boundary_register.yaml, format boundary-register/1, shared with the factory and Constrain) plus per-contract boundary_identifiers. Every cross-boundary identifier (service name, audience, credential, principal, grant/role, table/column, metric type, log field, env/config key, header, claim) must cite file or observation records bound by SHA-256. Verification is mechanical: exact equal values with near-miss hints, absent isolation proofs, whole-token matching, stale-digest detection, placeholder refusal, project-root path confinement.
pact boundary verify [project] verifies the register and exits non-zero on any error, naming entry, side and reason.
pact boundary cite --kind file|observation --path <rel> --value <literal> [--line N] [--command "<cmd>"] produces a verified record as JSON and refuses when the literal is not where the record would claim. Records are produced, never typed.
Contract gate: validate_all_contracts (used by pact validate, the decomposer and MCP) fails when a contract uses an unregistered boundary (external: names, network_call, database_*/http_*/external_* data-access side effects) or any register entry fails verification. Projects with no cross-boundary usage are unaffected.
pact validate now exits non-zero when the gate fails.
Interview, shaper and contract-author prompts require citing a record or raising an open question; implementer handoffs render the registered literals.