ci(build): run pnpm vp build - verify never did (#61) - #64
Merged
Conversation
`verify` is check + type-check + tests; none of them build. So a change that passed all three and broke the production build reached `main` unnoticed until somebody deployed - possibly days later, and landing on whoever was deploying rather than whoever broke it. A separate job rather than a phase inside `verify`: `deploy` already runs `pnpm build` straight after `pnpm run verify`, so folding it in would build twice on every deploy and slow the local gate people run by hand. Separate also means it runs in parallel with the tests. **The default shallow checkout is correct, measured rather than assumed.** #61 was filed believing the build stamp needed deeper history and wanted `fetch-depth` chosen carefully. It does not: `scripts/buildStamp.ts` runs exactly `rev-parse HEAD`, `rev-parse --short HEAD` and `status --porcelain`, none of which read history. "The build stamp reads git history" was imprecise - it reads git *state*. Recorded in the job, because the next person will assume the same thing. Noted in the job and not fixed: on a `pull_request` event checkout lands on the merge commit, so this job's stamp is a synthetic SHA existing nowhere in the repo. Harmless while CI never ships its artifact - `deploy:app` builds locally and uploads that. Zero-warning enforcement is deliberately NOT added. `vp build` has no `--fail-on-warn` (vp 0.2.6), grepping build output is the exact fragility that already produced a false negative here once, and an `onLog` hook that throws would hard-fail every local build the first time a dependency emits one benign warning. Warnings stay visible in the log and unenforced; the reasoning is in the job so it is not re-litigated from scratch. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F3a2HLJ4beKARi7SPmaM54
wormeyman
added a commit
that referenced
this pull request
Jul 30, 2026
Three stale claims, all reading as current fact after #64/#65 merged: - verify.yml still listed `pnpm vp build` as deliberately absent, 90 lines above the job that runs it. - Its concurrency comment still said strict_required_status_checks_policy is false; ruleset EJ has had strict: true since before #65 landed. The reason main runs stay uncancelled survives, so it is corrected in place. - CLAUDE.md repeated the "build is absent" claim and the "build stamp reads git history" one that #64 measured wrong - it reads git *state*. Adds what happened after: `build` is a required check now, the two-step order for adding one (requiring a check that does not exist on main blocks the PR that introduces it), that the ruleset PUT replaces the whole rules array, and that strict: true means every other open PR needs Update branch after any merge. Claude-Session: https://claude.ai/code/session_01BkKb3S2cGyRFFHSzuCQBgj Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #61.
pnpm run verifyisvp check && pnpm run check:vue && vp test && pnpm run preview:test. None of those build. A change that passes all four and breaks the production build reachesmainunnoticed until someone deploys - possibly days later, and it lands on whoever is deploying rather than whoever broke it. The whole argument for #54 was that a gate nobody runs until deploy time is not a gate.A separate job, not a phase in
verifydeployalready runspnpm buildimmediately afterpnpm run verify, so folding the build intoverifywould build twice on every deploy and slow the local gate people run by hand. As a separate job it also runs in parallel with the tests rather than after them, so wall-clock is unchanged.This adds a second status check named
build. It is advisory until added to rulesetEJ- see "follow-up" below.The shallow checkout is correct, and I measured it
#61 was filed - by me - believing the build stamp needed deeper history, and asked for
fetch-depthto be chosen carefully. It does not need any.scripts/buildStamp.tsruns exactly three git commands:None read history, so the default
fetch-depth: 1is sufficient. The workflow comment from #56 saying "the build stamp reads git history" was imprecise - it reads git state. That is now recorded in the job itself, because the next person will make the same assumption I did.Noted in the job and deliberately not fixed: on a
pull_requestevent, checkout lands on the merge commit, so the stamp this job produces is a synthetic SHA that exists nowhere in the repo. Harmless while CI never ships its artifact -deploy:appbuilds locally and uploads that. If a CI build ever becomes the thing that deploys, this needs revisiting.Zero-warning enforcement deliberately NOT added
#61floated it; both routes were checked and rejected, and the reasoning is in the job so it is not re-derived later:/warn/i.vp buildhas no--fail-on-warn(verified againstvp 0.2.6 --help). And this repo has already been burned grepping build output: a version-string grep returned zero because the minifier had rewritten the string into a numeric array, so a shipped fix looked missing. A false pass is worse than no check.build.rollupOptions.onLoghook that throws onwarn. Sturdy, but it hard-fails every local build the first time a dependency emits one benign warning - and dependency-sourced warnings are precisely what has happened here (zlib-asm needed two suppressions before deps(codec): replace zlib-asm with pako at legacyHash:true (refutes #40) #46 removed it). The value CLAUDE.md describes is in reading a new warning, not blocking on it.So warnings stay visible in this job's log and unenforced. If that changes,
onLogis the route - not a grep.Verification
Locally on this branch:
vp checkclean (316 formatted, 301 no warnings/lint/type errors), andpnpm vp buildsucceeds in 494ms with zero warnings, emittingindex-*.jsat 211.44 kB / 73.11 kB gzip. CI runs both jobs on this PR.Follow-up, needs a ruleset edit rather than a file
buildis not a required check yet, so a red build can still merge. Adding it to rulesetEJis a repository setting, and doing it before this merges would block this very PR on a check that does not exist onmainyet. Correct order: merge this, confirmbuildruns green onmain, then add it to the ruleset. Happy to do that as the last step.🤖 Generated with Claude Code
https://claude.ai/code/session_01F3a2HLJ4beKARi7SPmaM54