refactor(engine): move the unlinked-issue candidate pre-filter into the shared engine - #5778
Conversation
…he shared engine The deterministic unlinked-issue candidate pre-filter (findUnlinkedIssueCandidates) is confirmed-pure -- no IO, no AI, no other-src imports -- so it moves cleanly into @loopover/engine (JSONbored#4883), letting the published miner/mcp CLIs run the identical recall pass the maintainer gate uses instead of maintaining a driftable second copy. - new packages/loopover-engine/src/signals/unlinked-issue-candidates.ts holds the canonical implementation. - src/signals/unlinked-issue-candidates.ts becomes a thin re-export shim, imported via the relative source path (matching src/signals/slop.ts) so check-engine-parity recognizes it as a shim rather than a hand-duplicated twin, and so it never depends on the engine's built dist/. - re-exported from the engine barrel for external @loopover/engine consumers. No behavior change: the existing test/unit/unlinked-issue-candidates.test.ts imports the shim path unchanged and passes (100% line/branch coverage of the moved module). Closes JSONbored#4883
|
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 #5778 +/- ##
=======================================
Coverage 95.07% 95.07%
=======================================
Files 582 582
Lines 46219 46219
Branches 14822 14822
=======================================
Hits 43943 43943
Misses 1516 1516
Partials 760 760
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
|
Tip 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩 ✅ LoopOver review result - approve/merge recommendedReview updated: 2026-07-14 14:52:36 UTC
✅ Suggested Action - Approve/Merge
Review summary Nits — 6 non-blocking
Linked issue satisfactionPartially addressed Review context
Contributor next steps
Signal definitions
[BETA] Chat with GittensoryAsk Gittensory 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://gittensory.aethereal.dev/docs/gittensory-commands 🟩 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.
|
Summary
Extracts the deterministic unlinked-issue candidate pre-filter (
findUnlinkedIssueCandidates) out ofsrc/signals/unlinked-issue-candidates.tsinto the shared@loopover/enginepackage, per #4883 ("Extract the rest ofsignals/"). The module is confirmed-pure — no IO, no AI call, no other-src/imports — so it relocates cleanly:packages/loopover-engine/src/signals/unlinked-issue-candidates.ts— the canonical implementation (moved verbatim).src/signals/unlinked-issue-candidates.tsbecomes a thin re-export shim, imported via the relative source path (matchingsrc/signals/slop.ts/check-summary.ts), socheck-engine-parityrecognizes it as a shim rather than a hand-duplicated twin and it never depends on the engine's builtdist/duringtypecheck/test:coverage.packages/loopover-engine/src/index.ts) so the publishedloopover-miner/loopover-mcpCLIs can run the identical recall pass the maintainer gate uses instead of a driftable second copy.No behavior change. The existing
test/unit/unlinked-issue-candidates.test.tsimports the shim path unchanged and passes;findUnlinkedIssueCandidateskeeps identical logic, andcheck-engine-paritytreats the host file as a shim (not a twin).Closes #4883
Scope
type(scope): short summaryConventional Commit format.CONTRIBUTING.mdand does not reintroduce GitHub Pages, VitePress,site/, orCNAME.Closes #4883).Validation
git diff --checknpm run typecheck(clean — the shim + barrel export + moved module all resolve@loopover/enginecorrectly)npm --workspace @loopover/engine run build(the moved file + barrel export compile intodist/)npm run test:coveragescoped to the moved module — 100% lines and branches (24/24 branches, 35/35 statements) via the existing 16-case test, imported through the shimtest/contract/engine-parity.test.ts+ both consumers (unlinked-issue-guardrail,unlinked-issue-match) green — 84 tests passIf any required check was skipped, explain why:
src/→@loopover/enginecode move with no UI, API/OpenAPI, MCP tool, DB/migration, workflow, or dependency changes, soui:*,ui:openapi:check,db:*,actionlint, andnpm audithave no relevant surface. The fulltest:cisuite was not run end-to-end locally (several shell/self-host steps are Linux-only and fail on Windows unrelated to this change); the change-relevant gates above were validated directly.Safety
Notes
src/implementation; the host file is reduced to a re-export shim, keepingcheck-engine-parityhappy (verified locally:isThinEngineReExportShimreturnstruefor the new shim).