Skip to content

feat(cli)!: Phase 3 - full-cutover rename CLI binaries to loopover-* - #5728

Merged
JSONbored merged 2 commits into
mainfrom
rebrand-phase3-cli-bin
Jul 14, 2026
Merged

feat(cli)!: Phase 3 - full-cutover rename CLI binaries to loopover-*#5728
JSONbored merged 2 commits into
mainfrom
rebrand-phase3-cli-bin

Conversation

@JSONbored

Copy link
Copy Markdown
Owner

Summary

Phase 3 of the gittensory -> loopover rebrand epic (#5705): full-cutover rename of all three CLI executables, no dual-support aliases.

  • gittensory-miner -> loopover-miner (packages/gittensory-miner)
  • gittensory-miner-mcp -> loopover-miner-mcp (packages/gittensory-miner)
  • gittensory-mcp -> loopover-mcp (packages/gittensory-mcp)

Updates every downstream reference: package.json bin fields, build scripts, --help/usage text and error messages, shell completion scripts, the Dockerfile ENTRYPOINT + its GITTENSORY_VERSION build ARG (now LOOPOVER_VERSION), CI publish-workflow smoke-test assertions, deployment-docs-audit.js's subcommand-claim regex, the miner/mcp package allowlist checkers, and all CLI-example prose across README.md, DEPLOYMENT.md, and packages/*/docs/*.md.

Two real bugs found and fixed while verifying against the full test suite

Not cosmetic renames — functional regressions the rename would otherwise have caused or left in place:

  1. src/services/client-telemetry.ts's x-gittensory-mcp-{package,version,client,client-version} HTTP headers renamed to x-loopover-mcp-* on both the CLI (sender) and server (reader) sides — fixing only one side would have silently broken MCP client telemetry ingestion. Also fixed clientNameFromPackage's hardcoded "gittensory-mcp" string fallback.
  2. src/db/repositories.ts's summarizeMcpCompatibilityAdoption() had a legacy clientName match (eq(clientName, "gittensory-mcp") / "gittensory-mcp-cli") used to select MCP-surfaced usage events that don't set surface: "mcp" (e.g. /v1/local/branch-analysis, surface: "api"). Left un-updated, this would have silently excluded every correctly-renamed loopover-mcp-cli event from the MCP compatibility dashboard the moment the client-side rename shipped — caught via a real integration-test count regression, not a stale-assertion update.

BREAKING CHANGE: gittensory-miner, gittensory-miner-mcp, and gittensory-mcp no longer exist as installed binaries; use loopover-miner, loopover-miner-mcp, and loopover-mcp. No dual-read/alias, per the epic's full-cutover mandate. A global npm install/link of the old package names must be reinstalled (npm install -g @loopover/miner @loopover/mcp).

Test plan

  • npx vitest run — full suite: 835 test files / 16212 tests pass
  • npm run typecheck clean
  • npm run docs:drift-check / npm run manifest:drift-check / npm run command-reference:check clean
  • npm run miner:env-reference regenerated
  • npx tsx scripts/write-ui-openapi.ts --check clean

…/gittensory-mcp CLI binaries to loopover-*

Phase 3 of the gittensory -> loopover rebrand (#5705): renames all three
CLI executables and their backing bin/*.js files, full cutover per the
epic's mandate (no dual-support aliases):

- gittensory-miner -> loopover-miner (packages/gittensory-miner)
- gittensory-miner-mcp -> loopover-miner-mcp (packages/gittensory-miner)
- gittensory-mcp -> loopover-mcp (packages/gittensory-mcp)

Updates every downstream reference: package.json bin fields, build
scripts, --help/usage text and error messages, shell completion scripts,
the Dockerfile ENTRYPOINT + its GITTENSORY_VERSION build ARG (now
LOOPOVER_VERSION), CI publish-workflow smoke-test assertions, the
deployment-docs-audit.js subcommand-claim regex, the miner/mcp package
allowlist checkers, and all CLI-example prose across README.md,
DEPLOYMENT.md, and packages/*/docs/*.md.

Also fixes two real bugs surfaced while verifying this against the full
test suite (not cosmetic renames, functional regressions the rename
would otherwise have caused or left in place):
- src/services/client-telemetry.ts's x-gittensory-mcp-{package,version,
  client,client-version} HTTP headers renamed to x-loopover-mcp-* on
  both the CLI (sender) and server (reader) sides -- fixing only one
  side would have silently broken MCP client telemetry ingestion.
  Also fixed clientNameFromPackage's hardcoded "gittensory-mcp" string
  fallback.
- src/db/repositories.ts's summarizeMcpCompatibilityAdoption() had a
  legacy clientName match (`eq(clientName, "gittensory-mcp")` /
  `"gittensory-mcp-cli"`) used to select MCP-surfaced usage events that
  don't set surface="mcp" (e.g. /v1/local/branch-analysis, surface=
  "api"). Left un-updated, this would have silently excluded every
  correctly-renamed loopover-mcp-cli event from the MCP compatibility
  dashboard the moment the client-side rename shipped.

BREAKING CHANGE: `gittensory-miner`, `gittensory-miner-mcp`, and
`gittensory-mcp` no longer exist as installed binaries; use
`loopover-miner`, `loopover-miner-mcp`, and `loopover-mcp`. No
dual-read/alias, per the epic's full-cutover mandate. A global npm
install/link of the old package names must be reinstalled.
@superagent-security

Copy link
Copy Markdown
Contributor

Superagent didn't find any vulnerabilities or security issues in this PR.

@codecov

codecov Bot commented Jul 14, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 95.06%. Comparing base (14edb77) to head (fd24ae4).
⚠️ Report is 5 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #5728   +/-   ##
=======================================
  Coverage   95.06%   95.06%           
=======================================
  Files         581      581           
  Lines       46169    46169           
  Branches    14811    14811           
=======================================
+ Hits        43891    43892    +1     
+ Misses       1517     1516    -1     
  Partials      761      761           
Flag Coverage Δ
shard-1 43.97% <37.50%> (+<0.01%) ⬆️
shard-2 35.72% <20.00%> (ø)
shard-3 32.28% <35.00%> (ø)
shard-4 33.01% <37.50%> (+<0.01%) ⬆️
shard-5 31.59% <20.00%> (+<0.01%) ⬆️
shard-6 44.46% <85.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
packages/gittensory-miner/lib/attempt-cli.js 97.71% <100.00%> (ø)
packages/gittensory-miner/lib/calibration-cli.js 100.00% <100.00%> (ø)
packages/gittensory-miner/lib/claim-ledger-cli.js 99.41% <100.00%> (ø)
packages/gittensory-miner/lib/cli.js 100.00% <ø> (ø)
packages/gittensory-miner/lib/deny-check.js 87.80% <100.00%> (ø)
...ages/gittensory-miner/lib/deployment-docs-audit.js 100.00% <100.00%> (ø)
packages/gittensory-miner/lib/discover-cli.js 100.00% <100.00%> (ø)
packages/gittensory-miner/lib/event-ledger-cli.js 98.27% <100.00%> (ø)
packages/gittensory-miner/lib/feasibility-cli.js 100.00% <100.00%> (ø)
...ckages/gittensory-miner/lib/governor-ledger-cli.js 98.59% <100.00%> (ø)
... and 16 more
🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@loopover-orb loopover-orb Bot added the gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier. label Jul 14, 2026
@loopover-orb

loopover-orb Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Caution

🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥

🛑 LoopOver review result - fixes required

Review updated: 2026-07-14 09:06:49 UTC

119 files · 1 AI reviewer · 2 blockers · readiness 93/100 · CI failing · unstable

🛑 Suggested Action - Manual Review

Review summary
This is a large, mechanical Phase 3 rename PR that swaps `gittensory-*` CLI binary names for `loopover-*` across bin fields, help/usage text, completion scripts, Dockerfile ENTRYPOINT/ARG, docs-audit regexes, package allowlists, and CI/publish workflow smoke tests, plus two genuine functional fixes (MCP telemetry headers renamed on both sender and reader sides in client-telemetry.ts, and a hardcoded legacy client-name match in repositories.ts per the description). The visible hunks are internally consistent — bin field renames match Dockerfile ENTRYPOINT, publish-workflow assertions, and package allowlist checks — and the client-telemetry.ts header rename is correctly applied symmetrically. The `src/db/repositories.ts` fix described in the PR body is not present in the visible (truncated) diff, so I can't directly verify it.

Nits — 5 non-blocking
  • packages/gittensory-mcp/bin/loopover-mcp.js — buildFishCompletion's returned comment still says 'Save to: ~/.config/fish/completions/gittensory-mcp.fish' instead of loopover-mcp.fish, leaving a stale path in generated user-facing output.
  • packages/gittensory-mcp/bin/loopover-mcp.js — the internal bash/zsh completion function is still named `_gittensory_mcp` while `complete -F _gittensory_mcp loopover-mcp` binds it to the new command name; harmless but inconsistent naming inside the generated script.
  • Could not verify the described src/db/repositories.ts `summarizeMcpCompatibilityAdoption()` fix since that hunk is not present in the truncated diff shown — worth a direct look to confirm both the old and new clientName strings are handled.
  • Rename the internal completion function `_gittensory_mcp` to `_loopover_mcp` for consistency in packages/gittensory-mcp/bin/loopover-mcp.js's buildBashCompletion/buildZshCompletion.
  • Fix the stale fish-completion save-path comment in buildFishCompletion to reference loopover-mcp.fish.

Why this is blocked

  • No linked issue detected — If this PR is intended to solve an issue, link it explicitly in the PR body.
  • Maintainer requires a linked issue — Link the relevant issue (for example Closes #123) before opening the PR.
📋 Copy for AI agents — paste into your coding agent
Fix the following blocker(s) from this PR review:

1. No linked issue detected — If this PR is intended to solve an issue, link it explicitly in the PR body.

2. Maintainer requires a linked issue — Link the relevant issue (for example `Closes #123`) before opening the PR.

CI checks failing

  • codecov/patch — 97.50% of diff hit (target 99.00%)
Signal Result Evidence
Code review ❌ 2 blockers 1 reviewer
Linked issue ⚠️ Missing No linked issue or no-issue rationale found.
Related work ✅ No active overlap found No same-issue or scoped active PR overlap found.
Change scope ✅ 20/20 Low review scope from cached public metadata (no linked issue context).
Validation posture ✅ 25/25 PR body includes validation/test evidence.
Contributor workload ✅ 10/10 Author activity: 45 registered-repo PR(s), 37 merged, 310 issue(s).
Contributor context ✅ Confirmed Gittensor contributor JSONbored; Gittensor profile; 45 PR(s), 310 issue(s).
Gate result ❌ Blocking Repo-configured hard blocker found.
Improvement ✅ Minor risk: clean · value: minor — Code changes are accompanied by test evidence.
Review context
  • Author: JSONbored
  • Role context: owner (maintainer lane)
  • Public audience mode: oss maintainer
  • Lane context: Repository is configured for direct PR review.
  • Public profile languages: not available
  • Official Gittensor activity: 45 PR(s), 310 issue(s).
  • PR-specific overlap: none found.
Contributor next steps
  • Treat this as maintainer-lane context rather than normal contributor-lane activity.
  • Explain no-issue PR.
  • Link the issue being solved, or explicitly explain why this is a no-issue PR.
Signal definitions
  • Related work = same linked issue, overlapping active PRs, or title/path similarity.
  • Change scope = cached public metadata such as size labels, draft state, and review-burden hints.
  • Validation posture = whether the PR provides enough public validation/test evidence for maintainer review.
  • Contributor workload = public contributor activity and cleanup pressure, not a repo-wide quality failure.
  • Contributor context = public GitHub/Gittensor identity context; non-Gittensor status is not a blocker.
[BETA] Chat with Gittensory

Ask Gittensory a question about this PR directly in a comment — grounded only in the same cached, public-safe facts shown above, never a new claim.

  • @gittensory ask &lt;question&gt; answers contribution-quality Q&A with source citations and freshness.
  • @gittensory chat &lt;question&gt; answers in natural prose from cached decision-pack facts via local inference (maintainer/collaborator; read-only).
  • A plain-language @gittensory mention with a real question is routed to the closest matching read-only command automatically -- no exact syntax required.

Full command reference: https://gittensory.aethereal.dev/docs/gittensory-commands

Visual preview
Route Viewport Before (production) After (this PR's preview) Diff
/ desktop before / after /
/ mobile before / (mobile) after / (mobile)

Click any thumbnail to open the full-size screenshot. Before = production · After = this PR's preview deploy.

🟩 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.

  • Re-run LoopOver review

@loopover-orb loopover-orb Bot added the manual-review Gittensor contributor context label Jul 14, 2026
parseManageStatusArgs's "Usage: loopover-miner manage status [--json]"
error path (a stray non-flag argument) had no covering test -- only the
sibling "Unknown option" (flag-shaped) branch was exercised.
@JSONbored
JSONbored merged commit f2ee2ad into main Jul 14, 2026
18 checks passed
@JSONbored
JSONbored deleted the rebrand-phase3-cli-bin branch July 14, 2026 09:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier. manual-review Gittensor contributor context

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant