Skip to content

feat!: rename oab-instance-mcp to oab-computer (breaking, 0.12.0) - #117

Merged
chaodu-agent merged 13 commits into
mainfrom
feat/rename-oab-computer
Nov 14, 2026
Merged

chaodu-agent merged 13 commits into
mainfrom
feat/rename-oab-computer

Conversation

@chaodu-agent

@chaodu-agent chaodu-agent commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Renames the technical names of the product from oab-instance-mcp to oab-computer as one breaking change for 0.12.0. Nothing of 0.12.0 is released (latest release: v0.11.0). The product name stays OpenAB Computer and the app still shows that name in Finder, System Settings and the menu bar. There is no compatibility layer: no symlinks, no fallbacks that read old paths, no migration of grants, switchboard config, logs or audit files, no dual Keychain lookup. Base: 1eaa6ef.

Auth, tools, relaunch and wizard are unchanged (names and paths only). The token copy exists on macOS as before and now also on Linux (see Upgrade note).

Name map

Old New
Executable, Swift product and target, Rust-built Linux binary oab-computer (Sources/oab-computer/)
App file oab-instance-mcp.app -> oab-computer.app (display name still "OpenAB Computer")
Bundle id, macOS LaunchAgent label dev.openab.instance-mcp -> dev.openab.computer
Playwright LaunchAgent dev.openab.instance-mcp.pw-mcp -> dev.openab.computer.pw-mcp
Linux user units oab-instance-mcp.service -> oab-computer.service; oab-pw-mcp.service -> oab-computer-pw-mcp.service
Install dir ~/.local/oab-instance-mcp -> ~/.local/oab-computer
Config dir ~/.config/oab-instance-mcp -> ~/.config/oab-computer
Application Support ~/Library/Application Support/oab-instance-mcp -> .../oab-computer (grants.json, audit.jsonl)
Logs ~/Library/Logs/oab-instance-mcp -> ~/Library/Logs/oab-computer
Linux state $XDG_STATE_HOME/oab-instance-mcp -> $XDG_STATE_HOME/oab-computer
Chromium policy file (Linux) oab-instance-mcp.json -> oab-computer.json
Env vars OAB_INSTANCE_MCP_* -> OAB_COMPUTER_* (the DEBUG-only overrides are still absent from the release binary, checked)
pkg identifier / payload dir dev.openab.instance-mcp.installer -> dev.openab.computer.installer; Library/Application Support/OpenAB/instance-mcp/ -> .../OpenAB/computer/
Release assets oab-computer-<v>-universal.pkg, -universal.app.zip, -linux-{arm64,amd64}.tar.gz, .sha256, SHA256SUMS
Wire names MCP serverInfo.name, upstream clientInfo.name, sys_info agent name: oab-computer (Linux: oab-computer-rpi)
Other pkg postinstall, installers' download URLs, release.yml, ci.yml, images/toolchain/Dockerfile (OCI source label now openabdev/openab-computer), all docs

Keychain services changed

  • dev.openab.instance-mcp.grant -> dev.openab.computer.grant (KeychainSecretStore.service). Attach secrets saved under the old service are not found, so grants must be lent again.
  • Item label text oab-instance-mcp attach grant -> oab-computer attach grant.

Kept names (possible follow-up)

  • Swift module and test targets InstanceMCPCore, InstanceMCPCoreTests and their paths, internal type names (not user-visible).
  • MCP_* env vars on Linux, oab-seat.service, the pw-mcp* file names, dev.openab.permission-probe, the legacy oab-mac-agent and dev.openab.mac-agent names.
  • The copy-source token path ~/.config/oab-instance-mcp/token (the agreed automatic token copy; the old path is its source only) and its test fixtures.
  • Issue links under the old repo name (GitHub redirects), git history, and the dated ADRs, requirements and the Oracle refarch. Those carry a "Renamed from oab-instance-mcp" banner; the refarch also has the old to new table.

New

  • Warn-only check for the old agent in both installers. macOS: the LaunchAgent dev.openab.instance-mcp (and .pw-mcp) loaded or its plist present. Linux: oab-instance-mcp.service / oab-pw-mcp.service active or enabled. The installer prints that it will fight the new agent for port 8795 and the exact stop and remove commands. It never stops, removes or changes the old agent (only launchctl print and systemctl is-active|is-enabled are called).
  • scripts/test-name-consistency.sh: runs the real installers in a fake HOME and parses the plist, the units, the pkg payload layout (without pkgbuild), the postinstall, the workflows and the Swift constants. It fails if an installer references a binary, path, label or asset the packaging does not produce. Mutation-checked.
  • scripts/test-legacy-agent.sh: the old-agent warning with stub launchctl / systemctl (any mutating call exits 99 and fails the test; old plist and unit files must stay byte-identical).
  • Both are wired into ci.yml; a Swift test asserts the derived names.
  • README: "Upgrading from 0.11 or earlier".

Breaking change and upgrade

See the README section "Upgrading from 0.11 or earlier". In short: reinstall with the new installer; on macOS grant Screen Recording and Accessibility again because the bundle id changed; the bearer token is copied automatically from ~/.config/oab-instance-mcp/token to ~/.config/oab-computer/token (mode 600, old file left in place, never overwrites an existing new token); macOS copies only when the installer or app creates ~/.config/oab-computer (if the directory already exists nothing is copied and a new token is generated when the token file is missing); Linux copies whenever the new token is missing and generates one only when neither file has one. A user who never had an old token gets a new one and must update clients. Switchboard settings, saved grants and their Keychain secrets, logs and audit files are not migrated. Remove the old LaunchAgent or unit (commands in the README).

Tests

Run on a Mac mini (macOS 27.2.1, Xcode 26.3); Linux parts in containers on the same host.

  • swift build -c release: ok. swift test: 507 tests, 0 failures, 1 skipped (the default-port test skips because the installed agent holds 8795).
  • Release binary: no OAB_COMPUTER_NO_TAILNET_EXPOSURE string.
  • poc/reverse-attach-linux (rust:1-bookworm): cargo build ok, cargo test 86 passed / 0 failed / 1 ignored, cargo fmt --check and cargo clippy -D warnings clean, smoke.sh 71 passed / 0 failed. (On macOS the crate does not link, identically on main.)
  • test-name-consistency.sh, test-legacy-agent.sh, test-pw-mcp-check.sh: pass. test-install-linux.sh passes in debian:bookworm as a non-root user (on macOS it fails only on /private realpaths and stat -c). shellcheck is clean on the touched scripts; both workflows parse.
  • Known environment failure: scripts/test-packaging.sh on macOS 27. It fails in package-pkg.sh at pkgbuild with Set: Entry, ":0:BundleIsRelocatable", Does Not Exist, identically on main (1eaa6ef, re-run in a worktree). Not changed. The parts before that point run and pass: assemble-app, bundle id, executable and display name, the unsigned-app gate, the installer with injected seams (token copy from the old path, pre-0.4.0 token, whitespace token, bad Tailscale JSON cases). The pkg layout is covered by test-name-consistency.sh without pkgbuild.

Not run on a real Mac

The renamed app has not been launched on a real Mac, and no installer was run on a real host. Suggested check: quit any running agent (port 8795), install, grant Screen Recording and Accessibility to the new bundle id, confirm the menu bar item and sys_info.

Update (review fixes, e2cb810)

  • The Rust package is now oab-computer, so cargo build produces target/release/oab-computer; ci.yml, release.yml, smoke.sh and docs follow, and the name-consistency test checks it. The directory poc/reverse-attach-linux keeps its name.
  • install-linux.sh no longer prints daemon: ok when an old unit was found (the answer would come from the old daemon).
  • README Linux removal marks oab-pw-mcp.service optional and restarts the new unit.
  • A tailnet IP in a historical requirements doc is replaced by a placeholder.
  • The README and Linux guide download snippets pin V=0.12.0, the first release with oab-computer-* assets. Private host names were removed from the docs.

Update (token decision, 132c395)

  • Decision: the Linux installer copies the old token (cp, never mv) when the new one is missing, like the macOS copy the user agreed earlier. Without it a Linux upgrade would silently regenerate the token and break every configured client. This extends the one existing exception (old token path as copy source only); nothing else reads old paths. README, docs/releasing.md and this description now say the same on both platforms.

  • The macOS legacy warning notes that /healthz may be answered by the old agent; the legacy test asserts mode 600; name-consistency fails if docs claim the Linux installer copies nothing.

  • Docs-only pass otherwise: name-consistency and the private-identifier check pass on the build Mac; Swift/Rust tests not rerun (no code change).

  • Open, non-blocking: Linux grants/audit under ~/.local/state/oab-instance-mcp are not migrated (documented); the old Chromium policy oab-instance-mcp.json is left beside the new one (identical, harmless); with an old unit on :8795 the new unit restart-loops until the old one is removed (warned); the Cargo package rename supersedes the earlier KEEP in the inventory.

  • Fix pass 8: legacy warning ports/leftovers, linux-setup anchor, tighter allowlist, historical poc row restored.

Renames every user-visible technical name; the product name stays OpenAB Computer.
No compatibility layer. Base 1eaa6ef.

- executable/product/target oab-computer (Sources/oab-computer), app oab-computer.app
- bundle id and LaunchAgent dev.openab.computer; pw-mcp agent dev.openab.computer.pw-mcp
- Linux units oab-computer.service, oab-computer-pw-mcp.service
- dirs ~/.local|~/.config|~/Library/Logs|Application Support|XDG state /oab-computer
- Keychain service dev.openab.instance-mcp.grant -> dev.openab.computer.grant
- env OAB_INSTANCE_MCP_* -> OAB_COMPUTER_*; pkg id dev.openab.computer.installer;
  pkg payload dir Library/Application Support/OpenAB/computer; release assets oab-computer-*
- kept: InstanceMCPCore module and tests, the copy-source token path, issue links, history
- new: warn-only detection of the old agent in both installers (never stops it)
- new: scripts/test-name-consistency.sh, scripts/test-legacy-agent.sh (wired into CI)
- README "Upgrading from 0.11 or earlier"; banners on dated ADR/requirements docs

Verification (macmini, macOS 27.2.1, Xcode 26.3; Linux parts in OrbStack containers):
- swift build -c release: ok; swift test: 507 tests, 0 failures, 1 skipped (the default-port
  test skips because the installed agent holds 8795)
- release binary has no OAB_COMPUTER_NO_TAILNET_EXPOSURE string (0 matches)
- cargo build/test on macOS fails to link (Linux-only crate), identical on main; in
  rust:1-bookworm: cargo build ok, cargo test 86 passed 0 failed 1 ignored, fmt ok, clippy ok,
  smoke.sh 71 passed 0 failed
- scripts/test-name-consistency.sh: all checks passed; negative mutation check fails as intended
- scripts/test-legacy-agent.sh: all checks passed (macOS stub launchctl, Linux stub systemctl)
- scripts/test-pw-mcp-check.sh: stub tests ok
- scripts/test-install-linux.sh: ok in debian:bookworm as non-root (units diff, token); on macOS it
  fails only on /private realpath and stat -c
- scripts/test-packaging.sh: runs through the unsigned-app gate, the token-copy cases and bad
  tailscale cases, then fails at pkgbuild (BundleIsRelocatable) on macOS 27, identical on main
- shellcheck (docker) clean on the touched and new scripts; workflows parse as YAML
…onal pw unit

- Cargo package renamed to oab-computer, so cargo build produces target/release/oab-computer;
  ci.yml, release.yml, smoke.sh, docs/linux-setup.md follow; name-consistency test checks it
- install-linux.sh: skip the daemon ok line when an old unit was found (it would read the old daemon)
- README: Linux removal marks oab-pw-mcp.service optional and restarts the new unit
- docs/requirements/reverse-attach.md: tailnet IP replaced by a placeholder
- test stubs: systemctl is-active/is-enabled answer no; legacy test asserts the daemon line

Ran on macmini: name-consistency, legacy-agent, pw-mcp-check pass; docker rust:1-bookworm:
cargo build ok, cargo test 86 passed 0 failed 1 ignored, smoke.sh 71 passed 0 failed;
debian install/consistency/legacy tests (see results.md). Swift sources untouched.
…nit, docs wording)

Ran: test-install-linux, test-legacy-agent, test-name-consistency in debian:bookworm as non-root: all passed. test-pw-mcp-check ok. Docs and shell comments only; no Swift or Rust change.
…yable, scrub private host names)

Ran on macmini: scripts/test-name-consistency.sh all passed; scripts/test-legacy-agent.sh all passed;
swift build -c release ok (Swift sources unchanged since 070b103: 506 passed/0 failed/1 skipped);
cargo test in rust:1-bookworm: 86 passed, 0 failed, 1 ignored (only seat.rs comments changed).
… comment wording)

Ran on macmini: test-name-consistency all passed, test-legacy-agent all passed, swift build -c release ok (comments only; Swift tests unchanged 506 passed/0 failed/1 skipped).
Replaced private host names, tailnet name, real tailnet/LAN IPs and personal logins in docs and test fixtures with placeholders; added scripts/check-no-private-identifiers.sh (+allowlist, negative test, CI job).
Ran on macmini: swift build -c release ok; swift test 507 executed, 1 skipped, 0 failures; cargo build + cargo test (rust:1-bookworm) 86 passed, 0 failed, 1 ignored; test-name-consistency, test-legacy-agent, test-pw-mcp-check, test-check-no-private-identifiers all passed; check-no-private-identifiers ok on 163 files.
Ran on macmini after git add: check ok, test-check-no-private-identifiers all passed.
…grade step, cosmetics

Review pass: install-linux.sh copies ~/.config/oab-instance-mcp/token (source only, mode 600) when the new token is absent; tests for copy, keep and generate. README: re-run the main installer after the Playwright agent, tccutil for Full Disk Access, Linux token note. Legacy warning no longer claims the old unit port is --port. Poc README title and CI artifact renamed.
Ran on macmini: test-legacy-agent, test-name-consistency pass; in debian:bookworm non-root: test-install-linux units ok, test-legacy-agent and test-name-consistency pass; shellcheck clean. No Swift/Rust change.
…, extend legacy warning

Fix pass for review of c8fff9c. README upgrade step 3 and docs/releasing.md now say both installers copy the old token (Linux whenever the new token is absent); README notes Linux state is not migrated; macOS legacy warning notes /healthz can be answered by the old agent; legacy test asserts token mode 600.
Ran on macmini: test-legacy-agent all passed, test-name-consistency all passed, bash -n install-prebuilt.sh ok. No Swift/Rust change.
… token copy

Docs-only pass plus one consistency check. Ran on macmini: test-name-consistency all passed, check-no-private-identifiers passed. No code change; Swift/Rust/other script tests not rerun.
…st, historical row)

Ran on macmini: test-name-consistency all passed, test-legacy-agent all passed, check-no-private-identifiers passed. No Swift/Rust change.
macOS copies the 0.11 token only when it creates the config dir; Linux whenever the new token is missing. Docs-only, no code changed; earlier test results unchanged.
Docs only (releasing.md item 4, README upgrade step 3). Rules checked against install-prebuilt.sh 142-170 and install-linux.sh 106-111.
Ran: check-no-private-identifiers.sh ok; test-name-consistency.sh all checks passed; markdownlint-cli2 on docs: only MD060 from a newer lint version than CI pins, none in changed lines.
@chaodu-agent
chaodu-agent merged commit dd1d20a into main Nov 14, 2026
11 of 13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant