chore(release): finalize 2.7.0

Also documents the two behaviours the release adds to Resend that only
whatsnew had covered: the stale-message confirmation, and that a resend
now repairs a message left with no delivery badge.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
MarekWoandClaude Opus 5 committed 2026-08-07 16:22:47 +02:00
1 parent 6aa71ba2e5
commit 70e5238cfb
3 files changed
+12 -2

No files matched your search

+2 -1
View File
@@ -182,7 +182,8 @@ Long messages open a dialog first, offering the full text or a truncated version
Your own messages carry a small row of action buttons:
- **Edit message** (pencil icon) - Copies the message text back into the composer so you can tweak it and send it again as a new message.
- **Resend** (repeat-arrow icon) - Re-broadcasts the *same* packet. Repeaters that already forwarded the original ignore the duplicate, but nodes that never heard it can still pick it up — so the resend extends the repeater list on the existing message's badge instead of creating a new message. Handy right after sending when the delivery badge shows only partial coverage. This button only appears when your device runs companion firmware **1.16 or newer**; on older firmware it is hidden.
- **Resend** (repeat-arrow icon) - Re-broadcasts the *same* packet. Repeaters that already forwarded the original ignore the duplicate, but nodes that never heard it can still pick it up — so the resend extends the repeater list on the existing message's badge instead of creating a new message. Handy right after sending when the delivery badge shows only partial coverage, and it also works on a message that never got a badge at all. This button only appears when your device runs companion firmware **1.16 or newer**; on older firmware it is hidden.
- Repeaters only remember packets they saw recently, so an old packet is no longer recognised as a duplicate and spreads across the channel as if it were new — everyone sees it again, dated today. Resending a message **older than an hour** therefore asks for confirmation first, telling you how old it is; anything more recent goes out with no extra click.
### Group Chat Message Routes
+9
View File
@@ -10,8 +10,17 @@ For deep technical notes, see [architecture.md](architecture.md). For the full g
## Unreleased
---
## 2.7.0 — 2026-08-07
### Features
- **The device's Statistics tab now shows everything the device actually reports.** Open the menu, pick **Device**, and switch to **Statistics**: until now it listed the battery, an error counter, the number of packets sent, and then some counts out of mc-webui's own database — while the `stats` command in the Console, reading exactly the same data from exactly the same device, printed a good deal more. The reason was a plain mismatch of field names: the tab asked the device for "uptime", "queue", "airtime" and "packets received" under names the firmware does not use, so those rows quietly disappeared instead of showing up empty, and nobody could tell the difference between a value the device withholds and a value the app failed to ask for. All of them are back, and with them the ones that were never displayed at all — **last RSSI**, **last SNR** and the **noise floor** (worth knowing: how loud the band is where your node sits determines what it can still hear), the split of sent and received packets into **flood** and **direct**, the count of **RX errors**, and **channel utilization**, which is the share of the time since the last reboot that your radio spent either transmitting or receiving. The tab is now laid out in four titled groups — System Information, Radio Statistics, Packet Statistics and Database — the same grouping, in the same order, with the same labels as the status view for a remote repeater under **My Repeaters**, so the two read the same way. Airtime is shown as a duration (`8h 31m`) rather than a number of minutes. Everything here except the Database group is counted from the last device reboot, not for all time.
### Fixes
- **The Path Analyzer map no longer shows raw HTML in its pop-ups.** Click a repeater on the map — either a hop on the route or one of the amber candidates the analyzer offers where the path is ambiguous — and the pop-up naming it ended the second line with the literal text `<code>47</code>` instead of the repeater's hash in a monospaced box. Only the display was affected; the hash itself was always correct.
- **A message you sent no longer loses the list of repeaters that heard it when something else goes out at the same moment.** Your own messages find out which repeaters picked them up by listening for their own echo coming back off the mesh a few seconds later — and while waiting, the app could only keep track of one message at a time. Send a message and then press **Resend** on an older one, or send two in quick succession, and the second action took over that slot; when the first message's echo finally arrived it was filed as somebody else's traffic. The message kept its text but never got its signal badge, its repeater list or its **Analyzer** button, and nothing would bring them back. On the test server this affected roughly one message in thirty. The app now keeps every recent send in mind at once, and listens for five minutes instead of one, because repeats do sometimes arrive minutes after the send. **Resend** repairs the damage too: a message with no badge could not be re-armed before — re-arming needed exactly the packet identifier that was missing — so it is now recovered from the copy of the packet the app keeps at send time. Press Resend on a badge-less message, wait for a repeater to pick it up, and the badge appears. One thing this cannot fix: if no repeater in range repeated your message at all, or the repeat was lost on the way, there is no echo to hear and the badge stays empty — that is the radio, not the app.
- **Resending an old message now asks first.** **Resend** puts the exact same packet back on the air, and repeaters normally recognise it and stay quiet — that is the whole point, it only reaches the ones that missed it the first time. But a repeater only remembers packets it saw recently, so past a certain age nothing recognises it any more and the message spreads across the channel as if it were brand new: everyone sees it again, dated today. Pressing Resend on a message older than an hour now tells you how old it is and what will happen, and lets you back out. Anything more recent than that behaves exactly as before, with no extra click.