mirror of
https://github.com/l5yth/potato-mesh.git
synced 2026-10-31 03:51:58 +01:00
68 KiB
68 KiB
CHANGELOG
Features
- Web/Data: Reticulum gets its own visual identity - trifoil marker on violet
#7b61ff, MeshCore's tile moves to#1f2937, a four-step role color ramp, hexagon shape, and a third legend column (SPEC RD1-RD8) - Data: Reticulum node roles are derived from the announce aspect, so a multi-aspect peer no longer flips roles (SPEC RD4/RE1)
- Web: the federation table renders a Reticulum zero count as a dash instead of a tile (SPEC RD8)
Fixes
- Web: MeshCore
@[Name]mentions and replies no longer create, refresh, or revive nodes (#883) - Web: a MeshCore channel message stays on its sender's node and no longer moves to, or revives, a same-name node; a sender named by a stale roster is credited to the current key (#883)
- Data: the MeshCore ingestor no longer posts placeholder nodes for chat senders or mentions, so hidden-channel names stay hidden; the web app ignores such posts from older ingestors (#883)
- Data: a MeshCore sender name shared by several roster contacts resolves to the most recently advertised one (#883)
- Matrix: the bridge crate declares its crates.io package metadata, and its README screenshot no longer links outside the crate (#879)
- Data:
TRANSPORT=udplistens on both Meshtastic multicast groups by default,239.0.0.69(firmware 2.8+) and224.0.0.69;MESH_UDP_GROUPtakes a comma-separated list. If you setMESH_UDP_GROUP=224.0.0.69before, remove it to also hear firmware 2.8+ nodes (#903) - Data:
MESHCORE_TELEMETRY_POLL_24H_EXEMPTreaches every packaged deployment -docker-compose.yml, bothdata/Dockerfilestages and the NixOS module (meshcoreTelemetryPoll24hExempt); setting it in.envhad no effect under Compose or NixOS (SPEC PX5) - Docs: the README documents
MESHTASTIC_PSK_B64(SPEC PX7) - CI: the env-surface check runs in pytest whenever a deployment surface changes, and also checks names with digits, names read through helpers, and retired names (SPEC PX6/PX8)
- Docker: the root
Dockerfilebuilds the same image asweb/Dockerfile, including Chromium for Open Graph previews (skip it with--build-arg WITH_OG_IMAGE=0), the custom pages directory, and theAPP_VERSIONbuild arg (SPEC DF1) - Docs:
SECURITY.mdsays how to report a vulnerability privately (SPEC SEC1) - Data/Web: Reticulum reports a frequency and LoRa preset, read from the RNS config (SPEC RL1-RL3)
- Web: federation node counts distinguish zero from not-reported uniformly across all three protocols (SPEC RL4)
- Web: a destination's identifier links to its identity page (SPEC RL5)
- Web: Reticulum rows match every other row's height; one dash glyph throughout the nodes table (SPEC RA11)
- Data/Web: Reticulum nodes are keyed on the announcing identity, not on each destination - one node, several destinations (SPEC RE7/RE10)
- Data: the ingestor's own node id is its primary announced identity (SPEC RE8)
- Data: the host's own transport aspect is ingested when the stack has transport enabled (SPEC RE9)
- Data:
PROTOCOL=reticulumno longer requiresINGESTOR_NODE_ID(SPEC RE5) - Data: a set
CONNECTIONis no longer silently ignored underPROTOCOL=reticulum- the ingestor now logs that it is dropping the value (SPEC RN10) - Data:
RETICULUM_INTERFACESnow resolves interface names through the shared RNS instance, fixing an allowlist that matched nothing on a shared stack (SPEC RE3) - Data: a Reticulum announce with no display name no longer overwrites a stored name
- Docs: document the Reticulum config directory, its Docker volume, and how to add interfaces to it
- Data:
ALLOWED_CHANNELS,HIDDEN_CHANNELS, andMAP_ZOOMno longer break on the packaged Compose default's quoted-empty value (ACCEPTANCE CH-A1-CH-A3) - Data/Web: one Reticulum node row per announced destination, grouped by
nodes.identity_hash(SPEC RE1) - Data/Web:
user.publicKeycarries the identity's real public key; destinations get their own table, served byGET /api/destinations(SPEC RE2) - Data: new
RETICULUM_INTERFACESallowlist scopes announce ingestion by interface, applied from one hop out; the operator's own nodes are always ingested (SPEC RN4/RE4) - Web: the
/chartsmesh-activity figure draws the Reticulum series (SPEC RN2) - Web:
instances.reticulum_nodes_countgets its own migration (SPEC RN7) - Docs: every environment variable the ingestor or web app reads is documented (SPEC DOC2)
- Docs/Config:
configure.shand the NixOS module are no longer Meshtastic-only (SPEC DOC3) - Docs: the README documents every route (SPEC DOC4)
- Docs: the dual basemap-CDN egress disclosure was restored (SPEC SB6)
- Docs:
CONTRACTS.mdcorrected to match the served/api/destinationsshape (SPEC DOC5) - Docs:
ACCEPTANCE.mdamended for the shipped Reticulum stats scope; README gains a Reticulum section - Web: picking a channel from the chat dropdown on mobile no longer fails while live updates arrive (#882)
- Data:
ALLOWED_CHANNELS,HIDDEN_CHANNELSandPRIMARY_CHANNEL_ONLYdrop every packet type and node-list entry from excluded channels, not only text messages (#784, SPEC CF1-CF3) - Data: node-list snapshots no longer carry the radio library's copy of each node's last packet (#784, SPEC CF3)
- Data: under
TRANSPORT=udp,ALLOWED_CHANNELSandHIDDEN_CHANNELSmatch channel 0 byPRIMARY_CHANNEL_NAME(#784, SPEC CF2) - Data:
PRIMARY_CHANNEL_ONLYacceptstrue/yes/onlike theTX_*flags; an unrecognized value enables it (#784, SPEC CF5) - Data: new
DROP_VIA_MQTT=1drops Meshtastic packets and nodes relayed via MQTT, on the API and UDP transports (#884, SPEC VM1-VM2) - Web: the web service no longer receives the unused
ALLOWED_CHANNELS/HIDDEN_CHANNELSsettings (#784, SPEC CF6) - Docs:
CHANNEL_INDEXdocumented as the announcement channel, not an ingest filter (#884, SPEC CF7)
Features
- Data/Web: Reticulum protocol support -
PROTOCOL=reticulumingests announces asprotocol="reticulum"nodes end-to-end (ingest, stats, federation wire, UI) (SPEC S6/FS2/MA5/MA-F2/F2-2 as amended)
v0.7.5
Features
- Make the activity announcement opt-in via ANNOUNCE (default off) by @seybsen in https://github.com/l5yth/potato-mesh/pull/886
Fixes
- Ingestor: every mesh transmission is now off by default (
TX_ENABLED, default0), covering the activity announcement and the MeshCore on-air contact telemetry polls; announcements take a second opt-in (TX_ANNOUNCE=1) on top by @l5yth in https://github.com/l5yth/potato-mesh/pull/891 - Ingestor:
RX_ONLYno longer fails open - it was compared as an exact== "1", soRX_ONLY=true,TRUE,yes,onand" 1"all silently resolved to off and a receive-only listening post transmitted anyway; all TX flags now accept the common spellings, strip whitespace, and resolve an unrecognized value toward silence by @l5yth in https://github.com/l5yth/potato-mesh/pull/891 - Ingestor: the
TX_*flags reach every packaged deployment -docker-compose.yml,data/Dockerfile, the NixOS module (txEnabled/txAnnounce) and.env.example; the previousANNOUNCEopt-in reached none of them, so setting it in.envhad no effect at all by @l5yth in https://github.com/l5yth/potato-mesh/pull/891 - Ingestor: the announcement's 24 h anti-spam delay is measured on a monotonic clock - it used wall clock, so on an RTC-less host a post-boot NTP step cleared it instantly by @l5yth in https://github.com/l5yth/potato-mesh/pull/891
- Ingestor: transmit policy is stated in the log at startup without
DEBUG=1, and each suppressed announcement names the gate that closed by @l5yth in https://github.com/l5yth/potato-mesh/pull/891 - App: await the in-flight request before closing its HTTP client in
loadMessages/loadNodes- the unawaited return letfinallyclose the client mid-request by @l5yth - App: raise the iOS deployment target to 15.0 (from 14.0) in the Podfile, Xcode project and
AppFrameworkInfo.plist- Flutter 3.47'sFlutterpod requires it, andpod installcould not resolve against the old target. Drops support for iOS 14 devices. by @l5yth - CI: the Mobile workflow matrix no longer fails fast, so an iOS failure stops hiding whether the Android build passed by @l5yth
- Docs: README gains a Transmitting on the mesh section - what each flag turns on, the truth table, the literal announcement text, and what is never gated by @l5yth in https://github.com/l5yth/potato-mesh/pull/891
v0.7.4
Features
- web: remediate frontend design & UX audit by @l5yth in https://github.com/l5yth/potato-mesh/pull/855
- data,web: mesh activity reporting & announcements by @l5yth in https://github.com/l5yth/potato-mesh/pull/859
- web: mesh activity map card by @l5yth in https://github.com/l5yth/potato-mesh/pull/860
- data: count every MeshCore RX-log frame; stamp position radio metadata by @l5yth in https://github.com/l5yth/potato-mesh/pull/861
- web: frontent performance fixes by @l5yth in https://github.com/l5yth/potato-mesh/pull/864
- docs: document reverse-proxy deployment, asset caching, and scaling by @l5yth in https://github.com/l5yth/potato-mesh/pull/872
- web: cap the node table render to the top N with a show all control by @l5yth in https://github.com/l5yth/potato-mesh/pull/869
- web: immutable cache-control for versioned assets + configurable stats TTL by @l5yth in https://github.com/l5yth/potato-mesh/pull/868
- perf(web): index-seek /api/stats telemetry umbrella to end GVL stall by @l5yth in https://github.com/l5yth/potato-mesh/pull/873
- data,web: Meshtastic waypoints as a first-class POI layer by @l5yth in https://github.com/l5yth/potato-mesh/pull/874
- web,docker: bake git APP_VERSION into image for immutable asset caching by @l5yth in https://github.com/l5yth/potato-mesh/pull/875
- web: LCP critical-path refinements (icon caching, preconnect, chat-tabs reflow) by @l5yth in https://github.com/l5yth/potato-mesh/pull/877
Fixes
- fix(docker): bump ingestor base to python 3.12.10 for cryptography's Rust MSRV by @l5yth in https://github.com/l5yth/potato-mesh/pull/858
- matrix: tolerate compacted /api/messages rows by @l5yth in https://github.com/l5yth/potato-mesh/pull/862
- data: harden MeshCore subscribe against unknown EventType by @l5yth in https://github.com/l5yth/potato-mesh/pull/867
- web: bump sqlite3 to 2.9.5 for use-after-free advisory by @l5yth in https://github.com/l5yth/potato-mesh/pull/876
- web: fix waypoints shipped-review audit findings by @l5yth in https://github.com/l5yth/potato-mesh/pull/878
Chores
- chore: bump version to 0.7.4 by @l5yth in https://github.com/l5yth/potato-mesh/pull/863
- build(deps): bump quinn-proto from 0.11.14 to 0.11.16 in /matrix by @dependabot in https://github.com/l5yth/potato-mesh/pull/865
v0.7.3
Features
- web: HOT primary basemap (dark-filtered) with per-tile CARTO fallback by @l5yth in https://github.com/l5yth/potato-mesh/pull/844
- Bump all packages to 0.7.3 by @l5yth in https://github.com/l5yth/potato-mesh/pull/845
- data: meshcore rf metrics rssi/snr/hops/path by @l5yth in https://github.com/l5yth/potato-mesh/pull/849
- data,web: ingest every telemetry family from both protocols by @l5yth in https://github.com/l5yth/potato-mesh/pull/850
- web: live relative-time tick - last-seen/updated ages count up in place by @l5yth in https://github.com/l5yth/potato-mesh/pull/851
- web: stack HOT over CARTO basemap layers, drop per-tile timeout by @l5yth in https://github.com/l5yth/potato-mesh/pull/856
Fixes
- web: blend basemap providers to fix HOT/CARTO tile checkerboard by @l5yth in https://github.com/l5yth/potato-mesh/pull/846
- web: node table keeps latest telemetry of every type (per-field merge) by @l5yth in https://github.com/l5yth/potato-mesh/pull/847
- web,data: reconcile MeshCore stale same-name node duplicates by @l5yth in https://github.com/l5yth/potato-mesh/pull/857
v0.7.2
Features
- feat(ingestor): passive UDP transport (Mesh via UDP), primary-channel only by @tjpaulsondev in https://github.com/l5yth/potato-mesh/pull/838
Fixes
- fix: security review - dashboard XSS, private-mode federation gap, Matrix bridge resilience by @tjpaulsondev in https://github.com/l5yth/potato-mesh/pull/839
- fix: UDP-transport hardening, bridge tracker coverage, CI repairs; release 0.7.2 by @l5yth in https://github.com/l5yth/potato-mesh/pull/840
- web: fix MeshCore ghost nodes (stale contact enrichment discarded) by @l5yth in https://github.com/l5yth/potato-mesh/pull/841
- fix(docker): armv7 ingestor build toolchain; disable matrix fail-fast by @l5yth in https://github.com/l5yth/potato-mesh/pull/842
v0.7.1
Features
- web: change tiles to carto by @l5yth in https://github.com/l5yth/potato-mesh/pull/831
- web: progressively backfill all bulk collections by @l5yth in https://github.com/l5yth/potato-mesh/pull/835
Fixes
- web: fix pubsub thread budget to not block entire app by @l5yth in https://github.com/l5yth/potato-mesh/pull/828
- web: initial-load module-graph waterfall by @l5yth in https://github.com/l5yth/potato-mesh/pull/832
- web: fix MeshCore chat duplicates and warm-cache message gap by @l5yth in https://github.com/l5yth/potato-mesh/pull/834
- improve log wiring and capture all meshcore adverts by @l5yth in https://github.com/l5yth/potato-mesh/pull/836
- web: chat-log retention and vertical scroll fix by @l5yth in https://github.com/l5yth/potato-mesh/pull/837
Chores
- chore: bump version 0.7.1 by @l5yth in https://github.com/l5yth/potato-mesh/pull/833
v0.7.0
Features
- web: add node opt-out marker and data retention policies by @l5yth in https://github.com/l5yth/potato-mesh/pull/793
- web: breaking change on stats api by @l5yth in https://github.com/l5yth/potato-mesh/pull/801
- web: federation signature v2 migration by @l5yth in https://github.com/l5yth/potato-mesh/pull/805
- web: progressively load messages in batches by @l5yth in https://github.com/l5yth/potato-mesh/pull/807
- web: render chat incrementally to reduce page load time by @l5yth in https://github.com/l5yth/potato-mesh/pull/813
- web: implement local storage caching by @l5yth in https://github.com/l5yth/potato-mesh/pull/814
- web: version JS/CSS assets to bust stale browser caches by @l5yth in https://github.com/l5yth/potato-mesh/pull/815
- web: add pagination to all APIs by @l5yth in https://github.com/l5yth/potato-mesh/pull/820
- web: implement pubsub by @l5yth in https://github.com/l5yth/potato-mesh/pull/821
- web: mark message author nodes as seen by @l5yth in https://github.com/l5yth/potato-mesh/pull/822
- web: add visual feedback to pubsub events by @l5yth in https://github.com/l5yth/potato-mesh/pull/824
Fixes
- data: move connected event to after ensure_contacts by @l5yth in https://github.com/l5yth/potato-mesh/pull/789
- fix sentinel position data by @l5yth in https://github.com/l5yth/potato-mesh/pull/792
- Fix regression where Meshcore chat senders show as Meshtastic by @l5yth in https://github.com/l5yth/potato-mesh/pull/794
- web: fix chat by @l5yth in https://github.com/l5yth/potato-mesh/pull/800
- web: fix apis to use consistently use camel case by @l5yth in https://github.com/l5yth/potato-mesh/pull/802
- web: fix meshcore node synthisation, merging, and deduplication by @l5yth in https://github.com/l5yth/potato-mesh/pull/808
- web: fix federation dns status 500 by @l5yth in https://github.com/l5yth/potato-mesh/pull/809
- web: fix federation cycle and http response error handler by @l5yth in https://github.com/l5yth/potato-mesh/pull/810
- fix: report custom LoRa config as "Custom SF{sf}/BW{bw}/CR{cr}" when use_preset=False (#811) by @giannoug in https://github.com/l5yth/potato-mesh/pull/812
- fix: unify Meshtastic custom LoRa label with MeshCore format by @l5yth in https://github.com/l5yth/potato-mesh/pull/818
- web: fix meshcore message duplication regression by @l5yth in https://github.com/l5yth/potato-mesh/pull/825
- web: fix live-update DOM handling by @l5yth in https://github.com/l5yth/potato-mesh/pull/826
- web: fix api/events hang on shutdown by @l5yth in https://github.com/l5yth/potato-mesh/pull/827
Chores
- chore: bump to 0.6.4 by @l5yth in https://github.com/l5yth/potato-mesh/pull/785
- build(deps): bump openssl from 0.10.78 to 0.10.79 in /matrix by @dependabot in https://github.com/l5yth/potato-mesh/pull/787
- build(deps): bump openssl from 0.10.79 to 0.10.80 in /matrix by @dependabot in https://github.com/l5yth/potato-mesh/pull/795
v0.6.3
Features
- web: rework map spider-net feature by @l5yth in https://github.com/l5yth/potato-mesh/pull/769
- web: add seo improvements by @l5yth in https://github.com/l5yth/potato-mesh/pull/771
- data: refactor 3/7 protocols by @l5yth in https://github.com/l5yth/potato-mesh/pull/774
- web: refactor 1/7 data processing by @l5yth in https://github.com/l5yth/potato-mesh/pull/772
- web: refactor 2/7 federation by @l5yth in https://github.com/l5yth/potato-mesh/pull/773
- web: refactor 5/7 node page charts by @l5yth in https://github.com/l5yth/potato-mesh/pull/776
- web: refactor 7/7 main js by @l5yth in https://github.com/l5yth/potato-mesh/pull/778
- data: refactor 4/7 interfaces by @l5yth in https://github.com/l5yth/potato-mesh/pull/775
- web: refactor 6/7 node page by @l5yth in https://github.com/l5yth/potato-mesh/pull/777
Fixes
- matrix: fix matrix preset labels by @l5yth in https://github.com/l5yth/potato-mesh/pull/770
- web: fix liveliness of api data hydration bug by @l5yth in https://github.com/l5yth/potato-mesh/pull/783
Chores
- build(deps): bump rustls-webpki from 0.103.10 to 0.103.13 in /matrix by @dependabot in https://github.com/l5yth/potato-mesh/pull/764
- build(deps): bump openssl from 0.10.75 to 0.10.78 in /matrix by @dependabot in https://github.com/l5yth/potato-mesh/pull/766
- chore: bump version to 0.6.3 by @l5yth in https://github.com/l5yth/potato-mesh/pull/779
v0.6.2
Features
- Matrix: enable meshcore by @l5yth in https://github.com/l5yth/potato-mesh/pull/761
- Web: show colocated nodes by @l5yth in https://github.com/l5yth/potato-mesh/pull/753
Fixes
- Web: fix emoji pattern render in short names by @l5yth in https://github.com/l5yth/potato-mesh/pull/760
- Data: catch packet handler errors by @l5yth in https://github.com/l5yth/potato-mesh/pull/759
- Web: fix meshcore message duplication with 120s dupe protection by @l5yth in https://github.com/l5yth/potato-mesh/pull/758
- Web: fix node duplication through message synthetization by @l5yth in https://github.com/l5yth/potato-mesh/pull/757
- Ingestor: deduplicate meshcore messages by @l5yth in https://github.com/l5yth/potato-mesh/pull/752
- Fix reaction handling and classification by @l5yth in https://github.com/l5yth/potato-mesh/pull/750
- Web: fix federation node counts by @l5yth in https://github.com/l5yth/potato-mesh/pull/749
v0.6.1
Features
- Web: per protocol active node counts by @l5yth in https://github.com/l5yth/potato-mesh/pull/735
- Web: optimize caching by @l5yth in https://github.com/l5yth/potato-mesh/pull/744
- Data: better lora frequency handling for meshtastic by @l5yth in https://github.com/l5yth/potato-mesh/pull/733
Fixes
- Web: fix meshcore node misclassification by @l5yth in https://github.com/l5yth/potato-mesh/pull/748
- Web: fix federation resolver issue with multi addresses by @l5yth in https://github.com/l5yth/potato-mesh/pull/743
- Web: restore refresh and protocol buttons by @l5yth in https://github.com/l5yth/potato-mesh/pull/742
- Ingestor: fix serial connection failures by @l5yth in https://github.com/l5yth/potato-mesh/pull/736
Chores
- Chore: bump version to 0.6.1 by @l5yth in https://github.com/l5yth/potato-mesh/pull/726
- Build(deps): bump rand from 0.9.2 to 0.9.4 in /matrix by @dependabot in https://github.com/l5yth/potato-mesh/pull/741
v0.6.0
Features
- Web: add markdown static pages by @l5yth in https://github.com/l5yth/potato-mesh/pull/723
- Data: trace analysus multi ingestor support by @l5yth in https://github.com/l5yth/potato-mesh/pull/721
- Web: facelift by @l5yth in https://github.com/l5yth/potato-mesh/pull/716
- Web: sort channels by activity not index by @l5yth in https://github.com/l5yth/potato-mesh/pull/711
- Data: derive meshcore channel probe bound from device max_channels by @l5yth in https://github.com/l5yth/potato-mesh/pull/701
- Web: define meshcore modem presets by @l5yth in https://github.com/l5yth/potato-mesh/pull/696
- Data: register meshcore channel mappings by @l5yth in https://github.com/l5yth/potato-mesh/pull/695
- Data: provide frequency and modem preset for meshcore by @l5yth in https://github.com/l5yth/potato-mesh/pull/694
- Web: distinguish meshcore from meshtastic in frontend by @l5yth in https://github.com/l5yth/potato-mesh/pull/688
- [Meshcore] fix: get meshcore protocol icon displaying correctly by @benallfree in https://github.com/l5yth/potato-mesh/pull/681
Fixes
- Web: fix federation for multi protocol by @l5yth in https://github.com/l5yth/potato-mesh/pull/722
- Data: fix position time updates by @l5yth in https://github.com/l5yth/potato-mesh/pull/715
- Data: fix meshcore ingestor self reporting by @l5yth in https://github.com/l5yth/potato-mesh/pull/713
- Web: reference meshcore nodes in chat by @l5yth in https://github.com/l5yth/potato-mesh/pull/709
- Web: fix node disappearance role reset by @l5yth in https://github.com/l5yth/potato-mesh/pull/707
- Web: protect real node names from fallback by @l5yth in https://github.com/l5yth/potato-mesh/pull/702
- Web: add proper short names for meshcore companions by @l5yth in https://github.com/l5yth/potato-mesh/pull/693
- Fix: address review comments from PRs #676 and #681 by @l5yth in https://github.com/l5yth/potato-mesh/pull/689
- [Meshcore] fix: race condition by @benallfree in https://github.com/l5yth/potato-mesh/pull/676
Chores
- Release: v0.6.0 - remove deprecated env var aliases by @l5yth in https://github.com/l5yth/potato-mesh/pull/704
- Chore: prepare codebase for breaking release by @l5yth in https://github.com/l5yth/potato-mesh/pull/718
v0.5.12
- Enh: surface meshcore role types (#680) by @l5yth in https://github.com/l5yth/potato-mesh/pull/685
- Chore: refactor codebase before meshcore release by @l5yth in https://github.com/l5yth/potato-mesh/pull/682
- [Meshcore] enh: short name should be 1st 4 hex digits of public key by @benallfree in https://github.com/l5yth/potato-mesh/pull/679
- Chore: update xcode deps by @benallfree in https://github.com/l5yth/potato-mesh/pull/674
- Chore: update mesh.sh to use requirements file by @benallfree in https://github.com/l5yth/potato-mesh/pull/675
- Data/meshcore: fix ble and enable tcp by @l5yth in https://github.com/l5yth/potato-mesh/pull/669
- Data: handle store_forward and router_heartbeat portnum by @l5yth in https://github.com/l5yth/potato-mesh/pull/667
- Feat: implement meshcore provider by @l5yth in https://github.com/l5yth/potato-mesh/pull/663
- Ci: update dependabot and codecov settings by @l5yth in https://github.com/l5yth/potato-mesh/pull/666
- Web: prepare release by @l5yth in https://github.com/l5yth/potato-mesh/pull/665
- App: only query meshtastic provider by @l5yth in https://github.com/l5yth/potato-mesh/pull/664
- Data: prepare ingestor for meshcore by @l5yth in https://github.com/l5yth/potato-mesh/pull/658
- Web: fix css issues by @l5yth in https://github.com/l5yth/potato-mesh/pull/659
- Web: prepare frontend for multi protocol by @l5yth in https://github.com/l5yth/potato-mesh/pull/657
- Feat: split device and power-sensor telemetry charts (#643) by @l5yth in https://github.com/l5yth/potato-mesh/pull/656
- Web: implement a 'protocol' field across systems by @l5yth in https://github.com/l5yth/potato-mesh/pull/655
- Fix upsert clearing node coordinates bug by @l5yth in https://github.com/l5yth/potato-mesh/pull/654
- Data: resolve circular dependency of deamon.py by @l5yth in https://github.com/l5yth/potato-mesh/pull/653
- Proposal: mesh provider pattern refactor by @benallfree in https://github.com/l5yth/potato-mesh/pull/651
- Build(deps): bump rustls-webpki from 0.103.8 to 0.103.10 in /matrix by @dependabot[bot] in https://github.com/l5yth/potato-mesh/pull/649
- Build(deps): bump quinn-proto from 0.11.13 to 0.11.14 in /matrix by @dependabot[bot] in https://github.com/l5yth/potato-mesh/pull/646
v0.5.11
- Chore: bump version to 0.5.11 by @l5yth in https://github.com/l5yth/potato-mesh/pull/645
- Web: limit horizontal size of dropdown by @l5yth in https://github.com/l5yth/potato-mesh/pull/644
v0.5.10
- Web: expose node stats in distinct api by @l5yth in https://github.com/l5yth/potato-mesh/pull/641
- Web: do merge channels by name by @l5yth in https://github.com/l5yth/potato-mesh/pull/640
- Web: do not merge channels by ID in frontend by @l5yth in https://github.com/l5yth/potato-mesh/pull/637
- Web: do not touch neighbor last seen on neighbor info by @l5yth in https://github.com/l5yth/potato-mesh/pull/636
- Ingestor: report self id per packet by @l5yth in https://github.com/l5yth/potato-mesh/pull/635
- Ci: fix docker compose and docs by @l5yth in https://github.com/l5yth/potato-mesh/pull/634
- Web: supress encrypted text messages in frontend by @l5yth in https://github.com/l5yth/potato-mesh/pull/633
- Federation: ensure requests timeout properly and can be terminated by @l5yth in https://github.com/l5yth/potato-mesh/pull/631
- Build(deps): bump bytes from 1.11.0 to 1.11.1 in /matrix by @dependabot[bot]< in https://github.com/l5yth/potato-mesh/pull/627>
- Matrix: config loading now merges optional TOML with CLI/env/secret inputs by @l5yth in https://github.com/l5yth/potato-mesh/pull/617
- Matrix: logs only non-sensitive config fields by @l5yth in https://github.com/l5yth/potato-mesh/pull/616
- Web: decrypted takes precedence by @l5yth in https://github.com/l5yth/potato-mesh/pull/614
- Add Apache 2.0 license headers to missing sources by @l5yth in https://github.com/l5yth/potato-mesh/pull/615
- Web: decrypt PSK-1 unencrypted messages on arrival by @l5yth in https://github.com/l5yth/potato-mesh/pull/611
- Web: daemonize federation worker pool to avoid deadlocks on stuck announcments by @l5yth in https://github.com/l5yth/potato-mesh/pull/610
- Web: add announcement banner by @l5yth in https://github.com/l5yth/potato-mesh/pull/609
- L5Y chore version 0510 by @l5yth in https://github.com/l5yth/potato-mesh/pull/608
v0.5.9
- Matrix: listen for synapse on port 41448 by @l5yth in https://github.com/l5yth/potato-mesh/pull/607
- Web: collapse federation map ledgend by @l5yth in https://github.com/l5yth/potato-mesh/pull/604
- Web: fix stale node queries by @l5yth in https://github.com/l5yth/potato-mesh/pull/603
- Matrix: move short name to display name by @l5yth in https://github.com/l5yth/potato-mesh/pull/602
- Ci: update ruby to 4 by @l5yth in https://github.com/l5yth/potato-mesh/pull/601
- Web: display traces of last 28 days if available by @l5yth in https://github.com/l5yth/potato-mesh/pull/599
- Web: establish menu structure by @l5yth in https://github.com/l5yth/potato-mesh/pull/597
- Matrix: fixed the text-message checkpoint regression by @l5yth in https://github.com/l5yth/potato-mesh/pull/595
- Matrix: cache seen messages by rx_time not id by @l5yth in https://github.com/l5yth/potato-mesh/pull/594
- Web: hide the default '0' tab when not active by @l5yth in https://github.com/l5yth/potato-mesh/pull/593
- Matrix: fix empty bridge state json by @l5yth in https://github.com/l5yth/potato-mesh/pull/592
- Web: allow certain charts to overflow upper bounds by @l5yth in https://github.com/l5yth/potato-mesh/pull/585
- Ingestor: support ROUTING_APP messages by @l5yth in https://github.com/l5yth/potato-mesh/pull/584
- Ci: run nix flake check on ci by @l5yth in https://github.com/l5yth/potato-mesh/pull/583
- Web: hide legend by default by @l5yth in https://github.com/l5yth/potato-mesh/pull/582
- Nix flake by @benjajaja in https://github.com/l5yth/potato-mesh/pull/577
- Support BLE UUID format for macOS Bluetooth devices by @apo-mak in https://github.com/l5yth/potato-mesh/pull/575
- Web: add mesh.qrp.ro as seed node by @l5yth in https://github.com/l5yth/potato-mesh/pull/573
- Web: ensure unknown nodes for messages and traces by @l5yth in https://github.com/l5yth/potato-mesh/pull/572
- Chore: bump version to 0.5.9 by @l5yth in https://github.com/l5yth/potato-mesh/pull/569
v0.5.8
- Web: add secondary seed node jmrp.io by @l5yth in https://github.com/l5yth/potato-mesh/pull/568
- Data: implement whitelist for ingestor by @l5yth in https://github.com/l5yth/potato-mesh/pull/567
- Web: add ?since= parameter to all apis by @l5yth in https://github.com/l5yth/potato-mesh/pull/566
- Matrix: fix docker build by @l5yth in https://github.com/l5yth/potato-mesh/pull/565
- Matrix: fix docker build by @l5yth in https://github.com/l5yth/potato-mesh/pull/564
- Web: fix federation signature validation and create fallback by @l5yth in https://github.com/l5yth/potato-mesh/pull/563
- Chore: update readme by @l5yth in https://github.com/l5yth/potato-mesh/pull/561
- Matrix: add docker file for bridge by @l5yth in https://github.com/l5yth/potato-mesh/pull/556
- Matrix: add health checks to startup by @l5yth in https://github.com/l5yth/potato-mesh/pull/555
- Matrix: omit the api part in base url by @l5yth in https://github.com/l5yth/potato-mesh/pull/554
- App: add utility coverage tests for main.dart by @l5yth in https://github.com/l5yth/potato-mesh/pull/552
- Data: add thorough daemon unit tests by @l5yth in https://github.com/l5yth/potato-mesh/pull/553
- Chore: bump version to 0.5.8 by @l5yth in https://github.com/l5yth/potato-mesh/pull/551
v0.5.7
- Data: track ingestors heartbeat by @l5yth in https://github.com/l5yth/potato-mesh/pull/549
- Harden instance selector navigation URLs by @l5yth in https://github.com/l5yth/potato-mesh/pull/550
- Data: hide channels that have been flag for ignoring by @l5yth in https://github.com/l5yth/potato-mesh/pull/548
- Web: fix limit when counting remote nodes by @l5yth in https://github.com/l5yth/potato-mesh/pull/547
- Web: improve instances map and table view by @l5yth in https://github.com/l5yth/potato-mesh/pull/546
- Web: fix traces submission with optional fields on udp by @l5yth in https://github.com/l5yth/potato-mesh/pull/545
- Chore: bump version to 0.5.7 by @l5yth in https://github.com/l5yth/potato-mesh/pull/542
- Handle zero telemetry aggregates by @l5yth in https://github.com/l5yth/potato-mesh/pull/538
- Web: fix telemetry api to return current in amperes by @l5yth in https://github.com/l5yth/potato-mesh/pull/541
- Web: fix traces rendering by @l5yth in https://github.com/l5yth/potato-mesh/pull/535
- Normalize numeric node roles to canonical labels by @l5yth in https://github.com/l5yth/potato-mesh/pull/539
- Use INSTANCE_DOMAIN env for ingestor by @l5yth in https://github.com/l5yth/potato-mesh/pull/536
- Web: further refine the federation page by @l5yth in https://github.com/l5yth/potato-mesh/pull/534
- Add Federation Map by @apo-mak in https://github.com/l5yth/potato-mesh/pull/532
- Add contact link to the instance data by @apo-mak in https://github.com/l5yth/potato-mesh/pull/533
- Matrix: create potato-matrix-bridge by @l5yth in https://github.com/l5yth/potato-mesh/pull/528
v0.5.6
- Web: display sats in view by @l5yth in https://github.com/l5yth/potato-mesh/pull/523
- Web: display air quality in separate chart by @l5yth in https://github.com/l5yth/potato-mesh/pull/521
- Ci: Add macOS and Ubuntu builds to Flutter workflow by @l5yth in https://github.com/l5yth/potato-mesh/pull/519
- Web: add current to charts by @l5yth in https://github.com/l5yth/potato-mesh/pull/520
- App: fix notification icon by @l5yth in https://github.com/l5yth/potato-mesh/pull/518
- Spec: update test fixtures by @l5yth in https://github.com/l5yth/potato-mesh/pull/517
- App: generate proper icons by @l5yth in https://github.com/l5yth/potato-mesh/pull/516
- Web: fix favicon by @l5yth in https://github.com/l5yth/potato-mesh/pull/515
- Web: add ?since= parameter to api/messages by @l5yth in https://github.com/l5yth/potato-mesh/pull/512
- App: implement notifications by @l5yth in https://github.com/l5yth/potato-mesh/pull/511
- App: add theme selector by @l5yth in https://github.com/l5yth/potato-mesh/pull/507
- App: further harden refresh logic and prefer local first by @l5yth in https://github.com/l5yth/potato-mesh/pull/506
- Ci: fix app artifacts for tags by @l5yth in https://github.com/l5yth/potato-mesh/pull/504
- Ci: build app artifacts for tags by @l5yth in https://github.com/l5yth/potato-mesh/pull/503
- App: add persistance by @l5yth in https://github.com/l5yth/potato-mesh/pull/501
- App: instance and chat mvp by @l5yth in https://github.com/l5yth/potato-mesh/pull/498
- App: add instance selector to settings by @l5yth in https://github.com/l5yth/potato-mesh/pull/497
- App: add scaffholding gitignore by @l5yth in https://github.com/l5yth/potato-mesh/pull/496
- Handle reaction app packets without reply id by @l5yth in https://github.com/l5yth/potato-mesh/pull/495
- Render reaction multiplier counts by @l5yth in https://github.com/l5yth/potato-mesh/pull/494
- Add comprehensive tests for Flutter reader by @l5yth in https://github.com/l5yth/potato-mesh/pull/491
- Map numeric role ids to canonical Meshtastic roles by @l5yth in https://github.com/l5yth/potato-mesh/pull/489
- Update node detail hydration for traces by @l5yth in https://github.com/l5yth/potato-mesh/pull/490
- Add mobile Flutter CI workflow by @l5yth in https://github.com/l5yth/potato-mesh/pull/488
- Align OCI labels in docker workflow by @l5yth in https://github.com/l5yth/potato-mesh/pull/487
- Add Meshtastic reader Flutter app by @l5yth in https://github.com/l5yth/potato-mesh/pull/483
- Handle pre-release Docker tagging by @l5yth in https://github.com/l5yth/potato-mesh/pull/486
- Web: remove range from charts labels by @l5yth in https://github.com/l5yth/potato-mesh/pull/485
- Floor override frequencies to MHz integers by @l5yth in https://github.com/l5yth/potato-mesh/pull/476
- Prevent message ids from being treated as node identifiers by @l5yth in https://github.com/l5yth/potato-mesh/pull/475
- Fix 1 after emojis in reply. by @Alexkurd in https://github.com/l5yth/potato-mesh/pull/464
- Add frequency and preset to node table by @l5yth in https://github.com/l5yth/potato-mesh/pull/472
- Subscribe to traceroute app pubsub topic by @l5yth in https://github.com/l5yth/potato-mesh/pull/471
- Aggregate telemetry over the last 7 days by @l5yth in https://github.com/l5yth/potato-mesh/pull/470
- Address missing id field ingestor bug by @l5yth in https://github.com/l5yth/potato-mesh/pull/469
- Merge secondary channels by name by @l5yth in https://github.com/l5yth/potato-mesh/pull/468
- Rate limit host device telemetry by @l5yth in https://github.com/l5yth/potato-mesh/pull/467
- Add traceroutes to frontend by @l5yth in https://github.com/l5yth/potato-mesh/pull/466
- Feat: implement traceroute app packet handling across the stack by @l5yth in https://github.com/l5yth/potato-mesh/pull/463
- Bump version and update changelog by @l5yth in https://github.com/l5yth/potato-mesh/pull/462
v0.5.5
- Added comprehensive helper unit tests by @l5yth in https://github.com/l5yth/potato-mesh/pull/457
- Added reaction-aware handling by @l5yth in https://github.com/l5yth/potato-mesh/pull/455
- Env: add map zoom by @l5yth in https://github.com/l5yth/potato-mesh/pull/454
- Charts: render aggregated telemetry charts for all nodes by @l5yth in https://github.com/l5yth/potato-mesh/pull/453
- Nodes: render charts detail pages as overlay by @l5yth in https://github.com/l5yth/potato-mesh/pull/452
- Fix telemetry parsing for charts by @l5yth in https://github.com/l5yth/potato-mesh/pull/451
- Nodes: improve charts on detail pages by @l5yth in https://github.com/l5yth/potato-mesh/pull/450
- Nodes: add charts to detail pages by @l5yth in https://github.com/l5yth/potato-mesh/pull/449
- Aggregate frontend snapshots across views by @l5yth in https://github.com/l5yth/potato-mesh/pull/447
- Remove added 1 if reply with emoji by @Alexkurd in https://github.com/l5yth/potato-mesh/pull/443
- Refine node detail view layout by @l5yth in https://github.com/l5yth/potato-mesh/pull/442
- Enable map centering from node table coordinates by @l5yth in https://github.com/l5yth/potato-mesh/pull/439
- Add node detail route and page by @l5yth in https://github.com/l5yth/potato-mesh/pull/441
- Ensure Meshtastic nodeinfo patch runs before importing interfaces by @l5yth in https://github.com/l5yth/potato-mesh/pull/440
- Filter zero-valued fields from API responses by @l5yth in https://github.com/l5yth/potato-mesh/pull/438
- Add debug payload tracing and ignored packet logging by @l5yth in https://github.com/l5yth/potato-mesh/pull/437
- Tighten map auto-fit behaviour by @l5yth in https://github.com/l5yth/potato-mesh/pull/435
- Fetch encrypted chat log entries for log tab by @l5yth in https://github.com/l5yth/potato-mesh/pull/434
- Add encrypted filter to messages API by @l5yth in https://github.com/l5yth/potato-mesh/pull/432
- Guard NodeInfo handler against missing IDs by @l5yth in https://github.com/l5yth/potato-mesh/pull/431
- Add standalone full-screen map, chat, and nodes views by @l5yth in https://github.com/l5yth/potato-mesh/pull/429
- Ensure chat history fetches full message limit by @l5yth in https://github.com/l5yth/potato-mesh/pull/428
- Fix ingestion of nodeinfo packets missing ids (#426) by @l5yth in https://github.com/l5yth/potato-mesh/pull/427
- Chore: update license headers by @l5yth in https://github.com/l5yth/potato-mesh/pull/424
- Chore: bump version to 0.5.5 by @l5yth in https://github.com/l5yth/potato-mesh/pull/423
v0.5.4
- Handle naming when primary channel has a name by @l5yth in https://github.com/l5yth/potato-mesh/pull/422
- Handle edge case when primary channel has a name by @l5yth in https://github.com/l5yth/potato-mesh/pull/421
- Add preset mode to logs by @l5yth in https://github.com/l5yth/potato-mesh/pull/420
- Parallelize federation tasks with worker pool by @l5yth in https://github.com/l5yth/potato-mesh/pull/419
- Allow filtering chat and logs by node name by @l5yth in https://github.com/l5yth/potato-mesh/pull/417
- Gem: Add erb as dependency removed from std by @l5yth in https://github.com/l5yth/potato-mesh/pull/416
- Implement support for replies and reactions app by @l5yth in https://github.com/l5yth/potato-mesh/pull/411
- Ingestor: Ignore direct messages on default channel by @l5yth in https://github.com/l5yth/potato-mesh/pull/414
- Agents: Add instructions by @l5yth in https://github.com/l5yth/potato-mesh/pull/410
- Display encrypted messages in frontend log window by @l5yth in https://github.com/l5yth/potato-mesh/pull/409
- Add chat log entries for telemetry, position, and neighbor events by @l5yth in https://github.com/l5yth/potato-mesh/pull/408
- Handle missing instance domain outside production by @l5yth in https://github.com/l5yth/potato-mesh/pull/405
- Add tabbed chat panel with channel grouping by @l5yth in https://github.com/l5yth/potato-mesh/pull/404
- Normalize numeric client roles using Meshtastic CLI enums by @l5yth in https://github.com/l5yth/potato-mesh/pull/402
- Ensure Docker images publish versioned tags by @l5yth in https://github.com/l5yth/potato-mesh/pull/403
- Document environment configuration variables by @l5yth in https://github.com/l5yth/potato-mesh/pull/400
- Document federation refresh cadence by @l5yth in https://github.com/l5yth/potato-mesh/pull/401
- Add Prometheus monitoring documentation by @l5yth in https://github.com/l5yth/potato-mesh/pull/399
- Config: Read PROM_REPORT_IDS from environment by @nicjansma in https://github.com/l5yth/potato-mesh/pull/398
- Feat: Mesh-Ingestor: Ability to provide already-existing interface instance by @KenADev in https://github.com/l5yth/potato-mesh/pull/395
- Fix: Mesh-Ingestor: Fix error for non-existing datetime.UTC reference by @KenADev in https://github.com/l5yth/potato-mesh/pull/396
- Chore: bump version to 0.5.4 by @l5yth in https://github.com/l5yth/potato-mesh/pull/388
v0.5.3
- Add telemetry formatting utilities and extend node overlay by @l5yth in https://github.com/l5yth/potato-mesh/pull/387
- Prune blank values from API responses by @l5yth in https://github.com/l5yth/potato-mesh/pull/386
- Add full support to telemetry schema and API by @l5yth in https://github.com/l5yth/potato-mesh/pull/385
- Respect PORT environment override by @l5yth in https://github.com/l5yth/potato-mesh/pull/384
- Add instance selector dropdown for federation deployments by @l5yth in https://github.com/l5yth/potato-mesh/pull/382
- Harden federation announcements by @l5yth in https://github.com/l5yth/potato-mesh/pull/381
- Ensure private mode disables federation by @l5yth in https://github.com/l5yth/potato-mesh/pull/380
- Ensure private mode disables chat messaging by @l5yth in https://github.com/l5yth/potato-mesh/pull/378
- Disable federation features when FEDERATION=0 by @l5yth in https://github.com/l5yth/potato-mesh/pull/379
- Expose PRIVATE environment configuration across tooling by @l5yth in https://github.com/l5yth/potato-mesh/pull/377
- Fix frontend coverage export for Codecov by @l5yth in https://github.com/l5yth/potato-mesh/pull/376
- Restrict /api/instances results to recent records by @l5yth in https://github.com/l5yth/potato-mesh/pull/374
- Expose FEDERATION environment option across tooling by @l5yth in https://github.com/l5yth/potato-mesh/pull/375
- Chore: bump version to 0.5.3 by @l5yth in https://github.com/l5yth/potato-mesh/pull/372
v0.5.2
- Align theme and info controls by @l5yth in https://github.com/l5yth/potato-mesh/pull/371
- Fixes POST request 403 errors on instances behind Cloudflare proxy by @varna9000 in https://github.com/l5yth/potato-mesh/pull/368
- Delay initial federation announcements by @l5yth in https://github.com/l5yth/potato-mesh/pull/366
- Ensure well-known document stays in sync on startup by @l5yth in https://github.com/l5yth/potato-mesh/pull/365
- Guard federation DNS resolution against restricted networks by @l5yth in https://github.com/l5yth/potato-mesh/pull/362
- Add federation ingestion limits and tests by @l5yth in https://github.com/l5yth/potato-mesh/pull/364
- Prefer reported primary channel names by @l5yth in https://github.com/l5yth/potato-mesh/pull/363
- Decouple message API node hydration by @l5yth in https://github.com/l5yth/potato-mesh/pull/360
- Fix ingestor reconnection detection by @l5yth in https://github.com/l5yth/potato-mesh/pull/361
- Harden instance domain validation by @l5yth in https://github.com/l5yth/potato-mesh/pull/359
- Ensure INSTANCE_DOMAIN propagates to containers by @l5yth in https://github.com/l5yth/potato-mesh/pull/358
- Chore: bump version to 0.5.2 by @l5yth in https://github.com/l5yth/potato-mesh/pull/356
- Gracefully retry federation announcements over HTTP by @l5yth in https://github.com/l5yth/potato-mesh/pull/355
v0.5.1
- Recursively ingest federated instances by @l5yth in https://github.com/l5yth/potato-mesh/pull/353
- Remove federation timeout environment overrides by @l5yth in https://github.com/l5yth/potato-mesh/pull/352
- Close unrelated short info overlays when opening short info by @l5yth in https://github.com/l5yth/potato-mesh/pull/351
- Improve federation instance error diagnostics by @l5yth in https://github.com/l5yth/potato-mesh/pull/350
- Harden federation domain validation and tests by @l5yth in https://github.com/l5yth/potato-mesh/pull/347
- Handle malformed instance records gracefully by @l5yth in https://github.com/l5yth/potato-mesh/pull/348
- Fix ingestor device mounting for non-serial connections by @l5yth in https://github.com/l5yth/potato-mesh/pull/346
- Ensure Docker deployments persist keyfile and well-known assets by @l5yth in https://github.com/l5yth/potato-mesh/pull/345
- Add modem preset display to node overlay by @l5yth in https://github.com/l5yth/potato-mesh/pull/340
- Display message frequency and channel in chat log by @l5yth in https://github.com/l5yth/potato-mesh/pull/339
- Bump fallback version string to v0.5.1 by @l5yth in https://github.com/l5yth/potato-mesh/pull/338
- Docs: update changelog for 0.5.0 by @l5yth in https://github.com/l5yth/potato-mesh/pull/337
- Fix ingestor docker import path by @l5yth in https://github.com/l5yth/potato-mesh/pull/336
v0.5.0
- Ensure node overlays appear above fullscreen map by @l5yth in https://github.com/l5yth/potato-mesh/pull/333
- Adjust node table columns responsively by @l5yth in https://github.com/l5yth/potato-mesh/pull/332
- Add LoRa metadata fields to nodes and messages by @l5yth in https://github.com/l5yth/potato-mesh/pull/331
- Add channel metadata capture for message tagging by @l5yth in https://github.com/l5yth/potato-mesh/pull/329
- Capture radio metadata for ingestor payloads by @l5yth in https://github.com/l5yth/potato-mesh/pull/327
- Fix FrozenError when filtering node query results by @l5yth in https://github.com/l5yth/potato-mesh/pull/324
- Ensure frontend reports git-aware version strings by @l5yth in https://github.com/l5yth/potato-mesh/pull/321
- Ensure web Docker image ships application sources by @l5yth in https://github.com/l5yth/potato-mesh/pull/322
- Refine stacked short info overlays on the map by @l5yth in https://github.com/l5yth/potato-mesh/pull/319
- Refine environment configuration defaults by @l5yth in https://github.com/l5yth/potato-mesh/pull/318
- Fix legacy configuration migration to XDG directories by @l5yth in https://github.com/l5yth/potato-mesh/pull/317
- Adopt XDG base directories for app data and config by @l5yth in https://github.com/l5yth/potato-mesh/pull/316
- Refactor: streamline ingestor environment variables by @l5yth in https://github.com/l5yth/potato-mesh/pull/314
- Adjust map auto-fit padding and default zoom by @l5yth in https://github.com/l5yth/potato-mesh/pull/315
- Ensure APIs filter stale data and refresh node details from latest sources by @l5yth in https://github.com/l5yth/potato-mesh/pull/312
- Improve offline tile fallback initialization by @l5yth in https://github.com/l5yth/potato-mesh/pull/307
- Add fallback for offline tile rendering errors by @l5yth in https://github.com/l5yth/potato-mesh/pull/306
- Fix map auto-fit handling and add controller by @l5yth in https://github.com/l5yth/potato-mesh/pull/311
- Fix map initialization bounds and add coverage by @l5yth in https://github.com/l5yth/potato-mesh/pull/305
- Increase coverage for configuration and sanitizer helpers by @l5yth in https://github.com/l5yth/potato-mesh/pull/303
- Add comprehensive theme and background front-end tests by @l5yth in https://github.com/l5yth/potato-mesh/pull/302
- Document sanitization and helper modules by @l5yth in https://github.com/l5yth/potato-mesh/pull/301
- Add in-repo Meshtastic protobuf stubs for tests by @l5yth in https://github.com/l5yth/potato-mesh/pull/300
- Handle CRL lookup failures during federation TLS by @l5yth in https://github.com/l5yth/potato-mesh/pull/299
- Ensure JavaScript workflow runs frontend tests by @l5yth in https://github.com/l5yth/potato-mesh/pull/298
- Unify structured logging across application and ingestor by @l5yth in https://github.com/l5yth/potato-mesh/pull/296
- Add Apache license headers to missing sources by @l5yth in https://github.com/l5yth/potato-mesh/pull/297
- Update workflows for ingestor, sinatra, and frontend by @l5yth in https://github.com/l5yth/potato-mesh/pull/295
- Fix IPv6 instance domain canonicalization by @l5yth in https://github.com/l5yth/potato-mesh/pull/294
- Handle federation HTTPS CRL verification failures by @l5yth in https://github.com/l5yth/potato-mesh/pull/293
- Adjust federation announcement interval to eight hours by @l5yth in https://github.com/l5yth/potato-mesh/pull/292
- Restore modular app functionality by @l5yth in https://github.com/l5yth/potato-mesh/pull/291
- Refactor config and metadata helpers into PotatoMesh modules by @l5yth in https://github.com/l5yth/potato-mesh/pull/290
- Update default site configuration defaults by @l5yth in https://github.com/l5yth/potato-mesh/pull/288
- Add regression test for queue drain concurrency by @l5yth in https://github.com/l5yth/potato-mesh/pull/287
- Ensure Docker config directories are created for non-root user by @l5yth in https://github.com/l5yth/potato-mesh/pull/286
- Clarify numeric address requirement for network target parsing by @l5yth in https://github.com/l5yth/potato-mesh/pull/285
- Ensure mesh ingestor queue resets active flag when idle by @l5yth in https://github.com/l5yth/potato-mesh/pull/284
- Clarify BLE connection description in README by @l5yth in https://github.com/l5yth/potato-mesh/pull/283
- Configure web container for production mode by @l5yth in https://github.com/l5yth/potato-mesh/pull/282
- Normalize INSTANCE_DOMAIN configuration to require hostnames by @l5yth in https://github.com/l5yth/potato-mesh/pull/280
- Avoid blocking startup on federation announcements by @l5yth in https://github.com/l5yth/potato-mesh/pull/281
- Fix production Docker builds for web and ingestor images by @l5yth in https://github.com/l5yth/potato-mesh/pull/279
- Improve instance domain detection logic by @l5yth in https://github.com/l5yth/potato-mesh/pull/278
- Implement federation announcements and instances API by @l5yth in https://github.com/l5yth/potato-mesh/pull/277
- Fix federation signature handling and IP guard by @l5yth in https://github.com/l5yth/potato-mesh/pull/276
- Add persistent federation metadata endpoint by @l5yth in https://github.com/l5yth/potato-mesh/pull/274
- Add configurable instance domain with reverse DNS fallback by @l5yth in https://github.com/l5yth/potato-mesh/pull/272
- Document production deployment configuration by @l5yth in https://github.com/l5yth/potato-mesh/pull/273
- Add targeted API endpoints and expose version metadata by @l5yth in https://github.com/l5yth/potato-mesh/pull/271
- Prometheus metrics updates on startup and for position/telemetry by @nicjansma in https://github.com/l5yth/potato-mesh/pull/270
- Add hourly reconnect handling for inactive mesh interface by @l5yth in https://github.com/l5yth/potato-mesh/pull/267
- Dockerfile fixes by @nicjansma in https://github.com/l5yth/potato-mesh/pull/268
- Added prometheus /metrics endpoint by @nicjansma in https://github.com/l5yth/potato-mesh/pull/262
- Add fullscreen toggle to map view by @l5yth in https://github.com/l5yth/potato-mesh/pull/263
- Relocate JS coverage export script into web directory by @l5yth in https://github.com/l5yth/potato-mesh/pull/266
- V0.4.0 version string in web UI by @nicjansma in https://github.com/l5yth/potato-mesh/pull/265
- Add energy saving cycle to ingestor daemon by @l5yth in https://github.com/l5yth/potato-mesh/pull/256
- Chore: restore apache headers by @l5yth in https://github.com/l5yth/potato-mesh/pull/260
- Docs: add matrix to readme by @l5yth in https://github.com/l5yth/potato-mesh/pull/259
- Force dark theme default based on sanitized cookie by @l5yth in https://github.com/l5yth/potato-mesh/pull/252
- Document mesh ingestor modules with PDoc-style docstrings by @l5yth in https://github.com/l5yth/potato-mesh/pull/255
- Handle missing node IDs in Meshtastic nodeinfo packets by @l5yth in https://github.com/l5yth/potato-mesh/pull/251
- Document Ruby helper methods with RDoc comments by @l5yth in https://github.com/l5yth/potato-mesh/pull/254
- Add JSDoc documentation across client scripts by @l5yth in https://github.com/l5yth/potato-mesh/pull/253
- Fix mesh ingestor telemetry and neighbor handling by @l5yth in https://github.com/l5yth/potato-mesh/pull/249
- Refactor front-end assets into external modules by @l5yth in https://github.com/l5yth/potato-mesh/pull/245
- Add tests for helper utilities and asset routes by @l5yth in https://github.com/l5yth/potato-mesh/pull/243
- Docs: add ingestor inline docstrings by @l5yth in https://github.com/l5yth/potato-mesh/pull/244
- Add comprehensive coverage tests for mesh ingestor by @l5yth in https://github.com/l5yth/potato-mesh/pull/241
- Add inline documentation to config helpers and frontend scripts by @l5yth in https://github.com/l5yth/potato-mesh/pull/240
- Update changelog by @l5yth in https://github.com/l5yth/potato-mesh/pull/238
v0.4.0
- Reformat neighbor overlay layout by @l5yth in https://github.com/l5yth/potato-mesh/pull/237
- Add legend toggle for neighbor lines by @l5yth in https://github.com/l5yth/potato-mesh/pull/236
- Hide Air Util Tx column on mobile by @l5yth in https://github.com/l5yth/potato-mesh/pull/235
- Add overlay for clickable neighbor links on map by @l5yth in https://github.com/l5yth/potato-mesh/pull/234
- Hide humidity and pressure columns on mobile by @l5yth in https://github.com/l5yth/potato-mesh/pull/232
- Remove last position timestamp from map info overlay by @l5yth in https://github.com/l5yth/potato-mesh/pull/233
- Improve live node positions and expose precision metadata by @l5yth in https://github.com/l5yth/potato-mesh/pull/231
- Show neighbor short names in info overlays by @l5yth in https://github.com/l5yth/potato-mesh/pull/228
- Add telemetry environment metrics to node UI by @l5yth in https://github.com/l5yth/potato-mesh/pull/227
- Reduce neighbor line opacity by @l5yth in https://github.com/l5yth/potato-mesh/pull/226
- Visualize neighbor connections on map canvas by @l5yth in https://github.com/l5yth/potato-mesh/pull/224
- Add clear control to filter input by @l5yth in https://github.com/l5yth/potato-mesh/pull/225
- Handle Bluetooth shutdown hangs gracefully by @l5yth in https://github.com/l5yth/potato-mesh/pull/221
- Adjust mesh priorities and receive topics by @l5yth in https://github.com/l5yth/potato-mesh/pull/220
- Add BLE and fallback mesh interface handling by @l5yth in https://github.com/l5yth/potato-mesh/pull/219
- Add neighbor info ingestion and API endpoints by @l5yth in https://github.com/l5yth/potato-mesh/pull/218
- Add debug logs for unknown node creation and last-heard updates by @l5yth in https://github.com/l5yth/potato-mesh/pull/214
- Update node last seen when events are received by @l5yth in https://github.com/l5yth/potato-mesh/pull/212
- Improve debug logging for node and telemetry data by @l5yth in https://github.com/l5yth/potato-mesh/pull/213
- Normalize stored message debug output by @l5yth in https://github.com/l5yth/potato-mesh/pull/211
- Stop repeating ingestor node info snapshot and timestamp debug logs by @l5yth in https://github.com/l5yth/potato-mesh/pull/210
- Add telemetry API and ingestion support by @l5yth in https://github.com/l5yth/potato-mesh/pull/205
- Add private mode to hide chat and message APIs by @l5yth in https://github.com/l5yth/potato-mesh/pull/204
- Handle offline-ready map fallback by @l5yth in https://github.com/l5yth/potato-mesh/pull/202
- Add linux/armv7 container builds and configuration options by @l5yth in https://github.com/l5yth/potato-mesh/pull/201
- Update Docker documentation by @l5yth in https://github.com/l5yth/potato-mesh/pull/200
- Update node last seen when ingesting encrypted messages by @l5yth in https://github.com/l5yth/potato-mesh/pull/198
- Fix api in readme by @l5yth in https://github.com/l5yth/potato-mesh/pull/197
v0.3.0
- Add connection recovery for TCP interface by @l5yth in https://github.com/l5yth/potato-mesh/pull/186
- Bump version to 0.3 by @l5yth in https://github.com/l5yth/potato-mesh/pull/191
- Pgrade styles and fix interface issues by @l5yth in https://github.com/l5yth/potato-mesh/pull/190
- Some updates in the front by @dkorotkih2014-hub in https://github.com/l5yth/potato-mesh/pull/188
- Update last heard on node entry change by @l5yth in https://github.com/l5yth/potato-mesh/pull/185
- Populate chat metadata for unknown nodes by @l5yth in https://github.com/l5yth/potato-mesh/pull/182
- Update role color theme to latest palette by @l5yth in https://github.com/l5yth/potato-mesh/pull/183
- Add placeholder nodes for unknown senders by @l5yth in https://github.com/l5yth/potato-mesh/pull/181
- Update role colors and ordering for firmware 2.7.10 by @l5yth in https://github.com/l5yth/potato-mesh/pull/180
- Handle plain IP addresses in mesh TCP detection by @l5yth in https://github.com/l5yth/potato-mesh/pull/154
- Handle encrypted messages by @l5yth in https://github.com/l5yth/potato-mesh/pull/173
- Add fallback display names for unnamed nodes by @l5yth in https://github.com/l5yth/potato-mesh/pull/171
- Ensure routers render above other node types by @l5yth in https://github.com/l5yth/potato-mesh/pull/169
- Move lint checks after tests in CI by @l5yth in https://github.com/l5yth/potato-mesh/pull/168
- Handle proto values in nodeinfo payloads by @l5yth in https://github.com/l5yth/potato-mesh/pull/167
- Remove raw payload storage from database schema by @l5yth in https://github.com/l5yth/potato-mesh/pull/166
- Add POSITION_APP ingestion and API support by @l5yth in https://github.com/l5yth/potato-mesh/pull/160
- Add support for NODEINFO_APP packets by @l5yth in https://github.com/l5yth/potato-mesh/pull/159
- Derive SEO metadata from existing config values by @l5yth in https://github.com/l5yth/potato-mesh/pull/153
- Tests: create helper script to dump all mesh data from serial by @l5yth in https://github.com/l5yth/potato-mesh/pull/152
- Limit chat log to recent entries by @l5yth in https://github.com/l5yth/potato-mesh/pull/151
- Require time library before formatting ISO timestamps by @l5yth in https://github.com/l5yth/potato-mesh/pull/149
- Define docker compose network by @l5yth in https://github.com/l5yth/potato-mesh/pull/148
- Fix sqlite3 native extension on Alpine by @l5yth in https://github.com/l5yth/potato-mesh/pull/146
- Fix web app startup binding by @l5yth in https://github.com/l5yth/potato-mesh/pull/147
- Ensure sqlite3 builds from source on Alpine by @l5yth in https://github.com/l5yth/potato-mesh/pull/145
- Support mock serial interface in CI by @l5yth in https://github.com/l5yth/potato-mesh/pull/143
- Fix Docker workflow matrix for supported platforms by @l5yth in https://github.com/l5yth/potato-mesh/pull/142
- Add clickable role filters to the map legend by @l5yth in https://github.com/l5yth/potato-mesh/pull/140
- Rebuild chat log on each refresh by @l5yth in https://github.com/l5yth/potato-mesh/pull/139
- Fix: retain alpine runtime libs after removing build deps by @l5yth in https://github.com/l5yth/potato-mesh/pull/138
- Fix: support windows ingestor build by @l5yth in https://github.com/l5yth/potato-mesh/pull/136
- Fix: use supported ruby image by @l5yth in https://github.com/l5yth/potato-mesh/pull/135
- Feat: Add comprehensive Docker support by @trose in https://github.com/l5yth/potato-mesh/pull/122
- Chore: bump version to 0.2.1 by @l5yth in https://github.com/l5yth/potato-mesh/pull/134
- Fix dark mode tile styling on new map tiles by @l5yth in https://github.com/l5yth/potato-mesh/pull/132
- Switch map tiles to OSM HOT and add theme filters by @l5yth in https://github.com/l5yth/potato-mesh/pull/130
- Add footer version display by @l5yth in https://github.com/l5yth/potato-mesh/pull/128
- Add responsive controls for map legend by @l5yth in https://github.com/l5yth/potato-mesh/pull/129
- Update changelog by @l5yth in https://github.com/l5yth/potato-mesh/pull/119
v0.2.0
- Update readme for 0.2 by @l5yth in https://github.com/l5yth/potato-mesh/pull/118
- Add PotatoMesh logo to header and favicon by @l5yth in https://github.com/l5yth/potato-mesh/pull/117
- Harden API auth and request limits by @l5yth in https://github.com/l5yth/potato-mesh/pull/116
- Add client-side sorting to node table by @l5yth in https://github.com/l5yth/potato-mesh/pull/114
- Add short name overlay for node details by @l5yth in https://github.com/l5yth/potato-mesh/pull/111
- Adjust python ingestor interval to 60 seconds by @l5yth in https://github.com/l5yth/potato-mesh/pull/112
- Hide location columns on medium screens by @l5yth in https://github.com/l5yth/potato-mesh/pull/109
- Handle message updates based on sender info by @l5yth in https://github.com/l5yth/potato-mesh/pull/108
- Prioritize node posts in queued API updates by @l5yth in https://github.com/l5yth/potato-mesh/pull/107
- Add auto-refresh toggle to UI by @l5yth in https://github.com/l5yth/potato-mesh/pull/105
- Adjust Leaflet popup styling for dark mode by @l5yth in https://github.com/l5yth/potato-mesh/pull/104
- Add site info overlay by @l5yth in https://github.com/l5yth/potato-mesh/pull/103
- Add long name tooltip to short name badge by @l5yth in https://github.com/l5yth/potato-mesh/pull/102
- Ensure node numeric aliases are derived from canonical IDs by @l5yth in https://github.com/l5yth/potato-mesh/pull/101
- Chore: clean up repository by @l5yth in https://github.com/l5yth/potato-mesh/pull/96
- Handle SQLite busy errors when upserting nodes by @l5yth in https://github.com/l5yth/potato-mesh/pull/100
- Configure Sinatra logging level from DEBUG flag by @l5yth in https://github.com/l5yth/potato-mesh/pull/97
- Add penetration tests for authentication and SQL injection by @l5yth in https://github.com/l5yth/potato-mesh/pull/95
- Document Python and Ruby source modules by @l5yth in https://github.com/l5yth/potato-mesh/pull/94
- Add tests covering mesh helper edge cases by @l5yth in https://github.com/l5yth/potato-mesh/pull/93
- Fix py code cov by @l5yth in https://github.com/l5yth/potato-mesh/pull/92
- Add Codecov reporting to Python CI by @l5yth in https://github.com/l5yth/potato-mesh/pull/91
- Skip null identifiers when selecting packet fields by @l5yth in https://github.com/l5yth/potato-mesh/pull/88
- Create python yml ga by @l5yth in https://github.com/l5yth/potato-mesh/pull/90
- Add unit tests for mesh ingestor script by @l5yth in https://github.com/l5yth/potato-mesh/pull/89
- Add coverage for debug logging on messages without sender by @l5yth in https://github.com/l5yth/potato-mesh/pull/86
- Handle concurrent node snapshot updates by @l5yth in https://github.com/l5yth/potato-mesh/pull/85
- Fix ingestion mapping for message sender IDs by @l5yth in https://github.com/l5yth/potato-mesh/pull/84
- Add coverage for API authentication and payload edge cases by @l5yth in https://github.com/l5yth/potato-mesh/pull/83
- Add JUnit test reporting to Ruby CI by @l5yth in https://github.com/l5yth/potato-mesh/pull/82
- Configure SimpleCov reporting for Codecov by @l5yth in https://github.com/l5yth/potato-mesh/pull/81
- Update codecov job by @l5yth in https://github.com/l5yth/potato-mesh/pull/80
- Fix readme badges by @l5yth in https://github.com/l5yth/potato-mesh/pull/79
- Add Codecov upload step to Ruby workflow by @l5yth in https://github.com/l5yth/potato-mesh/pull/78
- Add Apache license headers to source files by @l5yth in https://github.com/l5yth/potato-mesh/pull/77
- Add integration specs for node and message APIs by @l5yth in https://github.com/l5yth/potato-mesh/pull/76
- Docs: update for 0.2.0 release by @l5yth in https://github.com/l5yth/potato-mesh/pull/75
- Create ruby workflow by @l5yth in https://github.com/l5yth/potato-mesh/pull/74
- Add RSpec smoke tests for app boot and database init by @l5yth in https://github.com/l5yth/potato-mesh/pull/73
- Align refresh controls with status text by @l5yth in https://github.com/l5yth/potato-mesh/pull/72
- Improve mobile layout by @l5yth in https://github.com/l5yth/potato-mesh/pull/68
- Normalize message sender IDs using node numbers by @l5yth in https://github.com/l5yth/potato-mesh/pull/67
- Style: condense node table by @l5yth in https://github.com/l5yth/potato-mesh/pull/65
- Log debug details for messages without sender by @l5yth in https://github.com/l5yth/potato-mesh/pull/64
- Fix nested dataclass serialization for node snapshots by @l5yth in https://github.com/l5yth/potato-mesh/pull/63
- Log node object on snapshot update failure by @l5yth in https://github.com/l5yth/potato-mesh/pull/62
- Initialize database on startup by @l5yth in https://github.com/l5yth/potato-mesh/pull/61
- Send mesh data to Potatomesh API by @l5yth in https://github.com/l5yth/potato-mesh/pull/60
- Convert boolean flags for SQLite binding by @l5yth in https://github.com/l5yth/potato-mesh/pull/59
- Use packet id as message primary key by @l5yth in https://github.com/l5yth/potato-mesh/pull/58
- Add message ingestion API and stricter auth by @l5yth in https://github.com/l5yth/potato-mesh/pull/56
- Feat: parameterize community info by @l5yth in https://github.com/l5yth/potato-mesh/pull/55
- Feat: add dark mode toggle by @l5yth in https://github.com/l5yth/potato-mesh/pull/54
v0.1.0
- Show daily node count in title and header by @l5yth in https://github.com/l5yth/potato-mesh/pull/49
- Add daily date separators to chat log by @l5yth in https://github.com/l5yth/potato-mesh/pull/47
- Feat: make frontend responsive for mobile by @l5yth in https://github.com/l5yth/potato-mesh/pull/46
- Harden mesh utilities by @l5yth in https://github.com/l5yth/potato-mesh/pull/45
- Filter out distant nodes from Berlin map view by @l5yth in https://github.com/l5yth/potato-mesh/pull/43
- Display filtered active node counts in #MediumFast subheading by @l5yth in https://github.com/l5yth/potato-mesh/pull/44
- Limit chat log and highlight short names by role by @l5yth in https://github.com/l5yth/potato-mesh/pull/42
- Fix string/integer comparison in node query by @l5yth in https://github.com/l5yth/potato-mesh/pull/40
- Escape chat message and node entries by @l5yth in https://github.com/l5yth/potato-mesh/pull/39
- Sort chat entries by timestamp by @l5yth in https://github.com/l5yth/potato-mesh/pull/38
- Feat: append messages to chat log by @l5yth in https://github.com/l5yth/potato-mesh/pull/36
- Normalize future timestamps for nodes by @l5yth in https://github.com/l5yth/potato-mesh/pull/35
- Optimize web frontend and Ruby app by @l5yth in https://github.com/l5yth/potato-mesh/pull/32
- Add messages API endpoint with node details by @l5yth in https://github.com/l5yth/potato-mesh/pull/33
- Clamp node timestamps and sync last_heard with position time by @l5yth in https://github.com/l5yth/potato-mesh/pull/31
- Refactor: replace deprecated utcfromtimestamp by @l5yth in https://github.com/l5yth/potato-mesh/pull/30
- Add optional debug logging for node and message operations by @l5yth in https://github.com/l5yth/potato-mesh/pull/29
- Data: enable serial collection of messages on channel 0 by @l5yth in https://github.com/l5yth/potato-mesh/pull/25
- Add first_heard timestamp by @l5yth in https://github.com/l5yth/potato-mesh/pull/23
- Add persistent footer with contact information by @l5yth in https://github.com/l5yth/potato-mesh/pull/22
- Sort initial chat entries by last-heard by @l5yth in https://github.com/l5yth/potato-mesh/pull/20
- Display position time in relative 'time ago' format by @l5yth in https://github.com/l5yth/potato-mesh/pull/19
- Adjust marker size and map tile opacity by @l5yth in https://github.com/l5yth/potato-mesh/pull/18
- Add chat box for node notifications by @l5yth in https://github.com/l5yth/potato-mesh/pull/17
- Color markers by role with grayscale map by @l5yth in https://github.com/l5yth/potato-mesh/pull/16
- Default missing node role to client by @l5yth in https://github.com/l5yth/potato-mesh/pull/15
- Show live node count in nodes page titles by @l5yth in https://github.com/l5yth/potato-mesh/pull/14
- Filter stale nodes and add live search by @l5yth in https://github.com/l5yth/potato-mesh/pull/13
- Remove raw node JSON column by @l5yth in https://github.com/l5yth/potato-mesh/pull/12
- Add JSON ingest API for node updates by @l5yth in https://github.com/l5yth/potato-mesh/pull/11
- Ignore Python pycache directories by @l5yth in https://github.com/l5yth/potato-mesh/pull/10
- Feat: load nodes from json for tests by @l5yth in https://github.com/l5yth/potato-mesh/pull/8
- Handle dataclass fields in node snapshots by @l5yth in https://github.com/l5yth/potato-mesh/pull/6
- Add index page and /nodes route for node map by @l5yth in https://github.com/l5yth/potato-mesh/pull/4