hermes-agent/gateway/relay
Ben Barclay 40fddc9e4c
feat(relay): Phase 5 §5.3 going-idle / buffered-flip primitive (gateway side) (#51572)
The gateway half of the going-idle/buffered-flip primitive (scale-to-zero
PRIMITIVE, not the behaviour). Integrates with the EXISTING drain transition:

- ws_transport: `go_idle()` sends `going_idle` + awaits the connector's
  `going_idle_ack` (connector-authoritative flip-then-ack, Q-5.3c — stays
  serving until the ack so nothing is lost in the flip window); acks a buffered
  inbound (bufferId present) via `inbound_ack` after the handler runs
  (drain-without-dup on the delivery leg); NET-NEW reconnect loop re-dials +
  re-handshakes after an unexpected close (off by default, on in production).
- adapter: emits `going_idle` from its existing `disconnect()` drain seam before
  tearing down the socket; best-effort + guarded (never blocks shutdown).
- transport Protocol + contract doc §3.2 document the 3 new frames.

+6 relay tests (124 pass). NOT in scope: the autonomous idle timer / machine
suspend / NAS health model (deferred behaviour). Ben's relay-adapter solo lane.
2026-06-24 09:50:30 +10:00
..
__init__.py feat(relay): Phase 5 §5.3 going-idle / buffered-flip primitive (gateway side) (#51572) 2026-06-24 09:50:30 +10:00
adapter.py feat(relay): Phase 5 §5.3 going-idle / buffered-flip primitive (gateway side) (#51572) 2026-06-24 09:50:30 +10:00
auth.py feat(relay): connector⇄gateway channel auth + signed-HTTP inbound receiver + enroll CLI (#48147) 2026-06-18 12:01:54 +10:00
descriptor.py feat(relay): derive descriptor from PlatformEntry 2026-06-17 16:37:45 -07:00
transport.py feat(relay): Phase 5 §5.3 going-idle / buffered-flip primitive (gateway side) (#51572) 2026-06-24 09:50:30 +10:00
ws_transport.py feat(relay): Phase 5 §5.3 going-idle / buffered-flip primitive (gateway side) (#51572) 2026-06-24 09:50:30 +10:00