You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Two browser-extension products live in this repo and are confirmed unused: @loopover/extension (apps/loopover-extension, a maintainer-facing Chrome MV3 overlay for GitHub PRs) and @loopover/miner-extension (apps/loopover-miner-extension, a contributor-facing Chrome MV3 overlay for GitHub issues). Neither is published anywhere external — no VS Code Marketplace, no Chrome Web Store, no vsce/ovsx step anywhere in the repo (confirmed by a full grep sweep) — so removal is pure in-repo deletion with zero external deprecation to file.
They are not a two-file deletion, though. A full-repo audit (2026-07-25) found:
Both packages share build tooling (scripts/build-extension.ts, scripts/build-miner-extension.ts, scripts/extension-zip-core.ts) and are wired together in the SAME ci.yml steps (Extension lint/Extension typecheck run both via one turbo run ... --filter=@loopover/extension --filter=@loopover/miner-extension invocation each) and the same ui-deploy.yml "Validate frontend" step — they cannot be removed independently without an intermediate broken-CI state.
apps/loopover-extension alone has a dedicated, live marketing/download page on the public site (apps/loopover-ui/src/routes/extension.tsx, route /extension) with a working "Download extension" button and an ExtensionTokenButton component that calls a real backend endpoint (POST /v1/auth/extension/session) to mint and copy a session token — this is a functioning feature, not dead markup.
The root Cloudflare Worker (src/) has a real, substantial backend surface built specifically to serve these two clients: 3+ REST endpoints (/v1/auth/extension/session, /v1/extension/pull-context, /v1/extension/contributors/:login/{issue-fit,issue-badges,pr-status}), an entire dedicated signals module (src/signals/extension-contributor-context.ts), auth-scope constants, OpenAPI registrations, and a "browser_extension" member of the shared ProductUsageSurface type. This backend surface has no other consumer — once both extension clients are deleted, it becomes unreachable dead code unless removed too.
12 root-level test/unit/*.test.ts files (outside both app directories) readFileSync/import the app directories' raw source files directly (e.g. test/unit/extension-background.test.ts, test/unit/miner-extension-icons.test.ts, test/unit/ci-extension-packages.test.ts) and will fail with ENOENT the moment the directories are deleted, unless removed in the same change.
Sequencing (sub-issues; the dependency graph is the schedule — this order specifically avoids a live broken-download-link window)
Remove the maintainer-extension's UI surface from apps/loopover-ui first — the public download page, nav links, and docs section. Landing this before the package/build removal means the download link disappears before the zip it points to stops being generated, never the other way around.
Delete both browser-extension packages and their shared build/CI/npm-script wiring — blocked-by feat(docs): add install site and mcp diagnostics #1. The two packages, their build scripts, turbo.json/ci.yml/package.json wiring, and the 12 root-level tests that read their source, all in one change (they cannot be split — the CI steps invoke both packages together).
Remove the orphaned backend extension-serving API surface from src/ — blocked-by chore(release): prepare public gittensory launch #2. Only safe once no client code (in this repo) still references these endpoints.
Deliverables
None at the epic level — every deliverable lives in a sub-issue. The epic closes when every sub-issue does.
Links & Resources
Full audit findings (exact file/line references) are inlined into each sub-issue's own body — this epic is the sequencing shell, not a duplicate of that detail.
Boundaries
No packages/* workspace references either extension (confirmed) — this is fully contained to apps/loopover-extension/**, apps/loopover-miner-extension/**, apps/loopover-ui/**, src/**, root config (turbo.json, package.json, .gitignore), CI (.github/workflows/**), and docs. No external store/publish cleanup needed (confirmed none exists). No codecov.yml edit needed (neither package's coverage is uploaded to Codecov today).
maintainer-only — epic; work the sub-issues, not this shell.
Problem
Two browser-extension products live in this repo and are confirmed unused:
@loopover/extension(apps/loopover-extension, a maintainer-facing Chrome MV3 overlay for GitHub PRs) and@loopover/miner-extension(apps/loopover-miner-extension, a contributor-facing Chrome MV3 overlay for GitHub issues). Neither is published anywhere external — no VS Code Marketplace, no Chrome Web Store, novsce/ovsxstep anywhere in the repo (confirmed by a full grep sweep) — so removal is pure in-repo deletion with zero external deprecation to file.They are not a two-file deletion, though. A full-repo audit (2026-07-25) found:
scripts/build-extension.ts,scripts/build-miner-extension.ts,scripts/extension-zip-core.ts) and are wired together in the SAMEci.ymlsteps (Extension lint/Extension typecheckrun both via oneturbo run ... --filter=@loopover/extension --filter=@loopover/miner-extensioninvocation each) and the sameui-deploy.yml"Validate frontend" step — they cannot be removed independently without an intermediate broken-CI state.apps/loopover-extensionalone has a dedicated, live marketing/download page on the public site (apps/loopover-ui/src/routes/extension.tsx, route/extension) with a working "Download extension" button and anExtensionTokenButtoncomponent that calls a real backend endpoint (POST /v1/auth/extension/session) to mint and copy a session token — this is a functioning feature, not dead markup.src/) has a real, substantial backend surface built specifically to serve these two clients: 3+ REST endpoints (/v1/auth/extension/session,/v1/extension/pull-context,/v1/extension/contributors/:login/{issue-fit,issue-badges,pr-status}), an entire dedicated signals module (src/signals/extension-contributor-context.ts), auth-scope constants, OpenAPI registrations, and a"browser_extension"member of the sharedProductUsageSurfacetype. This backend surface has no other consumer — once both extension clients are deleted, it becomes unreachable dead code unless removed too.test/unit/*.test.tsfiles (outside both app directories)readFileSync/import the app directories' raw source files directly (e.g.test/unit/extension-background.test.ts,test/unit/miner-extension-icons.test.ts,test/unit/ci-extension-packages.test.ts) and will fail with ENOENT the moment the directories are deleted, unless removed in the same change.Sequencing (sub-issues; the dependency graph is the schedule — this order specifically avoids a live broken-download-link window)
apps/loopover-uifirst — the public download page, nav links, and docs section. Landing this before the package/build removal means the download link disappears before the zip it points to stops being generated, never the other way around.src/— blocked-by chore(release): prepare public gittensory launch #2. Only safe once no client code (in this repo) still references these endpoints.Deliverables
None at the epic level — every deliverable lives in a sub-issue. The epic closes when every sub-issue does.
Links & Resources
Full audit findings (exact file/line references) are inlined into each sub-issue's own body — this epic is the sequencing shell, not a duplicate of that detail.
Boundaries
No
packages/*workspace references either extension (confirmed) — this is fully contained toapps/loopover-extension/**,apps/loopover-miner-extension/**,apps/loopover-ui/**,src/**, root config (turbo.json,package.json,.gitignore), CI (.github/workflows/**), and docs. No external store/publish cleanup needed (confirmed none exists). Nocodecov.ymledit needed (neither package's coverage is uploaded to Codecov today).maintainer-only — epic; work the sub-issues, not this shell.