ci(static): run the six invariant gates that ran in no workflow - #237
Merged
Conversation
workspace:check, i18n:check, board:gen:check, marketplace:gen:check, board-installer:gen:check and vercel-template:gen:check are chained in `pnpm verify` and appeared in no step of any workflow, so a pull request that broke any of them merged green. They are now steps in the `static` job, in verify's own order, and cost the job about six seconds. Nothing kept `verify` and CI in step, which is the defect underneath. `pnpm ci:parity:check` reads the `verify` script and the `static` job and fails, naming them, on any gate that runs in one and not the other. It runs in both, refuses to pass when either side parses to nothing, and carries one exception, named with its reason and re-checked every run: `verify` ends on `pnpm test`, which `static` runs as `pnpm test:coverage`.
AGENTS.md is unqualified: an explanation belongs in the relevant document under docs/, never in the code. Today's pull requests added thirty comment lines to ci.yml; they are removed here, and the reasoning each carried is in docs/development.md first. Most already was. What was not: that V8 gathers coverage through the inspector rather than by rewriting sources, and what running both `pnpm test` and `pnpm test:coverage` cost the static job; that each browser shard is a whole runner sharing nothing with the others and that Playwright's split by file is safe in any order; and that `.next-e2e` is deliberately not cached, because a build restored from a previous run is the stale-cache problem. The 255 comments that predate today are the file's long-established style and are left alone. Also fixes a reference this left dangling: "A red browser shard is often not about your change" pointed at a ci.yml comment explaining why the suite is sharded, which today's rewrite had already deleted.
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 MEI-128.
Six gates chained in
pnpm verifyran in no CI workflow:workspace:check,i18n:check,board:gen:check,marketplace:gen:check,board-installer:gen:check,vercel-template:gen:check. CI'sstaticjob does not runpnpm verify— it enumerates each gate as its own step, and these were never added. A pull request that broke any of them merged green.Two of those matter immediately:
vercel-template:gen:checkwas cited as proof the Vercel template could not drift fromscaffold(). True locally, false on a pull request.workspace:checkholds MEI-120's@swc/helperstracing-glob gate. That ticket's entire deliverable never ran on a PR, so the runtimeCannot find moduleit exists to prevent was as unguarded as before.Each one proven to fail
Broken deliberately, run, reverted:
workspace:check@swc+helpers@0.5.24i18n:checkholds 1 untranslated string(s) and the baseline allows 0board:gen:checkcommunity.plugins.tsmarketplace:gen:checkboard-installer:gen:checkcreate-board.shis stale — run pnpm board-installer:genvercel-template:gen:checkVERCEL_BUILD_COMMANDinscaffold.tswithout regeneratingtemplates/vercel is stale: README.md differs, vercel.json differsThe last is the exact drift this was claimed to prevent, broken at the source rather than the artifact.
Cost: ~6.7s for all six, 7.3s with the parity gate — less than the existing
guardsstep alone.The gate that guards the gates
pnpm ci:parity:checkparsesverifyinto its gates, parses thestaticjob's steps, and fails naming any gate that runs in neither a step nor a named exception. It runs inverifyand instatic.One exception, explicit:
test, satisfied bytest:coverage, with its reason recorded inline. Not a pattern match — it fails ifstaticstops runningpnpm test:coverage, and fails ifverifystops runningpnpm test.It refuses to pass vacuously. Proven to fail when: a gate has no step; the
staticjob is renamed;verifyis emptied; the job runs no script; the exception stops holding; averifysegment cannot be parsed. Comment lines are stripped before matching, so a commented-out step never counts as coverage.tests/ci-parity.test.tspins all of it and asserts against the realpackage.jsonandci.ymlthat both sides parse to more than 20 items.Comments
AGENTS.mdsays explanations belong indocs/, never in the code. The 30 comment lines today's pull requests added toci.ymlare removed — 286 lines to 255 — after auditing each for content not already documented. Four things were moved intodocs/development.mdrather than deleted, including that.next-e2eis deliberately not cached because a build restored from a previous run is the stale-cache problem, which had only been a side note.The 255 pre-existing comments are untouched. They contain institutional knowledge with no home in
docs/yet; sweeping them is a larger change that deserves its own.Also
docs/development.mdno longer claimsverify"covers every gate in CI'sstaticjob but two". It now states both directions and that they are deliberately asymmetric: verify→static is enforced byci:parity:check; static→verify is looser, because the create-meith build, the publish dry run, the Redis install and coverage all need CI's machine.Known limit: the check is one-directional by design, so a future CI-only gate still gets in with nothing objecting. That asymmetry is now written down rather than implicit.
pnpm verifypasses: 7758 tests.Generated by Claude Code