Skip to content

Epic: complete the gittensory -> loopover rebrand (full cutover, no dual-support) #5705

Description

@JSONbored

Problem

The LoopOver rebrand milestone shows every scoped sub-issue closed except the GitHub repo rename (#4771, deliberately gated on stability) and the brand mark (#4764, blocked on a design asset). Despite that, a full repo audit (2026-07-14) found the rebrand is nowhere near complete outside the surfaces those closed issues actually covered (npm publish scope, HTTP User-Agent strings, check-run names, PR-comment bot username, extension display names, Cloudflare Worker/domain/Queue names). Everything below was never in scope for any closed issue.

Decision: full cutover, not dual-support, for every item below — including the three genuinely breaking-change items (bot mention command, CLI binary names, MCP server/tool names). Old naming stops working; this is deliberate, not an oversight. Any commit executing a breaking-change item must mark it as such (conventional-commit !/BREAKING CHANGE: footer) so release-please major-version-bumps the affected npm package correctly.

Area

Repo-wide (src/, packages/, apps/, .github/workflows/, docs, infra configs)

Scope — by phase, roughly safest/most-mechanical first

Phase 1 — env var family (mechanical, full cutover)

  • Rename GITTENSORY_MINER_*LOOPOVER_MINER_* across all 130 files (499 occurrences): packages/gittensory-miner/lib/**, packages/gittensory-engine/src/governor/{action-mode,kill-switch}.ts, k8s/miner-deployment.yaml, docker-compose.yml, systemd/*.service.example, grafana/provisioning/datasources/ams-ledgers.yml, .env.example, .gittensory-miner.env.example, all packages/gittensory-miner/docs/*.md, packages/gittensory-miner/lib/cli.js's own --help text
  • Same cutover for the secondary GITTENSORY_* family in docker-compose.yml (GITTENSORY_API_TOKEN_FILE, GITTENSORY_MCP_TOKEN_FILE, GITTENSORY_MEM_LIMIT, GITTENSORY_REPORTING_SOURCE_DB, GITTENSORY_REPORTING_DIR, GITTENSORY_REPORTING_DB)
  • Regenerate packages/gittensory-miner/docs/env-reference.md and root self-host env-reference doc after every var is renamed (regenerate LAST, per this repo's own documented gotcha)

Phase 2 — bot mention command (full cutover)

  • src/github/commands.ts:279 — change the dispatch regex from @gittensory to @loopover
  • src/review/planner.ts:32 and every other @gittensory-matching call site (~24 files in src/)
  • Update all generated help text / PR-comment strings (src/github/commands.ts:946-965, src/settings/agent-actions.ts:559,578,1105, src/api/routes.ts:4119-4247's command catalog)
  • .loopover.yml.example — fix the 11 remaining @gittensory references in its own docs/comments
  • Root README.md CLI/bot-mention examples

Phase 3 — CLI binary names (full cutover)

  • packages/gittensory-miner/package.json "bin": gittensory-miner/gittensory-miner-mcploopover-miner/loopover-miner-mcp
  • packages/gittensory-mcp/package.json "bin": gittensory-mcploopover-mcp
  • packages/gittensory-miner/lib/cli.js:12 help text ("Foundation CLI for the local Gittensory miner runtime.")
  • .github/workflows/publish-miner.yml:118-119, publish-mcp.yml:112 — update the post-publish smoke-test assertions to the new bin names/help text
  • packages/gittensory-miner/Dockerfile:37 ENTRYPOINT, and its docker build -t example comment
  • All CLI examples across README.md, packages/gittensory-miner/README.md, DEPLOYMENT.md, and packages/gittensory-miner/docs/*.md

Phase 4 — MCP server + tool names (full cutover)

  • src/mcp/server.ts — server registration name: "gittensory""loopover", class GittensoryMcp → renamed
  • All 96 gittensory_*-prefixed tool names → loopover_* (106 string-literal occurrences)
  • All tool description: fields with bare "Gittensory" prose (65 occurrences)
  • Prometheus metric names in packages/gittensory-miner/lib/*.js (gittensory_miner_predictions_total etc., 12+ distinct names) + grafana/dashboards/miner-usage.json panel queries that reference them
  • grafana/dashboards/gittensory.json file itself (rename + its own internal references)

Phase 5 — directory renames (mechanical, coordinated)

  • apps/gittensory-uiapps/loopover-ui, apps/gittensory-miner-uiapps/loopover-miner-ui, apps/gittensory-extensionapps/loopover-extension, apps/gittensory-miner-extensionapps/loopover-miner-extension
  • packages/gittensory-enginepackages/loopover-engine, packages/gittensory-minerpackages/loopover-miner, packages/gittensory-mcppackages/loopover-mcp, packages/gittensory-ui-kitpackages/loopover-ui-kit
  • Fix all ~254 relative-import statements this breaks (majority in test/, scriptable)
  • release-please-config.json + .release-please-manifest.json — update the directory-path component-identity keys atomically with the git mvs (real release-tooling risk if done separately)
  • .github/workflows/ci.yml's dorny/paths-filter-style filters, .github/workflows/ui-preview.yml's paths: block, .github/workflows/publish-*.yml's hardcoded paths, .github/workflows/mcp-release-please.yml's component-output references
  • vitest.config.ts coverage-include globs
  • package.json scripts referencing literal paths (miner:env-reference, benchmark:miner, ui:preview, ui:deploy:built, ui:version:built, changelog:mcp, selfhost:config-lint)
  • k8s/README.md, k8s/miner-deployment.yaml Dockerfile-path references
  • The two never-npm-renamed packages: @jsonbored/gittensory-extension@loopover/extension, @jsonbored/gittensory-miner-extension@loopover/miner-extension (or equivalent), alongside their directory renames above

Phase 6 — internal code identifiers (mechanical, full cutover, do after Phase 2 since many are named after the mention-command string)

  • ~215 distinct identifiers across ~350 files in src/**, packages/*/src/**, packages/gittensory-miner/lib/** (e.g. parseGittensoryMentionCommand, runGittensoryAiReview, gittensoryFooter, resolveGittensorySelfRepoFullName, GittensoryMentionCommand type, GITTENSORY_SITE_URL/GITTENSORY_MCP_PACKAGE_NAME/etc. env-var-name constants) — scripted find/replace + typecheck pass per directory, not hand-edited one by one

Phase 7 — Docker/k8s manifests (full cutover)

  • Root Dockerfile (DATABASE_PATH=/data/gittensory.sqlite live default, comments)
  • review-enrichment/Dockerfile comment
  • k8s/miner-deployment.yaml — StatefulSet/label/service/secret names, image tag
  • k8s/miner-secret.example.yaml
  • systemd/gittensory-miner*.service.example filenames + content
  • docker-compose.yml mounted-dir convention (./gittensory-config)

Phase 8 — prose/doc cleanup + small workflow strings (do last, describes reality once everything above lands)

  • Root README.md (51 occurrences) — including fixing the ironic "Formerly Gittensory." line to actually match the body
  • packages/gittensory-miner/README.md, DEPLOYMENT.md, all 14 files under packages/gittensory-miner/docs/
  • Workflow visible strings: .github/workflows/publish-mcp.yml:85 step name, ui-preview-deploy.yml:228,286 Deployment descriptions, release-selfhost.yml's release-notes body/OCI label/Sentry project slug, orb-*-release*.yml's git tag messages, publish-*.yml's artifact name: fields

Boundaries

  • Do NOT touch GitHub repo rename / gittensor repo update #4771 (GitHub repo rename) or New brand mark & site footer #4764 (brand mark) — separately tracked, explicitly gated on their own conditions.
  • Do NOT edit CHANGELOG.md directly in any of these PRs — release-please generates it from commit messages.
  • Every breaking-change phase (2, 3, 4) needs its commit(s) marked as a real semver-breaking change so the affected npm package gets a correct major-version bump.
  • This is too large for one PR — expect this epic to resolve via a sequence of small, independently-mergeable PRs, one per phase (or sub-phase where a phase is still large), matching this repo's own PR-size discipline.

Resources

  • Full audit findings (directory/import blast-radius + text/identifier residue) — this issue's checkboxes are transcribed directly from that sweep.

Metadata

Metadata

Assignees

Labels

maintainer-onlyOwner-only work — yields no Gittensor points.

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions