Commit Graph

2 Commits

Author SHA1 Message Date
Ben Barclay 952d1cef18 fix(gateway): prompt-send failures keep their diagnostic detail; clarify caller path gets contract tests
Two review nits on the clarify ambiguity fix:

- _approval_send_outcome swallowed the failure detail the old inline
  callers logged (scheduling exception text / SendResult error). Both
  the approval and clarify lanes now share one warning with the detail,
  logged in the classifier itself.

- The clarify tests pinned the disposition helper but nothing proved
  the ambiguous branch actually reaches the bounded wait. The
  send-then-wait sequence is extracted to _clarify_send_then_wait (the
  callback closure now just binds context onto it) and the suite gains
  caller-path tests: ambiguous/sent -> wait_for_response with the
  generated clarify_id and configured timeout; definitive failure ->
  sentinel without waiting; no-response timeout sentinel preserved;
  plus caplog assertions that failed sends log their detail.

Relay + gateway sweep 289/289.
2026-08-20 19:56:01 -07:00
Ben Barclay a7cfe391f7 fix(gateway): clarify prompt sends get the same ambiguous-timeout handling as approvals
The clarify caller treated a send-scheduling timeout as a definitive
failure: clear_session() + '[clarify prompt could not be delivered]'.
Same physics as the approval card fixed earlier in this PR — the card
may well have posted with a late connector ack — so the teardown ran
out from under a rendered clarify card and the user's answer resolved
nothing.

New _clarify_send_disposition() routes the outcome through
_approval_send_outcome: only a DEFINITIVE failure (error result,
non-timeout exception, no future) clears the registration and aborts;
ambiguous logs a warning and falls through to wait_for_response, whose
existing bounded wait already handles the truly-lost-card case. This
makes the boundary rule stated in the ambiguity test docstring hold
for the clarify lane, not just approvals.

Tests: 5 disposition tests mirroring the approval suite, including
clear_session-not-called on timeout. Mutation-verified: folding
ambiguous into the failed branch sends
test_timeout_keeps_registration_armed_and_proceeds_to_wait red.
Relay + gateway sweep 283/283.
2026-08-20 19:56:01 -07:00