CountersignAI reviews code; a named human signs.

Countersign

AI clears what it can prove. A named human signs the rest.

Demo countersign.toivo.devCode github.com/Zawaer/countersign

Junction 2026 · Tieto: Earned Trust in AI Code

An AI agent wrote this fix.

#2234 The analyzer does not work if SuppressSourceGeneration = true

  • Builds
  • 175/175 tests pass
  • AI reviewer: requirements met

It fixes the wrong bug.

Countersigncountersign.toivo.dev2 / 13

A signed mandate decides what AI may clear.

factsthree reviewerscitations re-checkeddecideowner signs
SILENT NOTIFY

the AI may clear

ASK BLOCK

a named human signs

Countersigncountersign.toivo.dev3 / 13

The reported bug is on a line the fix never touches.

TypeCollector.cs
1380}
1381
1382// Do not source generate the formatter for this type if the attribute opted out.
1383if (suppressSourceGeneration is true)
Untouched by the fix
1384{
1385 // Skip any source generation
1386 return null;
1387}
⋯ the fix edits lines 1008–1182 instead
  • 4 of 8 new tests pass without the fix
  • Still crashes on Key(null): reproduced

ASKToivo

Countersigncountersign.toivo.dev4 / 13

Every change says why. Low risk can clear.

2129BLOCK2234ASK2283ASK2297BLOCKdemo-docs1NOTIFYup-1934ASKup-1967NOTIFYup-2022ASK

A docs fix: cleared by the AI alone, merged in 40 sdemo PR #11

Countersigncountersign.toivo.dev5 / 13

Toivo signs on GitHub. The merge is blocked.

Implementation for #2234 The analyzer does not work if SuppressSourceGeneration = true #2

countersign/tier Failing — changes requested by Toivo (ledger #3) · by Countersign Gate (Zawaer) bot
Required
Merging is blocked
Required status check countersign/tier has not succeeded. The merge button stays grey.

Countersigncountersign.toivo.dev6 / 13

You read it, then you sign.

  1. Which requirement was refused?the no-crash clause
  2. Why can't the tests prove the fix?4 of 8 pass without it
  3. Sign unlocksread check 2 of 2, in the ledger

Countersigncountersign.toivo.dev7 / 13

Every sign-off is signed and chained.

  1. Ledger OK18 entries, every signature verifies
  2. Edit one lineinvalid: hash mismatch
  3. Recompute the hashinvalid: signature fails

Countersigncountersign.toivo.dev8 / 13

Measured, not claimed.

11/11later-reverted real PRs sent to a human
14/18planted bugs caught by tests and checks
35/35attacks on its own pipeline stopped

Countersigncountersign.toivo.dev9 / 13

Who it's for.

  1. Whoteams whose coding agents out-write their reviewers, where a named person answers for every merge
  2. What they getevery merge signed: proven, refused, risk left
  3. What it costs297k to 484k reviewer tokens per change; about 21 s from push to pack
  4. How it startsone repo at ask; the AI earns clearance

Countersigncountersign.toivo.dev10 / 13

Built with.

  1. Nemotronreviewer in CI; flagged both hidden security downgrades, tests caught one
  2. Geminithe adjudicator: another vendor, can never clear
  3. Codexreviewer; its security review found holes in our pipeline
  4. CRACIdeny-by-default CI; its trace exposed ~2,900 denied revocation lookups
  5. Verdaself-hosted reviewer: about $0.04 and 60 s per review
  6. Gemmaself-hosted adjudicator for confidential code

Countersigncountersign.toivo.dev11 / 13

It says where it stops.

can't judge intentonly as good as the requirementnet8.0 / Linux onlytrust over time is simulated

Countersigncountersign.toivo.dev12 / 13

Try it on one repo.

One area, one owner, one signed mandate.

Demo countersign.toivo.devCode github.com/Zawaer/countersign

Run scripts/demo.shVerify uv run countersign verify-ledger

Team Toivo · Rene

Countersigncountersign.toivo.dev13 / 13