# Native delivery recovers without stopping local work

Status: accepted (2026-07-14; amended 2026-07-20)

spt-core owns durable message custody. The OMP extension surfaces live-listener
events immediately through native `sendUserMessage`, and active context
boundaries independently surface authenticated `api poll --include-deferred`
stdout. It adds no second spool, receipt protocol, or cross-channel ordering.
Assistant output, submission errors, failed turns, and shutdown text remain
local; a model or operator sends to a peer only through explicit `spt send` use
or the `@<…@>` shortform. <!-- [doc->REQ-OMP-CORE-DELIVERY] -->

After a successful bind, listener, state-publication, and poll failures never
stop local OMP work. The cyan endpoint identity gains warning-styled
` · comms recovering...`; listener restart uses indefinitely repeated capped
backoff, state retries use current OMP activity truth, and poll retries occur
only at real active context boundaries. Listener exit removes the relay's ONLINE
claim, so recovery does not advertise a dead channel as healthy. Initial bind
failure remains a loud activation failure. <!-- [doc->REQ-OMP-COMMS-RECOVERY] -->

Normal listener delivery uses the native OMP message-stub contract: the
extension opens or steers with `<msg from="…"/>` and supplies the complete SPT
event envelope as context for that same turn. Peer text remains opaque message
content and cannot accidentally invoke an OMP slash command. Active poll output
is model-only context and creates no adapter-specific TUI panel.
