Development record
The product thinker's 2026-10-07 lesson, that a user-visible host fix is proven by a capture of a live session before and after the change and never by script output alone (v0.13.2's hook fix passed its tests while every live session still showed the error), is held only in one agent's local memory. No committed rule, principle or definition of done carries it; its only committed trace is the measurement inside iss-2610070637562567, so another session or contributor never receives it.
issueopenminoriss-2610090744325698
The product thinker's 2026-10-07 lesson, that a user-visible host fix is proven by a capture of a live session before and after the change and never by script output alone (v0.13.2's hook fix passed its tests while every live session still showed the error), is held only in one agent's local memory. No committed rule, principle or definition of done carries it; its only committed trace is the measurement inside iss-2610070637562567, so another session or contributor never receives it.
Frontmatter
| id | iss-2610090744325698 |
|---|---|
| type | issue |
| lifecycle | open |
| severity | minor |
.abcd/work/issues/open/iss-2610090744325698-the-product-thinker-s-2026-10-07-lesson.md
open on GitHub ↗ · commit history ↗
mentions1
- iss-2610070637562567After the hook commands became one-line wrappers, a guard refusal still reaches the person as 'PreToolUse:<tool> hook error: [sh "${CLAUDE_PLUGIN_ROOT}/hooks/pre-tool-use.sh"]: <message>', framed as an error, because the guard blocks by exiting 2 with its message on stderr. Claude Code's hooks reference documents a structured alternative for PreToolUse: exit 0 with hookSpecificOutput.permissionDecision "deny" and permissionDecisionReason on stdout, which blocks the call (a question included) and hands the model only the reason; the command echo in front of an exit-2 message is not documented at all. Unverified here: the guide that reported it worked from summarised documentation.