ci: two test:ci drift checks are never executed by any GitHub Actions job - #9929
Closed
phamngocquy wants to merge 1 commit into
Closed
ci: two test:ci drift checks are never executed by any GitHub Actions job#9929phamngocquy wants to merge 1 commit into
test:ci drift checks are never executed by any GitHub Actions job#9929phamngocquy wants to merge 1 commit into
Conversation
Contributor
|
Important 🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨 ⏳ LoopOver is waiting…LoopOver has seen this pull request and is waiting on CI checks to finish before reviewing it. This comment will update once the review runs. 🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed · 🟨 Waiting |
Contributor
Superagent Supply Chain ScanSuperagent flagged 1 dependency introduced by this pull request. High risk:
|
phamngocquy
force-pushed
the
miner/issue-9649
branch
from
July 30, 2026 16:33
0a3acc5 to
22efd55
Compare
Contributor
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
Contributor
|
This repository reviews pull requests one-shot: the PR must be correct as originally opened. Pushing an additional commit closes it automatically instead of restarting review — open a fresh pull request with every fix included. |
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.
Summary
.github/workflows/ci.ymlruns each drift check as its own path-gated step —db:migrations:check(line 302),db:schema-drift:check(308),docs:drift-check(357),dead-source-files:check(372),regate-sort-key:check(378),branding-drift:check(410), and so on. Several of those steps carry the samecomment: "Same local-only-until-now gap as the drift checks above: nothing in this workflow previously ran it,
so the two could silently diverge with zero CI signal."
Two checks in
package.json'stest:cistill have that gap:coco-dev-versions:check→scripts/check-coco-dev-versions.ts. Its own header states it is "wiredinto
npm run test:ciso a version bump made in only one of the two files (k8s/coco-dev/versions.json,k8s/coco-dev/kbs/base/kustomization.yaml) fails CI instead of silently shipping a KBS deploy that doesn'tmatch its own recorded version manifest." No CI job runs it. Its only test,
test/unit/check-coco-dev-versions-core.test.ts, exercises the pure core against fabricated inputs andnever reads the two real files.
.github/workflows/contains no reference tok8sat all, so no pathfilter would trigger such a job either.
import-specifiers:check→scripts/check-import-specifiers.ts(scripts: unify relative-import specifiers with src/** (extensionless) and add a drift guard #9221). No CI job runs it, andtest/unit/check-import-specifiers-script.test.tsis entirely injection-based(
listSourceFiles/readFilefakes) with no assertion against the real tree — unlike its siblingtest/unit/check-coverage-bolt-on-filenames-script.test.ts:51("the real repo has zero coverage bolt-onfilenames (regression guard)") and
test/unit/validate-no-hand-written-js.test.ts:80-82("The real gate,run against the real tree"), both of which close the same gap for their own checks. This is not theoretical:
chore(imports): packages/loopover-ui-kit drifted from #9221's extension convention (introduced by #9239) #9240 and chore(imports): test/unit/engine-coverage-script.test.ts drifted from #9221's extension convention (introduced by #9245) #9249 are two separate drifts that landed after scripts: unify relative-import specifiers with src/** (extensionless) and add a drift guard #9221 shipped the guard.
Every other entry in
test:cithat has no explicit ci.yml step is covered another way — the contract/paritysuites and
validate:mcprun inside the main vitest job, theui:*andbuild*scripts run vianpx turbosteps, and
coverage-boltons:check/validate:no-hand-written-jsare enforced by their real-tree testsabove. These two are the only ones with no enforcement path at all.
Deliverables
.github/workflows/ci.ymlchangesjob declares acocoDevfilter output coveringk8s/coco-dev/**and
scripts/check-coco-dev-versions*.ts..github/workflows/ci.ymlhas a named step runningnpm run coco-dev-versions:check, gated on thatfilter plus the push clause.
.github/workflows/ci.ymlhas a named step runningnpm run import-specifiers:check, gated as specifiedabove.
test/unit/check-import-specifiers-script.test.tscontains a real-tree regression test that callsfindImportSpecifierViolations()with NO injectedlistSourceFiles/readFileand asserts the result is[], with a comment naming chore(imports): packages/loopover-ui-kit drifted from #9221's extension convention (introduced by #9239) #9240/chore(imports): test/unit/engine-coverage-script.test.ts drifted from #9221's extension convention (introduced by #9245) #9249 as the drifts that reached main while the guard was local-only.npm run actionlintandnpm run lint:composite-actionspass on the edited workflow.All Deliverables above are required in a single PR. A PR that satisfies only some of them — for example adding
the two workflow steps but skipping the real-tree test in Deliverable 4 — does not resolve this issue.
Test plan
.github/workflows/**andscripts/**are OUTSIDE Codecov'scoverage.include(which coverssrc/**,packages/loopover-engine/src/**,packages/loopover-miner/{lib,bin}/**,packages/discovery-index/src/**,packages/loopover-contract/src/**andpackages/loopover-mcp/{lib,bin}/**), so Codecov's patch gate does notapply to the workflow edit or to
scripts/check-import-specifiers.ts. Real tests are still required:Deliverable 4 is a genuine vitest assertion against the real tree, not a placeholder. Do not add
no-oporexpect(true)tests to satisfy the checkbox.Fixes #9649