Repository navigation
caffeinated-whale-cli: v3.2.0
3.2.0 (2026-09-19)
A round of operator-found fixes across nearly every verb, a fix for sites left stuck in maintenance mode by an interrupted migrate, plus a root-host init fallback, scoped credential-bridge wiring, and wrong-copy app-update detection.
Upgrade Steps
- [ACTION REQUIRED] Update cwcli to v3.2.0.
- [ACTION REQUIRED] On a shared-mode machine that uses the credential bridge, you can now scope it to specific instances with
cwcli config cred-bridge enable --project <name>instead of it wiring every running Frappe container. - [ACTION REQUIRED] If a site was left in maintenance mode by an earlier
migrateorapps updatethat was killed or lost its terminal,cwcli status <project>now names it directly; run the command it prints (cwcli run <project> --site <site> set-maintenance-mode off) to clear it.
Breaking Changes
cwcli rm <project-that-does-not-exist>now exits 1 with a plain not-found warning, matchingrm-site/rm-bench; it previously printed the destructive-deletion banner alongside the error and still exited 0.cwcli rmnow refuses when a hand-made bench holds sites the backup step never covered, where it previously deleted that bench with no backup; runcwcli inspect <project> --updatethen re-runrm, or pass the explicit--no-backupflag.cwcli config cred-bridge enablenow wires only cwcli-managed instances by default, and refuses (rather than silently skipping) an explicitly named--projectthat is not cwcli-managed.- The human
cwcli statusweb line now prints the reachable host address instead of the container-internal port. - A broken pipe (for example
cwcli ... | head) now exits quietly by signal instead of returning exit 1.
New Features
cwcli init --uid <n>overrides the uid cwcli aligns the container'sfrappeuser to, andiniton a root (uid 0) host no longer fails: it now keeps the image's default frappe uid instead of aliasing the container's own root account, and warns once.cwcli listandcwcli instancesnow work as aliases forls(andapps lsforapps list); a barecwcli statuswith no project prints the all-instances summary instead of a usage error.cwcli doctorgains a check that flags a dev/editable install running behind its tracked upstream branch.cwcli config cred-bridge enable --project <name>(repeatable) scopes the credential bridge to named instances; an unscoped sweep touching more than one instance now announces its targets before wiring.cwcli statusreports when a site is stuck in maintenance mode and names the command to clear it.inspectandapps listflag an app whoseapps/<app>is a symlink or whose imported copy differs from what's on disk, andapps update/apps checkoutno longer report success when they changed a copy the running site doesn't actually use.cwcli config paths prunedrops custom search paths that are absent from every live instance (dry-run by default,--yesto apply,--jsonsupported).cwcli labelandcwcli axi bencheshint towardcwcli inspect <project> --updatewhen a bench listing is empty or possibly incomplete, so a hand-made bench is easier to discover.
Bug Fixes
- A killed terminal or a plain
killduringmigrate,apps update,apps checkout,apps install,run-tests, orrestoreno longer leaves a site stuck in maintenance mode or leaks credential-bridge leftovers (socket, shim, git config line) - SIGTERM and SIGHUP now unwind like Ctrl+C. Formigrate/apps updatespecifically, an interrupt now also ends the exact in-containerbench migrateprocess cwcli started before clearing maintenance mode as the last step, closing a Frappe v16 race where the orphaned migrate could turn maintenance back on after cwcli had cleared it; under--skip-maintenancean interrupt restores each affected site to its own pre-migrate maintenance state. Verified on v14, v15, and v16. - A failed
apps installno longer poisons every later retry with a half-fetched app directory; the partial directory is now cleaned up, and a present-but-invalid one gets an actionable message instead of a traceback. cwcli rmof a site-less (half-provisioned) instance now proceeds in one run instead of refusing and requiring a second--no-backuprun; a blank or invalid project name is now rejected up front and shown as(empty)rather than an empty quoted string.- The per-invocation credential-bridge shim now prints one guidance line when its socket is gone (use
cwcli runor the persistent bridge) instead of leaking a traceback to raw git. cwcli rm's pre-backup database readiness probe no longer false-fails a healthy, slow-to-start instance, and a real failure now names the specific cause (connection refused, unresolvable host, exec failure) instead of a bare timeout.cwcli initvalidates the project name before the admin-password check, so an invalid name is reported on the first attempt.backup,unlock,restore --latest, andaxi migratenow fall back to a bench's sole site instead of failing with "no default site found"; a multi-site bench lists the available sites in the error.apps installaccepts the app name positionally, matchingapps update/apps checkout.- A failed
apps updatepull now shows a tail of git's real error by default. - A supervisor-install failure during
start/restartnow shows the actual captured output instead of always blaming a network connection.
Other Changes
bench initno longer runs with a hardcoded--verbose, and the Docker Hub bench-tag lookup is now cached and skipped when an image tag is pinned, making a plaincwcli initnoticeably faster and quieter.- Several wording fixes: "not found" messages are consistent across verbs; a stopped instance's cached benches are reported as "not running" instead of "0 benches";
init --reuse-benchsays "Reused bench" instead of "Successfully initialized bench"; the humanrm-benchrunning-bench refusal names the real bench selector.