Skip to content

Channel Gateway Operations

The gateway is the part of Wayland Core that moves messages between your agents and the outside world. Messaging Channels covers what the channels are; this page covers running the gateway that carries them.

Gateway operability landed in v0.12.26.

The gateway keeps an exactly-once delivery ledger. A delivery is recorded once and delivered once, and the ledger is the record you reconcile against.

Two related behaviours follow from taking that seriously:

  • Deliveries whose outcome is unknown are not re-sent to destinations that cannot dedupe. Retrying an unknown into a destination with no deduplication is how one message becomes three. Where the destination cannot protect you, the gateway does not gamble.
  • Abandoned deliveries are exempt from compaction until someone has actually looked at them. A delivery nobody has reviewed is not quietly aged out.

This is the part operators feel most. An abandoned delivery is nameable, acknowledgeable, and re-sendable:

  • Nameable. You can refer to a specific stuck delivery, not just observe that some exist.
  • Acknowledgeable. You can mark that you have seen it, which is what releases it from the compaction exemption above.
  • Re-sendable. You can send it again once you have fixed whatever stopped it.

A single-owner inbound polling lease runs across all three start_all sites. The installed service outranks an ad-hoc session, and the loser reacquires cleanly rather than fighting for the same inbound stream.

The practical version: starting a session on a machine that already runs the gateway as a service does not produce two pollers double-reading your inbox.

The gateway also carries an observable drain state, a lifecycle machine, and a Windows-safe instance lock.

Terminal window
wayland-core gateway support-bundle

This produces a redacted bundle, proved clean by canary. A canary is a known secret planted specifically so the redaction pass can be tested against something whose presence in the output would be unambiguous.

The scheduler was hardened alongside the gateway:

  • The schedule is leased, so exactly one process fires it.
  • Every trigger type is reachable from the shipped binary.
  • Event, webhook, and poll triggers validate, persist, and fire.

See Cron Scheduler.