Files
EOS/docs/adr/0001-self-declared-sha-bound-review-gate.md
T

33 lines
2.0 KiB
Markdown
Raw Normal View History

# CI enforces a self-declared, SHA-bound self-review for agent-assisted pull requests
Pull requests that a coding agent wrote or co-wrote must carry a `## Self-review` section in the
pull request body that names the full head commit SHA it reviewed. CI does not verify the review
itself: the project has no AI in CI, and a signing key in the sandbox would be reachable by a misled
agent. Instead CI detects agent assistance (an `Assisted-by:` or Anthropic `Co-Authored-By:` commit
trailer, an `Assisted-by:` line or a known agent footer in the pull request body, or the
"AI-assisted" box in the pull request template). It fails only when the declaration or its
`Reviewed:` SHA is missing or malformed, or names a SHA other than the current head; everything
else (an unticked box next to a trailer or marker, malformed optional lines) is only noted. Like a
DCO sign-off, this makes forgetting impossible and a false claim deliberate; the author review and
the maintainers' review remain the actual controls.
## Considered Options
- **AI review in CI**: rejected, the project runs no AI in CI.
- **Signed review attestation from the sandbox**: rejected, the agent can reach the key and sign
anything.
- **Honour system (template checkbox only)**: rejected, a declaration that is not bound to a commit
silently covers code pushed after the review.
## Consequences
- Every push to an agent-assisted pull request needs a fresh self-review before the push and an
updated pull request body right after it; rebases and squashes before merge do too.
- Open findings do not fail the check, so agents have no incentive to hide them.
- The check only blocks merging once maintainers make it a required status check.
- The workflow runs on `pull_request_target` with the base branch's script and never runs pull
request code, so a pull request cannot weaken its own check; changes to the check take effect
only after they are merged.
- The workflow needs `pull-requests: write` to comment how to fix a failing check. That is safe
only as long as it runs no pull request code.