AI can ship code. But should it?

When an AI agent fixes a bug and a CI badge turns green, one question remains: is this still the exact release a human approved? A changed commit, a swapped package, or an expired approval should not quietly inherit permission to deploy.

EvidenceGate is our answer: an independent, MIT-licensed, GitLab-native release assurance experiment built for Life After Code / Path A (Start Fresh), Assisted.

What EvidenceGate does

It combines three controls that solve different problems:

1. A deterministic, explainable policy engine. It binds commit SHA, pipeline reference, package SHA-256, deployment target, tests, unresolved security findings, license check and monitoring readiness to a canonical plan fingerprint. Change the plan, lose approval. Fail a check, stop. Expire approval, stop. The result can be BLOCKED or READY FOR MANUAL RELEASE—never an automatic deployment.

2. A real GitLab Duo Agent Platform review flow. The custom Flow Registry v1 configuration separates a read-only merge-request reviewer, an explicit HumanInputComponent and a limited, approval-gated MR note writer. In actual Duo session #9716241, the agent made eight observable read operations on our public project, MR, diff and tracked files. It stopped and requested a human decision. Only after approval did a separate agent create one advisory comment on Draft MR !1. No merge or production deployment occurred. The private flow was disabled after verification.

3. A hands-on failure lab. The live public web experience lets judges try four clearly labeled SYNTHETIC scenarios: valid state, state drift, security findings and expired consent. It shows human-readable reasons and exports a synthetic decision receipt. It does not authenticate users, deploy code or imply cryptographic signatures.

How we built it

We started a clean GitLab repository with no pre-existing proprietary code. A dependency-free HTML/CSS/JavaScript application uses Web Crypto SHA-256 for plan binding. Node's built-in test runner exercises policy and failure modes. GitLab CI jobs cover nine DevSecOps stage concepts: Plan, Create, Verify, Package, Secure, Release, Configure, Monitor and Govern; a separate Pages job publishes the experience.

The latest protected-main pipeline #2967087474 for merge commit bc9182e1 passed. Its public GitLab Tests report shows 34 tests, 0 failures, 0 errors (100% passed). This verifies CI tests, not a real release or an AI deployment. Audit MR !3 records the JUnit report and the explicitly synthetic five-case policy-decision artifact; simulated approvals are neither identity-verified nor digitally signed. Earlier quality MR !2 fixed fail-closed edge cases. See the five-minute judge quickstart and flow provenance note for independently inspectable evidence and limitations. The live Pages site's source SHA-256 manifest is a local hash, not a third-party signed attestation.

The engineering challenge

The hardest design decision was not giving an LLM release authority. GitLab Duo reviews evidence and advises. A deterministic gate assesses exact state. A human decides. The restricted writer can leave an inspectable comment, not merge a branch or deploy a system.

We also refused to turn synthetic examples into invented production results. The browser lab is a simulation; the referenced GitLab pipeline, Duo session and approved MR note are genuine and separately inspectable.

Why it matters

Every team shipping with AI agents must balance speed with accountable control. EvidenceGate demonstrates a useful negative outcome: an approval must stop being valid when its evidence changes. The approach is applicable to DevSecOps, public-interest software and regulated workflows, while real production use would require independent server-side authenticated and replay-resistant approvals.

Try it: Live lab · MIT-licensed source · Actual Duo session

Move fast. Prove first.

Built With

Share this project:

Updates

Submission history