mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-09-10 10:35:51 +00:00
acd5637485
RecoverExecutingActions existed with full test coverage but had no production caller, so any typed action mid-dispatch across a server restart (container update, start/stop/restart, host update, storage cleanup) stayed in the executing state forever and sat in the Actions inbox as live work, even after the agent persisted its terminal durable receipt. Reproduced live on the dev instance with a Docker container update (act_bf77dfe860ad3d8e4e0a91dc8eb83b44). The router now runs a bounded, serialized recovery pass per organization from a startup background worker, and again whenever an agent (re)registers on the agentexec command server via a new registration notifier, because a receipt-pending attempt can only be reconciled while the owning agent is connected. Both triggers reuse the existing query-only reconciliation semantics; nothing gains a resend authority. Task 07 owns this residual; the api-contracts and agent-lifecycle subsystem contracts now record the production trigger. The rg-07-durable-delivery gate suite stays green, and a new router-level test pins that a receipt-pending executing action completes from the agent receipt without a second dispatch.