From 97aade363281fb796dd1988e2ce63b2d756b6f66 Mon Sep 17 00:00:00 2001 From: Jack Kingsman Date: Tue, 31 Mar 2026 22:17:03 -0700 Subject: [PATCH] Format changelog entries with bullets --- CHANGELOG.md | 676 +++++++++++++++++++-------------------- scripts/build/publish.sh | 15 +- 2 files changed, 349 insertions(+), 342 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index facd90c..bcf6f11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,179 +1,179 @@ ## [3.6.4] - 2026-03-31 -Feature: Clarify New Channel/Contact button -Bugfix: Rename "Best RSSI" to "Strongest Neighbor" -Bugfix: Improve layout of Trace pane -Misc: Docker setup improvements +* Feature: Clarify New Channel/Contact button +* Bugfix: Rename "Best RSSI" to "Strongest Neighbor" +* Bugfix: Improve layout of Trace pane +* Misc: Docker setup improvements ## [3.6.3] - 2026-03-30 -Feature: Add multi-byte trace -Feature: Show node name on discovered node if we know it -Feature: Add docker installation script -Feature: Add historical noise floor to stats -Feature: Add trace tool -Bugfix: 100x performance on statistics endpoint with indices and better queries -Misc: Performance and correctness improvements for backend-of-the-frontend -Misc: Reorganize scripts +* Feature: Add multi-byte trace +* Feature: Show node name on discovered node if we know it +* Feature: Add docker installation script +* Feature: Add historical noise floor to stats +* Feature: Add trace tool +* Bugfix: 100x performance on statistics endpoint with indices and better queries +* Misc: Performance and correctness improvements for backend-of-the-frontend +* Misc: Reorganize scripts ## [3.6.2] - 2026-03-29 -Feature: Be more flexible about timing and volume of full contact offload -Feature: Improve room server and repeater ops to be much more clearer about auth status -Feature: Show last error status on integrations -Feature: Push multi-platform docker builds -Bugfix: Fix advert interval time unit display -Bugfix: Don't cast RSSI/SNR to string for community MQTT -Bugfix: Map uploader follows redirect -Misc: Thin out unnecessary cruft in unreads endpoint -Misc: Fall back gracefully if linked to an unknown contact +* Feature: Be more flexible about timing and volume of full contact offload +* Feature: Improve room server and repeater ops to be much more clearer about auth status +* Feature: Show last error status on integrations +* Feature: Push multi-platform docker builds +* Bugfix: Fix advert interval time unit display +* Bugfix: Don't cast RSSI/SNR to string for community MQTT +* Bugfix: Map uploader follows redirect +* Misc: Thin out unnecessary cruft in unreads endpoint +* Misc: Fall back gracefully if linked to an unknown contact ## [3.6.1] - 2026-03-26 -Feature: MeshCore Map integration -Feature: Add warning screen about bots -Feature: Favicon reflects unread message state -Feature: Show hop map in larger modal -Feature: Add prebuilt frontend install script -Feature: Add clean service installer script -Feature: Swipe in to show menu -Bugfix: Invalid backend API path serves error, not fallback index -Bugfix: Fix some spacing/page height issues -Misc: Misc. bugfixes and performance and test improvements +* Feature: MeshCore Map integration +* Feature: Add warning screen about bots +* Feature: Favicon reflects unread message state +* Feature: Show hop map in larger modal +* Feature: Add prebuilt frontend install script +* Feature: Add clean service installer script +* Feature: Swipe in to show menu +* Bugfix: Invalid backend API path serves error, not fallback index +* Bugfix: Fix some spacing/page height issues +* Misc: Misc. bugfixes and performance and test improvements ## [3.6.0] - 2026-03-22 -Feature: Add incoming-packet analytics -Feature: BYOPacket for analysis -Feature: Add room activity to stats view -Bugfix: Handle Heltec v3 serial noise -Misc: Swap repeaters and room servers for better ordering +* Feature: Add incoming-packet analytics +* Feature: BYOPacket for analysis +* Feature: Add room activity to stats view +* Bugfix: Handle Heltec v3 serial noise +* Misc: Swap repeaters and room servers for better ordering ## [3.5.0] - 2026-03-19 -Feature: Add room server alpha support -Feature: Add option to force-reset node clock when it's too far ahead -Feature: DMs auto-retry before resorting to flood -Feature: Add impulse zero-hop advert -Feature: Utilize PATH packets to correctly source a contact's route -Feature: Metrics view on raw packet pane -Feature: Metric, Imperial, and Smoots are now selectable for distance display -Feature: Allow favorites to be sorted -Feature: Add multi-ack support -Feature: Password-remember checkbox on repeaters + room servers -Bugfix: Serialize radio disconnect in a lock -Bugfix: Fix contact bar layout issues -Bugfix: Fix sidebar ordering for contacts by advert recency -Bugfix: Fix version reporting in community MQTT -Bugfix: Fix Apprise duplicate names -Bugfix: Be better about identity resolution in the stats pane -Misc: Docs, test, and performance enhancements -Misc: Don't prompt "Are you sure" when leaving an unedited interation -Misc: Log node time on startup -Misc: Improve community MQTT error bubble-up -Misc: Unread DMs always have a red unread counter -Misc: Improve information in the debug view to show DB status +* Feature: Add room server alpha support +* Feature: Add option to force-reset node clock when it's too far ahead +* Feature: DMs auto-retry before resorting to flood +* Feature: Add impulse zero-hop advert +* Feature: Utilize PATH packets to correctly source a contact's route +* Feature: Metrics view on raw packet pane +* Feature: Metric, Imperial, and Smoots are now selectable for distance display +* Feature: Allow favorites to be sorted +* Feature: Add multi-ack support +* Feature: Password-remember checkbox on repeaters + room servers +* Bugfix: Serialize radio disconnect in a lock +* Bugfix: Fix contact bar layout issues +* Bugfix: Fix sidebar ordering for contacts by advert recency +* Bugfix: Fix version reporting in community MQTT +* Bugfix: Fix Apprise duplicate names +* Bugfix: Be better about identity resolution in the stats pane +* Misc: Docs, test, and performance enhancements +* Misc: Don't prompt "Are you sure" when leaving an unedited interation +* Misc: Log node time on startup +* Misc: Improve community MQTT error bubble-up +* Misc: Unread DMs always have a red unread counter +* Misc: Improve information in the debug view to show DB status ## [3.4.1] - 2026-03-16 -Bugfix: Improve handling of version information on prebuilt bundles -Bugfix: Improve frontend usability on disconnected radio -Misc: Docs and readme updates -Misc: Overhaul DM ingest and frontend state handling +* Bugfix: Improve handling of version information on prebuilt bundles +* Bugfix: Improve frontend usability on disconnected radio +* Misc: Docs and readme updates +* Misc: Overhaul DM ingest and frontend state handling ## [3.4.0] - 2026-03-16 -Feature: Add radio model and stats display -Feature: Add prebuilt frontends, then deleted that and moved to prebuilt release artifacts -Bugfix: Misc. frontend performance and correctness fixes -Bugfix: Fix same-second same-content DM send collition -Bugfix: Discard clearly-wrong GPS data -Bugfix: Prevent repeater clock skew drift on page nav -Misc: Use repeater's advertised location if we haven't loaded one from repeater admin -Misc: Don't permit invalid fanout configs to be saved ever` +* Feature: Add radio model and stats display +* Feature: Add prebuilt frontends, then deleted that and moved to prebuilt release artifacts +* Bugfix: Misc. frontend performance and correctness fixes +* Bugfix: Fix same-second same-content DM send collition +* Bugfix: Discard clearly-wrong GPS data +* Bugfix: Prevent repeater clock skew drift on page nav +* Misc: Use repeater's advertised location if we haven't loaded one from repeater admin +* Misc: Don't permit invalid fanout configs to be saved ever` ## [3.3.0] - 2026-03-13 -Feature: Use dashed lines to show collapsed ambiguous router results -Feature: Jump to unred -Feature: Local channel management to prevent need to reload channel every time -Feature: Debug endpoint -Feature: Force-singleton channel management -Feature: Local node discovery -Feature: Node routing discovery -Bugfix: Don't tell users to us npm ci -Bugfix: Fallback polling dm message persistence -Bugfix: All native-JS inputs are now modals -Bugfix: Same-second send collision resolution -Bugfix: Proper browser updates on resend -Bugfix: Don't use last-heard when we actually want last-advert for path discovery for nodes -Bugfix: Don't treat prefix-matching DM echoes as acks like we do for channel messages -Misc: Visualizer data layer overhaul for future map work -Misc: Parallelize docker tests +* Feature: Use dashed lines to show collapsed ambiguous router results +* Feature: Jump to unred +* Feature: Local channel management to prevent need to reload channel every time +* Feature: Debug endpoint +* Feature: Force-singleton channel management +* Feature: Local node discovery +* Feature: Node routing discovery +* Bugfix: Don't tell users to us npm ci +* Bugfix: Fallback polling dm message persistence +* Bugfix: All native-JS inputs are now modals +* Bugfix: Same-second send collision resolution +* Bugfix: Proper browser updates on resend +* Bugfix: Don't use last-heard when we actually want last-advert for path discovery for nodes +* Bugfix: Don't treat prefix-matching DM echoes as acks like we do for channel messages +* Misc: Visualizer data layer overhaul for future map work +* Misc: Parallelize docker tests ## [3.2.0] - 2026-03-12 -Feature: Improve ambiguous-sender DM handling and visibility -Feature: Allow for toggling of node GPS broadcast -Feature: Add path width to bot and move example to full kwargs -Feature: Improve node map color contrast -Bugfix: More accurate tracking of contact data -Bugfix: Misc. frontend performance and bugfixes -Misc: Clearer warnings on user-key linkage -Misc: Documentation improvements +* Feature: Improve ambiguous-sender DM handling and visibility +* Feature: Allow for toggling of node GPS broadcast +* Feature: Add path width to bot and move example to full kwargs +* Feature: Improve node map color contrast +* Bugfix: More accurate tracking of contact data +* Bugfix: Misc. frontend performance and bugfixes +* Misc: Clearer warnings on user-key linkage +* Misc: Documentation improvements ## [3.1.1] - 2026-03-11 -Feature: Add basic auth -Feature: SQS fanout -Feature: Enrich contact info pane -Feature: Search operators for node and channel -Feature: Pause radio connection attempts from Radio settings -Feature: New themes! What a great use of time! -Feature: Github workflows runs for validation -Bugfix: More consistent log format with times -Bugfix: Patch meshcore_py bluetooth eager reconnection out during pauses +* Feature: Add basic auth +* Feature: SQS fanout +* Feature: Enrich contact info pane +* Feature: Search operators for node and channel +* Feature: Pause radio connection attempts from Radio settings +* Feature: New themes! What a great use of time! +* Feature: Github workflows runs for validation +* Bugfix: More consistent log format with times +* Bugfix: Patch meshcore_py bluetooth eager reconnection out during pauses ## [3.1.0] - 2026-03-11 -Feature: Add basic auth -Feature: SQS fanout -Feature: Enrich contact info pane -Feature: Search operators for node and channel -Feature: Pause radio connection attempts from Radio settings -Feature: New themes! What a great use of time! -Feature: Github workflows runs for validation -Bugfix: More consistent log format with times -Bugfix: Patch meshcore_py bluetooth eager reconnection out during pauses +* Feature: Add basic auth +* Feature: SQS fanout +* Feature: Enrich contact info pane +* Feature: Search operators for node and channel +* Feature: Pause radio connection attempts from Radio settings +* Feature: New themes! What a great use of time! +* Feature: Github workflows runs for validation +* Bugfix: More consistent log format with times +* Bugfix: Patch meshcore_py bluetooth eager reconnection out during pauses ## [3.0.0] - 2026-03-10 -Feature: Custom regions per-channel -Feature: Add custom contact pathing -Feature: Corrupt packets are more clear that they're corrupt -Feature: Better, faster patterns around background fetching with explicit opt-in for recurring sync if the app detects you need it -Feature: More consistent icons -Feature: Add per-channel local notifications -Feature: New themes -Feature: Massive codebase refactor and overhaul -Bugfix: Fix packet parsing for trace packets -Bugfix: Refetch channels on reconnect -Bugfix: Load All on repeater pane on mobile doesn't etend into lower text -Bugfix: Timestamps in logs -Bugfix: Correct wrong clock sync command -Misc: Improve bot error bubble up -Misc: Update to non-lib-included meshcore-decoder version -Misc: Revise refactors to be more LLM friendly -Misc: Fix script executability -Misc: Better logging format with timestamp -Misc: Repeater advert buttons separate flood and one-hop -Misc: Preserve repeater pane on navigation away -Misc: Clearer iconography and coloring for status bar buttons -Misc: Search bar to top bar +* Feature: Custom regions per-channel +* Feature: Add custom contact pathing +* Feature: Corrupt packets are more clear that they're corrupt +* Feature: Better, faster patterns around background fetching with explicit opt-in for recurring sync if the app detects you need it +* Feature: More consistent icons +* Feature: Add per-channel local notifications +* Feature: New themes +* Feature: Massive codebase refactor and overhaul +* Bugfix: Fix packet parsing for trace packets +* Bugfix: Refetch channels on reconnect +* Bugfix: Load All on repeater pane on mobile doesn't etend into lower text +* Bugfix: Timestamps in logs +* Bugfix: Correct wrong clock sync command +* Misc: Improve bot error bubble up +* Misc: Update to non-lib-included meshcore-decoder version +* Misc: Revise refactors to be more LLM friendly +* Misc: Fix script executability +* Misc: Better logging format with timestamp +* Misc: Repeater advert buttons separate flood and one-hop +* Misc: Preserve repeater pane on navigation away +* Misc: Clearer iconography and coloring for status bar buttons +* Misc: Search bar to top bar ## [2.7.9] - 2026-03-08 -Bugfix: Don't obscure new integration dropdown on session boundary +* Bugfix: Don't obscure new integration dropdown on session boundary ## [2.7.8] - 2026-03-08 @@ -181,287 +181,287 @@ Bugfix: Don't obscure new integration dropdown on session boundary ## [2.7.8] - 2026-03-08 -Bugfix: Improve frontend asset resolution and fixup the build/push script +* Bugfix: Improve frontend asset resolution and fixup the build/push script ## [2.7.1] - 2026-03-08 -Bugfix: Fix historical DM packet length passing -Misc: Follow better inclusion patterns for the patched meshcore-decoder and just publish the dang package -Misc: Patch a bewildering browser quirk that cause large raw packet lists to extend past the bottom of the page +* Bugfix: Fix historical DM packet length passing +* Misc: Follow better inclusion patterns for the patched meshcore-decoder and just publish the dang package +* Misc: Patch a bewildering browser quirk that cause large raw packet lists to extend past the bottom of the page ## [2.7.0] - 2026-03-08 -Feature: Multibyte path support -Feature: Add multibyte statistics to statistics pane -Feature: Add path bittage to contact info pane -Feature: Put tools in a collapsible +* Feature: Multibyte path support +* Feature: Add multibyte statistics to statistics pane +* Feature: Add path bittage to contact info pane +* Feature: Put tools in a collapsible ## [2.6.1] - 2026-03-08 -Misc: Fix busted docker builds; we don't have a 2.6.0 build sorry +* Misc: Fix busted docker builds; we don't have a 2.6.0 build sorry ## [2.6.0] - 2026-03-08 -Feature: A11y improvements -Feature: New themes -Feature: Backfill channel sender identity when available -Feature: Modular fanout bus, including Webhooks, more customizable community MQTT, and Apprise -Bugfix: Unreads now respect blocklist -Bugfix: Unreads can't accumulate on an open thread -Bugfix: Channel name in broadcasts -Bugfix: Add missing httpx dependency -Bugfix: Improvements to radio startup frontend-blocking time and radio status reporting -Misc: Improved button signage for app movement -Misc: Test, performance, and documentation improvements +* Feature: A11y improvements +* Feature: New themes +* Feature: Backfill channel sender identity when available +* Feature: Modular fanout bus, including Webhooks, more customizable community MQTT, and Apprise +* Bugfix: Unreads now respect blocklist +* Bugfix: Unreads can't accumulate on an open thread +* Bugfix: Channel name in broadcasts +* Bugfix: Add missing httpx dependency +* Bugfix: Improvements to radio startup frontend-blocking time and radio status reporting +* Misc: Improved button signage for app movement +* Misc: Test, performance, and documentation improvements ## [2.5.0] - 2026-03-05 -Feature: Far better accessibility across the app (with far to go) -Feature: Add community MQTT stats reporting, and improve over a few commits -Feature: Color schemes and misc. settings reorg -Feature: Add why-active to filtered nodes -Feature: Add channel and contact info box -Feature: Add contact blocking -Feature: Add potential repeater path map display -Feature: Add flood scoping/regions -Feature: Global message search -Feature: Fully safe bot disable -Feature: Add default #remoteterm channel (lol sorry I had to) -Feature: Custom recency pruning in visualizer -Bugfix: Be more cautious around null byte stripping -Bugfix: Clear channel-add interface on not-add-another -Bugfix: Add status/name/MQTT LWT -Bugfix: Channel deletion propagates over WS -Bugfix: Show map location for all nodes on link, not 7-day-limited -Bugfix: Hide private key channel keys by default -Misc: Logline to show if cleanup loop on non-sync'd meshcore radio links fixes anything -Misc: Doc, changelog, and test improvements -Misc: Add, and remove, package lock (sorry Windows users) -Misc: Don't show mark all as read if not necessary -Misc: Fix stale closures and misc. frontend perf/correctness improvements -Misc: Add Windows startup notes -Misc: E2E expansion + improvement -Misc: Move around visualizer settings +* Feature: Far better accessibility across the app (with far to go) +* Feature: Add community MQTT stats reporting, and improve over a few commits +* Feature: Color schemes and misc. settings reorg +* Feature: Add why-active to filtered nodes +* Feature: Add channel and contact info box +* Feature: Add contact blocking +* Feature: Add potential repeater path map display +* Feature: Add flood scoping/regions +* Feature: Global message search +* Feature: Fully safe bot disable +* Feature: Add default #remoteterm channel (lol sorry I had to) +* Feature: Custom recency pruning in visualizer +* Bugfix: Be more cautious around null byte stripping +* Bugfix: Clear channel-add interface on not-add-another +* Bugfix: Add status/name/MQTT LWT +* Bugfix: Channel deletion propagates over WS +* Bugfix: Show map location for all nodes on link, not 7-day-limited +* Bugfix: Hide private key channel keys by default +* Misc: Logline to show if cleanup loop on non-sync'd meshcore radio links fixes anything +* Misc: Doc, changelog, and test improvements +* Misc: Add, and remove, package lock (sorry Windows users) +* Misc: Don't show mark all as read if not necessary +* Misc: Fix stale closures and misc. frontend perf/correctness improvements +* Misc: Add Windows startup notes +* Misc: E2E expansion + improvement +* Misc: Move around visualizer settings ## [2.4.0] - 2026-03-02 -Feature: Add community MQTT reporting (e.g. LetsMesh.net) -Misc: Build scripts and library attribution -Misc: Add sign of life to E2E tests +* Feature: Add community MQTT reporting (e.g. LetsMesh.net) +* Misc: Build scripts and library attribution +* Misc: Add sign of life to E2E tests ## [2.3.0] - 2026-03-01 -Feature: Click path description to reset to flood -Feature: Add MQTT publishing -Feature: Visualizer remembers settings -Bugfix: Fix prefetch usage -Bugfix: Fixed an issue where busy channels can result in double-display of incoming messages -Misc: Drop py3.12 requirement -Misc: Performance, documentation, test, and file structure optimizations -Misc: Add arrows between route nodes on contact info -Misc: Show repeater path/type in title bar +* Feature: Click path description to reset to flood +* Feature: Add MQTT publishing +* Feature: Visualizer remembers settings +* Bugfix: Fix prefetch usage +* Bugfix: Fixed an issue where busy channels can result in double-display of incoming messages +* Misc: Drop py3.12 requirement +* Misc: Performance, documentation, test, and file structure optimizations +* Misc: Add arrows between route nodes on contact info +* Misc: Show repeater path/type in title bar ## [2.2.0] - 2026-02-28 -Feature: Track advert paths and use to disambiguate repeater identity in visualizer -Feature: Contact info pane -Feature: Overhaul repeater interface -Bugfix: Misc. frontend rendering + perf improvements -Bugfix: Better behavior around radio locking and autofetch/polling -Bugfix: Clear channel name field on new-channel modal tab change -Bugfix: Repeater inforbox can scroll -Bugfix: Better handling of historical DM encrypts -Bugfix: Handle errors if returned in prefetch phase -Misc: Radio event response failure is logged/surfaced better -Misc: Improve test coverage and remove dead code -Misc: Documentation and errata improvements -Misc: Database storage optimization +* Feature: Track advert paths and use to disambiguate repeater identity in visualizer +* Feature: Contact info pane +* Feature: Overhaul repeater interface +* Bugfix: Misc. frontend rendering + perf improvements +* Bugfix: Better behavior around radio locking and autofetch/polling +* Bugfix: Clear channel name field on new-channel modal tab change +* Bugfix: Repeater inforbox can scroll +* Bugfix: Better handling of historical DM encrypts +* Bugfix: Handle errors if returned in prefetch phase +* Misc: Radio event response failure is logged/surfaced better +* Misc: Improve test coverage and remove dead code +* Misc: Documentation and errata improvements +* Misc: Database storage optimization ## [2.1.0] - 2026-02-23 -Feature: Add ability to remember last-used channel on load -Feature: Add `docker compose` support (thanks @suymur !) -Feature: Better-aligned favicon (lol) -Bugfix: Disable autocomplete on message field -Bugfix: Legacy hash restoration on page load -Bugfix: Align resend buttons in pathing modal -Bugfix: Update README.md (briefly), then docker-compose.yaml, to reflect correct docker image host -Bugfix: Correct settings pane scroll lock on zoom (thanks @yellowcooln !) -Bugfix: Improved repeater comms on busy meshes -Bugfix: Drain before autofetch from radio -Bugfix: Fix, or document exceptions to, sub-second resolution message failure -Bugfix: Improved handling of radio connection, disconnection, and connection-aliveness-status -Bugfix: Force server-side keystore update when radio key changes -Bugfix: Reduce WS churn for incoming message handling -Bugfix: Fix content type signalling for irrelevant endpoints -Bugfix: Handle stuck post-connect failure state -Misc: Documentation & version parsing improvements -Misc: Hide char counter on mobile for short messages -Misc: Typo fixes in docs and settings -Misc: Add dynamic webmanifest for hosts that can support it -Misc: Improve DB size via dropping unnecessary uniqs, indices, vacuum, and offering ability to drop historical matches packets -Misc: Drop weird rounded bounding box for settings -Misc: Move resend buttons to pathing modal -Misc: Improved comments around database ownership on *nix systems -Misc: Move to SSoT for message dedupe on frontend -Misc: Move DM ack clearing to standard poll, and increase hold time between polling -Misc: Holistic testing overhaul +* Feature: Add ability to remember last-used channel on load +* Feature: Add `docker compose` support (thanks @suymur !) +* Feature: Better-aligned favicon (lol) +* Bugfix: Disable autocomplete on message field +* Bugfix: Legacy hash restoration on page load +* Bugfix: Align resend buttons in pathing modal +* Bugfix: Update README.md (briefly), then docker-compose.yaml, to reflect correct docker image host +* Bugfix: Correct settings pane scroll lock on zoom (thanks @yellowcooln !) +* Bugfix: Improved repeater comms on busy meshes +* Bugfix: Drain before autofetch from radio +* Bugfix: Fix, or document exceptions to, sub-second resolution message failure +* Bugfix: Improved handling of radio connection, disconnection, and connection-aliveness-status +* Bugfix: Force server-side keystore update when radio key changes +* Bugfix: Reduce WS churn for incoming message handling +* Bugfix: Fix content type signalling for irrelevant endpoints +* Bugfix: Handle stuck post-connect failure state +* Misc: Documentation & version parsing improvements +* Misc: Hide char counter on mobile for short messages +* Misc: Typo fixes in docs and settings +* Misc: Add dynamic webmanifest for hosts that can support it +* Misc: Improve DB size via dropping unnecessary uniqs, indices, vacuum, and offering ability to drop historical matches packets +* Misc: Drop weird rounded bounding box for settings +* Misc: Move resend buttons to pathing modal +* Misc: Improved comments around database ownership on *nix systems +* Misc: Move to SSoT for message dedupe on frontend +* Misc: Move DM ack clearing to standard poll, and increase hold time between polling +* Misc: Holistic testing overhaul ## [2.0.1] - 2026-02-16 -Bugfix: Fix missing trigger condition on statistics pane expansion on mobile +* Bugfix: Fix missing trigger condition on statistics pane expansion on mobile ## [2.0.0] - 2026-02-16 -Feature: Frontend UX + log overhaul -Bugfix: Use contact object from DB for broadcast rather than handrolling -Bugfix: Fix out of order path WS messages overwriting each other -Bugfix: Make broadcast timestamp match fallback logic used in storage code -Bugfix: Fix repeater command timestamp selection logic -Bugfix: Use actual pubkey matching for path update, and don't action serial path update events (use RX packet) -Bugfix: Add missing radio operation locks in a few spots -Bugfix: Fix dedupe for frontend raw packet delivery (mesh visualizer much more active now!) -Bugfix: Less aggressive dedupe for advert packets (we don't care about the payload, we care about the path, duh) -Misc: Visualizer layout refinement & option labels +* Feature: Frontend UX + log overhaul +* Bugfix: Use contact object from DB for broadcast rather than handrolling +* Bugfix: Fix out of order path WS messages overwriting each other +* Bugfix: Make broadcast timestamp match fallback logic used in storage code +* Bugfix: Fix repeater command timestamp selection logic +* Bugfix: Use actual pubkey matching for path update, and don't action serial path update events (use RX packet) +* Bugfix: Add missing radio operation locks in a few spots +* Bugfix: Fix dedupe for frontend raw packet delivery (mesh visualizer much more active now!) +* Bugfix: Less aggressive dedupe for advert packets (we don't care about the payload, we care about the path, duh) +* Misc: Visualizer layout refinement & option labels ## [1.10.0] - 2026-02-16 -Feature: Collapsible sidebar sections with per-section unread badge (thanks @rgregg !) -Feature: 3D mesh visualizer -Feature: Statistics pane -Feature: Support incoming/outgoing indication for bot invocations -Feature: Quick byte-perfect message resend if you got unlucky with repeats (thanks @rgregg -- we had a parallel implementation but I appreciate your work!) -Bugfix: Fix top padding out outgoing message -Bugfix: Frontend performance, appearance, and Lighthouse improvements (prefetches, form labelling, contrast, channel/roomlist changes) -Bugfix: Multiple-sent messages had path appearing delays until rerender -Bugfix: Fix ack/message race condition that caused dropped ack displays until rerender -Misc: Dedupe contacts/rooms by key and not name to prevent name collisions creating unreachable conversations -Misc: s/stopped/idle/ for room finder +* Feature: Collapsible sidebar sections with per-section unread badge (thanks @rgregg !) +* Feature: 3D mesh visualizer +* Feature: Statistics pane +* Feature: Support incoming/outgoing indication for bot invocations +* Feature: Quick byte-perfect message resend if you got unlucky with repeats (thanks @rgregg -- we had a parallel implementation but I appreciate your work!) +* Bugfix: Fix top padding out outgoing message +* Bugfix: Frontend performance, appearance, and Lighthouse improvements (prefetches, form labelling, contrast, channel/roomlist changes) +* Bugfix: Multiple-sent messages had path appearing delays until rerender +* Bugfix: Fix ack/message race condition that caused dropped ack displays until rerender +* Misc: Dedupe contacts/rooms by key and not name to prevent name collisions creating unreachable conversations +* Misc: s/stopped/idle/ for room finder ## [1.9.3] - 2026-02-12 -Feature: Upgrade the room finder to support two-word rooms +* Feature: Upgrade the room finder to support two-word rooms ## [1.9.2] - 2026-02-12 -Feature: Options dialog sucks less -Bugfix: Move tests to isolated memory DB -Bugfix: Mention case sensitivity -Bugfix: Stale header retention on settings page view -Bugfix: Non-isolated path writing -Bugfix: Nullable contact fields are now passed as real nulls -Bugfix: Look at all fields on message reconcile, not just text -Bugfix: Make mark-all-as-read atomic -Misc: Purge unused WS handlers from back when we did chans and contacts over WS, not API -Misc: Massive test and AGENTS.md overhauls and additions +* Feature: Options dialog sucks less +* Bugfix: Move tests to isolated memory DB +* Bugfix: Mention case sensitivity +* Bugfix: Stale header retention on settings page view +* Bugfix: Non-isolated path writing +* Bugfix: Nullable contact fields are now passed as real nulls +* Bugfix: Look at all fields on message reconcile, not just text +* Bugfix: Make mark-all-as-read atomic +* Misc: Purge unused WS handlers from back when we did chans and contacts over WS, not API +* Misc: Massive test and AGENTS.md overhauls and additions ## [1.9.1] - 2026-02-10 -Feature: Contacts and channels use keys, not names -Bugfix: Fix falsy casting of 0 in lat lon and timing data -Bugfix: Show message length in bytes, not chars -Bugfix: Fix phantom unread badges on focused convos -Misc: Bot invocation to async -Misc: Use full key, not prefix, where we can +* Feature: Contacts and channels use keys, not names +* Bugfix: Fix falsy casting of 0 in lat lon and timing data +* Bugfix: Show message length in bytes, not chars +* Bugfix: Fix phantom unread badges on focused convos +* Misc: Bot invocation to async +* Misc: Use full key, not prefix, where we can ## [1.9.0] - 2026-02-10 -Feature: Favorited contacts are preferentially loaded onto the radio -Feature: Add recent-message caching for fast switching -Feature: Add echo paths modal when echo-heard checkbox is clicked -Feature: Add experimental byte-perfect double-send for bad RF environments to try to punch the message out +* Feature: Favorited contacts are preferentially loaded onto the radio +* Feature: Add recent-message caching for fast switching +* Feature: Add echo paths modal when echo-heard checkbox is clicked +* Feature: Add experimental byte-perfect double-send for bad RF environments to try to punch the message out Frontend: Better styling on echo + message path display -Bugfix: Prevent frontend static file serving path traversal vuln -Bugfix: Safer prefix-claiming for DMs we don't have the key for -Bugfix: Prevent injection from mentions with special characters -Bugfix: Fix repeaters comms showing in wrong channel when repeater operations are in flight and the channel is changed quickly -Bugfix: App can boot and test without a frontend dir -Misc: Improve and consistent-ify (?) backend radio operation lock management -Misc: Frontend performance and safety enhancements -Misc: Move builds to non-bundled; usage requires building the Frontend -Misc: Update tests and agent docs +* Bugfix: Prevent frontend static file serving path traversal vuln +* Bugfix: Safer prefix-claiming for DMs we don't have the key for +* Bugfix: Prevent injection from mentions with special characters +* Bugfix: Fix repeaters comms showing in wrong channel when repeater operations are in flight and the channel is changed quickly +* Bugfix: App can boot and test without a frontend dir +* Misc: Improve and consistent-ify (?) backend radio operation lock management +* Misc: Frontend performance and safety enhancements +* Misc: Move builds to non-bundled; usage requires building the Frontend +* Misc: Update tests and agent docs ## [1.8.0] - 2026-02-07 -Feature: Single hop ping -Feature: PWA viewport fixes(thanks @rgregg) +* Feature: Single hop ping +* Feature: PWA viewport fixes(thanks @rgregg) Feature (?): No frontend distribution; build it yourself ;P -Bugfix: Fix channel message send race condition (concurrent sends could corrupt shared radio slot) -Bugfix: Fix TOCTOU race in radio reconnect (duplicate connections under contention) -Bugfix: Better guarding around reconnection -Bugfix: Duplicate websocket connection fixes -Bugfix: Settings tab error cleanliness on tab swap -Bugfix: Fix path traversal vuln +* Bugfix: Fix channel message send race condition (concurrent sends could corrupt shared radio slot) +* Bugfix: Fix TOCTOU race in radio reconnect (duplicate connections under contention) +* Bugfix: Better guarding around reconnection +* Bugfix: Duplicate websocket connection fixes +* Bugfix: Settings tab error cleanliness on tab swap +* Bugfix: Fix path traversal vuln UI: Swap visualizer legend ordering (yay prettier) -Misc: Perf and locking improvements -Misc: Always flood advertisements -Misc: Better packet dupe handling -Misc: Dead code cleanup, test improvements +* Misc: Perf and locking improvements +* Misc: Always flood advertisements +* Misc: Better packet dupe handling +* Misc: Dead code cleanup, test improvements ## [1.7.1] - 2026-02-03 -Feature: Clickable hyperlinks -Bugfix: More consistent public key normalization -Bugfix: Use more reliable cursor paging -Bugfix: Fix null timestamp dedupe failure -Bugfix: More consistent prefix-based message claiming on key receipt -Misc: Bot can respond to its own messages -Misc: Additional tests -Misc: Remove unneeded message dedupe logic -Misc: Resync settings after radio settings mutation +* Feature: Clickable hyperlinks +* Bugfix: More consistent public key normalization +* Bugfix: Use more reliable cursor paging +* Bugfix: Fix null timestamp dedupe failure +* Bugfix: More consistent prefix-based message claiming on key receipt +* Misc: Bot can respond to its own messages +* Misc: Additional tests +* Misc: Remove unneeded message dedupe logic +* Misc: Resync settings after radio settings mutation ## [1.7.0] - 2026-01-27 -Feature: Multi-bot functionality -Bugfix: Adjust bot code editor display and add line numbers -Bugfix: Fix clock filtering and contact lookup behavior bugs -Bugfix: Fix repeater message duplication issue -Bugfix: Correct outbound message timestamp assignment (affecting outgoing messages seen as incoming) +* Feature: Multi-bot functionality +* Bugfix: Adjust bot code editor display and add line numbers +* Bugfix: Fix clock filtering and contact lookup behavior bugs +* Bugfix: Fix repeater message duplication issue +* Bugfix: Correct outbound message timestamp assignment (affecting outgoing messages seen as incoming) UI: Move advertise button to identity tab -Misc: Clarify fallback functionality for missing private key export in logs +* Misc: Clarify fallback functionality for missing private key export in logs ## [1.6.0] - 2026-01-26 -Feature: Visualizer: extract public key from AnonReq, add heuristic repeater disambiguation, add reset button, draggable nodes -Feature: Customizable advertising interval -Feature: In-app bot setup -Bugfix: Force contact onto radio before DM send -Misc: Remove unused code +* Feature: Visualizer: extract public key from AnonReq, add heuristic repeater disambiguation, add reset button, draggable nodes +* Feature: Customizable advertising interval +* Feature: In-app bot setup +* Bugfix: Force contact onto radio before DM send +* Misc: Remove unused code ## [1.5.0] - 2026-01-19 -Feature: Network visualizer +* Feature: Network visualizer ## [1.4.1] - 2026-01-19 -Feature: Add option to attempt historical DM decrypt on new-contact advertisement (disabled by default) -Feature: Server-side preference management for favorites, read status, etc. +* Feature: Add option to attempt historical DM decrypt on new-contact advertisement (disabled by default) +* Feature: Server-side preference management for favorites, read status, etc. UI: More compact hop labelling -Bugfix: Misc. race conditions and websocket handling -Bugfix: Reduce fetching cadence by loading all contact data at start to prevent fetches on advertise-driven update +* Bugfix: Misc. race conditions and websocket handling +* Bugfix: Reduce fetching cadence by loading all contact data at start to prevent fetches on advertise-driven update ## [1.4.0] - 2026-01-18 UI: Improve button layout for room searcher UI: Improve favicon coloring UI: Improve status bar button layout on small screen -Feature: Show multi-path hop display with distance estimates -Feature: Search rooms and contacts by key, not just name -Bugfix: Historical DM decryption now works as expected -Bugfix: Don't double-set active conversation after addition; wait for backend room name normalization +* Feature: Show multi-path hop display with distance estimates +* Feature: Search rooms and contacts by key, not just name +* Bugfix: Historical DM decryption now works as expected +* Bugfix: Don't double-set active conversation after addition; wait for backend room name normalization ## [1.3.1] - 2026-01-17 UI: Rework restart handling -Feature: Add `dutycyle_start` command to logged-in repeater session to start five min duty cycle tracking +* Feature: Add `dutycyle_start` command to logged-in repeater session to start five min duty cycle tracking Bug: Improve error message rendering from server-side errors UI: Remove octothorpe from channel listing ## [1.3.0] - 2026-01-17 -Feature: Rework database schema to drop unnecessary columns and dedupe payloads at the DB level -Feature: Massive frontend settings overhaul. It ain't gorgeous but it's easier to navigate. -Feature: Drop repeater login wait time; vestigial from debugging a different issue +* Feature: Rework database schema to drop unnecessary columns and dedupe payloads at the DB level +* Feature: Massive frontend settings overhaul. It ain't gorgeous but it's easier to navigate. +* Feature: Drop repeater login wait time; vestigial from debugging a different issue ## [1.2.1] - 2026-01-17 @@ -469,27 +469,27 @@ Update: Update meshcore-hashtag-cracker to include sender-identification correct ## [1.2.0] - 2026-01-16 -Feature: Add favorites +* Feature: Add favorites ## [1.1.0] - 2026-01-14 -Bugfix: Use actual pathing data from advertisements, not just always flood (oops) -Bugfix: Autosync radio clock periodically to prevent drift (would show up most commonly as issues with repeater comms) +* Bugfix: Use actual pathing data from advertisements, not just always flood (oops) +* Bugfix: Autosync radio clock periodically to prevent drift (would show up most commonly as issues with repeater comms) ## [1.0.3] - 2026-01-13 -Bugfix: Add missing test management packages -Improvement: Drop unnecessary repeater timeouts, and retain timeout for login only -- repeater ops are faster AND more reliable! +* Bugfix: Add missing test management packages +* Improvement: Drop unnecessary repeater timeouts, and retain timeout for login only -- repeater ops are faster AND more reliable! ## [1.0.2] - 2026-01-13 -Improvement: Add delays between router ops to prevent traffic collisions +* Improvement: Add delays between router ops to prevent traffic collisions ## [1.0.1] - 2026-01-13 -Bugixes: Cleaner DB shutdown, radio reconnect contention, packet dedupe garbage removal +* Bugixes: Cleaner DB shutdown, radio reconnect contention, packet dedupe garbage removal ## [1.0.0] - 2026-01-13 -Initial full release! +* Initial full release! diff --git a/scripts/build/publish.sh b/scripts/build/publish.sh index e886751..c98bc0e 100755 --- a/scripts/build/publish.sh +++ b/scripts/build/publish.sh @@ -143,6 +143,13 @@ echo CHANGELOG_ENTRY=$(cat) +format_changelog_entry() { + local entry="$1" + printf '%s\n' "$entry" | sed '/^[[:space:]]*$/d; s/^[[:space:]]*//; s/^/* /' +} + +FORMATTED_CHANGELOG_ENTRY=$(format_changelog_entry "$CHANGELOG_ENTRY") + # Create changelog entry with date DATE=$(date +%Y-%m-%d) CHANGELOG_HEADER="## [$VERSION] - $DATE" @@ -157,7 +164,7 @@ if [ -f CHANGELOG.md ]; then echo echo "$CHANGELOG_HEADER" echo - echo "$CHANGELOG_ENTRY" + echo "$FORMATTED_CHANGELOG_ENTRY" echo tail -n +2 CHANGELOG.md } > CHANGELOG.md.tmp @@ -167,7 +174,7 @@ if [ -f CHANGELOG.md ]; then { echo "$CHANGELOG_HEADER" echo - echo "$CHANGELOG_ENTRY" + echo "$FORMATTED_CHANGELOG_ENTRY" echo cat CHANGELOG.md } > CHANGELOG.md.tmp @@ -180,7 +187,7 @@ else echo echo "$CHANGELOG_HEADER" echo - echo "$CHANGELOG_ENTRY" + echo "$FORMATTED_CHANGELOG_ENTRY" } > CHANGELOG.md fi @@ -247,7 +254,7 @@ RELEASE_NOTES_FILE=$(mktemp) { echo "$CHANGELOG_HEADER" echo - echo "$CHANGELOG_ENTRY" + echo "$FORMATTED_CHANGELOG_ENTRY" } > "$RELEASE_NOTES_FILE" # Create and push the release tag first so GitHub release creation does not