fix(mcp): rename enrichment-analyzers resource URI to loopover:// - #6786
Conversation
Its sibling finding-taxonomy resource (added in the same #6620 PR) already uses loopover://finding-taxonomy; enrichment-analyzers was left on the pre-rebrand gittensory:// scheme in both the main MCP server and the standalone @loopover/mcp CLI package.
|
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 #6786 +/- ##
=======================================
Coverage 93.63% 93.63%
=======================================
Files 683 683
Lines 68148 68148
Branches 18703 18703
=======================================
Hits 63812 63812
Misses 3350 3350
Partials 986 986
Flags with carried forward coverage won't be shown. Click here to find out more.
|
|
Warning ⏸️ LoopOver review result - manual review recommendedReview updated: 2026-07-17 06:44:13 UTC
Review summary Nits — 4 non-blocking
Concerns raised — review before merging
📋 Copy for AI agents — paste into your coding agentDecision 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.
|
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
loopover-ui | 7ec9f69 | Commit Preview URL Branch Preview URL |
Jul 17 2026, 06:40 AM |
…seline chore(ci): regenerate the branding-drift baseline after #6786
…er-ui, loopover-ui, and loopover-miner-extension - CLI command references in comments (governor.ts, portfolio-queue-actions.ts, vite-portfolio-queue-api.ts) still said `gittensory-miner ...`; the real binary is `loopover-miner` (confirmed against package.json's own bin field). - 9 vite-*-api.ts dev-server plugins had their `name:` field (and chat-api.test.ts's matching assertion) as `gittensory-miner-ui:...`. - vite.config.ts's port-offset comments and styles.css's design-system comment referenced the sibling app as `gittensory-ui`; confirmed loopover-ui's own vite config relies on the same default ports (5173/4173) the comments describe. - self-hosting-operations.mdx documented the exact stale SENTRY_RELEASE/ LOOPOVER_VERSION default already fixed in JSONbored#6876/JSONbored#6881/JSONbored#6888 as current behavior ("defaults to gittensory-selfhost@..."). - packages/loopover-mcp/bin/loopover-mcp.js had a comment claiming "enrichment-analyzers keeps its legacy gittensory:// URI on purpose" -- stale since JSONbored#6786 actually renamed that URI to loopover://. - Remaining ~50 occurrences (background.test.ts, opportunity-badge.test.ts, governor/ledgers/portfolio-queue-*.test.tsx's mock config-dir paths, proof-of-power-stats.test.tsx, browser-sentry.test.ts) were all arbitrary placeholder fixture values -- confirmed each by reading the source under test: browser-sentry.ts's VITE_SENTRY_RELEASE has no hardcoded default at all (pure passthrough, not the JSONbored#6876-class bug), so its test fixture value is genuinely arbitrary, same as the repo-name/path fixtures elsewhere. Left untouched (verified real, not drift): try-it.ts/.test.ts's LEGACY_STORAGE_KEY = "gittensory.session_token" and the matching legacy-key arguments in app.index/runs/workbench.tsx's useLocalStorage(new, default, legacy) calls -- this is a deliberate migration path so a returning user's existing browser localStorage (session token, onboarding state, saved views, workbench tab) is still recognized after the rebrand. Also left the 3 self-hosting docs' "Renamed from gittensory-selfhost" / "pre-rename name" callouts, which are already correctly historically framed. All affected test suites pass: 98 (miner-ui) + 29 (loopover-ui) + 16 (miner-extension) = 143 tests, plus a clean loopover-miner-ui typecheck.
…pover-orb
test/helpers/d1.ts's createTestEnv() defaulted GITHUB_APP_SLUG to "gittensory" --
the pre-rename product name -- even though the real, live canonical GitHub App is
"loopover-orb" (src/services/subnet-interface.ts's PUBLIC_GITHUB_APP_SLUG, "the same
stable, real app across every deployment") and production's own unset-fallback is
"loopover" (src/api/routes.ts). Surfaced while investigating an unrelated flaky-test
report: two tests (test/unit/github-labels.test.ts, test/unit/github-pr-actions.test.ts)
constructed a fresh RSA key and D1 database per loop iteration; fixing that (a separate,
already-merged PR) revealed the shared default itself was stale.
Renames the default to "loopover-orb" and updates every fixture across ~20 files that
depends on it -- bot-login strings ("gittensory[bot]" -> "loopover-orb[bot]"), check-run
app.slug fixtures, explicit GITHUB_APP_SLUG overrides, and one test that asserts on the
project-slug value directly. Left untouched (confirmed deliberately preserved, not
stale): sticky-comment HTML markers, the "gittensory-native" DB-source literal, Sentry
ticket IDs, the GITTENSORY_LEGACY_*_CHECK_NAME upgrade-compatibility constants, and the
"JSONbored/gittensory" generic-placeholder-repo-name pattern used across ~144 files
(NOT swapped for "JSONbored/loopover", which is a live self-repo sentinel value that
would silently change unrelated tests' behavior).
Two subtleties worth noting for future reference:
- A function's matching semantics matter: isOwnReviewThreadAuthor does PREFIX matching,
so its own dedicated test (backfill-2.test.ts) needed an explicit bare "loopover"
override to keep testing multiple suffix forms, rather than inheriting the new
"loopover-orb" default -- a bare "loopover[bot]" fixture would not prefix-match a
"loopover-orb" configured slug.
- Regenerated scripts/branding-drift-baseline.json (npm run branding-drift:update)
after a one-line comment fix in packages/loopover-mcp/bin/loopover-mcp.js (a stale
claim that enrichment-analyzers "keeps its legacy gittensory:// URI on purpose" --
it was already loopover:// per #6786) dropped that file's tracked "gittensory"
mention count from 3 to 2.
Verified: all ~20 affected files pass individually and together (1621 tests), a clean
typecheck, and a full local npm run test:ci pass with zero failures attributable to
this change (two unrelated, pre-existing failures surfaced -- a terraform/ directory
deliberately removed in a separate prior commit leaving a stale test behind, and a
self-host Sentry release script already renamed to loopover-selfhost while its test
still pinned the old value -- both confirmed unrelated via git blame/content diff and
left for a separate follow-up).
…pover-orb
test/helpers/d1.ts's createTestEnv() defaulted GITHUB_APP_SLUG to "gittensory" --
the pre-rename product name -- even though the real, live canonical GitHub App is
"loopover-orb" (src/services/subnet-interface.ts's PUBLIC_GITHUB_APP_SLUG, "the same
stable, real app across every deployment") and production's own unset-fallback is
"loopover" (src/api/routes.ts). Surfaced while investigating an unrelated flaky-test
report: two tests (test/unit/github-labels.test.ts, test/unit/github-pr-actions.test.ts)
constructed a fresh RSA key and D1 database per loop iteration; fixing that (a separate,
already-merged PR) revealed the shared default itself was stale.
Renames the default to "loopover-orb" and updates every fixture across ~20 files that
depends on it -- bot-login strings ("gittensory[bot]" -> "loopover-orb[bot]"), check-run
app.slug fixtures, explicit GITHUB_APP_SLUG overrides, and one test that asserts on the
project-slug value directly. Left untouched (confirmed deliberately preserved, not
stale): sticky-comment HTML markers, the "gittensory-native" DB-source literal, Sentry
ticket IDs, the GITTENSORY_LEGACY_*_CHECK_NAME upgrade-compatibility constants, and the
"JSONbored/gittensory" generic-placeholder-repo-name pattern used across ~144 files
(NOT swapped for "JSONbored/loopover", which is a live self-repo sentinel value that
would silently change unrelated tests' behavior).
Two subtleties worth noting for future reference:
- A function's matching semantics matter: isOwnReviewThreadAuthor does PREFIX matching,
so its own dedicated test (backfill-2.test.ts) needed an explicit bare "loopover"
override to keep testing multiple suffix forms, rather than inheriting the new
"loopover-orb" default -- a bare "loopover[bot]" fixture would not prefix-match a
"loopover-orb" configured slug.
- Regenerated scripts/branding-drift-baseline.json (npm run branding-drift:update)
after a one-line comment fix in packages/loopover-mcp/bin/loopover-mcp.js (a stale
claim that enrichment-analyzers "keeps its legacy gittensory:// URI on purpose" --
it was already loopover:// per #6786) dropped that file's tracked "gittensory"
mention count from 3 to 2.
Verified: all ~20 affected files pass individually and together (1621 tests), a clean
typecheck, and a full local npm run test:ci pass with zero failures attributable to
this change (two unrelated, pre-existing failures surfaced -- a terraform/ directory
deliberately removed in a separate prior commit leaving a stale test behind, and a
self-host Sentry release script already renamed to loopover-selfhost while its test
still pinned the old value -- both confirmed unrelated via git blame/content diff and
left for a separate follow-up).
This session found and fixed real behavioral drift left over from the loopover rebrand -- a hardcoded MCP resource URI (JSONbored#6786), a Qdrant collection default, and metric names that only got caught by manual investigation. scripts/check-branding-drift.mjs snapshots today's known "gittensory" mentions in executable src/ and packages/*/{bin,lib,src} code (test/**, docs, and CHANGELOGs are excluded -- those legitimately reference the rename permanently) and fails CI if a file's count rises without the baseline being regenerated, the same generated-artifact convention this repo already uses for openapi.json and cf-typegen. Wired into npm run test:ci via a new branding-drift:check script; branding-drift:update regenerates the baseline for an intentional change.
JSONbored#6786 removed the last 3 gittensory references in loopover-mcp.js, routes.ts, and enrichment-analyzers-taxonomy.ts; JSONbored#6788's baseline (merged around the same time) predated that fix, so main's own branding-drift:check has been red since both landed.
#8661) The BRANDING_DRIFT_PATHSPECS listed both .ts and .tsx for the apps/* scope but only .ts for packages/*, despite the header framing packages/*/src as mirroring apps/*. That left the 48 loopover-ui-kit .tsx design-system components — the repo's highest-reuse UI surface — outside the git-grep scan, so a reintroduced pre-rebrand string in any of them would never trip the check (the exact class of bug #6786). Add the missing packages/*/src/**/*.tsx pathspec. No packages .tsx file currently contains a flagged string, so the baseline is unchanged. Closes #8657 Co-authored-by: bitfathers94 <237535319+bitfathers94@users.noreply.github.com>
Summary
ENRICHMENT_ANALYZERS_URIwas stillgittensory://enrichment-analyzers, while its siblingFINDING_TAXONOMY_URI(added in the same MCP: add REST routes + CLI resource mirrors for finding-taxonomy and enrichment-analyzers #6620 PR) already usesloopover://finding-taxonomy— a straggler from the rebrand, not an intentional legacy reference (unlike theGITTENSORY_LEGACY_*check-run-name constants, nothing here is annotated as pre-rename/compat).src/review/enrichment-analyzers-taxonomy.ts,src/mcp/server.tsalready referenced the constant so no change needed there) and the standalone@loopover/mcpCLI package (packages/loopover-mcp/bin/loopover-mcp.js), which independently registers the same resource.git grepthat zero references to the old URI remain anywhere in the tracked repo.Scope
Validation
npx vitest run test/unit/enrichment-analyzers-taxonomy.test.ts test/unit/mcp-discovery.test.ts test/unit/mcp-enrichment-analyzers.test.ts test/unit/routes-taxonomy-mirrors.test.ts— 34/34 passingnpm run typecheck— cleangit grep -n "gittensory://enrichment-analyzers"— zero hits repo-wide