Uh oh!
There was an error while loading. Please reload this page.
ci(devx): run the dev-prereqs gate's self-test half in lint.yml - #8227
Merged
Conversation
`check:dev-prereqs` is `--self-test && the scan`, and the scan half is CI-hostile: on an unbuilt tree it exits 1 with "The workspace is not built — 67 of 67 workspace packages declare an entry point under dist/ that is not on disk", and on a tree that just built it is a tautological green. Its subject is a human's long-lived worktree before `pnpm dev`, not CI. So it correctly stays out — and it was taking the hermetic self-test half with it, leaving the gate in the gate list reading as coverage while nothing kept its scan honest. This wires the self-test half only, invoked as `node` rather than through the npm script so the scan half cannot come along. Same shape as PR #8171 landed for the family's first member. Also corrects the script header, which claimed "CI IS UNAFFECTED … never into a workflow" — true of the scan, and this change makes it false of the file.
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
hotlong
marked this pull request as ready for review
August 12, 2026 22:01
This was referenced Aug 12, 2026
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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.
Fixes#8170
The second and only other member of the split-gate family whose first member landed as #8171. One step in
.github/workflows/lint.ymlrunningnode scripts/check-dev-prereqs.mjs --self-test, and deliberately nothing else.What lands
.github/workflows/lint.yml— one step in thetypecheckjob, in the pre-build group, invoked asnode(never through thecheck:dev-prereqsnpm script, which is--self-test && the scan), with the same "self-test half only, never the scan" naming as the ci(lint): run the skill-frame freshness gate's self-test half in CI (#8110) #8171 and 观察单:changeset 家族三个 check-*.mjs 的 --self-test 只在可被 skip-changeset 整体豁免的 job 里跑,改这些脚本的 PR 恰好豁免自己的自检 #6509 precedents.scripts/check-dev-prereqs.mjs— header precision only, no behaviour change. Its header said "CI IS UNAFFECTED. This is wired into the rootdev/dev:*scripts only — never into a workflow". That is true of the scan and this change makes it false of the file, so the paragraph is split into WHERE THE SCAN RUNS / WHERE THE SELF-TEST RUNS. Leaving a header that flatly contradicts the step being added seemed worse than the extra file; the dispatch's file surface waslint.yml(+package.jsonif argued), so this is a stated deviation rather than a silent one.package.jsonchange, matchingcheck:skill-frame-freshness --self-testruns nowhere in CI, so a broken fixture is invisible until a human runs the gate #8110's decision against a dedicated script name — a second hand-kept spelling of one command buys nothing here.Measurements, re-taken on this tree (not inherited)
Every reading below was taken fresh in a worktree at merge base
a5dcb74, with nonode_modulesand nothing built.--self-testis green and hermeticnode_modulespresentgit clone --depth 1 --single-branchcarrying zerorefs/remotes/origin/main(verified byshow-ref), 0.105sC — what reddens it, and where this differs from #8171
#8110's gate turned out to be unable to redden alone; its sibling
check:skill-frame-syncreds first with a clearer diagnosis. Asking the same question here gives the opposite answer, measured both directions:LIES→MISLEADS) inscripts/check-dev-prereqs.mjsreds the self-test on its own:stale/says-it-lies: expected true, got false. Nothing else in CI reads this script — the other repo references are prose, pluspackages/spec's build script calling--stamp— so no sibling gate reddens first.check:skill-frame-freshness --self-testruns nowhere in CI, so a broken fixture is invisible until a human runs the gate #8110 hazard was a red whose diagnosis lived elsewhere; this red is same-file and self-explaining.--stampfrompackages/spec's build script — which does red the scan half with aCoverageError— leaves the self-test green, because its fixtures are synthetic. Stated in the step comment as the step's honest boundary: it vouches for the gate's verdict paths, never for this workspace.Placement
Next to the existing Stall-guard self-test rather than beside #8171's step. Both neighbours are self-tests of a guard whose real path CI does not exercise, which is this step's actual subject; the region around #8171's step is a tight run of skill-frame /
.claudegates, and wedging a dev-preflight gate into it would break that narrative. The family reads as a family through the shared step-name convention, not through adjacency. Happy to move it if the reviewer prefers adjacency.The naive-grep meta-hazard is honoured: with comment lines stripped,
check:dev-prereqsappears nowhere in.github/workflows/, so no comment here can be misread as evidence the whole gate is wired.Verification
Gates re-derived against the actual changed paths with
node scripts/pm/dispatch-gates.mjs .github/workflows/lint.yml scripts/check-dev-prereqs.mjs, then run:check:type-check-debtwas not run locally: it refuses without the full workspace build closure ("55 workspace dependencies … have no built type entry point on disk") and CI runs it after the build step. This diff contains no TypeScript.The workflow was also parsed with a YAML loader to confirm the new step lands in
jobs.typecheck.stepsas exactly onerunline, with none of the comment prose leaking into it.Release impact
None — a workflow step and a comment block. Route 2:
skip-changeset, no changeset file.Generated by Claude Code