What changed
The Connector no longer relies on a one-second idle poll to discover work. It maintains an authenticated outbound WebSocket and receives a dispatch.available signal when the control plane has durable work for that device.
The signal contains no invocation, path, credential or authorization decision. The Connector still calls the signed poll endpoint, where the control plane revalidates policy and PostgreSQL atomically claims the dispatch.
Wake is fast; the queue is durable
WebSocket delivery is intentionally best effort. A reconnect triggers an immediate poll, and a 30-second fallback poll recovers work after a lost signal, proxy restart or temporary network failure.
- Outbound-only connection for NAT and firewall compatibility.
- One active connection per device in a single control-plane instance.
- Exponential reconnect backoff with jitter.
- PostgreSQL remains the only source of truth for task state.
Operations and compatibility
Heartbeat presence updates are batched instead of writing capability data on every signed request. Older Connectors can continue polling, and their lease traffic still keeps long-running work visible as online.
adc_node_wake_connections
adc_node_wake_total{outcome="attempted|offline"}
adc_node_poll_total{outcome="dispatched|idle|denied"}