6666 - '.github/workflows/**'
6767 - 'wrangler.jsonc'
6868 - 'worker-configuration.d.ts'
69+ - '.loopover.yml'
6970 observability:
7071 - 'grafana/dashboards/**'
7172 - 'prometheus/rules/**'
@@ -269,6 +270,16 @@ jobs:
269270 - name : Selfhost env-reference drift check
270271 if : ${{ github.event_name == 'push' || needs.changes.outputs.backend == 'true' || needs.changes.outputs.ui == 'true' }}
271272 run : npm run selfhost:env-reference:check
273+ # Miner/AMS twin of the selfhost check above -- same generated-artifact-drift class, same
274+ # local-only-until-now gap (an `env.SOMETHING` read added under packages/loopover-miner/**
275+ # with no CI signal that packages/loopover-miner/docs/env-reference.md and
276+ # apps/loopover-ui/src/lib/ams-env-reference.ts had gone stale). Confirmed harmful live: this
277+ # exact gap let a stale env-reference block an unrelated MCP npm release, since the release
278+ # workflow was the only place this check ever ran. Gated on `ui` too, same reason as its sibling:
279+ # the generated UI-side file lives under apps/loopover-ui/**.
280+ - name : Miner env-reference drift check
281+ if : ${{ github.event_name == 'push' || needs.changes.outputs.miner == 'true' || needs.changes.outputs.ui == 'true' }}
282+ run : npm run miner:env-reference:check
272283 # Same generated-artifact-drift class, extracted from src/github/commands.ts's command catalogs (#3046).
273284 # Also local-only until now; same backend-or-ui gating rationale as the step above.
274285 - name : Command reference drift check
@@ -282,6 +293,27 @@ jobs:
282293 - name : Docs drift check
283294 if : ${{ github.event_name == 'push' || needs.changes.outputs.backend == 'true' || needs.changes.outputs.ui == 'true' }}
284295 run : npm run docs:drift-check
296+ # Cross-checks the bundled fallback YAML in src/config/loopover-repo-focus-manifest.ts against the
297+ # real root .loopover.yml -- see the script's own header comment. Same local-only-until-now gap as
298+ # the drift checks above: nothing in this workflow previously ran it, so the two could silently
299+ # diverge with zero CI signal. .loopover.yml itself is now part of the `backend` path filter above
300+ # specifically so an edit to ONLY that file still re-triggers this job.
301+ - name : Manifest drift check
302+ if : ${{ github.event_name == 'push' || needs.changes.outputs.backend == 'true' }}
303+ run : npm run manifest:drift-check
304+ # Mechanical drift tripwire for the hand-duplicated src/{review,settings,signals} <-> loopover-engine
305+ # twin files, plus a version-skew check on the installed @loopover/engine (#4260). Same
306+ # local-only-until-now gap as the drift checks above.
307+ - name : Engine-parity drift check
308+ if : ${{ github.event_name == 'push' || needs.changes.outputs.backend == 'true' || needs.changes.outputs.engine == 'true' }}
309+ run : npm run engine-parity:drift-check
310+ # Guards against the "gittensory" branding creeping back into runtime source after the LoopOver
311+ # rebrand -- see the script's own header comment (#6786 is the concrete incident this was written
312+ # for). Scoped broadly (src/** plus every workspace package's bin/lib/src/scripts dirs), so it's
313+ # gated broadly to match; same local-only-until-now gap as the drift checks above.
314+ - name : Branding drift check
315+ if : ${{ github.event_name == 'push' || needs.changes.outputs.backend == 'true' || needs.changes.outputs.mcp == 'true' || needs.changes.outputs.engine == 'true' || needs.changes.outputs.miner == 'true' || needs.changes.outputs.ui == 'true' }}
316+ run : npm run branding-drift:check
285317 - name : Validate observability configs
286318 if : ${{ github.event_name == 'push' || needs.changes.outputs.backend == 'true' || needs.changes.outputs.observability == 'true' }}
287319 env :
0 commit comments