| name | code-quality-gate |
| description | Build, test, format, and lint requirements that must pass before code review. Load when checking implementation completeness or running the quality gate. |
| compatibility | ["claude-code","github-copilot","opencode","junie-cli"] |
| reads | ["docs/testing-principles.md","docs/architecture-principles.md"] |
| metadata | {"version":"1.0","author":"team"} |
Quality Gate
Before invoking reviewers, all checks must pass. Run make ci to execute the full pipeline.
Required Checks
| Check | Command | What It Verifies |
|---|
| Tidy | go mod tidy | Dependencies are clean |
| Format | go fmt ./... | Code is formatted |
| Vet | go vet ./... | Common mistakes caught |
| Lint | make lint | golangci-lint rules pass |
| Deps | make deps-check | No prohibited dependencies |
| Test | go test ./... | All tests pass |
| Build | go build -o bin/reference | Binary compiles |
| Handoff log | python3 scripts/handoff.py validate | Every record in .scratch/handoff.jsonl parses and passes its schema — a raw write that corrupted the log fails here, on every tool. A failure appends a build-failure with failed_check: "handoff-log". Absent log (no pipeline work yet): the check passes vacuously. |
| Autofix audit | python3 scripts/handoff.py audit-autofix (procedure below) | Every design-doc-autofix and prd-autofix record stays within bounds; every uncommitted change to a design-doc path is covered by a design-doc-autofix or design-block record since last commit. |
Autofix Audit Procedure
Run this before declaring the gate passed, before appending build-pass:
python3 scripts/handoff.py audit-autofix
The command executes the audit mechanically; the protocol's prose home is handoff-routing § Root-Applied Autofix on Doc Paths. The audit is log-global — a record under any slice is audited. Step 1 re-validates every autofix record not superseded by its own slice's latest owning-expert record — a design-doc-autofix by a later design-block, a prd-autofix by a later prd-entry. The checks: eligible path per record type, eligible category, the 5-line/200-char caps, no heading/anchor/REQ-ID/code-fence/link-target change, new_content byte-identical to source_finding.fix. Step 2 confirms every uncommitted design-doc change is covered by a design-doc-autofix or design-block record newer than the last commit. The scan is design-doc-scoped by decision — docs/prd.md stays outside it (the prd-autofix ADR records why).
Exit 0 declares the autofix-audit check green; record the outcome alongside the other quality-gate results. On a non-zero exit do NOT declare gate-pass. Append a build-failure record with failed_check: "autofix-audit", its error_output carrying the command's stderr. Set abort_reason by the failing record type: "design-mismatch" for a design-doc-autofix failure or an uncovered design-doc edit; "prd-mismatch" for a prd-autofix failure. When both classes fail, abort "design-mismatch" first — the re-run surfaces the PRD failures. Build-Failure Recovery's abort short-circuit routes the record to the owning expert, who reverts or correctly re-applies the change under its own doc ownership. It then appends its superseding record — a design-block with supersedes_record_at, or a prd-entry — the substantive record that closes its dispatch and restarts the gate. Records at or before that superseding record are superseded on the re-run; the supersession is what terminates the audit loop. Never author a review-feedback record — its schema admits reviewer authors only.
Optional Checks
| Check | Command | When Required |
|---|
| Race detector | go test -race ./... | When concurrency is involved (requires gcc) |
| Container build | make podman-build | When project uses containers |
IDE Static Analysis (optional)
When an IDE semantic oracle is available, run its static-analysis pre-check on the diff before declaring the gate passed: inspection errors fail the gate (treat like a compile error); warnings seed self-review findings. Accelerator only — go vet ./... && make lint && go test ./... && go build -o bin/reference stays authoritative, and a client without an oracle relies on the checks above. Procedure, error/warning classification, and the stale-index caveat live in the goland skill. Report this pre-check honestly: claim it only if you actually invoked the mcp__goland__* tools this run (see goland § Report only checks you actually ran). An un-run pre-check is reported as "not run / IDE not consulted", never as clean.
Completion Criteria
A feature is complete when:
Stop at done
Once every box above is checked, stop. Polish past the bar — extra refactors, additional tests for the same behavior, prose tightening on a passing PR — spends tokens without raising quality and is explicitly out of scope. The nine-clause bar is defined across .claude/skills/tdd-workflow/tdd-principles.md, docs/testing-principles.md, docs/architecture-principles.md, and docs/security-principles.md, with the canonical slug list in the review-workflow skill's reference.md § Quality-Bar Clause Mapping; if the diff meets the nine clauses, the work is done.