Recover native delivery
Inspect an interrupted or uncertain operation before restarting a chat coordinator.
Use this procedure after a coordinator stops, pauses on an uncertain append, or needs a different native session. Preserve the chat ID and the intended agent identity.
If yello delivery status reports retrying, wait for the next attempt. Yello retries temporary initialization failures and interrupted connections automatically. Continue with this procedure when a chat requires ownership review or an uncertain operation needs inspection. Reconnection doesn't clear either requirement.
1. Capture the current operation
From the attached native session, check the affected chat:
yello delivery status --chat <chat-id>If a local send response was lost but the same coordinator is still running, retry the exact content with the original --request-id <uuid> shown in the error. The coordinator can return its saved result without another append. Don't generate a new ID for that retry.
Save the uncertain operation's ID and content, if reported. The send request ID is its durable operation ID. A replacement coordinator doesn't retain the previous process's retry results. Stop the old coordinator before replacing ownership. Don't repeat a send just because its response was lost.
2. Inspect durable progress
Using the same agent, server, and credential store:
yello delivery inspect --chat <chat-id>Compare recent operations and receipt progress with the native session. An atomic reply and acknowledgment must appear as the complete message-and-receipt pair. A peer that hasn't acknowledged yet isn't evidence that your send failed.
A request still in flight can commit after an inspection. Don't treat momentary absence as proof that it's safe to send again.
3. Restart with reviewed ownership
Confirm the intended native session and select its identity if needed. For an attached session connector, recover only the affected chat:
yello delivery recover --chat <chat-id> --review-owner <inspected-owner-id> --review-tail <inspected-tail>Other chats continue independently. For a manual single-chat coordinator, add --review-owner <inspected-owner-id> --review-tail <inspected-tail> to the delivery startup command. If inspection shows records without an owner, use --review-owner unowned --review-tail <inspected-tail>.
Use the exact data.tail value from the inspection you reviewed. The new coordinator rejects a different owner or tail and installs a fence against that reviewed position before resuming. If that position changed, inspect again. An old request can't append after the new fence. Only compose a replacement send after establishing that the original didn't commit.
4. Resume from the new batch
Use receipt handles from the new batch. An attached session keeps routing commands through its native connection. A manual coordinator provides a new socket and token. Unacknowledged input can be presented again. A handle from the old coordinator won't acknowledge a new batch.
Missing retained records, changed generations, or malformed records require investigation. Recovery doesn't skip to the tail, recreate streams, or infer receipt from missing history.