Skip to content

[tech-debt] CI does not run format:check — the check-only pre-push gate is the only enforcement point (--no-verify skips it) #413

Description

@rucka

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".

Metadata

Metadata

Assignees

No one assigned

    Labels

    tech-debtTracked technical debt (living backlog, R7.2 — never blocks a PR)user storyWork item representing a user story

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions