Part of the node-message-broker build-out (Track B, Hub Plan 013 Phase 4). See .agents/plans/001-message-broker.md (local working doc).
Goal: wire the inbound loop in ComponentsModule.
Steps
- On
hubClient.onWakeup(...) (and long-poll fallback via pull({ wait })): pull pending → for each, resolve the sender's node public key (S2) → crypto.open (S1) → demux by metadata.analysisId → delivery.deliver(analysisId, decrypted) → hubClient.ack processed ids (delete-on-ack; ids are the dedup key for at-least-once redelivery).
Depends on: S1 (decrypt), S2 (sender key). Builds on the shipped HubClient/IDeliveryService.
Acceptance: a fake Hub emitting a sealed message yields a decrypted webhook delivery + ack; a decrypt failure is isolated (logged, not fatal) — decide poison-message handling.
Part of the node-message-broker build-out (Track B, Hub Plan 013 Phase 4). See .agents/plans/001-message-broker.md (local working doc).
Goal: wire the inbound loop in
ComponentsModule.Steps
hubClient.onWakeup(...)(and long-poll fallback viapull({ wait })): pull pending → for each, resolve the sender's node public key (S2) →crypto.open(S1) → demux bymetadata.analysisId→delivery.deliver(analysisId, decrypted)→hubClient.ackprocessed ids (delete-on-ack; ids are the dedup key for at-least-once redelivery).Depends on: S1 (decrypt), S2 (sender key). Builds on the shipped
HubClient/IDeliveryService.Acceptance: a fake Hub emitting a sealed message yields a decrypted webhook delivery + ack; a decrypt failure is isolated (logged, not fatal) — decide poison-message handling.