Story Statement
As a maintainer relying on the formatting gate
I want CI to run pnpm format:check on every PR
So that the check-only pre-push gate cannot be bypassed by --no-verify (or by a fork PR that never runs the hook)
Epic Context
Parent Epic: repo tooling / quality gates (no epic — standalone tech debt)
Status: Todo
Priority: P1 (Should-Have)
Problem
#394 (PR #412) turned the pre-push gate into check mode: quality-gate runs pnpm format:check and never writes. That is the right shape for a hook, but the enforcement point is now the local hook only — .github/workflows/ci.yml runs lint + build + coverage + secret-scan, and no format:check. A push with --no-verify, or a contributor whose hooks are not installed, lands unformatted code with every check green.
Recorded as a consequence in ADL .pair/adoption/decision-log/2026-07-31-pre-push-gate-is-check-only.md ("Enforcement point is the local hook only") and raised in review of PR #412; CI workflow changes were explicitly out of scope for #394.
Likely In Scope
Likely Out of Scope
- Changing what
format:check covers (see the companion coverage story)
- Re-introducing any write-mode formatter anywhere (banned by the ADL +
pnpm gate:composition guard)
Acceptance Criteria (draft)
- A PR whose diff contains an unformatted file fails CI with a message naming
pnpm format
- A
--no-verify push cannot merge unformatted code
- Local gate and CI assert the same file set (no local-only or CI-only formatting rule)
Notes
Filed from the independent review of PR #412 (deferral, not a defect of that PR). The author offered to file it: "a CI format:check job is a candidate follow-up story".
Story Statement
As a maintainer relying on the formatting gate
I want CI to run
pnpm format:checkon every PRSo that the check-only pre-push gate cannot be bypassed by
--no-verify(or by a fork PR that never runs the hook)Epic Context
Parent Epic: repo tooling / quality gates (no epic — standalone tech debt)
Status: Todo
Priority: P1 (Should-Have)
Problem
#394 (PR #412) turned the pre-push gate into check mode:
quality-gaterunspnpm format:checkand never writes. That is the right shape for a hook, but the enforcement point is now the local hook only —.github/workflows/ci.ymlrunslint+ build + coverage + secret-scan, and noformat:check. A push with--no-verify, or a contributor whose hooks are not installed, lands unformatted code with every check green.Recorded as a consequence in ADL
.pair/adoption/decision-log/2026-07-31-pre-push-gate-is-check-only.md("Enforcement point is the local hook only") and raised in review of PR #412; CI workflow changes were explicitly out of scope for #394.Likely In Scope
format:checkstep (or job) in.github/workflows/ci.yml, on the same trigger set aslintpnpm formatLikely Out of Scope
format:checkcovers (see the companion coverage story)pnpm gate:compositionguard)Acceptance Criteria (draft)
pnpm format--no-verifypush cannot merge unformatted codeNotes
Filed from the independent review of PR #412 (deferral, not a defect of that PR). The author offered to file it: "a CI
format:checkjob is a candidate follow-up story".