Releases: OffbandMesh/meshcore-firmware
Offband offband-v0.17.0
First release under OffbandMesh/meshcore-firmware. Bundles the 0.16.0 observer
work below (which landed on firmware-base but was never separately tagged) with
the Crosswire→Offband rebrand and the OffbandMesh org cutover. (Version pending
owner confirmation; the tag is hardware-gated per VERSIONING.md.)
Changed
- Rebranded the fork from Crosswire to Offband (GitHub org
OffbandMesh):
the C++ namespace, build macros, embedded identity blob, version prefix
(offband-v*), MQTT / flash-audit identity fields (offband_*), brand
strings (serial banner,versioncommand, OLED splash, Home Assistant
manufacturer), and the WiFi setup-AP SSID (Offband-Observer-). Historical
crosswire-v*release tags are preserved; the_sysPSK domain separator
and the MeshCore interop topic namespace are intentionally unchanged. (#100) - Repo / board / working-dir cutover to OffbandMesh — repo
OffbandMesh/meshcore-firmware, OffbandMesh org Projects board, and the
preflight / CLAUDE.md / label-sync workflow re-pointed; removed the stale
upstreamCNAME. (#107, #111)
Docs
- Finished the rebrand reference cleanup across docs + code comments. (#113, #114)
- Release-readiness pass: README getting-started + multi-role positioning, the
docs index surfaces the observer guides, and observer_sysCLI reference
corrections. (#117)
What's Changed
- feat: observer MQTT connectivity (crosswire-v0.15.0) — #53 #48 #63 #68 by @Strycher in #72
- docs: fix README license link (LICENSE.txt -> license.txt) — #73 by @Strycher in #74
- docs: 2026-06-10 observer-MQTT session handoff — #75 by @Strycher in #76
- chore: relocate to C:/Dev/Crosswire — canonical hook sync + AM repin by @Strycher in #78
- docs(#79): correct stale active-agents line in CLAUDE.md by @Strycher in #80
- Observer: time arbiter (#69) + position in /status (#31) + _sys CLI grammar (#45) by @Strycher in #91
- Observer follow-ups: arbiter decouple + held-state (#87) + /status radio from runtime prefs (#88) by @Strycher in #92
- docs: README/CHANGELOG 0.16.0 (#93) + observer instructions (#94) by @Strycher in #99
- #95: observer MQTT broker pre-config + per-device auth by @Strycher in #105
- #98: mqtt view + mqtt clear (broker config inspection) by @Strycher in #106
- Offband rebrand: Crosswire -> Offband (code + docs) by @Strycher in #108
- chore(#107): finish OffbandMesh local cutover (preflight, CLAUDE.md, board #1) by @Strycher in #109
- chore(#111): remove stale upstream CNAME (docs.meshcore.nz) by @Strycher in #112
- docs(#113): finish rebrand — Strycher/Crosswire refs + CLAUDE.md PROJECT_PAT note by @Strycher in #115
- chore(#114): update stale Strycher/Crosswire# refs in code comments -> #N by @Strycher in #116
- epic(#117): Offband release-readiness — docs, observer reference, CHANGELOG prep by @Strycher in #125
Full Changelog: crosswire-v0.14.0...offband-v0.17.0
Offband offband-v0.17.0-rc1
(No CHANGELOG entry for v0.17.0-rc1.)
What's Changed
- feat: observer MQTT connectivity (crosswire-v0.15.0) — #53 #48 #63 #68 by @Strycher in #72
- docs: fix README license link (LICENSE.txt -> license.txt) — #73 by @Strycher in #74
- docs: 2026-06-10 observer-MQTT session handoff — #75 by @Strycher in #76
- chore: relocate to C:/Dev/Crosswire — canonical hook sync + AM repin by @Strycher in #78
- docs(#79): correct stale active-agents line in CLAUDE.md by @Strycher in #80
- Observer: time arbiter (#69) + position in /status (#31) + _sys CLI grammar (#45) by @Strycher in #91
- Observer follow-ups: arbiter decouple + held-state (#87) + /status radio from runtime prefs (#88) by @Strycher in #92
- docs: README/CHANGELOG 0.16.0 (#93) + observer instructions (#94) by @Strycher in #99
- #95: observer MQTT broker pre-config + per-device auth by @Strycher in #105
- #98: mqtt view + mqtt clear (broker config inspection) by @Strycher in #106
- Offband rebrand: Crosswire -> Offband (code + docs) by @Strycher in #108
- chore(#107): finish OffbandMesh local cutover (preflight, CLAUDE.md, board #1) by @Strycher in #109
- chore(#111): remove stale upstream CNAME (docs.meshcore.nz) by @Strycher in #112
- docs(#113): finish rebrand — Strycher/Crosswire refs + CLAUDE.md PROJECT_PAT note by @Strycher in #115
- chore(#114): update stale Strycher/Crosswire# refs in code comments -> #N by @Strycher in #116
- epic(#117): Offband release-readiness — docs, observer reference, CHANGELOG prep by @Strycher in #125
Full Changelog: crosswire-v0.14.0...offband-v0.17.0-rc1
Crosswire crosswire-v0.15.0
Observer MQTT connectivity -- hardware-validated against three brokers
(CoreScope / W8OOF tcp-anon, eastme.sh wss/jwt, LetsMesh-US wss/jwt).
Added
- Owner broker registry: seed the default 6-slot broker set with an
iata=HAO
default; per-broker GTS Root R4 + ISRG Root X2 CA certificates added and
mapped, registry cert-names corrected. (#48) - Per-broker JWT identity claims
jwt_owner/jwt_email
(set mqtt.broker.<N>.jwt_owner|jwt_email), surfaced inmqtt status. (#63) - Multi-frame
mqtt statusover the BLE_syschannel: the per-slot broker
table spans multiple frames instead of truncating. (#48)
Fixed
- BLE
_syscommand channel no longer hangs whenset mqtt.broker.*runs. The
blockingesp_mqttlifecycle ops (connect / destroy) moved offloopTaskto a
dedicatedmqtt_workertask with a per-broker lock and a per-slot reconcile
flag. (#53) - wss/JWT broker authentication: send the MQTT CONNECT username
v1_<UPPERCASE pubkey>(was a null username) so eastme.sh / LetsMesh accept
the connection -- the broker verifies the token'spublicKeyclaim against it
and rejects a null username (CONNACK rc=5) even with an otherwise-valid token.
(#68)
What's Changed
- fix(#27): pio-flash firmware_dir -> repo root + --firmware-dir override by @Strycher in #28
- pio-flash artifact-flash: flash CI release artifacts through the identity gate (#29, #34) by @Strycher in #35
- fix(#33): OLED splash carries pre-release identifier (v0.14.0-rc1, not v0.14.0+0) by @Strycher in #37
- chore(#38): gitignore pycache/ by @Strycher in #40
- feat(#42): strip observer companion to minima + delete dead ring buffer by @Strycher in #50
- docs: pin Crosswire project identity (Citadel + Agent Mail keys) (#55) by @Strycher in #56
- docs(#32): position-to-map pipeline architecture draft by @Strycher in #57
- docs: MeshCore 1.16.0 base-update impact assessment (spike #54) by @Strycher in #58
- chore(#59): port /work + session-state.py compaction-recovery hook into Crosswire by @Strycher in #60
- docs(#61): correct CLAUDE.md build/flash + migration-status after meshcore-firmware retire by @Strycher in #62
- feat: observer MQTT connectivity (crosswire-v0.15.0) — #53 #48 #63 #68 by @Strycher in #72
Full Changelog: crosswire-v0.14.0-rc1...crosswire-v0.15.0
Crosswire crosswire-v0.14.0
Added
- CI release pipeline (epic #14): dev-channel firmware artifacts on every
firmware-basepush / PR (ci.yml), and arelease.ymlworkflow that builds
the curated community board set fromcrosswire-v*tags and publishes a
GitHub Release (pre-release for-rc*, "Latest" for stable). Curated env set
in.github/release-envs.txt(72 envs;heltec_v4_repeater_telemetrygated on
#20). Design of record:docs/architecture/2026-06-06-ci-release-pipeline.md.
(#15, #16, #17)
Changed
- Reconciled inherited CI workflows: removed 7 dead/superseded
(pr-build-check,auto-promote,github-pages, the three upstream-tag
build-*-firmwares,branch-cleanup); keptbuild-safeboot-firmwares+
sync-labels-to-board. (#18)
What's Changed
- fix(#27): pio-flash firmware_dir -> repo root + --firmware-dir override by @Strycher in #28
- pio-flash artifact-flash: flash CI release artifacts through the identity gate (#29, #34) by @Strycher in #35
- fix(#33): OLED splash carries pre-release identifier (v0.14.0-rc1, not v0.14.0+0) by @Strycher in #37
- chore(#38): gitignore pycache/ by @Strycher in #40
- feat(#42): strip observer companion to minima + delete dead ring buffer by @Strycher in #50
- docs: pin Crosswire project identity (Citadel + Agent Mail keys) (#55) by @Strycher in #56
- docs(#32): position-to-map pipeline architecture draft by @Strycher in #57
- docs: MeshCore 1.16.0 base-update impact assessment (spike #54) by @Strycher in #58
- chore(#59): port /work + session-state.py compaction-recovery hook into Crosswire by @Strycher in #60
- docs(#61): correct CLAUDE.md build/flash + migration-status after meshcore-firmware retire by @Strycher in #62
Full Changelog: crosswire-v0.14.0-rc1...crosswire-v0.14.0
Crosswire crosswire-v0.14.0-rc1
(No CHANGELOG entry for v0.14.0-rc1.)
What's Changed
- docs: adopt versioning + CHANGELOG + release-channel discipline (#11) by @Strycher in #12
- chore: roll CHANGELOG to v0.13.2 + fix em-dashes to ASCII (#11) by @Strycher in #13
- epic(#14): CI release pipeline -- dev artifacts + crosswire-v* releases by @Strycher in #24
- docs(#25): roll CHANGELOG to [0.14.0] (CI release pipeline) by @Strycher in #26
New Contributors
Full Changelog: https://github.com/Strycher/Crosswire/commits/crosswire-v0.14.0-rc1