Platform truth table — what actually enforces, where
Every derived cell is produced from package metadata or exported code. PREVENTS means the action physically cannot proceed on that path. REPORTS means the result is visible while merge or deploy can still proceed. INSTRUCTS means durable guidance the agent reads; it is not enforcement. The fourth column names the switch in either direction — the one that turns reporting into prevention, or prevention into reporting.
Shipped packages (derived): sdk 3.14.2, prove 0.1.12, conformance 0.8.11, release-acceptance 1.0.4, guard 17.3.3, cli 8.6.3, gate v0.9.5, python-sdk 3.8.1, receipt-verifier v1.0.2. Server-derived change-set platforms (derived from src/scm/platforms.js): github, gitlab, bitbucket.
Conformance (derived): END_TO_END COVERED (7/7).
See What each path does — and does not.
Atomic-stack packages (checkout vs published)
| Package | npm/PyPI/git name | Checkout | Published | Drift |
|---|---|---|---|---|
| cli | coderifts | 8.6.3 | 8.6.3 | no |
| guard | @coderifts/agent-guard | 17.3.3 | 17.3.3 | no |
| sdk | @coderifts/sdk | 3.14.2 | 3.14.2 | no |
| python | coderifts-sdk | 3.8.1 | 3.8.1 | no |
| gate | coderifts/contract-gate | 0.9.5 | 0.9.5 | no |
| conformance | @coderifts/conformance | 0.8.11 | 0.8.11 | no |
| prove | @coderifts/prove | 0.1.12 | 0.1.12 | no |
Conformance assurance profiles
| Profile | Status | runnable / present |
|---|---|---|
DECISION_LOGIC | COVERED | 15 / 15 |
RECEIPT_CRYPTO | COVERED | 16 / 16 |
GUARDED_TOOL_TABLE | COVERED | 6 / 6 |
CREDENTIAL_BOUNDARY | COVERED | 4 / 4 |
ATOMIC_COMMIT | COVERED | 6 / 6 |
PROVIDER_ENFORCED | COVERED | 7 / 7 |
END_TO_END | COVERED | 2 / 2 |
| Surface | What it gates | Default | With opt-in / opt-out | How to enable |
|---|---|---|---|---|
| Claude Code — PreToolUse hook | Contract-touching Write/Edit/MultiEdit at tool-call time | PREVENTS (exit 2; fail-closed / enforce_indeterminate when governance cannot run) | CODERIFTS_ADVISORY=1 restores soft-allow on “could not run” sites | coderifts agent-setup writes .claude/settings.json |
| Claude Code — MCP plugin | preflight/verify/details as tools | REPORTS (decision surface) | — | plugin install (3 canonical tools) |
| OpenAI / Codex — dispatcher | Every registered mutating tool call | — | PREVENTS (proof-bound return; BLOCK → raw function does not run) | withCodeRiftsOpenAI + executeOpenAIToolCall loop |
| Anthropic / Gemini / LangGraph — dispatcher | Same, framework-native faces | — | PREVENTS | execute*ToolCall wrappers |
GitHub App — CodeRifts / contract-gate | PR contract check posted by the GitHub App | REPORTS (phase-1 conclusion clamped to neutral; MERGEGATE_ENFORCE default false) | PREVENTS when MERGEGATE_ENFORCE=true → conclusion may be failure | App install + MERGEGATE_ENFORCE |
GitHub Action — CodeRifts / contract-gate | coderifts/contract-gate GitHub Action check (same name) | REPORTS (posts a real check conclusion; merge is not blocked until the check is required) | PREVENTS when configured as a required check (issuer-bound, not name-only) | coderifts init --agents then require the check |
| Deploy gate | Deploying an artifact whose receipt is stale/mismatched/unverified | PREVENTS (fail-closed since CLI 4.3.0; verifies the signed receipt since 4.4.0; exit 1 on deny) | CODERIFTS_DEPLOY_ADVISORY=1 (or CODERIFTS_ADVISORY=1) → advisory, exit 0 | coderifts deploy-gate in the deploy job |
| Publish gate | npm prepublishOnly / coderifts publish-gate | PREVENTS (exit 1 on BLOCK/STOP or resolver error) | — | coderifts publish-gate in npm prepublishOnly |
| git pre-push hook | Pushing spec changes without authorization | PREVENTS (BLOCK/STOP → exit 1 when the hook is installed) | — | coderifts hook install |
| Rule files (6 platforms) | Agent knows when/how to consult CodeRifts | INSTRUCTS | — | coderifts agent-setup |
| MCP server (hosted) | analyze = information only; authorize = receipt issuance | REPORTS + issues receipts | (feeds every PREVENTS path above) | app.coderifts.com/mcp |
Boundary
Prevention holds inside the wired boundary — a host that bypasses the guarded table, uninstalls the hook, or merges on a repository without the required check is outside it, and the proofs say so rather than pretending otherwise.
This paragraph used to end with a live proof, and that proof no longer holds. It read: “the demo repository’s blocked PR is physically unmergeable.” Re-read from the GitHub API on 2026-09-15: coderifts/demo main answers 404 Branch not protected, enforcement_level is off, and contexts is empty; pull request #4 reports mergeable: MERGEABLE / mergeStateStatus: BEHIND. The check still runs and still fails — but nothing is prevented, because that branch requires no check. The sentence is withdrawn rather than quietly deleted: protection was removed from that repository at some point before this reading, and nothing here noticed until it was read again. The same re-reading is recorded on proof boundaries.
Derived vs prose
This page is generated from the frozen release-set (packages/release-acceptance/fixtures/CURRENT) plus the app repository (src/generated/release-manifest.json, rendered by scripts/generate-truth-table-html.js) and gated byte-for-byte in freeze-gate check 1. Package versions come from the frozen digest; enforcement rows, the platform list, the deploy-gate default, the merge check name and the MERGEGATE_ENFORCE default are derived from code. The two lines below are prose — product readings rather than constants, each carrying its own review date, and they are carried through rather than generated.
- Prose (review 2026-08-25): the Boundary statement above. (product honesty line, not a code constant)
- Prose (review 2026-08-25): MCP analyze is informational (not permission); authorize may mint a receipt. The three canonical tools do not themselves prevent a call. (protocol meaning; the schemas encode it but the “does not prevent by itself” sentence is a product reading)
Frozen digest sha256:44223a07bd695a54f9b5209118f62f947f568ea82a0aeb5500705953fea328a4. Derived enforcement rows from release manifest commit 86c4460361e8c389cb74c760bd5630616cd5e307 (last --out of the manifest, not current HEAD).
Conformance END_TO_END (7/7)
The generated table above is the enforcement map. The public assurance claim sits beside it: @coderifts/conformance@0.8.11 reports every profile COVERED, including END_TO_END (7/7), via TARGET_STATE_TRANSITION_PROVEN — a governed ref moved to the authorized commit under a signed grant, observed afterwards by a separate read-only process.
Boundary, exactly as the profile records it: proof_scope TRUSTED_EXECUTOR, provider_witness NOT_APPLICABLE, externally_witnessed false. Trusted-executor-integrity, not a provider merge (PATH B), not externally witnessed. CodeRifts did not witness or sign the provider state. The GitHub positive provider-loop is a separate claim: provider canary. Honesty table: What each proof proves. Derived profile rows: atomic-stack.json. Replay: VERIFY.md. Gate today vs roadmap (not available): claim table.