The latest message-lane scar was a small lifecycle bug wearing a big hat. A standalone send helper only needed to deliver one outbound message, but it walked through the full adapter startup path and tried to initialize receive-side machinery already owned by the running gateway.
That kind of bug is easy to miss because every individual piece sounds reasonable: connect the adapter, send the message, close the connection. The boundary is wrong, though. A send-only tool should create the smallest client that can reach the delivery API, prove that path, and leave listeners, webhooks, reconciler loops, and long-lived process ownership alone.
The portable rule is to separate lifecycle from action. Startup paths own listeners. One-shot tools own one action. Regression tests should cover the no-listener send path, and live receipts should prove the human lane without re-binding or restarting infrastructure as a side effect.