blueprint-repo-ci · git:20260926.4d70b98 · 2026-09-26 · sha256 ffef6069baf6c068
blueprint-repo-ci git:20260926.4d70b98A
Immutable. This exact content never changes and is served at /api/v1/blob/ffef6069baf6c068.
---
name: blueprint-repo-ci
description: "Find out whether GitHub Actions already runs the recorded gates on every pull request, and record what is missing. Change nothing: adding CI is the first change the person approves."
---
# Does CI run what we run?
Every later change is merged on the strength of CI, so CI has to run the gates recorded in
`.blueprint/gates.json`, on pull requests, from a clean install. This step only **looks**: anything it
finds missing becomes the first target of the plan, and is changed only after the person approves it.
1. Read every workflow under `.github/workflows/`.
2. For each recorded gate, find the workflow step that runs it on `pull_request`.
3. Note every workflow without a top-level `permissions:` block, and every `actions/checkout` without
`persist-credentials: false`.
4. Look at CI on the default branch's current commit: `gh run list --commit $(git rev-parse HEAD)`.
5. Write `.blueprint/ci.json`:
```json
{
"gaps": ["the typecheck gate is not run on pull requests", "ci.yml has no permissions: block"],
"defaultBranchGreen": true
}
```
An empty `gaps` means CI already covers everything.
Change nothing in the repository in this step. If the default branch is red in CI for a reason you cannot
see locally, ask.
Done when the check passes: `.blueprint/ci.json` records the gaps (possibly none) and the state of CI on
the default branch.
## Always
- When you need a decision, ask it through the blueprint question tool and stop. Do not guess.
- Say you are done by stopping; the executor runs the check. Do not claim success yourself.