Skip to content

Require confirmed questions before blocking attention - #6

Merged
dkropachev merged 2 commits into
mainfrom
fix/2-confirm-unanswered-questions
Oct 26, 2026
Merged

dkropachev merged 2 commits into
mainfrom
fix/2-confirm-unanswered-questions

Conversation

@dkropachev

@dkropachev dkropachev commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Issue

In #2, completion-only agent messages could become blocking Reply requests when question classification failed or a daemon restarted during an unfinished check. Those synthetic requests could remain pending after later successful work.

Fixes #2

Fix

Require positive evidence of an unanswered question before creating text fallback. Classifier failures ask the original retained agent for question-only clarification in Plan mode with read-only access and no approvals. Clarification and native-form repair share a durable budget of at most two automatic turns; unconfirmed results retain diagnostics without adding attention or continuing the task.

Recheck ambiguous legacy requests at startup and after later successful turns. Retire only matching requests positively classified as obsolete, while preserving genuine unanswered questions, explicitly nonblocking delivery, approvals, and claimed answers. Owner takeover invalidates late recovery callbacks. The UI shows clarification progress and its shared attempt count without false attention badges.

Keep one current answer route for recovered async questions across process loss and restart. Retire matching obsolete synthetic requests atomically while retaining their history, and preserve final originating claims when delivery is uncertain. A live repair answer completes its turn before continuation restores the original task policy.

Claim retained-agent setup attempts durably from the shared recovery budget. Setup failure consumes its claim; successful setup reuses it for the first question-only turn. Only remaining budget permits automatic retries. Preserve takeover cancellation before turn delivery and use later owner-directed work as evidence for legacy rechecks.

Reconcile the attention, recovery, interaction, and UI contracts with the implementation and regression assertions.

Run push checks only on main and verify feature work through pull requests to main. Main push before/after and PR event base/head comparisons, fixture verification, and successful-main-push release provenance remain unchanged. Feature branches without an open PR receive no automatic push checks. Manual dispatch keeps its existing parent comparison and receipt-base limitation.

Decisions

  • Choice: Run CI on main pushes and pull requests to main. Feature branches without an open PR receive no automatic push checks. Keep exact main-push before/after and PR event base/head comparisons, fixture verification, and successful-main-push release provenance unchanged. Manual dispatch keeps its current parent comparison and receipt-base limitation. Use this smallest workflow/documentation change to resolve the conflicting feature-push and PR receipt bases.
  • Choice: Keep one current answer route for each recovered async question across restart. Retire only matching obsolete synthetic requests atomically with resolution events and retain their history. Claim the originating question once before delivery; uncertain delivery must not reopen it or let a sibling request deliver another answer. Preserve its delivery status and originating recovery attempt count. Complete this correction in this PR to satisfy the original async-question and answer-claim preservation requirements.

Run push verification only on main so feature PR checks use the same
comparison as their reconciliation receipts. Preserve exact main push
comparisons and release provenance, and document the remaining manual
comparison limitation.
Clarify classifier failures with the retained agent under a shared,
durable two-attempt recovery budget. Keep unconfirmed results diagnostic,
and create text fallback only for positively confirmed questions.

Recheck legacy synthetic requests while retaining genuine unanswered
questions, nonblocking delivery, approvals and final answer claims.
Preserve one durable async answer route across restart and claim its
originating question before delivery, including uncertain delivery.

Keep setup, takeover and queued callbacks within their owning recovery.
Complete historical clarification before detecting a newer question, and
restore task policy only after a live repair answer completes.

Show clarification progress without attention badges. Include fixture
regressions and the reviewed UI, behavior and reconciliation records.

Fixes #2
@dkropachev
dkropachev force-pushed the fix/2-confirm-unanswered-questions branch from 9228633 to 6b783cc Compare October 26, 2026 03:30
@dkropachev
dkropachev merged commit fc80b2e into main Oct 26, 2026
1 check passed
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.

Completed agent messages incorrectly classified as blocking user-input requests

1 participant