Releases: jagoda/meshcadet
Releases · jagoda/meshcadet
Release list
MeshCadet v0.7.0
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
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 —...
MeshCadet v0.5.0
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....
MeshCadet v0.4.0
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
MeshCadet v0.3.1
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
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
MeshCadet v0.2.0
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
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 indocs/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.