ci: enforce codecov on miner/mcp/engine/discovery-index-only PRs#7326
Conversation
validate-tests (runs test:coverage, uploads lcov to Codecov) only
triggered on backend||rees, so a PR touching only packages/loopover-miner,
packages/loopover-mcp, packages/loopover-engine, or packages/discovery-index
skipped the coverage job entirely -- no codecov/patch check posted, and the
required validate check passed anyway since a skipped job counts as
success. Three JS->TS migration PRs merged this way with zero tests run.
Extends validate-tests/validate-tests-merge's trigger to also fire on
miner/mcp/engine/discoveryIndex (mirroring the existing rees precedent),
adds a discoveryIndex path filter, and closes the matching coverage.include
gaps: packages/loopover-miner/bin/** and packages/loopover-mcp/{lib,bin}/**
were missing from vitest's coverage.include, which is why PR #7318 passed
codecov/patch with no real data. The two CLI entrypoints that are
provably subprocess-only-tested (loopover-miner.ts, loopover-mcp.js/ts)
are exempted in codecov.yml the same documented way src/server.ts already
is, since v8 can't instrument a separate Node process.
|
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 #7326 +/- ##
==========================================
- Coverage 93.80% 91.03% -2.78%
==========================================
Files 706 714 +8
Lines 69629 72102 +2473
Branches 19098 19163 +65
==========================================
+ Hits 65316 65635 +319
- Misses 3302 5427 +2125
- Partials 1011 1040 +29
Flags with carried forward coverage won't be shown. Click here to find out more. |
|
Caution 🛑 LoopOver review result - fixes requiredReview updated: 2026-07-19 17:05:33 UTC
Review summary Nits — 4 non-blocking
Why this is blocked
📋 Copy for AI agents — paste into your coding agentCI checks failing
Decision drivers
Context & advisory signals — never blocks the verdict
Review context
Contributor next steps
Signal definitions
🧪 Chat with LoopOverAsk LoopOver a question about this PR directly in a comment — grounded only in the same cached, public-safe facts shown above, never a new claim.
Full command reference: https://loopover.ai/docs/loopover-commands 🧪 Experimental — new and may change. 🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed 💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →. Checked by LoopOver, a quiet PR intelligence layer for OSS maintainers.
|
…tchers
Removed the codecov.yml ignore entries this branch had added for
packages/loopover-miner/bin/loopover-miner.ts and
packages/loopover-mcp/bin/loopover-mcp.{js,ts} -- they tripped
test/unit/codecov-policy.test.ts's existing #4864 guard, which forbids
any codecov.yml ignore entry mentioning packages/loopover-miner
specifically so a change to that package can never get a silent
coverage pass. Both files stay in vitest.config.ts's coverage.include
(so they're honestly graded, currently near-0%) without an exemption,
consistent with how bin/loopover-miner-mcp.ts was already made
testable via an exported createMinerMcpServer rather than ignored.
Summary
validate-tests(runstest:coverage, uploads lcov to Codecov) only triggered onbackend || rees. None ofpackages/loopover-miner/**,packages/loopover-mcp/**, orpackages/loopover-engine/**were in thebackendpath filter, andpackages/discovery-index/**had no filter at all — so a PR scoped to just one of those packages skipped the coverage job entirely. Nocodecov/patchcheck even posted, and the requiredvalidateaggregate passed anyway (a skipped job counts as success). chore(miner): migrate batch 4.7 foundational lib modules to TypeScript (#7315) #7319 and chore(miner): migrate batch 2.1 utility modules to TypeScript #7320 merged this way with zero tests run.vitest.config.ts'scoverage.includewas missingpackages/loopover-miner/bin/**and all ofpackages/loopover-mcp/**— even when the coverage job did run (e.g. chore(miner): migrate the CLI bin entry-points to TypeScript #7318, which incidentally also touchedscripts/check-miner-package.mjs), those changed files had no instrumentation, socodecov/patchpassed with zero real data.validate-tests/validate-tests-merge's trigger to also fire onminer/mcp/engine/discoveryIndex(mirroring the existingreesprecedent), adds adiscoveryIndexpath filter (wired intovalidate-codetoo), and closes thecoverage.includegaps forpackages/loopover-miner/bin/**andpackages/loopover-mcp/{lib,bin}/**.packages/loopover-miner/bin/loopover-miner.ts,packages/loopover-mcp/bin/loopover-mcp.{js,ts}— exercised only viaexecFileSync/StdioClientTransportspawning a realnodeprocess, never imported in-process) are exempted from patch grading incodecov.yml, the same documented waysrc/server.tsalready is: v8 can't instrument a separate Node process, so grading them would create a permanent, unfixable failure for anyone touching those files.packages/loopover-miner/libbatches + chore(mcp): migrate packages/loopover-mcp from plain .js to real TypeScript #7291 forpackages/loopover-mcp) now fall under enforced coverage as a result.Closes none directly — this is a maintainer-initiated infra fix found while investigating why #7318/#7319/#7320 (JS→TS migration PRs) merged with
validate-testsskipped.Scope
type(scope): short summaryConventional Commit format.CONTRIBUTING.mdand does not reintroduce GitHub Pages, VitePress,site/, orCNAME.Validation
git diff --checknpm run actionlintnpm run typecheck(after building@loopover/engine+@loopover/discovery-index, matchingtest:ci's own ordering)npm run test:coveragelocally — not run in full (config-only change, no source touched). Instead ran a real scopedvitest --coverageinvocation covering the exact files this PR newly wires intocoverage.include(packages/loopover-miner/bin/*,packages/loopover-mcp/{lib,bin}/*) to confirm the new globs instrument correctly and the subprocess-only entrypoints report a clean0%instead of crashing the coverage collector. This PR itself also touches.github/workflows/**, which is already inside thebackendfilter, so this PR's own CI run exercises the fullvalidate-testsjob regardless of the fix.npm run test:workers— not run; this PR does not touchtest/workers/**or Worker-runtime code.npm run build:mcp— not run; nopackages/loopover-mcpsource changed, only its Codecov wiring.npm run test:mcp-pack— not run, same reason.npm run ui:openapi:check— not run; no OpenAPI-affecting change.npm run ui:lint/ui:typecheck/ui:build— not run; noapps/loopover-ui/**change.npm audit --audit-level=moderate— not run; no dependency change..github/workflows/ci.yml,vitest.config.ts, andcodecov.yml(CI/coverage configuration, notsrc/**), so it carries no Codecov patch-coverage obligation itself; its effect is validated by the scopedvitest --coveragerun above plus this PR's own CI run.If any required check was skipped, explain why:
actionlint+typecheck(both clean) and a targetedvitest --coveragesmoke test against the exact new include/exclude entries (see Summary), plus this PR's own live CI run.Safety
UI Evidencesection — N/A, no visible/UI change.Notes
.github/workflows/ci.yml), so per the gate's own rules it will be held for manual owner review/merge rather than auto-merged, which is expected and appropriate here.