From 595f5ee2f9c22e6957b322e4273f5cd9913c4456 Mon Sep 17 00:00:00 2001 From: Daniel Young Date: Thu, 6 Aug 2026 14:05:30 -0400 Subject: [PATCH] [install] Name quarantine as the wedge cause, not /Applications MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The message a user sees when the installed bundle never starts told them the wrong thing. It blamed "Gatekeeper assessment on a bundle in /Applications" and called ~/Applications "known-good", which is backwards: a quarantined bundle hangs in ~/Applications identically, and an unquarantined one runs fine in /Applications. The variable is the xattr, not the directory. Isolating #25 established that. Acting on the old advice also cost you the recovery. It sent people to reinstall elsewhere without saying that the first blocked launch wedges the path, so deleting the xattr or replacing the bundle in place looks like it should work and does not. The detail block bypasses err(), which prefixes every line with ERROR:. Fifteen of those is a wall, and this is read by someone already stuck. Solves: #25 follow-up — the diagnostic contradicted the isolation Tests: new assertion pins the message to com.apple.quarantine and a working recovery, and rejects the disproved advice returning; mutation-checked by restoring the old wording, which fails it --- install-server.sh | 37 ++++++++++++++++++++++++------- tests/test_install_server_args.py | 19 ++++++++++++++-- 2 files changed, 46 insertions(+), 10 deletions(-) diff --git a/install-server.sh b/install-server.sh index 5d2eaf9..b504d1a 100755 --- a/install-server.sh +++ b/install-server.sh @@ -527,11 +527,11 @@ fi # no matter what grep says, so the check condemned a working binary. # # BOUNDED, because "does not run" and "does not finish" are different failures -# and only one of them used to be handled. A bundle can block in dyld before -# reaching main — Gatekeeper assessment on a bundle in /Applications does -# exactly this (issue #25) — and an unbounded check then hangs the installer -# forever with no output, no error, and no service. A verification step that -# can wedge is worse than no verification step. +# and only one of them used to be handled. A bundle carrying +# com.apple.quarantine blocks in dyld before reaching main (issue #25), and an +# unbounded check then hangs the installer forever with no output, no error, +# and no service. A verification step that can wedge is worse than no +# verification step. # run_bounded is defined above the source guard so the tests can reach it. # --help, NOT a bare invocation. `tacet` with no arguments now runs the agent @@ -544,10 +544,31 @@ verify_rc=$? set -e if [[ "$verify_rc" -eq 124 ]]; then + # The headline goes through err(); the rest does not. err() prefixes every + # line with ERROR:, and fifteen of those is a wall nobody reads at the moment + # they are already stuck. err "installed ${APP_DST} but it did not finish starting within 20s." - err "The process blocks before reaching main — nothing it logs will say so." - err "A bundle in /Applications does this under Gatekeeper assessment (#25);" - err "installing to ~/Applications (no cask, no TACET_APP_DIR) is known-good." + cat >&2 <