mirror of
https://github.com/ALLFATHER-BV/wadamesh.git
synced 2026-07-11 21:28:47 +00:00
03e50b0609
New: stable/test update channels with an opt-in "Get test builds (beta)" toggle on OTA devices (switches both the update check and what you install); experimental opt-in MQTT bridge (consent-gated, payload encryption, direct messages off by default); Portugal (Narrow) region preset (#74); saved-contacts counter in the Contacts overflow menu (#72). Fixed: the signal probe is now strictly zero-hop so a repeater can't re-flood it; the contact list sorts before capping so the most relevant contacts show, with a "+N more — search to narrow" footer (#73); the blocked-users list opened from Contacts shows the two-line title bar with a back button; the Contacts overflow popup fits the screen again. Also lands the two-channel release tooling (scripts/release.sh stable/beta modes + gen-flasher-meta channel arg), the docs site, and the MQTT reference decryptor. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
5.3 KiB
5.3 KiB
WadaMesh release channels — Stable + Test
Goal: ship test builds to the community fast, let them shake out, then promote a proven test build to stable. What ships to stable is exactly what was tested (promote the binary, don't rebuild).
Two concepts, kept separate
- Branches = where code lives.
- Channels = what a device / the flasher pulls (Stable vs Beta).
Branches
main— active line. All work lands here; every test release is cut frommain. (Unchanged from today.)stable— promoted line. Moves only when a test build is blessed. Starts at the beta_20 commit.- Promote =
git branch -f stable <blessed beta commit>+ push, then run the stable-promotion publish.
Versioning / tags
- Test builds:
beta_N(immutable, incrementing), marked GitHub pre-release. Also mirrored to a rollingbeta-latestpre-release (overwritten each time) for the Launcher beta sync. - Stable: the blessed
beta_N, marked GitHub Latest. Keep thebeta_Nid for now; friendlyvX.Ynames are an optional later polish (would need a rebuild-with-tag per promotion). - First stable = beta_20.
Distribution matrix
| Target | Stable | Test / Beta |
|---|---|---|
| GitHub release | blessed beta_N, marked Latest |
every beta_N, pre-release + rolling beta-latest |
| VPS archive | releases/TOUCH/<beta_N>/ (only blessed lands here) |
releases/BETA/<beta_N>/ |
| VPS channel feed | stable/ (version.json + bins) |
beta/ (version.json + bins) |
| Flasher (flasher.wadamesh.com) | default | "Beta / testing" toggle |
| On-device update check | stable feed (legacy firmware reads releases/TOUCH) |
beta feed (Phase 2 setting) |
| LauncherHub (bmorcelli, T-Deck) | existing entry (follows GitHub Latest) | new "WadaMesh (Beta)" entry (Phase 3) |
| Tanmatsu app-store | promote on stable only | (skipped for tests) |
The linchpin: keeping field devices on stable
Legacy firmware's update check scans releases/TOUCH/ for the highest beta_N. So:
- Test builds archive under
releases/BETA/— invisible to legacy firmware. - Promotion copies the blessed build into
releases/TOUCH/— legacy devices then see it and show "update available," landing everyone on stable.
Net effect: existing devices quietly settle on stable (beta_20) and stop chasing every beta; beta testers opt in via the flasher Beta toggle (or, later, the on-device Beta channel).
Two workflows
Cut a TEST release (fast, frequent) — from main
beta_N= next number.- Build both touch envs with the tag embedded.
- GitHub: create
beta_Nrelease--prereleasewith the 7 assets; also refresh the rollingbeta-latestpre-release. - VPS: rsync to
releases/BETA/<beta_N>/+ refresh thebeta/feed. - Flasher Beta toggle now serves it. Skip LauncherHub / Tanmatsu / site. (~minutes)
Promote to STABLE (deliberate, when proven)
git branch -f stable <beta_N commit>+ push.- GitHub: mark that
beta_Nrelease Latest (clear pre-release). - VPS: copy
releases/BETA/<beta_N>/→releases/TOUCH/<beta_N>/; refreshstable/+latest/(flasher stable) feeds. - Full fan-out: LauncherHub follows automatically; push the Tanmatsu store; bump the site "what's new."
Phases
Phase 1 — channel split, no firmware change (do now)
- Create + push
stablebranch at beta_20. - VPS: stand up
stable/,beta/,releases/BETA/; pointlatest/(flasher stable) at beta_20; freezereleases/TOUCH/at beta_20. - GitHub: ensure beta_20 is Latest; future betas →
--prerelease. - Flasher: Stable (default) / Beta toggle + the beta manifest.
release.sh/gen-flasher-meta.py: add--channel beta|stableproducing the right feed/assets + the rollingbeta-latest.- Rewrite the
wadamesh-releaseskill into the two-workflow form.
Phase 2 — on-device channel selector (ships in a beta, then promoted)
- Settings → Update channel: Stable / Beta, default Stable (persisted).
verchkFetchLatestreads thestable/orbeta/feed per the setting.- Beta devices get the new-beta banner automatically; stable devices never see betas.
Phase 3 — LauncherHub beta listing (PR to bmorcelli, when wanted)
- Rolling
beta-latestalready produced in Phase 1. - PR
bmorcelli/M5Stack-json-fw: add awadamesh_beta.py(mirrorbruce_beta.py, trackbeta-latest) + at-deck.json(Beta) entry. - Result: T-Deck Launcher shows WadaMesh + WadaMesh (Beta), both auto-synced.
- Until then: T-Deck Launcher beta testers side-load the beta
.binmanually (it is a T-Deck-only gap; V4 uses the flasher).
Where current work lands
- The uncommitted post-beta_20 work (auto-advert GUI, message-flash, docs, RAM pass)
plus the hardened MQTT-privacy branch → commit to
main→ cut as beta_21, the first TEST release in this model. Community tests it; promote when proven. - This is exactly the model that handles PR #71: land the reviewed/hardened pieces on
main, ship as a beta, promote later.
Decisions
- Locked:
main+stable; keepbeta_Nids with a Stable/Beta channel label; Phase 1 now, Phase 2 in beta_21, Phase 3 as a fast-follow. - Open (reversible): whether stable later gets friendly
vX.Ynames (needs a rebuild-with-tag per promotion).