Development record
launch's hook-compliance gate warns that hooks/*.sh are not executable in the payload (mode 100644), but hooks.json invokes each as `sh "<path>"`, so the mode is irrelevant; the warning is a false positive (unchanged since v0.14.2)
issueresolvedminoriss-2610160608456302
launch's hook-compliance gate warns that hooks/*.sh are not executable in the payload (mode 100644), but hooks.json invokes each as sh "<path>", so the mode is irrelevant; the warning is a false positive (unchanged since v0.14.2)
Frontmatter
| id | iss-2610160608456302 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | minor |
.abcd/work/issues/resolved/iss-2610160608456302-launch-s-hook-compliance-gate-warns-that.md
open on GitHub ↗ · commit history ↗
mentions3
- iss-2610160858232720launch's hook-compliance gate treats a plugin-root file that a hook sources (. "$CLAUDE_PLUGIN_ROOT/x") or only reads as executed directly, so it judges that file's mode and can warn that a sourced file is not executable, the same false-positive shape iss-2610160608456302 fixed for files handed to sh or bash. No abcd hook sources or reads a plugin-root file today. Found while fixing iss-2610160608456302, 2026-10-16.
- iss-2610160910063601launch's install-surface reader (pluginRootRefs) does not see the plugin root reached through ${CLAUDE_PLUGIN_ROOT:-} or a shell alias of it (r="${CLAUDE_PLUGIN_ROOT:-}" then "$r/hooks/..."), the form most of abcd's own hook scripts use; post-tool-use.sh, pre-compact.sh, pre-tool-use.sh and user-prompt-submit.sh each execute "$r/hooks/bootstrap.sh" directly, and the gate sees none of those runs. bootstrap.sh is judged today only because session-start.sh also names it by $CLAUDE_PLUGIN_ROOT; were that line to use the alias, a missing or 0644 bootstrap.sh would pass the hook-compliance gate's existence and mode checks without a warning. Pre-existing; found while fixing iss-2610160608456302, 2026-10-16.
- iss-2610160924043423When a plugin manifest sweeps a directory of hooks ("hooks": "./hooks/"), each script there becomes a manifest entry that wins dedupeEntries, and launch's hook-compliance gate skips every entry that is not a hook-command entry, so a 0644 script that hooks.json executes directly is never judged. The same at 2347eb6c3 and after the iss-2610160608456302 fix; pre-existing.