Skip to content

[install] Name quarantine as the wedge cause, not /Applications - #27

Merged
drycode merged 1 commit into
mainfrom
dy/fix-wedge-diagnostic
Aug 7, 2026
Merged

[install] Name quarantine as the wedge cause, not /Applications#27
drycode merged 1 commit into
mainfrom
dy/fix-wedge-diagnostic

Conversation

@drycode

@drycode drycode commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

The error a user sees when the installed bundle never starts was telling them the wrong thing.

Before

ERROR: installed ~/Applications/Tacet.app but it did not finish starting within 20s.
ERROR: The process blocks before reaching main — nothing it logs will say so.
ERROR: A bundle in /Applications does this under Gatekeeper assessment (#25);
ERROR: installing to ~/Applications (no cask, no TACET_APP_DIR) is known-good.

Both claims are wrong. Isolating #25 showed a quarantined bundle hangs in ~/Applications identically, and an unquarantined one runs fine in /Applications. The variable is com.apple.quarantine, not the directory.

Worse, following the advice loses you the recovery: the first blocked launch wedges the path, so deleting the xattr or replacing the bundle in place looks like it should work and doesn't. The old message never mentioned that.

After

Names quarantine, gives the check (xattr -p), says plainly that removing it does not recover the path, and gives a recovery that works. Also notes the cask strips quarantine from 0.1.2 on, so a current brew install shouldn't reach the message at all.

The detail block bypasses err() — it prefixes every line with ERROR:, and fifteen of those is a wall for someone already stuck.

Tests

New assertion pins the message to com.apple.quarantine plus a working recovery, and fails if the disproved known-good advice returns. Mutation-checked: restoring the old wording fails it (AssertionError at line 89), restoring the fix passes. 112 tests pass, shellcheck clean.

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
@drycode

drycode commented Aug 6, 2026

Copy link
Copy Markdown
Contributor Author

reopening to re-fire the pull_request event — CI did not trigger on open

@drycode drycode closed this Aug 6, 2026
@drycode drycode reopened this Aug 6, 2026
@drycode
drycode merged commit ad69f14 into main Aug 7, 2026
4 of 16 checks passed
@drycode
drycode deleted the dy/fix-wedge-diagnostic branch August 7, 2026 00:09
drycode added a commit that referenced this pull request Aug 7, 2026
Ships the corrected wedge diagnostic, and is the first release cut by the
workflow rather than by hand.

Solves: release vehicle for #27
Tests: release workflow asserts the tag matches this value before signing
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