Files
hermes-agent/tests/tools
Teknium 70214e9ab8 fix(delegation): an interim task-failure notice never claims, acknowledges or dedups against the batch's final result
Independent review of the first version reproduced a final-result loss with
real dispatch, SQLite claims and the delivery consumers: the interim notice
carried the batch's delegation_id and every consumer claims and acknowledges
durable rows by that id alone. A busy parent that drained the notice first
acknowledged the FINAL result's row; the consolidated result could then
never be claimed, and would not replay after restart. The gateway's
in-memory dedup keyed on (type, delegation_id) and suppressed the final
(and every sibling notice) the same way.

The notice is now recognised as a non-durable event at both boundaries:
claim_event_delivery returns the empty token for it (is_interim_delegation_event),
the gateway preflight does not claim the durable row for it, and the
gateway dedup identity carries the task index so notices are distinct from
the final and from each other (the TUI key already did).

Reviewer's own probe re-run on this head: gateway receives
['notice', 'notice', 'final'] (was ['notice']); busy-parent case: the notice
takes no claim token, the final's claim succeeds and its row stays pending
until delivered (was: final claim None, row 'delivered' with an undelivered
result inside).

Tests (2 new): the notice is non-durable at the claim boundary; the gateway
identity separates two notices and the final into three.
2026-09-05 06:12:37 -07:00
..