CAIN-42 CAIN Studio
25CAIN-42 Top 25 › Signed decision receipts › 2026-11-02 upgrade

2026-11-02 upgrade

#GapBeforeAfter
RC-11-02-1A Black Box seal (signed by the same key) verified as a 'valid' CODEGUARD decision receipt, on the server route and in our published verify_receipt.pyvalid: truerefused: schema, required fields and decision value are checked; seals likewise refuse receipts
RC-11-02-2Receipts did not name their signing keyno key idkid = SHA256 fingerprint of the key, checked by verify_receipt.py
RC-11-02-3A CODEGUARD approval token could be used again and again for 10 minutes (one person's yes to 'git reset --hard' allowed repeats)ALLOW, ALLOWsingle use: the second try needs a person again (approval_token_reused); a token is spent only when it is what allows the action
RC-11-02-4Approval tokens had no type; a receipt's signature was refused as a token only because it lacked 'exp'accidentaltyped tokens (cain42.codeguard.approval.v2) with a unique id

approval tokens issued before 1.2.0 (no typ) are refused; they expired within 10 minutes anyway. Receipts issued before 1.2.0 carry no kid and still verify.

CODEGUARD tests 273 → 279, recorder 64, SurfGuard all pass. Engine codeguard-1.2.0.

FIRME AI CORPORATION · CAIN-42 is a Byzantine trust fabric. Numbers marked "our own check" were run by us, not by an independent party. Nothing on these pages is a certification.