Skip to content

Releases: jagoda/meshcadet

MeshCadet v0.7.0

Choose a tag to compare

@github-actions github-actions released this 22 Aug 14:50
f3803c5

Added

  • firmware: auto-retry unacked DM/room-post sends with backoff cap (d6eb9d0)
  • firmware: auto-retry unacked DM/room-post sends with backoff cap (5da1534)
  • firmware: stabilize battery SoC — NVS persistence, peak sampling, slew-limit + buckets (2508553)
  • firmware: tri-state delivery-state model for DM/room-post ACKs (0315458)
  • firmware: tri-state delivery-state model for DM/room-post ACKs (8cfa860)
  • protocol: send raw battery millivolts in the telemetry RESPONSE (208f45f)
  • protocol: send raw battery millivolts in the telemetry RESPONSE (1a8c1c6)
  • ui: add a glanceable battery indicator beside the header signal meter (e6a0019)
  • ui: add a glanceable battery indicator beside the header SignalMeter (8d630a7)

Fixed

  • ci: close the vocabulary-leak recurrence path at commit-subject time (ba7a834)
  • ci: scrub internal doc-path leak from alloc_tick_dedup.rs (706bb2b)
  • ci: scrub internal doc-path leaks from battery.rs comments (aa86dee)
  • ci: scrub internal-ops vocabulary leak from ACK-matcher doc comments (a56bd88)
  • ci: scrub internal-ops vocabulary leak from battery.rs doc comment (712389b)
  • firmware: accept pre-fix GPS RMC sync from the GNSS module's backup RTC (f07eded)
  • firmware: battery indicator no longer crawls at ~2%/30s off a contaminated boot-time guess (aa6dbc0)
  • firmware: honest clock-source provenance and a real sync-age on the GPS status screen (a3bb136)
  • firmware: honest clock-source provenance and a real sync-age on the GPS status screen (7962350)
  • firmware: skip the discharge slew limit on the first confirmed percent basis (edff082)
  • ui: align header icon clusters to the header's outer edges (d6585ae)
  • ui: align header icon clusters to the header's outer edges (87719fd)
  • ui: center the messaging view's header status icons vertically (60abad2)
  • ui: center the messaging view's header status icons vertically (985f07d)
  • ui: drop the static comet accent from the message-view header (3ce2ea2)
  • ui: drop the static comet accent from the message-view header (8e5136f)

MeshCadet v0.6.0

Choose a tag to compare

@github-actions github-actions released this 04 Aug 01:52
5892c44

Added

  • firmware: add diagnostics-gated on-device perf instrumentation (764ac91)
  • firmware: add diagnostics-gated on-device perf instrumentation (d1db0ec)
  • firmware: curate RENDER_EXTRA_CPS to the campaign's 600-entry target (1fff506)
  • firmware: curate RENDER_EXTRA_CPS to the campaign's 600-entry target (82dbdaf)
  • firmware: grow emoji picker to 96 entries with category tabs (8fdc078)
  • firmware: grow emoji picker to 96 entries with category tabs (e04da64)
  • firmware: implement ADR-0012 dispatcher/UI task split (M1) (713b3dc)
  • firmware: implement ADR-0012 dispatcher/UI task split (M1) (af448df)
  • firmware: introduce RENDER_EXTRA_CPS render-only codepoint table (669dd2f)
  • firmware: introduce render-only emoji tier with EMOJI_TABLE subset invariant (07116d2)
  • firmware: recompute app-image size against a committed baseline (cd08085)
  • firmware: recompute app-image size against a committed baseline (ca0a4bf)
  • firmware: restore ui_step/ui-starvation instrumentation on ui_task (148fcc6)
  • firmware: restore ui_step/ui-starvation instrumentation on ui_task (231ad56)
  • perf-device-report: add the collection-kit ingest path (e04f69d)
  • perf-loop-model: expose device-report re-calibration hook (3e47008)
  • perf: add host discrete-event model of the dispatcher superloop (19626df)
  • perf: host discrete-event model of the dispatcher superloop (8f37a4d)
  • perf: log free internal-heap headroom in the 30s diagnostics rollup (65dbdd9)
  • perf: M1 task-split host validation — as-built loop model, parity matrix, kit regen (0c72fe9)
  • protocol/firmware-core/ui_sim: normalize inbound emoji so VS16/skin-tone/ZWJ no longer render blank cells (29cec59)
  • protocol/firmware-core/ui_sim: normalize inbound emoji so VS16/skin-tone/ZWJ no longer render blank cells (1abad3e)
  • radio: land D9/D11 SPI2 bus-hold GPIO-toggle probe in radio.rs (7e8dfc8)
  • ui: render the emoji picker's 96 grid cells in full color (9bf1a82)
  • ui: render the emoji picker's 96 grid cells in full color (8684097)
  • xtask: add static guard for ADR-0012 R8 Slint thread-affinity barrier (b4af00c)
  • xtask: make ADR-0012 R8's Slint thread-affinity barrier mechanical (e007445)
  • xtask: rewrite the picker/render sync guard from equality to subset (aa550af)

Fixed

  • ci: run cargo fmt on splash_backdrop_steal_probe.rs (2f02b3e)
  • ci: scrub internal doc-path leak and apply cargo fmt (f9fd86a)
  • docs: drop internal-ops term from ui-residual-opt-r1.md (d4b23d5)
  • firmware: add missing PerfRollup.ui_step field; scrub vocabulary leak (aa0a1a4)
  • firmware: bundle ui_task::spawn's peripheral params behind one Box (8df94bd)
  • firmware: bundle ui_task::spawn's peripheral params behind one Box (5070c35)
  • firmware: derive Clone for BootSeed (af86319)
  • firmware: drive emoji wght axis + alpha gamma boost for crisp mono glyphs (d2ce8ea)
  • firmware: drive emoji wght axis + alpha gamma boost for crisp mono glyphs (3f2400d)
  • firmware: recompute app-image baseline against main, correct its method provenance (dcc8242)
  • firmware: recompute app-image baseline against main, correct its method provenance (c0a45c0)
  • protocol: drop internal-ops term from emoji.rs doc comment (2b2cf8e)
  • provisioner: make generated channel secrets recoverable before add (d94c84e)
  • provisioner: make generated channel secrets recoverable before add (9e3f66e)
  • radio: re-check DIO1 level after a wake before reporting Asserted (5bcb3d8)
  • radio: re-check DIO1 level after a wake before reporting Asserted (251e53b)
  • release: parse a multi-line members = [...] array in sync-cargo-lock-versions.sh (5d97014)
  • release: parse a multi-line members array in sync-cargo-lock-versions.sh (a3574e1)
  • ui: dedupe the 7x embedded starfield backdrop texture (9637838)
  • ui: dedupe the 7x embedded starfield backdrop texture (7d73a41)
  • ui: guard render_if_needed against Slint's unset-component boot panic (9e20f11)
  • ui: guard render_if_needed against Slint's unset-component panic (689691d)
  • ui: warm the shared backdrop-image cache before the boot splash's own component (e7f7235)
  • ui: warm the shared backdrop-image cache before the boot splash's own component (4f5f330)
  • xtask: drop inherited RUSTUP_TOOLCHAIN before nested firmware release build (7600fcb)
  • xtask: fail loud instead of silently skipping an unreadable directory in the Slint-affinity guard (1a3084c)

Performance

  • device-report-ingest: build the collection-kit ingest path (no data yet) (9be53e1)
  • diagnostics: log free internal-heap headroom (closes ADR-0012 D-H) (5ddafdd)
  • land D9/D11 SPI2 GPIO-toggle probe in radio.rs (d1654b0)
  • M1 task-split host validation — as-built loop model, parity matrix, kit regen (f278ed0)
  • M3: re-rank the residual UI-side items post-split —...
Read more

MeshCadet v0.5.0

Choose a tag to compare

@github-actions github-actions released this 01 Aug 22:26
e0e294b

Added

  • firmware-core: room-client session state machine + ui_sim proofs (fa5f44c)
  • firmware-core: room-session logic for post/keep-alive/notification phases (209bc44)
  • firmware: rename Messages/Channels tabs to Contacts/Groups (8417a73)
  • firmware: rename Messages/Channels tabs to Contacts/Groups (504782f)
  • firmware: rename Messages/Channels tabs to Contacts/Groups (4d982dc)
  • firmware: room post, permission-gated compose, keep-alive, notification suppression (75ff5f8)
  • firmware: wire device-side handlers for room provisioning frames (be228fa)
  • firmware: wire device-side handlers for room provisioning frames (1611a78)
  • firmware: wire post/keep-alive/notification-phase logic into runtime (9a74d4f)
  • firmware: wire the room-client login/read session state machine (f9796fa)
  • firmware: wire the room-client session state machine into main.rs (a0ee754)
  • host: add room URI builder and round-trip parser (6f130f4)
  • host: add room-server provisioning verbs (8ea4fc5)
  • host: add room-server provisioning verbs to admin CLI (82223ce)
  • protocol,firmware,host,site: room provisioning storage+wire+URI contract (78b3a2b)
  • protocol: add room provisioning frames (d37e20d)
  • protocol: add room-server client codec (c08a45a)
  • protocol: add room-server client codec (25916d0)
  • room: adopt room server's clock as a trusted wall clock (1d89529)
  • room: adopt room server's clock as a trusted wall clock (cd5d462)
  • site: mirror room provisioning frames in the JS codec (857b604)
  • site: mirror room provisioning into the browser provisioner + admin-PIN hygiene backfill (12cd99f)
  • site: mirror room-server provisioning into the browser provisioner (57d31e7)

Fixed

  • ci: mirror dispatched releases onto the Pages site (99827b7)
  • ci: mirror dispatched releases onto the Pages site (8dc2fe1)
  • ci: scrub internal-ops doc-path references from public code comments (9fd4d7b)
  • firmware: add persisted per-contact inbound replay guard for handle_dm (b04e53b)
  • firmware: add persisted per-contact inbound replay guard for handle_dm (7a27918)
  • firmware: add room-UI glyphs to bundled font coverage (1649368)
  • firmware: bound room drain window with a stall timeout (ebde9d9)
  • firmware: bound room drain window with a stall timeout (9d847ba)
  • firmware: close zero-channel GRP_TXT RX/TX hole (e1f900a)
  • firmware: close zero-channel GRP_TXT RX/TX hole (3fd28e3)
  • firmware: decode keep-alive ACK through the validated decoder (9e883ba)
  • firmware: decouple room re-flood-login cadence from the drain cadence (0b48392)
  • firmware: decouple room re-flood-login cadence from the drain cadence (8d02c5b)
  • firmware: durably erase the room session store on DEL_ROOM/ADD_ROOM (6fb39ec)
  • firmware: durably erase the room session store on DEL_ROOM/ADD_ROOM (82acdc5)
  • firmware: erase room session store on ADD/DEL_ROOM, document DEL_ROOM's reboot-required posture (0755231)
  • firmware: erase the room session store on ADD/DEL_ROOM, document DEL_ROOM's reboot-required posture (55940f5)
  • firmware: heap-allocate ProvisionedConfig off the admin_server/prov_server thread stacks (36f26e9)
  • firmware: heap-allocate ProvisionedConfig off the admin_server/prov_server thread stacks (b459e87)
  • firmware: keep decode_path_return's PathExtra match exhaustive (763f6a4)
  • firmware: log TX-queue eviction, keep sync_since monotonic, and fix room-push DM fallthrough (73fcde0)
  • firmware: persist room TX watermark on every advancing send (350cc6f)
  • firmware: persist room TX watermark on every advancing send (a56c7b7)
  • firmware: propagate runtime-learned room session state to the UI and keep-alive scheduler (b2ecc9b)
  • firmware: propagate runtime-learned room session state to the UI and keep-alive scheduler (89d4deb)
  • firmware: re-stamp room posts with the server's own clock, not the sender's (1f47f6b)
  • firmware: re-stamp room posts with the server's own clock, not the sender's (46f103f)
  • firmware: reconnect-stall detector zeroes out_path to relearn a changed route (33c048b)
  • firmware: relearn room out_path after keep-alive stall so reconnect recovers without reboot (3bbf63d)
  • firmware: render room-post bubble only on confirmed send; surface refusals (d6abd3e)
  • firmware: render room-post bubble only on confirmed send; surface refusals (cdde8cf)
  • firmware: render room-post senders like channels, and stop clock-sync poisoning from bricking room posts (e1edc10)
  • firmware: render room-post senders like channels, stop clock-sync poisoning (390af99)
  • firmware: room-scoped monotonic TX timestamp, never random (b3eda3c)
  • firmware: room-scoped monotonic TX timestamp, never random (db5a579)
  • firmware: room-session observability and watermark robustness fixes ([994d59e](https://github....
Read more

MeshCadet v0.4.0

Choose a tag to compare

@github-actions github-actions released this 15 Jul 22:33
71450ca

Added

  • firmware: generate signed self-advert card on-device, USB-only (1ab0346)
  • firmware: generate signed self-advert card on-device, USB-only (410c9d3)
  • host: surface both advert-card contact URLs (42f3746)
  • host: surface both contact URLs in CLI via signed self-advert card (59f9e51)
  • protocol: add signed self-advert card + wire frames (3e93a57)
  • protocol: add signed self-advert card wire protocol (d92760d)
  • site: show Format B (meshcore-cli card URI) in the web provisioner (92ab2d5)
  • site: show Format B (meshcore-cli card URI) in the web provisioner (c72fd06)

Fixed

  • correct stale v1.16 ACK breaking-change claim (52d73a9)
  • correct stale v1.16 ACK breaking-change claim (3689db5)
  • discard stale response residue at each command's start (99a4fb8)
  • discard stale response residue at each command's start (7b2aada)
  • firmware: repoint app timestamps at GPS-synced wall-clock time (ff29cec)
  • firmware: repoint app timestamps at GPS-synced wall-clock time (4d03327)
  • firmware: satisfy fmt and clippy on GPS-sync test code (04bda8a)
  • firmware: split GPS time-sync row into two lines (2b9434b)
  • firmware: split GPS time-sync row into two lines (f7cb0aa)
  • host: correct meshcore-cli import command spelling in user-facing text (7471a00)
  • host: correct meshcore-cli import command spelling in user-facing text (cf72f30)
  • keep the contacts-list Remove button label on one line (e777b2e)
  • keep the contacts-list Remove button label on one line (c5d9303)
  • release: dispatch release.yml explicitly so tags actually build (9af9257)
  • release: dispatch release.yml explicitly so tags actually build (cd6660e)
  • site: discard mid-wait stray frames so advert query can't desync the read chain (6db9222)
  • site: discard mid-wait stray frames so advert query can't desync the read chain (44b87c7)

MeshCadet v0.3.2

Choose a tag to compare

@github-actions github-actions released this 14 Jul 21:53
11271bb

Fixed

  • release: let release-please complete its tag+label hand-off (80b9cff)
  • release: let release-please complete its tag+label hand-off (7065f88)

MeshCadet v0.3.1

Choose a tag to compare

@github-actions github-actions released this 14 Jul 15:13
093484a

Fixed

  • release: re-seed layout-baseline.txt to match generate-update-meta.sh's real hashing convention (c104e9c)
  • release: re-seed layout-baseline.txt to match generate-update-meta.sh's real hashing convention (69c95e9)
  • site: convert flasher images to binary strings before esptool-js writeFlash (d678abc)
  • site: convert flasher images to binary strings before esptool-js writeFlash (bfda9d4)
  • site: mirror release assets promptly + fix the web flasher's Fresh-install flow (abbb8ea)
  • site: mirror release assets promptly + fix the web flasher's Fresh-install flow (53f917c)

MeshCadet v0.3.0

Choose a tag to compare

@github-actions github-actions released this 14 Jul 02:46
6252aa3

Added

  • firmware-core: add repeater signal-strength tracker (474c4cf)
  • firmware-core: repeater signal-strength tracker + ADR-0010 (9e046df)
  • firmware: wire the repeater signal meter into the rx path and UI (4001c2c)
  • firmware: wire the repeater signal meter into the rx path and UI (35c39ec)
  • release: publish an app-only update artifact + layout compatibility gate (75b45e2)
  • release: publish non-destructive app-only update artifacts (2b585b3)
  • site: add a Getting Started section to the landing page (62f6c57)
  • site: add a Getting Started section to the landing page (b4fc37e)
  • site: add promotional UI screenshots to the landing page (b8f5bb9)
  • site: harden the Upgrade path per post-green + hardware-safety review (ea3c972)
  • site: two-path web flasher — Fresh install vs non-destructive Upgrade (f74ba05)
  • site: two-path web flasher — Fresh install vs non-destructive Upgrade (a6c1672)
  • site: wire the four promo screenshots into the landing page gallery (0cf3c0c)
  • ui_sim: add promo screenshot render rigs for four production screens (91cbd16)

Fixed

  • firmware-core: silence clippy on decay boundary test (3876f6f)
  • release: stop crashing the lockfile-sync commit step on every tag-only run (1cc3c8c)
  • release: stop crashing the lockfile-sync commit step on every tag-only run (cd63409)
  • ui_sim: sync promo screen markup with the merged signal-meter widget (20c4493)
  • ui: move contact/channel-list signal meter to the right of the gear (71d31c6)
  • ui: move contact/channel-list signal meter to the right of the gear (7598a44)

Changed

  • release: extract the layout-compatibility gate into a tested script (e9d1053)
  • site: reorder landing page and unify navigation (a2856fa)
  • site: reorder landing page and unify navigation (75df9b1)

Documentation

  • adr: add ADR-0008 for non-destructive update artifacts (5603611)
  • adr: add ADR-0010 for the repeater signal meter design (399729a)
  • adr: note the extracted gate script + verified site-mirror compatibility (cec144a)

MeshCadet v0.2.0

Choose a tag to compare

@github-actions github-actions released this 13 Jul 01:31
6f968a1

Added

  • release: add sync-cargo-lock-versions.sh + smoke test (e386cb4)

Fixed

  • release: post-green hardening for the Cargo.lock sync script (df9f7e9)
  • release: replace release-plz with release-please (2cd1802)
  • release: replace release-plz with release-please (9bdc928)
  • release: sign the Cargo.lock sync commit via the GitHub API (5302d79)
  • release: sign the Cargo.lock sync commit via the GitHub API (c9a3f04)
  • release: sync Cargo.lock/firmware/Cargo.lock on every release PR (ecd1f18)

Documentation

  • release: correct ADR-0004 §5's squash-merge premise (35ab4ea)

MeshCadet v0.1.0

Choose a tag to compare

@github-actions github-actions released this 12 Jul 21:38
v0.1.0
7902999

MeshCadet

  • Mesh-radio messaging firmware for the LilyGO T-Deck Plus

The first public release of MeshCadet: a deliberately-limited, MeshCore-interop
firmware for the LilyGo T-Deck Plus. Its limits are design choices for a
controlled, minimal comms device — MeshCadet is provided "as is" with no
warranty and no guarantee of safety or security; see the Disclaimer in
README.md and SECURITY.md.

Added

  • Protocol interop (protocol/): byte-exact Rust port of the MeshCore
    v1.15.0 wire protocol — packet framing, Ed25519/X25519 identity and ECDH,
    AES-128-ECB + HMAC-SHA256 DM/channel encryption, ACK codec, and routing.
  • Firmware (firmware/): ESP32-S3 device app for the T-Deck Plus —
    LoRa radio (SX1262) send/receive, GPS-backed pull-only telemetry, a
    touch-screen UI (Slint) for contacts/conversations/composing with a
    curated emoji set, on-device history storage, and a PIN-gated admin menu.
  • Allowlist policy layer: allowlist-only contacts and channels, no
    device-initiated advertising, silent drop of all non-allowlisted traffic,
    pull-only (never push) location telemetry.
  • Admin host CLI (host/): USB-serial provisioning tool (meshcadet)
    for registering contacts/channels, setting notification defaults and a
    PIN, exporting history, and resetting a forgotten PIN.
  • Development tooling: xtask (host-side glyph-coverage verification for
    the emoji/icon font pipeline), ui_sim (host-native Slint render rig for
    UI/asset verification without hardware), ui_perf (host-native UI
    performance measurement harness).
  • Design record in docs/adr/ (protocol/policy charter, provisioning
    wire format, UI toolkit choice) and a manual hardware verification
    checklist in docs/hil-real-mesh-procedure.md.
  • GPLv3 licensing, upstream attribution (NOTICE), and a full third-party
    dependency license audit (docs/licensing/).

Known limitations

See SECURITY.md and the README's
"Status and known limitations"
section — notably: no at-rest encryption of provisioned data, no PIN
attempt lockout, and inherited AES-128-ECB from the MeshCore wire protocol.