Skip to content

build: delete both browser-extension packages and their shared build/CI/npm-script wiring #8598

Description

@JSONbored

Problem

Both browser-extension workspace packages are confirmed unused and are being deleted (parent epic). They must be removed together, in one change: ci.yml's lint/typecheck steps invoke both packages in a single turbo run ... --filter=@loopover/extension --filter=@loopover/miner-extension command each, and ui-deploy.yml's "Validate frontend" step chains both packages' npm scripts in one && sequence — deleting one package first would break these steps immediately, before the second package is removed. Blocked-by the previous sub-issue (the UI download page must be gone before this lands, so there is never a live broken download link).

Full audit findings (2026-07-25), organized by what needs to change:

Directories and scripts to delete entirely

  • apps/loopover-extension/ (8 files: .gitignore, auth.js, background.js, content.js, manifest.json, options.html, options.js, package.json, styles.css)
  • apps/loopover-miner-extension/ (21 files: source .js/.html/.css/.d.ts, 4 PNG icons, its own README.md, vitest.config.ts, package.json, and its test/ subdirectory of 5 test files)
  • scripts/build-extension.ts, scripts/build-miner-extension.ts
  • scripts/extension-zip-core.ts — verify nothing else imports this shared zip-writer before deleting; at audit time only the two build scripts and test/unit/build-extension-zip-script.test.ts (also being deleted, see below) referenced it.

Root-level tests to delete (all read/import the app directories' raw source directly; they will ENOENT the moment the directories above are gone)

  • test/unit/build-extension-zip-script.test.ts
  • test/unit/ci-extension-packages.test.ts
  • test/unit/extension-auth.test.ts
  • test/unit/extension-background.test.ts
  • test/unit/extension-content.test.ts
  • test/unit/extension-options.test.ts
  • test/unit/miner-extension-content.test.ts
  • test/unit/miner-extension-icons.test.ts
  • test/unit/miner-extension-live-fetch.test.ts
  • test/unit/codecov-policy.test.ts — do not delete this file (it covers other policy assertions too); remove only its it("keeps miner-ui and miner-extension under app-local coverage gates (#4865)"...) test case and the @loopover/miner-extension run test substring assertion inside it.

Do not delete test/unit/extension-contributor-context.test.ts or test/unit/routes-extension.test.ts here — both test backend (src/) logic, not the app directories, and are in scope for the next sub-issue instead.

turbo.json

Remove all 5 task blocks: @loopover/extension#lint, @loopover/extension#typecheck, @loopover/extension#build, @loopover/miner-extension#lint, @loopover/miner-extension#typecheck, @loopover/miner-extension#build. Remove "@loopover/extension#build", "@loopover/miner-extension#build" from @loopover/ui#build's dependsOn array (leave "^build" in place). Remove "apps/loopover-extension/**" and "apps/loopover-miner-extension/**" from the root //#typecheck task's inputs array (and trim the accompanying comment's mention of them as part of the six cross-package reach paths it lists).

.github/workflows/ci.yml

  • Remove 'apps/loopover-extension/**' and 'apps/loopover-miner-extension/**' from the changes job's ui: path-filter list, and 'scripts/build-extension.ts' / 'scripts/build-miner-extension.ts'.
  • Remove the UI tests (miner-extension), Extension lint, and Extension typecheck steps entirely.
  • Update the comment preceding the "UI build" step (currently explains the @loopover/ui#build dependsOn resolving "the exact same extension + miner-extension build pair") to no longer reference either package.
  • Sweep the remaining ~7 comment-only mentions of "extension"/"Extension" in step-ordering rationale elsewhere in the file and remove or reword them so nothing describes a step that no longer exists.

.github/workflows/ui-deploy.yml

Rewrite the "Validate frontend" step's command, dropping npm run extension:lint && npm run miner-extension:lint && npm run extension:typecheck && npm run miner-extension:typecheck && npm run extension:build && npm run miner-extension:build — keep npm run ui:openapi:check && npm run ui:lint && npm run ui:typecheck && npm --workspace @loopover/ui run build (verify against the file's actual current content at implementation time; do not assume this quoted form is still exact if other changes have landed in between).

.github/actions/deploy-ui-preview/action.yml

Update the comment mentioning /downloads/loopover-extension.zip by name (justifying why .zip is an allowed static-asset extension) — the .zip extension itself stays allowlisted (other things may still use it), only the stale example reference needs rewording or removal.

Root package.json

  • Remove the scripts: extension:build, extension:lint, extension:typecheck, miner-extension:build, miner-extension:lint, miner-extension:typecheck.
  • Edit ui:build to drop && npm run extension:build && npm run miner-extension:build from its chain.
  • Edit ui:test to drop && npm --workspace @loopover/miner-extension run test from its chain.
  • The workspaces array itself (["apps/*", "packages/*"]) needs no edit — both packages are matched via the apps/* glob, not listed by name; deleting the directories removes them from the resolved workspace set automatically.

.gitignore

Remove the apps/loopover-ui/public/downloads/loopover-extension.zip line (dead once nothing generates it).

package-lock.json

Regenerate via npm install after the above — do not hand-edit; verify the apps/loopover-extension/apps/loopover-miner-extension workspace entries and their node_modules/@loopover/{extension,miner-extension} entries are gone from the result.

Docs

  • CONTRIBUTING.md: remove the extension conventional-commit scope token from its accepted-scopes list (line ~326), and reword the "screenshot evidence for ... extension changes" bullet (line ~137) to drop the extension mention.
  • .claude/skills/contributing-to-loopover/SKILL.md: remove the paragraph naming extension:lint/extension:typecheck/miner-extension:lint/miner-extension:typecheck as a test:ci exception.
  • .claude/skills/contributing-to-loopover/reference.md: remove the ui → extension lint and ui → extension typecheck table rows and the accompanying "One CI-gating exception... does NOT cover" paragraph, plus the apps/loopover-extension/**/apps/loopover-miner-extension/** mention in whatever surrounding sentence references them.
  • .claude/skills/contributor-pipeline-gardening/reference.md: reword the sentence mentioning apps/loopover-miner-extension (line ~33) to drop it.

Requirements

⚠️ This must land as one PR, not split across multiple — the shared CI/build wiring above means an intermediate state with only one package deleted breaks ci.yml and ui-deploy.yml outright.

  • After the change: npm run test:ci passes end to end with no reference to either package anywhere in its own script chain (ui:build, ui:test, and everything else it calls).
  • npx turbo run build --filter=@loopover/ui succeeds with no @loopover/extension#build/@loopover/miner-extension#build dependency in its graph.
  • No dangling reference to either package name, either app directory path, build-extension.ts, build-miner-extension.ts, or extension-zip-core.ts anywhere in the repo outside src/** (the backend surface, explicitly out of scope here — next sub-issue).

Deliverables

  • Both app directories, both build scripts, and extension-zip-core.ts deleted
  • All 9 root-level app-source-reading tests deleted; codecov-policy.test.ts trimmed (not deleted)
  • turbo.json, ci.yml, ui-deploy.yml, deploy-ui-preview/action.yml, root package.json, .gitignore all updated per the exact list above
  • package-lock.json regenerated
  • All listed docs updated
  • Full local gate (npm run test:ci) green

Links & Resources

Parent epic; the UI-surface removal sub-issue (blocked-by). apps/loopover-miner-ui/README.md and apps/loopover-miner-ui/vite-ranked-candidates-api.ts each have one comment-only mention of apps/loopover-miner-extension (no code import) — reword both so they don't reference a deleted package, but no functional change needed there (that app's local API stays as-is; it just no longer needs to describe itself as serving the now-removed extension).

Boundaries

Does not touch src/** (the backend API surface) — that is the next sub-issue, blocked on this one closing first. Does not touch anything under apps/loopover-ui/src/routes/extension.tsx or its nav links — those must already be gone (the previous sub-issue).

maintainer-only — repo-structure and CI-configuration authority.

Metadata

Metadata

Assignees

Labels

maintainer-onlyOwner-only work — yields no Gittensor points.roadmapOn the Wave-2 agent-layer roadmap board (project 9)

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions