Parent: #137. The backhaul seam is the right shape, but a broadcast PSK channel needs three adjustments (from the fresh-look review):
- Broadcast-route model. A private channel is one shared medium, but
OutboundMessageManager floods one SendAsync per neighbour route (OutboundMessageManager.cs:208–230) — N transmissions where one suffices. Model a first-class broadcast route (one send to the channel; addressee self-selects via IsLocal) or coalesce identical (msgId, channel) sends.
- Positive bearer selection. Replace
Dappsv1SessionBackhaul.CanHandle's route.UdpEndpoint is null catch-all with an explicit route.Bearer discriminator, so adding MeshCore doesn't force editing AGW's predicate.
- Airtime on the data path.
AirtimeAccountant.TryReserve is discovery-only today; wire it into the MeshCore SendAsync / data-forward path.
Parent: #137. The backhaul seam is the right shape, but a broadcast PSK channel needs three adjustments (from the fresh-look review):
OutboundMessageManagerfloods oneSendAsyncper neighbour route (OutboundMessageManager.cs:208–230) — N transmissions where one suffices. Model a first-class broadcast route (one send to the channel; addressee self-selects viaIsLocal) or coalesce identical(msgId, channel)sends.Dappsv1SessionBackhaul.CanHandle'sroute.UdpEndpoint is nullcatch-all with an explicitroute.Bearerdiscriminator, so adding MeshCore doesn't force editing AGW's predicate.AirtimeAccountant.TryReserveis discovery-only today; wire it into the MeshCoreSendAsync/ data-forward path.