chore(cli): retire the arcbox rename shim - #554
Conversation
The `arcbox` binary has been a rename shim since the CLI became `abctl`: no args printed a notice, any args exec'd `abctl`. Release packaging never shipped it (package_tarball and install.sh copy abctl, arcbox-daemon and arcbox-helper only), so it existed on dev builds alone. `setup install` used to link ~/.arcbox/bin/arcbox to it when the file was present. That link would dangle on PATH once the binary disappeared, so install now removes a stale one instead — regular files of the same name are left alone, since only links there are ours. Frees the name for reuse (CORE-50).
Greptile SummaryRetires the deprecated development-only
Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains, and the previously reported contributor-guidance inconsistency is fixed at the current head.
|
| Filename | Overview |
|---|---|
| app/AGENTS.md | Updates contributor guidance to accurately state that arcbox-cli ships only the abctl binary, resolving the previous review finding. |
| app/arcbox-cli/Cargo.toml | Removes the deprecated arcbox binary target while retaining abctl. |
| app/arcbox-cli/src/bin/arcbox_placeholder.rs | Deletes the retired rename-shim implementation. |
| app/arcbox-cli/src/commands/setup.rs | Replaces shim-link creation with symlink-only stale-link cleanup and adds focused tests. |
| docs/data-directories.md | Removes the retired compatibility symlink from the documented data-directory inventory. |
Reviews (2): Last reviewed commit: "docs(cli): drop the shim from agent guid..." | Re-trigger Greptile
There was a problem hiding this comment.
ℹ️ One missed stale reference, otherwise clean.
Reviewed changes — the full diff at 8ddaf251, plus an independent sweep of the tree for anything that still expects an arcbox binary.
- Bin target removed —
app/arcbox-cli/Cargo.tomldrops[[bin]] name = "arcbox"andsrc/bin/arcbox_placeholder.rsis deleted, socargo build -p arcbox-cliproduces onlyabctl. setup installheals instead of links — the old code linked~/.arcbox/bin/arcboxat the shim; it now callsremove_stale_shim_link, which unlinks the path only whensymlink_metadatareports a symlink.- Comment and doc fixes —
nfs_mount.rssaysabctl machine stop, and thebin/arcboxrow is gone fromdocs/data-directories.md.
I verified the claims in the description rather than taking them on trust: package_tarball.rs:18 copies target/release/abctl, scripts/install.sh installs abctl and arcbox-daemon only, the CI smoke step runs ./target/debug/abctl --help, and no workflow passes --bin arcbox. setup uninstall already removes all of ~/.arcbox/bin, so no uninstall-side change was needed, and abctl _internal brew-postflight runs SetupCommands::Install (commands/internal.rs:65), so the heal actually fires on a Homebrew upgrade. The new test is falsifiable in both directions — a metadata-based implementation fails the dangling-link case, an unconditional remove_file fails the regular-file case.
ℹ️ app/AGENTS.md still documents the shim as shipping
The stale-reference sweep missed app/AGENTS.md:9-11, which tells every agent working under app/ that arcbox-cli ships two binaries and that the shim is "pending removal". After this PR that is simply false, and root CLAUDE.md requires AGENTS.md to be updated in the same change that invalidates it (it also flags such edits as needing human approval, so it is your call rather than something to silently patch).
Technical details
# Stale shim documentation in `app/AGENTS.md`
## Affected sites
- `app/AGENTS.md:9-11` — "`arcbox-cli` ships two binaries: `abctl` (the real CLI) and `arcbox` (a deprecated shim that `exec`s `abctl`, pending removal). User-facing strings must name `abctl`."
## Required outcome
- The paragraph reflects that `arcbox-cli` ships only `abctl`, while keeping the still-valid rule that user-facing strings name `abctl`.
## Suggested approach (optional)
- Collapse to a single sentence, e.g. "`arcbox-cli` ships one binary, `abctl`; user-facing strings must name it." Root `CLAUDE.md` says changes to these files need human approval, so land it here deliberately rather than as a drive-by.ℹ️ Nitpicks
app/arcbox-daemon/src/nfs_mount.rs:114is now 88 characters against a comment block that otherwise wraps at 74-80.rustfmtwill not rewrap comments, so it stays visibly ragged; worth pullingthat isdown to the next line..github/copilot-instructions.md:16labels the top layerarcbox (CLI). That was already wrong before this PR so it is out of scope, but it is the last spot where the old name reads as the CLI's, and you may want it in the same sweep.
Claude Opus | 𝕏
app/AGENTS.md told agents that arcbox-cli ships an `arcbox` shim alongside `abctl`, which the previous commit made false. The copilot architecture diagram named the CLI `arcbox` too — wrong since the rename, and the last place the old name read as the CLI's. Also rewraps the nfs_mount comment touched in that commit; the longer command name pushed it to 88 columns against a block wrapping at 74-80.
|
All three addressed in db60c79.
|
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes — the 8ddaf251..db60c794 delta, which is documentation and comment text only, plus a fresh sweep of the tree for anything that still expects an arcbox binary.
app/AGENTS.mdno longer documents the shim — the two-binaries paragraph collapses to "arcbox-cliships one binary,abctl. User-facing strings must name it.", which retires the sole body section from the previous review and keeps the still-valid naming rule.- Layer diagram relabelled —
.github/copilot-instructions.md:16now readsabctl (CLI), removing the last place the old name read as the CLI's. nfs_mount.rscomment rewrapped — theabctl machine stopline now breaks across two lines at 84 characters, inside the surrounding block's existing 66-87 range, so the ragged edge is gone.
Nothing in this delta has a behavioral surface, so the earlier verification of the retirement itself still stands. I re-swept anyway: no bin/arcbox, debug/arcbox, release/arcbox, arcbox_placeholder, or --bin arcbox reference survives, and every remaining bare-word hit is a different thing (arcbox-machine-init, arcbox-boot, arcbox-perf, arcbox-bench-virtiofs, the VirtioFS tag, the nft table, the lib-only app/arcbox crate). The only surviving arcbox <subcommand> invocations are historical CHANGELOG.md entries, correctly left alone. Root CLAUDE.md's "thin CLI (abctl, not arcbox)" also stays accurate, since the lib-only arcbox crate keeps that disambiguation meaningful.
Claude Opus | 𝕏

Closes CORE-49.
The
arcboxbinary has been a rename shim since the CLI becameabctl: with noargs it printed a notice and exited 0, with args it
exec'dabctl. Releasepackaging never shipped it —
package_tarball.rsandscripts/install.shcopyabctl,arcbox-daemonandarcbox-helperonly — so it existed on dev buildsalone, and the name is wanted back.
Changes
app/arcbox-cli/src/bin/arcbox_placeholder.rsand the[[bin]] name = "arcbox"target.cargo build -p arcbox-clinow producesonly
abctl.setup installused to link~/.arcbox/bin/arcboxto the shim whenever thefile was present. That link dangles on PATH once the binary is gone, so
install now removes a stale one instead. Only symlinks are touched — a
regular file of that name is the user's, not ours.
Stale references
Swept the tree; two real hits, both fixed here:
docs/data-directories.md— thebin/arcbox | Compatibility symlink → abctlrow in the
bin/inventory.app/arcbox-daemon/src/nfs_mount.rs— a comment reading "after a plainarcbox stop", nowabctl machine stop.Everything else matching
arcboxis a different thing: the VirtioFS tag and/arcboxmount, the nft table name, the Docker context name, the DNS prefix,the lib-only
arcboxcrate atapp/arcbox, and thearcbox-daemon/-helper/-agent/-fleet-agentpaths.CORE-49 listed
tests/fex/validate-fex.shas a blocking caller (arcbox exec/arcbox info). It already callsabctl— CORE-39 fixed it — so the orderingconstraint is satisfied.
Verification
cargo clippy -p arcbox-cli --all-targets -- -D warnings— cleancargo test -p arcbox-cli— 56 passed, including the newstale_shim_link_is_removed_but_a_real_file_is_kept(dangling link removed,regular file kept, absent path a no-op)
cargo build -p arcbox-cli— onlyabctlintarget/debugNote for reviewers with an existing checkout: cargo does not reap removed bin
targets, so a stale
target/debug/arcboxsurvives from earlier builds. Runcargo clean -p arcbox-clibefore exercising the install path.Scope
Retire only. Reusing the freed name is CORE-50 and is deliberately not decided
here.