Problem
README.md's Building section introduces its command block with "These are the same checks the
CI gate runs, and all must pass before a change lands", and three lines in it are not that:
gofmt -l . — the gate runs gofmt -l $(git ls-files '*.go'). The two differ on any untracked
or ignored Go file in the tree.
go test ./... — not a gate step. scripts/check-coverage.sh runs the suite itself, so the
README lists it twice under different names.
./scripts/check-coverage.sh # enforces 100% statement coverage, overall and per package —
the script counts statements across the whole profile, not per package. A package could be at
zero and the gate would still pass if the total were covered.
CLAUDE.md carries the same list under the same promise and does not have these three problems,
so the two files disagree about what the gate is.
Acceptance
- The README block matches
.github/workflows/gate.yml step for step, in order.
- The per-package claim either becomes true of the script or comes out of the comment.
Problem
README.md's Building section introduces its command block with "These are the same checks theCI
gateruns, and all must pass before a change lands", and three lines in it are not that:gofmt -l .— the gate runsgofmt -l $(git ls-files '*.go'). The two differ on any untrackedor ignored Go file in the tree.
go test ./...— not a gate step.scripts/check-coverage.shruns the suite itself, so theREADME lists it twice under different names.
./scripts/check-coverage.sh # enforces 100% statement coverage, overall and per package—the script counts statements across the whole profile, not per package. A package could be at
zero and the gate would still pass if the total were covered.
CLAUDE.mdcarries the same list under the same promise and does not have these three problems,so the two files disagree about what the gate is.
Acceptance
.github/workflows/gate.ymlstep for step, in order.