Skip to content

fix: corroborate ack-channel correction detection (v1.3.3) - #1

Merged
ankitkr3 merged 1 commit into
mainfrom
fix/auto-propose-ack-corroboration
Jun 17, 2026
Merged

fix: corroborate ack-channel correction detection (v1.3.3)#1
ankitkr3 merged 1 commit into
mainfrom
fix/auto-propose-ack-corroboration

Conversation

@ankitkr3

Copy link
Copy Markdown
Owner

Problem

The Stop-hook auto-proposer (scripts/auto_propose.py) over-fires rule-capture nudges. Its channel 2 (assistant acknowledgment) treats Claude's own phrasing — "you're right", "my mistake", "i was wrong" — as enough to arm a correction on its own.

But that vocabulary also covers ordinary agreement and Claude self-correcting its own prior claim in conversation. The dominant false positive: a neutral user instruction answered apologetically fires a rule nudge with no actual user correction. Observed live (auto_propose.jsonl): correction_user: false, correction_ack: true on turns where the user only gave a directive.

Fix

Channel 2 becomes confirming, not self-sufficient: an assistant ack counts as a correction only when the user's message also shows doubt — a ?, a hard CORRECTION_PATTERN, or a soft DOUBT_LEXICON term.

Channel 1 (explicit user phrasing) still arms a correction alone at the unchanged low bar, so genuine low-tool corrections (e.g. the web-search-for-latest-versions rule — web searches, no edits, score 0) are preserved.

Deliberately not done: a score/edit gate on rule capture. Verified it would suppress real corrections that do no edits and score 0 (web-search confirmations) — a degradation.

Changes

  • DOUBT_LEXICON + _user_shows_doubt() (opening-window scan, mirrors existing guards)
  • score_turn: ack_is_correction = correction_ack and user_doubt
  • expose user_doubt in the signals dict for observability
  • docstring + channel-2 comments updated
  • plugin.json 1.3.2 → 1.3.3

Tests

4 new regression tests; 59/59 green. No existing assertion changed (no true-positive regressions):

  • test_ack_alone_without_user_doubt_does_not_fire (the regression)
  • test_assistant_self_correction_in_meta_discussion_silent
  • test_ack_with_user_question_mark_still_fires (preserves channel 2)
  • test_ack_with_soft_doubt_no_question_mark_fires

🤖 Generated with Claude Code

…lse positives (v1.3.3)

The Stop-hook auto-proposer treated the assistant's acknowledgment language
(channel 2: "you're right", "my mistake", "i was wrong") as sufficient to arm
a correction on its own. But that vocabulary also covers ordinary agreement and
Claude self-correcting its OWN prior claim in conversation — the dominant false
positive. A neutral user instruction answered apologetically would fire a rule
nudge with no actual user correction.

Channel 2 is now CONFIRMING, not self-sufficient: an assistant ack counts as a
correction only when the user's message also shows doubt (a question mark, a
hard CORRECTION_PATTERN, or a soft DOUBT_LEXICON term). Channel 1 (explicit user
phrasing) still arms a correction alone at the unchanged low bar, so genuine
low-tool corrections (e.g. the web-search-for-latest-versions rule) are
preserved.

Deliberately did NOT add a score/edit gate on rule capture: verified it would
suppress real corrections that do no edits and score 0 (web-search confirmations).

- add DOUBT_LEXICON + _user_shows_doubt() (opening-window scan)
- score_turn: ack_is_correction = correction_ack and user_doubt
- expose user_doubt in the signals dict for observability
- 4 regression tests; 59/59 green

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ankitkr3
ankitkr3 merged commit e085548 into main Jun 17, 2026
8 checks passed
@ankitkr3
ankitkr3 deleted the fix/auto-propose-ack-corroboration branch June 17, 2026 11:19
Sign up for free to 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.

2 participants