MeshCore Companion bearer (Phase H1, #154) - #161
Merged
Merged
Conversation
Carry DAPPS BackhaulMessages over a MeshCore radio's private channel, integrated behind the IDappsBackhaul / IBackhaulInbox seam. New project dapps.meshcore: - MeshCoreClient: Companion USB-serial protocol (framing, opcodes, the MSG_WAITING -> SYNC_NEXT pull model, device control). - MeshCoreChannelTransport: binary channel-data carriage reusing the real BackhaulMessageCodec + Packetiser; per-frame nonce (mesh dedup) and zstd shared-dictionary compression. - TxBudget: hard self-enforced airtime governor (good-citizen control). - MeshCoreLink: opens/configures the radio and watchdogs it, recovering a hung companion via a CP2102 DTR/RTS hard reset (#160). - MeshCoreCompanionBackhaul (IDappsBackhaul) + MeshCoreInbound (-> IBackhaulInbox), with broadcast-coalescing and LinkSourceCallsign-based sender identity. - Region/device control (uk-narrow / uk-test / eu-legacy). Host integration: - MeshCoreBearer + MeshCoreBearerService registered before the AGW catch-all; inert unless MeshCoreEnabled=true. - DAPPS_MESHCORE_* config via SystemOptions + DbStartup seeding. - BackhaulRoute gains an additive MeshCoreChannel hint (positive bearer selection). Also: dapps.meshcore.soak (on-air soak harness driving the real bearer through the real seam) and poc/MeshCorePoc (the standalone PoC + characterisation this is built on). Validated: full solution builds clean; 12 new bearer unit tests + 42 seam tests pass; 10-minute on-air soak between two Heltec V3s (compression to 1 packet/msg, governor ~0.6% duty, watchdog reset+recovery under load, links Healthy). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KLbwvhE2cKCe8WPZNg8k17
This was referenced Jul 1, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Phase H1 (#154): a MeshCore Companion-radio bearer for DAPPS, integrated behind the
IDappsBackhaul/IBackhaulInboxseam and proven on air between two Heltec V3s. Built on the standalone PoC + characterisation inpoc/MeshCorePoc/.Highlights
dapps.meshcorelibrary: serial driver (MeshCoreClient), binary channel-data transport reusing the realBackhaulMessageCodec+Packetiser, zstd shared-dictionary compression, airtime governor (TxBudget), watchdog/recovery via CP2102 DTR/RTS hard-reset (MeshCore: radio liveness watchdog + reset/recovery in the driver #160), device control + region presets.MeshCoreCompanionBackhaul : IDappsBackhaul+MeshCoreInbound → IBackhaulInbox, with broadcast-coalescing andLinkSourceCallsign-based sender identity.MeshCoreBearer+ hosted service registered inProgram.csbefore the AGW catch-all;DAPPS_MESHCORE_*config viaSystemOptions+DbStartupseeding; additiveBackhaulRoute.MeshCoreChannelhint (positive bearer selection).dapps.meshcore.soakon-air soak harness driving the real bearer through the real seam.Validation
Scope / follow-ups
Inbound is fully wired. Outbound is selected for routes carrying a MeshCore channel hint; wiring that hint onto neighbour rows (#155), adaptive airtime + channel-monitoring (#157), dictionary versioning, end-to-end reliability, and deployment models B/C (#158) are tracked follow-up issues under #137.
Inert unless
MeshCoreEnabled=true— no behaviour change for existing bearers;BackhaulRoutechange is additive.🤖 Generated with Claude Code
https://claude.ai/code/session_01KLbwvhE2cKCe8WPZNg8k17