You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
We investigated the public ghook / gobby-hooks distribution chain because users still sometimes report the bare fallback string Blocked by hook, and the public code/release story is currently inconsistent.
Findings
crates.io package is gobby-hooks, not ghook.
crates.io points gobby-hooks to this repo, and crates/ghook/Cargo.toml publishes package gobby-hooks.
gobby-hooks 0.2.0 on crates.io only extracts top-level stopReason, user_message, and reason in extract_reason().
gobby-hooks 0.2.1 on crates.io adds nested hookSpecificOutput.permissionDecisionReason / hookSpecificOutput.reason lookup, which is the fix task #12130 expected for Claude-style block responses.
GitHub releases/tags for gobby-hooks-v* currently stop at gobby-hooks-v0.1.1. I could not find public GitHub release/tag assets for gobby-hooks-v0.2.0 or gobby-hooks-v0.2.1.
Installer in src/gobby/cli/install_setup.py resolves latest version from crates.io, then tries GitHub release assets first via gobby-hooks-v{version}, then falls back to cargo-binstall / cargo install.
Repro
Check https://crates.io/api/v1/crates/gobby-hooks and note that latest public crate version is 0.2.1.
Check https://api.github.com/repos/GobbyAI/gobby-cli/releases?per_page=100 and filter for gobby-hooks-v*. Public GitHub releases currently stop at gobby-hooks-v0.1.1.
Compare released crate sources:
0.2.0: extract_reason() only checks top-level keys, so a Claude response shaped like {"hookSpecificOutput":{"permissionDecision":"deny","permissionDecisionReason":"Task #12130 needs visible block reasons"}} still collapses to Blocked by hook.
0.2.1: nested hookSpecificOutput.permissionDecisionReason lookup is present.
Result: when a user reports bare Blocked by hook, it is hard to tell whether they are on an old GitHub asset, a 0.2.0 crate install, or some unreleased/local build, because public releases and public crate versions are not aligned.
Expected
One public version story for gobby-hooks.
GitHub release assets exist for every published gobby-hooks crate version, or GitHub release install path is removed/deprioritized.
ghook --version / --diagnose expose enough provenance to identify install method/build source during bug reports.
Recommended fix
Publish matching gobby-hooks-v0.2.0 and gobby-hooks-v0.2.1 GitHub releases, or stop preferring GitHub release download in installer until release parity exists.
Add a CI guard that fails a gobby-hooks publish if crates.io version, Git tag, and GitHub release assets diverge.
Extend ghook --version or --diagnose with build provenance (crate version, tag/commit, install method if known).
Keep regression coverage for nested hookSpecificOutput.permissionDecisionReason, since task #12130 depends on that path for observable block reasons.
Task context: Gobby task #12130 (block observability + upstream ghook reason forwarding).
We investigated the public
ghook/gobby-hooksdistribution chain because users still sometimes report the bare fallback stringBlocked by hook, and the public code/release story is currently inconsistent.Findings
gobby-hooks, notghook.gobby-hooksto this repo, andcrates/ghook/Cargo.tomlpublishes packagegobby-hooks.gobby-hooks 0.2.0on crates.io only extracts top-levelstopReason,user_message, andreasoninextract_reason().gobby-hooks 0.2.1on crates.io adds nestedhookSpecificOutput.permissionDecisionReason/hookSpecificOutput.reasonlookup, which is the fix task #12130 expected for Claude-style block responses.gobby-hooks-v*currently stop atgobby-hooks-v0.1.1. I could not find public GitHub release/tag assets forgobby-hooks-v0.2.0orgobby-hooks-v0.2.1.src/gobby/cli/install_setup.pyresolves latest version from crates.io, then tries GitHub release assets first viagobby-hooks-v{version}, then falls back tocargo-binstall/cargo install.Repro
https://crates.io/api/v1/crates/gobby-hooksand note that latest public crate version is0.2.1.https://api.github.com/repos/GobbyAI/gobby-cli/releases?per_page=100and filter forgobby-hooks-v*. Public GitHub releases currently stop atgobby-hooks-v0.1.1.0.2.0:extract_reason()only checks top-level keys, so a Claude response shaped like{"hookSpecificOutput":{"permissionDecision":"deny","permissionDecisionReason":"Task #12130 needs visible block reasons"}}still collapses toBlocked by hook.0.2.1: nestedhookSpecificOutput.permissionDecisionReasonlookup is present.Blocked by hook, it is hard to tell whether they are on an old GitHub asset, a0.2.0crate install, or some unreleased/local build, because public releases and public crate versions are not aligned.Expected
gobby-hooks.gobby-hookscrate version, or GitHub release install path is removed/deprioritized.ghook --version/--diagnoseexpose enough provenance to identify install method/build source during bug reports.Recommended fix
gobby-hooks-v0.2.0andgobby-hooks-v0.2.1GitHub releases, or stop preferring GitHub release download in installer until release parity exists.gobby-hookspublish if crates.io version, Git tag, and GitHub release assets diverge.ghook --versionor--diagnosewith build provenance (crate version, tag/commit, install method if known).hookSpecificOutput.permissionDecisionReason, since task #12130 depends on that path for observable block reasons.