Repository navigation
Refuse --answers naming a unit ask the action never reaches - #2883
Merged
Merged
Conversation
`order say/send/strike/problem --answers ID` accepted a unit's question even when the action went to a different thread. The gate counted the ask as answered, AnsweredSource recorded it, and the asker never got a reply: on 2026-10-23 unit-mi-1a's question 3dce7e7182d8 was "answered" by an order to unit-reviewer and mi-1a sat blocked 22 minutes. OwedAnswer now owns whether naming a debt in an action that reaches given threads would record an answer its asker never receives (misaddressed). Only UnitAskUnanswered refuses: a unit's ask is answered by a message to that unit. Owner directives and escalation bursts keep their own answered_by rules. Each DirectiveVerb declares the threads its message is for, and the gate refuses before anything is sent, naming the real asker. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.
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.
order say/send/strike/problem --answers IDcounted a unit's question as answered even when the action went to a different thread. On 2026-10-23 unit-mi-1a's question 3dce7e7182d8 was "answered" by an order to unit-reviewer; mi-1a got no reply and sat blocked 22 minutes.OwedAnswer.misaddressed(named, reached)(standing_rules.py:365): default refuses nothing.UnitAskUnanswered.misaddressed(commander/standing.py:210): a unit's ask counts only when the action reaches that unit; otherwise "ID was asked by UNIT; answer it in a message to UNIT".DirectiveVerb.addressed(commander/order.py:827) is declared by Send, Strike, Say and Problem; the gate (order.py:812) refuses before anything is sent.Proof:
tests/test_holder_standing_rules.py::test_an_answer_sent_to_another_unit_is_refused_and_leaves_the_ask_owed— a say tooutsidernamingworker's ask exits with the asker named, the bus revision is unchanged, and the ask stays owed. tests/test_holder_standing_rules.py: 41 passed locally (one earlier full run showed 1 failure that did not reproduce on rerun; not identified).Overlap: #2878 (P476) and #2469 touch the same three source files. This edit is kept to small additions so a merge resolves trivially.
Assumed: the thread names a verb passes are the threads its message is for (Say uses VerdictAudience, so
#commsreaches no unit's ask); UnitAskUnanswered.unit is the asker's canonical name.🤖 Generated with Claude Code