check / check (pull_request) Successful in 1m21s
RunWithApp took the process-wide PID lock for every fx-backed command, so read-only commands (info, snapshot list, snapshot verify, remote info) failed with "already running" while a backup held it. AppOptions now carries a lockMode, and each command declares its mode at the call site. Only mutating commands (snapshot create, snapshot purge, snapshot remove, prune, remote nuke) acquire the lock; read-only ones run without it and are never blocked. snapshot restore is classified read-only: it writes only to its target directory, not the local index or remote store. The acquire/skip decision moves to a small acquireLockIfMutating helper, covered by a test that a read-only command runs while the lock is held and two mutators still exclude. The README locking section is rewritten to match. Model: opus-4-8