Agentswritethediff.Tenetdecideswhetheritbelongs.
Nobody reviews at agent speed. Architectural and business intent has to be machine-enforceable rather than living in prose an agent may or may not follow. Tenet makes intent a structured, versioned, human-approved object — then uses that same object to block the merge.
—
current verdict
0
tenets enforced
0
modules
0
runtime dependencies
Not a screenshot and not a cache. This graph is rebuilt from the repository’s TypeScript source every time the page is requested — the same analyser the pull request check runs.
two valid changes, one illegal result
measuring…
0%
combined discount the merge would have allowed
0%
the cap a human approved
0
textual conflicts git reported
0
tests behind the analyser
GitHub says merge. Tenet says no.
The Action runs on every pull request and analyses the merged result, not the branch — the only way to catch two changes that are each correct alone. It posts the arithmetic with both source locations and fails a required check.
Watch the merge box: GitHub reports no conflicts with base branch in green at the same moment the required check goes red. Nothing else in the pipeline can see the problem.
No bot account, no webhook, no app to install — a workflow file in the governed repository and a second checkout of Tenet.
Arul6851wants to merge 1 commit intomainfromfeat/premium-loyalty-discount
Arul6851 commented
Adds a 15% discount for premium members. Individually within the 30% customer-discount cap. Compiles clean, no textual conflict with main.
Some checks haven't completed yet
1 expected check
No conflicts with base branch
Merging can be performed automatically.
The Action checks the merged result, not the branch.
An agent that corrects itself.
Because the verdict is recomputed from source on every call and the evidence is structured rather than prose, the agent can close the loop on its own.
Agent writes
imports raw-database-client directly
tenet_verify
BLOCK · checkout-service.ts:1:35
Agent corrects
routes through DatabaseGateway
tenet_verify
PASS · 0 violations
The agent takes the shortest path to working code. It compiles, and every test passes.
One object. Three places it does its job.
Supplied before the work
Active tenets reach the agent over MCP through tenet_list, and tenet sync writes them into the repository's CLAUDE.md and AGENTS.md. The constraint is in context before the first line is written.
MCP · stdioEnforced inside the loop
tenet_verify recomputes the verdict from source on every call and hands back structured evidence — file, line, column, value. An agent can act on that without a person in the room.
tenet_verifyEnforced at the merge
The primary gate. The same object runs in CI against the merged result rather than the branch, posts the arithmetic as a pull request comment, and fails a required check so branch protection holds the merge.
GitHub ActionThe same verdict, locally.
The pull request is where Tenet stops a merge, but nothing about it is special — it runs the identical analyser. The same check runs on a laptop or in a pre-commit hook and exits non-zero on a block.
A model can propose. It can never decide.
Gemini turns a sentence into a structured draft and writes the explanation attached to a violation. It cannot activate a constraint, and it cannot move a verdict — the code that computes PASS or BLOCK imports no model client at all. The separation is structural, not a policy someone has to remember.
Watch a proposal get approved