Skip to content

ci: make the verify job actually run verify - #133

Merged
github-actions[bot] merged 1 commit into
mainfrom
chore/verify-floor-typecheck
Aug 16, 2026
Merged

ci: make the verify job actually run verify#133
github-actions[bot] merged 1 commit into
mainfrom
chore/verify-floor-typecheck

Conversation

@catomean

Copy link
Copy Markdown
Collaborator

The bug

This repo's CI job is named verify and did not call npm run verify. It re-inlined the chain by hand, and the hand-written copy had drifted:

format lint typecheck test build
package.json verify
.github/workflows/ci.yml --if-present --if-present --if-present

Neither ran a typecheck. tsc --noEmit existed nowhere in this repo, so type errors were caught only as a side effect of next build — late, slow, and one typescript.ignoreBuildErrors away from not being caught at all.

Two fixes, one principle

1. A real typecheck gate. Added "typecheck": "tsc --noEmit" and put it in verify before test and build, so it fails in seconds rather than after a full Next build. Verified it is already clean (exit 0) — this closes a hole, it does not paper over a backlog.

2. CI calls verify verbatim, and --if-present is gone. Those flags made three of the four gates unable to fail: rename or delete the lint script and the step passes green instead of erroring.

A gate that cannot go red is not a gate. That is the same defect that let evig report "Run Tests ✓" on every PR for three weeks while 25 assertions were failing (evig#306), and the reason dotfiles#14 now sweeps the fleet for discarded gates. This repo had the quieter variant: not a swallowed result, but a hand-copied gate list that silently lost an entry.

Verification

Full npm run verify locally: format → lint → typecheck → test → build, exit 0. "Green verify locally ⇒ green CI" is now true here by construction, because they are the same command.

🤖 Generated with Claude Code

The CI job here is named "verify" and did not call `npm run verify`. It
re-inlined the chain by hand, and the hand-written copy had drifted:

  package.json verify:  format:check → lint → test → build
  ci.yml:               format:check → lint → test → build   (--if-present ×3)

Neither ran a typecheck. `tsc --noEmit` existed nowhere in this repo, so type
errors were caught only as a side effect of `next build` — late, slow, and one
`typescript.ignoreBuildErrors` away from not being caught at all.

Two fixes, both the same principle:

1. Add a real `typecheck` script and put it in `verify`, before test/build so
   it fails in seconds rather than after a full Next build. Verified: `tsc
   --noEmit` is already clean (exit 0), so this gate goes green on arrival —
   it is closing a hole, not papering over a backlog.

2. CI now calls `npm run verify` verbatim, and the `--if-present` flags are
   gone. Those flags made three gates unable to fail: rename or delete the
   `lint` script and the step passes green instead of erroring. A gate that
   cannot go red is not a gate. That is exactly the defect that let evig
   report "Run Tests ✓" on every PR for three weeks while 25 assertions were
   failing (fixed in evig#306), and the same reason dotfiles#14 now sweeps the
   fleet for discarded gates.

Full `npm run verify` passes locally: format, lint, typecheck, test, build,
exit 0. Green verify locally now genuinely means green CI, because they are
the same command.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions
github-actions Bot merged commit 1ac55b8 into main Aug 16, 2026
2 checks passed
@github-actions
github-actions Bot deleted the chore/verify-floor-typecheck branch August 16, 2026 10:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant