mirror of https://github.com/garrytan/gstack.git
Every AskUserQuestion died with "Tool result missing due to internal error" on current Claude Code builds (Desktop 1.14271.0, CC 2.1.177). Root cause: the question-preference-hook emitted permissionDecision:'defer' on every pass-through path. 'defer' is a real PreToolUse value, but since CC v2.1.89 its semantics are "pause this tool call for external resumption" (headless resume) — never "abstain". Interactive sessions have nothing to resume the paused call, so the tool orphaned. Pre-2.1.89 builds ignored the unknown value, which is why the hook worked when it shipped and broke later. The fix is the two-branch pass-through contract: - no context -> exit 0 with EXACTLY empty stdout - memory nuggets present -> hookSpecificOutput with hookEventName + additionalContext ONLY (the documented shape; plan-tune Layer 8 memory injection ships through this branch and keeps working) defer() is renamed passThrough() so the function says what it does, and docs/spikes/claude-code-hook-mutation.md's protocol contract (cited by the hook header) is corrected in the same commit — it taught '"defer" — let permission flow continue' and was the reintroduction vector. Test contract rewritten in the same commit (13 assertions across 3 files, verified fail-first against the unfixed hook): pass-through paths assert exact-empty stdout (a garbage/partial write cannot slip past an optional-chained parse), the nugget path asserts permissionDecision is ABSENT while additionalContext survives, and a new tripwire asserts no non-deny path ever puts the string "permissionDecision" on stdout. The deny (auto-decide) and Conductor prose-redirect paths are unchanged. Deployment: no migration needed — settings.json points at the absolute bash shim which execs the .ts live; /gstack-upgrade delivers the fix. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| designs | ||
| evals | ||
| images | ||
| spikes | ||
| ADDING_A_HOST.md | ||
| ON_THE_LOC_CONTROVERSY.md | ||
| OPENCLAW.md | ||
| REMOTE_BROWSER_ACCESS.md | ||
| askuserquestion-cjk.md | ||
| askuserquestion-split.md | ||
| domain-skills.md | ||
| explanation-diataxis-in-gstack.md | ||
| gbrain-sync-errors.md | ||
| gbrain-sync.md | ||
| gbrain-write-surfaces.md | ||
| howto-diagrams-and-formats.md | ||
| howto-document-a-shipped-feature.md | ||
| howto-ios-testing-with-gstack.md | ||
| skills.md | ||
| tutorial-document-generate.md | ||