hook(wrong-check-reflect): catch a "You're right" opener plus a self-correction - #293
Conversation
install.sh symlinks ~/.claude/hooks at a catstack checkout, so a merged hook or skill fix is inert on a machine whose checkout sits on a feature branch or behind origin/main. One advisory line per session names the branch, the distance from trunk, and the two commands that fix it. Advisory only, no network unless CATSTACK_HOOK_FRESHNESS_FETCH=1, fail-open. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KU2pPKob4MJ1NqjsfTNyYJ Change-Id: Ie2558c7af1ea3a88f5e39811340a628ccf9f7c39
This pull request is part of a Mergify stack:
|
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_f58838e4-7c99-4895-a07b-c3643f61d0e7) |
369c6f3 to
8fa0126Compare2a729e0 to
4be2b42CompareBugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_339ec205-7414-41dc-b091-41715683892d) |
Revision history
|
AppleScript System Events keystrokes and clicks, cliclick, xdotool, screencapture video, and ffmpeg screen capture act on the session the user is sitting in. They are blocked unless a hands-off window marker is open and fresh, the screen is unlocked, and the user has been idle a moment. A command that runs a local script is scanned through that script, since the wrapper hides the mechanism. Authoring a driver via a write heredoc and read-only search pipelines that merely contain the words stay silent. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KU2pPKob4MJ1NqjsfTNyYJ Change-Id: I670196cdbe46ac0dad0cd9c097033d312f1cffb6
4be2b42 to
163c9d6Compare8fa0126 to
24b8b1cCompareBugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_cbd89ae1-911c-41e0-8a62-28ea724877f8) |
cat-mode gains a UI-testing rule under Verify and the live-demo rules gain the matching bullet: disposable surface first, an explicit hands-off window and marker before driving real input, stop when the session goes back to the user, and leave no residue. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KU2pPKob4MJ1NqjsfTNyYJ Change-Id: Ifa0ea6ce9e6f809dfe162be89ff630d8ec90d363
…correction A reply that opens by conceding and then says it is verifying now, that it had not checked, or that it should have, is the same wrong-check class the detector already covers in its explicit forms. Bare agreement and bare "good catch" stay silent. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KU2pPKob4MJ1NqjsfTNyYJ Change-Id: I5013744041ec2315c8e68290873ea448ed141e76
24b8b1c to
ef70455Compare163c9d6 to
b3bc3eaCompareBugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_b1dede3c-69a6-4dd4-99c9-30c63a02dba2) |
b3bc3ea to
8a08e9dCompare
Summary
A reply that opens by conceding a correction and then admits it had not checked is the same wrong-check class this detector already covers in its explicit forms, and it was slipping through.
The shape that prompted this: a stop hook flagged an unverified causal claim, the reply satisfied the hook with the escape-hatch prefix instead of running two cheap greps, and when the user pushed back the next reply opened "You're right. Verifying it now instead of labeling it." The greps then confirmed the claim in one turn.
Across the transcript corpus 53 replies open with that concession, 13 of them directly after a human correction, and none matched the existing patterns.
"Your instinct was right" (and hunch, gut, suspicion, read) fires on its own, without needing a nearby correction verb: conceding that the user's suspicion beat the agent's own checks already means the checks missed something. The reflect skill's invoke list names the same shapes, so the written trigger and the detector agree.
Review Claim
The detector fires on a concession opener followed by a first-person correction, and on a standalone concession to the user's instinct, while staying silent on bare agreement.
Review Lane
behavior
Review Unit
tooling-policy
Safety Invariant
One pattern added to
ADMISSION_RES; nothing existing is edited. It requires both an opening concession and a nearby correction verb, so plain agreement with a suggestion does not match. The existing negative tests, including bare "good catch" and the hypothetical shapes, still pass.Slice Rationale
A pattern change to an existing detector is its own claim, separate from the two new hooks in this stack.
Non-goals
Does not change the hook's routing, its once-per-transcript state, or its Cursor and Codex entrypoints. Adds one trigger line to the reflect skill's invoke list and no other prose. Does not attempt to catch a concession whose correction is more than about 200 characters away.
Test Plan
Test Plan
python3 -m unittest discover -s engine/hooks/wrong-check-reflect/tests— 41 tests, OK (5 new: the real reply, a should-have-checked variant, both instinct shapes, and bare agreement staying silent)python3 scripts/check_skill_trigger_mechanism.py --base origin/main— okpython3 scripts/check_no_new_comments.py --base origin/main— okRevert Plan
Revert Plan
git revert <sha>🤖 Generated with Claude Code
https://claude.ai/code/session_01KU2pPKob4MJ1NqjsfTNyYJ