Skip to content

Pact v1.3.0

Latest

Choose a tag to compare

@jmc-wander jmc-wander released this 14 Oct 20:25
dc84fb5

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.