Repository navigation
Block a CAT-UNVERIFIED tag that hands a read-only check back as 'say X' - #1381
Merged
Conversation
The ledger now refuses a reply that tags a claim and offers 'say ...' or 'tell me to test it' for a read-only check. The frustration watchdog accepts 'I am running X now' as a valid next step. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Change-Id: I3b5ef1297fe1f20eec746fd4f74ccc44c54516ca
EdbertChan
added this pull request to stack #1385
October 13, 2026 04:39
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: 47dcc35c-5560-404c-b2c0-6099c0cb0852) |
Contributor
|
Queued — the merge queue status continues in this comment ↓. |
Owner
Author
|
@Mergifyio queue |
Contributor
Merge Queue Status
This pull request spent 4 minutes 22 seconds in the queue, with no time running CI. ReasonPull request #1381 has been merged manually at 26a533a HintYou were too fast! Waiting for
All conditions
Tick the box to put this pull request back in the merge queue (same as
|
Contributor
☑️ The pull request has been merged manuallyDetailsThe pull request has been merged manually at 26a533a |
5 tasks done
EdbertChan
deleted the
stack/EdbertChan/reflect/prove-it-hooks-20261009/block-cat-unverified-tag-hands-read-only-check--3b5ef129
branch
October 13, 2026 10:27
EdbertChan
restored the
stack/EdbertChan/reflect/prove-it-hooks-20261009/block-cat-unverified-tag-hands-read-only-check--3b5ef129
branch
October 13, 2026 10:33
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Small checker scripts read each reply before Claude sends it. One checks that claims come with proof.
The problem: Claude could mark a claim "unverified" and then ask the user to say "test it" for a check Claude can run itself.
The fix: that reply is now refused and Claude is told to run the check. A second checker now accepts "I am running it now" as a valid next step.
Offers tied to real actions, like pushing or deleting, still pass.
Review Claim
A reply that hands a harmless check back to the user is refused, and a reply saying the check is running now is accepted.
Review Lane
behavior
Review Unit
engine-runtime
Safety Invariant
Each change only affects when a checker warns about or blocks a reply. Checkers never edit files or run commands, and each change adds tests that fail before and pass after.
Slice Rationale
This is the first slice: it adds a new refusal rule, and the later slices reuse the same ledger checker. It is one claim: stop handing checks back. The other slices change wording, retry handling, and citations.
Non-goals
Measured
Command:
source scripts/test/hermetic_env.sh; python3 engine/hooks/<hook>/tests/test_hooks.pywith this commit's tests and the parent's checker code (base) versus this commit's checker code (head).frustration-watchdog: Ran 25 tests, FAILED (failures=1); unverified-tag-ledger: Ran 57 tests, FAILED (failures=3)frustration-watchdog: Ran 25 tests, OK; unverified-tag-ledger: Ran 57 tests, OKTest Plan
Test Plan
source scripts/test/hermetic_env.sh; python3 engine/hooks/frustration-watchdog/tests/test_hooks.py-> Ran 25 tests, OKsource scripts/test/hermetic_env.sh; python3 engine/hooks/unverified-tag-ledger/tests/test_hooks.py-> Ran 57 tests, OKpython3 scripts/ci/check_hook_test_coverage.py engine/hooks/frustration-watchdog-> check_hook_test_coverage: OK (1 hook(s) checked)python3 scripts/ci/check_hook_test_coverage.py engine/hooks/unverified-tag-ledger-> check_hook_test_coverage: OK (1 hook(s) checked)Revert Plan
Revert Plan
git revert <merge commit of this PR>🤖 Generated with Claude Code