Skip to content

ci(workflows): enforce 4 drift checks in CI that only ran locally#7067

Merged
JSONbored merged 1 commit into
mainfrom
ci/enforce-drift-checks-in-ci
Jul 17, 2026
Merged

ci(workflows): enforce 4 drift checks in CI that only ran locally#7067
JSONbored merged 1 commit into
mainfrom
ci/enforce-drift-checks-in-ci

Conversation

@JSONbored

Copy link
Copy Markdown
Owner

Summary

Root cause of today's release-pipeline pain: miner:env-reference:check was never wired into .github/workflows/ci.yml -- it only ever ran as part of the local npm run test:ci aggregate. A PR could add a new env.SOMETHING read under packages/loopover-miner/** without regenerating packages/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:ci aggregate 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 what ci.yml actually 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:

(selfhost:validate-observability, test:engine-parity, test:live-gate-parity, test:driver-parity, and rees:test were 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 -- clean
  • All 4 newly-wired checks pass on current main in a fresh worktree: miner:env-reference:check, manifest:drift-check, engine-parity:drift-check, branding-drift:check
  • npm run typecheck -- clean (after npm run build --workspace @loopover/engine)
  • Workflow-YAML-only change; not measured by Codecov.

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.
@superagent-security

Copy link
Copy Markdown
Contributor

Superagent didn't find any vulnerabilities or security issues in this PR.

@JSONbored JSONbored mentioned this pull request Jul 17, 2026
12 tasks
@JSONbored JSONbored self-assigned this Jul 17, 2026
@JSONbored
JSONbored merged commit 58716bc into main Jul 17, 2026
12 of 13 checks passed
@JSONbored
JSONbored deleted the ci/enforce-drift-checks-in-ci branch July 17, 2026 20:50
@loopover-orb loopover-orb Bot added the gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier. label Jul 17, 2026
@codecov

codecov Bot commented Jul 17, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 87.66%. Comparing base (c8d28b5) to head (528b92b).
⚠️ Report is 32 commits behind head on main.
✅ All tests successful. No failed tests found.

❗ There is a different number of reports uploaded between BASE (c8d28b5) and HEAD (528b92b). Click for more details.

HEAD has 1 upload less than BASE
Flag BASE (c8d28b5) HEAD (528b92b)
shard-1 1 0
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     
Flag Coverage Δ
rees 88.56% <ø> (+0.05%) ⬆️
shard-1 ?
shard-2 36.84% <ø> (-0.01%) ⬇️
shard-3 33.14% <ø> (-0.14%) ⬇️
shard-4 34.47% <ø> (+0.57%) ⬆️
shard-5 32.29% <ø> (+0.04%) ⬆️
shard-6 45.76% <ø> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.
see 115 files with indirect coverage changes

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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant