Skip to content

hook(wrong-check-reflect): catch a "You're right" opener plus a self-correction - #293

Closed
EdbertChan wants to merge 4 commits into
stack/EdbertChan/reflect/ui-input-guard-hook-freshness-20260908/prove-ui-work-disposable-surface-user-s-session--fa0ea6cefrom
stack/EdbertChan/reflect/ui-input-guard-hook-freshness-20260908/catch-you-re-right-opener-plus-self-correction--50137440
Closed

hook(wrong-check-reflect): catch a "You're right" opener plus a self-correction#293
EdbertChan wants to merge 4 commits into
stack/EdbertChan/reflect/ui-input-guard-hook-freshness-20260908/prove-ui-work-disposable-surface-user-s-session--fa0ea6cefrom
stack/EdbertChan/reflect/ui-input-guard-hook-freshness-20260908/catch-you-re-right-opener-plus-self-correction--50137440

Conversation

@EdbertChan

@EdbertChanEdbertChan commented Sep 9, 2026

Copy link
Copy Markdown
Owner

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 — ok
  • python3 scripts/check_no_new_comments.py --base origin/main — ok

Revert Plan

Revert Plan
  • Safe to revert? Yes
  • Revert command: git revert <sha>
  • Post-revert steps: None
  • Data migration? No

🤖 Generated with Claude Code

https://claude.ai/code/session_01KU2pPKob4MJ1NqjsfTNyYJ

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
@EdbertChan

EdbertChan commented Sep 9, 2026

Copy link
Copy Markdown
OwnerAuthor

This pull request is part of a Mergify stack:

#Pull RequestLink
1hook: hook-freshness warns when the checkout behind the hooks is stale#290
2hook: ui-input-guard blocks synthetic input at the user's live session#291
3docs: prove UI work on a disposable surface, not the user's session#292
4hook(wrong-check-reflect): catch a "You're right" opener plus a self-correction#293👈
5install: wire ui-input-guard and hook-freshness into the inventories#294
6gate: an unchecked file is not a clean file#296

@cursor

cursorBot commented Sep 9, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot 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)

@EdbertChan
EdbertChanforce-pushed the stack/EdbertChan/reflect/ui-input-guard-hook-freshness-20260908/catch-you-re-right-opener-plus-self-correction--50137440 branch from 369c6f3 to 8fa0126CompareSeptember 9, 2026 05:09
@EdbertChan
EdbertChanforce-pushed the stack/EdbertChan/reflect/ui-input-guard-hook-freshness-20260908/prove-ui-work-disposable-surface-user-s-session--fa0ea6ce branch from 2a729e0 to 4be2b42CompareSeptember 9, 2026 05:09
@cursor

cursorBot commented Sep 9, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot 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)

@EdbertChan

EdbertChan commented Sep 9, 2026

Copy link
Copy Markdown
OwnerAuthor

Revision history

#TypeChangesReasonDate
1initial369c6f32026-09-09 05:10 UTC
2rebase369c6f3 → 8fa0126(rebase only)2026-09-09 05:10 UTC
3rebase8fa0126 → 24b8b1c(rebase only)2026-09-09 05:39 UTC
4content24b8b1c → ef70455 (raw)2026-09-09 05:49 UTC

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
@EdbertChan
EdbertChanforce-pushed the stack/EdbertChan/reflect/ui-input-guard-hook-freshness-20260908/prove-ui-work-disposable-surface-user-s-session--fa0ea6ce branch from 4be2b42 to 163c9d6CompareSeptember 9, 2026 05:39
@EdbertChan
EdbertChanforce-pushed the stack/EdbertChan/reflect/ui-input-guard-hook-freshness-20260908/catch-you-re-right-opener-plus-self-correction--50137440 branch from 8fa0126 to 24b8b1cCompareSeptember 9, 2026 05:39
@cursor

cursorBot commented Sep 9, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot 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)

EdbertChanand others added 2 commits September 8, 2026 22:49
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
@EdbertChan
EdbertChanforce-pushed the stack/EdbertChan/reflect/ui-input-guard-hook-freshness-20260908/catch-you-re-right-opener-plus-self-correction--50137440 branch from 24b8b1c to ef70455CompareSeptember 9, 2026 05:49
@EdbertChan
EdbertChanforce-pushed the stack/EdbertChan/reflect/ui-input-guard-hook-freshness-20260908/prove-ui-work-disposable-surface-user-s-session--fa0ea6ce branch from 163c9d6 to b3bc3eaCompareSeptember 9, 2026 05:49
@cursor

cursorBot commented Sep 9, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot 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)

@EdbertChan
EdbertChanforce-pushed the stack/EdbertChan/reflect/ui-input-guard-hook-freshness-20260908/prove-ui-work-disposable-surface-user-s-session--fa0ea6ce branch from b3bc3ea to 8a08e9dCompareSeptember 9, 2026 06:22
@EdbertChan
EdbertChan deleted the stack/EdbertChan/reflect/ui-input-guard-hook-freshness-20260908/catch-you-re-right-opener-plus-self-correction--50137440 branch September 9, 2026 06:22
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@EdbertChan