chore(mcp): delete orphaned changelog config and dead schema literals, lock the package against unused locals - #9528
Conversation
|
Warning ⏸️ LoopOver review result - manual review recommendedReview updated: 2026-07-28 06:47:44 UTC
Review summary Nits — 8 non-blocking
Decision drivers
Context & advisory signals — never blocks the verdict
Linked issue satisfactionAddressed 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. Decision record
🟩 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.
|
|
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 #9528 +/- ##
=======================================
Coverage 89.56% 89.56%
=======================================
Files 843 843
Lines 110201 110195 -6
Branches 26230 26230
=======================================
- Hits 98705 98700 -5
+ Misses 10233 10232 -1
Partials 1263 1263
Flags with carried forward coverage won't be shown. Click here to find out more.
|
…, lock the package against unused locals cliff.mcp.toml was referenced by nothing -- the MCP changelog is generated by scripts/generate-mcp-changelog.ts via cliff.toml, and check-changelog.ts --mcp still passes without it. It carried a stale commit_preprocessors rewrite rule that read as live config. Five hand-written output-schema literals (repoContext, preflight, decisionPack, localStatus, agentPlan) sat unreferenced since #291. Enabling noUnusedLocals / noUnusedParameters is what keeps the next one from accumulating; it immediately surfaced two more dead items, both removed: isValidationStatus, superseded by isValidationStatusLike with callers reaching normalizeValidationStatus directly, and an unused node:path join import in local-branch.ts. Comment fixes for counts that had already rotted: the registration wrapper said 37 call sites, and the tools-search example cited get_subnet_stake_quote, a tool that does not exist in this repo. Both now describe the surface without pinning a number that goes stale. Refs #9516
The "Build engine package" step gated on backend/engine/ui, while "Typecheck" gated on backend/engine/mcp/miner. An mcp-only or miner-only PR therefore ran typecheck against an unbuilt engine: test/** imports @loopover/engine directly, and its "types" resolve to packages/loopover-engine/dist/index.d.ts, which that step is what produces. The result was a wall of phantom "Cannot find module '@loopover/engine'" errors plus every implicit-any that cascades from them, none of which related to the PR's actual diff. Widens the build gate to match typecheck's, the same fix typecheck itself already received for the mirror-image gap. Any trigger that typechecks must also have built what typechecking reads. Refs #9516
70bb7e4 to
6018fcb
Compare
Summary
cliff.mcp.toml, which nothing referenced. The MCP changelog is generated byscripts/generate-mcp-changelog.ts/scripts/mcp-release-core.tsand verified byscripts/check-changelog.ts --mcp; only the rootcliff.tomlis ever passed togit-cliff(package.json:89,check-changelog.ts:37). The orphan still carried acommit_preprocessorsrewrite rule for a one-off historical commit, which read as live config to anyone who opened it.npm run changelog:check:mcpstill runs and reports normally with the file gone — positive proof it was unused.repoContextOutputSchema,preflightOutputSchema,decisionPackOutputSchema,localStatusOutputSchema,agentPlanOutputSchema). Real output schemas arrive via@loopover/contractin contract(remote): migrate the remote MCP server's tools to @loopover/contract — typed handlers, real output schemas #9518 rather than by resurrecting these; the comment aboveloopover_local_status_structurednow points at that issue instead of describing an abandoned plan.noUnusedLocals+noUnusedParametersfor the package so this cannot silently accumulate again. That gate immediately found two more dead items, both removed:isValidationStatus(superseded byisValidationStatusLike; callers reachnormalizeValidationStatusdirectly, so no validation path is affected) and an unusedjoinimport fromnode:pathinlib/local-branch.ts(everyjoin(in that file isArray.prototype.join).tools searchexample citedget_subnet_stake_quote— a metagraphed tool that does not exist in this repo — now replaced with a real one (loopover_check_before_start, where the match term "duplicate" genuinely appears only in the description). Both rewritten so they cannot go stale on a count again.Preparatory hygiene for the #9515 epic: the contract migration should start from a surface where everything present is live.
Pre-existing CI bug fixed here (it blocked this PR)
validate-codefailed on the first run and again on re-run — deterministic, not a flake. Root cause is a gate asymmetry in.github/workflows/ci.yml:backend || engine || mcp || minerchanged.backend || engine || uichanged.So an mcp-only or miner-only PR (exactly this one) ran Typecheck against an unbuilt engine.
test/**imports@loopover/enginedirectly and itstypesresolve topackages/loopover-engine/dist/index.d.ts, which that skipped step is what produces — yielding a wall of phantomCannot find module '@loopover/engine'errors and everyTS7006implicit-any cascading from them, none related to this diff. The job log confirms it:Build engine package … skipped.Fixed by widening the build gate to match typecheck's — the same widening the Typecheck step itself already received for the mirror-image gap, per its own comment. Any trigger that typechecks must also have built what typechecking reads. This would have broken every mcp-only and miner-only PR, contributor ones included, where the gate auto-closes on red CI.
Closes #9516
Scope
type(scope): short summaryConventional Commit format, for examplefix(api): restore profile access checks.CONTRIBUTING.mdand does not reintroduce GitHub Pages, VitePress,site/, orCNAME.Closes #123) — a linked open issue is required for every contributor PR.Validation
git diff --checknpm run actionlintnpm run typecheck(vianpm run build:mcp—tsc -p packages/loopover-mcp/tsconfig.jsonis the compile surface this PR changes)npm run test:coveragelocally;codecov/patchrequires ≥99% coverage of the lines AND branches you changednpm run test:workersnpm run build:mcpnpm run test:mcp-packnpm run ui:openapi:checknpm run ui:lintnpm run ui:typechecknpm run ui:buildnpm audit --audit-level=moderateTargeted suites run and green:
mcp-cli-tools,mcp-discovery,mcp-cli-completion-spec(38 tests), pluslocal-branch,local-branch-file-classifiers,mcp-cli-analyze-branch(97 tests) — the registry/discovery surface and both edited files.If any required check was skipped, explain why:
src/**line is added or modified, so there is nocodecov/patchsurface and no new behavior to test. The unchecked items are unaffected surfaces (no UI, OpenAPI, worker, workflow, or dependency changes); CI runs them in full.changelog:check:mcpreports the MCP changelog as stale — pre-existing, caused by released-but-unregenerated commits, and unrelated to this diff. It runs intest:release, nottest:ci, and perCLAUDE.mdchangelogs are only edited in release-prep PRs.Safety
registerToolcall.)UI Evidencesection below. (n/a — no visible change)Notes
Part of #9515 (MCP contract standardization). This is the group-1 hygiene sweep; the contract package lands next in #9517.