ci(workflows): enforce 4 drift checks in CI that only ran locally#7067
Merged
Conversation
miner:env-reference:check, manifest:drift-check, engine-parity:drift-check, and branding-drift:check were all part of the local `npm run test:ci` aggregate but never wired into .github/workflows/ci.yml -- the exact same gap class the "Selfhost env-reference drift check" comment already documents having bitten twice before. Confirmed harmful live: the miner:env-reference gap let a stale generated doc merge to main with green CI, then block an unrelated MCP npm release days later, since the release workflow (before being scoped down) was the only place that check ever actually ran. Also adds .loopover.yml to the `backend` path filter so an edit to just that file still re-triggers manifest:drift-check, which reads it directly.
Contributor
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
Codecov Report✅ All modified and coverable lines are covered by tests.
Additional details and impacted files@@ Coverage Diff @@
## main #7067 +/- ##
==========================================
- Coverage 93.74% 87.66% -6.09%
==========================================
Files 692 692
Lines 68706 68808 +102
Branches 18760 18781 +21
==========================================
- Hits 64409 60321 -4088
- Misses 3302 6818 +3516
- Partials 995 1669 +674
Flags with carried forward coverage won't be shown. Click here to find out more. |
5 tasks
galuis116
pushed a commit
to galuis116/gittensory
that referenced
this pull request
Jul 18, 2026
…nd-editing it JSONbored#7100 fixed the immediate mismatch by hand-typing corrected version numbers into .release-please-manifest.json -- exactly the failure mode that caused the drift in the first place (a human-authored value instead of one derived from source of truth). This replaces that with a real mechanism: - scripts/sync-release-manifest.mjs treats each package's own package.json "version" as authoritative and syncs the manifest to match -- `npm run release-manifest:sync` is now the only supported way to fix drift, never a manual edit. - `npm run release-manifest:sync:check` (wired into both test:ci and .github/workflows/ci.yml, gated on backend/mcp/engine/miner/ui) fails CI the moment the manifest and a package.json disagree, instead of surfacing days later as release-please re-proposing an already-published version (JSONbored#7086/JSONbored#7087). - .release-please-manifest.json and release-please-config.json are now part of the `backend` path filter so editing either alone still triggers the check. Also corrects reference.md's CI check table, which still claimed manifest:drift-check/engine-parity:drift-check weren't wired into ci.yml -- stale since JSONbored#7067 actually added them.
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
Root cause of today's release-pipeline pain:
miner:env-reference:checkwas never wired into.github/workflows/ci.yml-- it only ever ran as part of the localnpm run test:ciaggregate. A PR could add a newenv.SOMETHINGread underpackages/loopover-miner/**without regeneratingpackages/loopover-miner/docs/env-reference.md/apps/loopover-ui/src/lib/ams-env-reference.ts, merge to main with fully green CI, and the drift would sit invisible until something else happened to catch it -- in this case,publish-mcp.yml's validation gate (before #7064 correctly scoped it down to just the MCP package), which meant an unrelated MCP release started failing days after the actual drift-introducing PR merged.This is the exact same gap class the existing "Selfhost env-reference drift check" step's own comment documents: "Was previously enforced ONLY by the local
npm run test:ciaggregate script, never by this workflow -- went stale twice in one day (2026-07-04) with zero CI signal until someone happened to run the full local script." That one got fixed. Its miner-side twin didn't.Auditing the rest of
test:ci's ~30 commands against whatci.ymlactually runs turned up 3 more of the same gap, all drift-tripwire scripts whose own header comments describe them as CI gates but were never actually added as a step:manifest:drift-check-- cross-checks the bundled fallback YAML insrc/config/loopover-repo-focus-manifest.tsagainst the real root.loopover.yml. Also adds.loopover.ymlto thebackendpath filter so an edit to just that file still triggers the check that reads it.engine-parity:drift-check-- the hand-duplicatedsrc/{review,settings,signals}<->loopover-enginetwin-file tripwire + engine version-skew check (feat(miner-selfimprove): engine-parity drift detector — flag when gittensory-engine diverges from src/ #4260).branding-drift:check-- guards against "gittensory" branding creeping back into runtime source (fix(mcp): rename enrichment-analyzers resource URI to loopover:// #6786 was the concrete incident this was written for).(
selfhost:validate-observability,test:engine-parity,test:live-gate-parity,test:driver-parity, andrees:testwere also checked -- all four are already enforced, just under a different literal invocation than their npm script name, so no gap there.)Test plan
npm run actionlint-- cleanminer:env-reference:check,manifest:drift-check,engine-parity:drift-check,branding-drift:checknpm run typecheck-- clean (afternpm run build --workspace @loopover/engine)