Skip to content

hook(wrong-check-reflect): catch a concession that the user found the miss - #298

Merged
EdbertChan merged 1 commit 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-concession-user-found-miss--5b8f852a
Sep 9, 2026
Merged

hook(wrong-check-reflect): catch a concession that the user found the miss#298
EdbertChan merged 1 commit 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-concession-user-found-miss--5b8f852a

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)
  • every engine/hooks/*/tests directory plus tests/ — all OK, the way CI runs them
  • 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

… miss
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 wrong-check class this
detector already covers in its explicit forms. "Your instinct was right"
fires on its own: conceding that the user's suspicion beat the agent's checks
already means the checks missed something. Bare agreement stays silent.
The reflect skill's invoke list names the same shapes, so the written trigger
and the detector agree.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KU2pPKob4MJ1NqjsfTNyYJ
Change-Id: I5b8f852a9ba5097517405ae1959f21378fab3cbf
@EdbertChan

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 concession that the user found the miss#298👈
5gate: 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_2ea00813-14a5-4fb4-a394-69861168f24c)

@EdbertChan
EdbertChan merged commit 1e4778a into stack/EdbertChan/reflect/ui-input-guard-hook-freshness-20260908/prove-ui-work-disposable-surface-user-s-session--fa0ea6ceSep 9, 2026
4 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@EdbertChan