dependabot[bot]
235df026d6
build(deps): bump tokio from 1.49.0 to 1.50.0 in /matrix ( #928 )
...
Bumps [tokio](https://github.com/tokio-rs/tokio ) from 1.49.0 to 1.50.0.
- [Release notes](https://github.com/tokio-rs/tokio/releases )
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.49.0...tokio-1.50.0 )
---
updated-dependencies:
- dependency-name: tokio
dependency-version: 1.50.0
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-05 08:59:28 +02:00
dependabot[bot]
d8bac902c2
build(deps): bump docker/setup-qemu-action from 3 to 4 ( #931 )
...
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action ) from 3 to 4.
- [Release notes](https://github.com/docker/setup-qemu-action/releases )
- [Commits](https://github.com/docker/setup-qemu-action/compare/v3...v4 )
---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
dependency-version: '4'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-05 08:59:09 +02:00
dependabot[bot]
4038c245a5
build(deps): bump flutter_svg from 2.2.3 to 2.3.0 in /app ( #936 )
...
Bumps [flutter_svg](https://github.com/flutter/packages/tree/main/third_party/packages ) from 2.2.3 to 2.3.0.
- [Release notes](https://github.com/flutter/packages/releases )
- [Commits](https://github.com/flutter/packages/commits/flutter_svg-v2.3.0/third_party/packages )
---
updated-dependencies:
- dependency-name: flutter_svg
dependency-version: 2.3.0
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-05 08:58:57 +02:00
dependabot[bot]
f89dfc62e2
build(deps): bump websocket-driver from 0.8.0 to 0.8.2 in /web ( #940 )
...
Bumps [websocket-driver](https://github.com/faye/websocket-driver-ruby ) from 0.8.0 to 0.8.2.
- [Changelog](https://github.com/faye/websocket-driver-ruby/blob/main/CHANGELOG.md )
- [Commits](https://github.com/faye/websocket-driver-ruby/compare/0.8.0...0.8.2 )
---
updated-dependencies:
- dependency-name: websocket-driver
dependency-version: 0.8.2
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-05 08:58:37 +02:00
Afri
186b2ad0bd
ci,deps: run Dependabot for every ecosystem and lock production builds ( #915 )
...
* ci,deps: run Dependabot for every ecosystem and lock production builds
* web,ci: run the web image on Ruby 3.4 and drop the Ruby 3.3 CI leg
2026-10-05 00:27:11 +02:00
Afri
7b0176df93
web: dedup MeshCore channel copies whose sender resolved differently ( #880 ) ( #914 )
v0.7.6-rc0
2026-10-04 21:25:57 +02:00
Afri
b144b44e82
web,data: stop MeshCore chat text from minting or reviving nodes ( #883 ) ( #912 )
2026-10-04 16:41:58 +02:00
Afri
a59bd33e02
data,web: honor channel filters on every packet and the node list; add DROP_VIA_MQTT ( #784 , #884 ) ( #913 )
2026-10-04 16:39:17 +02:00
Afri
816ae1c1d1
matrix: add crates.io package metadata ( #879 ) ( #911 )
2026-10-04 16:34:23 +02:00
Afri
44fab19bf3
data: listen on both Meshtastic UDP multicast groups by default ( #903 ) ( #909 )
2026-10-04 15:51:58 +02:00
Afri
58ca8350c5
web: keep the mobile channel select alive across live refreshes ( #882 ) ( #910 )
2026-10-04 15:39:59 +02:00
Afri
c83ca0c301
data,docs: pipe MESHCORE_TELEMETRY_POLL_24H_EXEMPT through every deployment ( #908 )
2026-10-04 15:38:58 +02:00
Afri
c831e86bfe
docker,docs: resync the root Dockerfile and add a security policy ( #907 )
2026-10-04 15:18:55 +02:00
Nic Jansma
0c81dbe073
Add MESHCORE_TELEMETRY_POLL_24H_EXEMPT cooldown exemption for contact telemetry ( #905 )
2026-09-07 08:18:52 +02:00
l5y
3d89366e89
docs: trim operator docs to instructions, close doc/behavior drift ( #904 )
...
* docs: trim operator docs to instructions, close doc/behavior drift
* docs: strip em-dashes and bold from operator docs; trim changelog
2026-09-06 13:04:20 +02:00
l5y
deaf89b1bd
web: fix SSRF guard bypass via IPv6 transition addresses ( #902 )
2026-09-01 10:26:28 +02:00
l5y
39e5d01d26
data,web: Reticulum finalization — radio metadata, chat tags, federation zeros ( #900 )
...
* data,web: Reticulum finalization — radio metadata, chat tags, federation zeros
* web: purge destinations with their nodes
2026-08-31 12:01:36 +02:00
l5y
d61cca93c0
web: reticulum aspects, identity groups, identity page, honest detail views ( #899 )
...
* web: reticulum aspects, identity groups, identity page, honest detail views
* web,data: fix staging findings, naming, row controls, transport gate
* web,data: fix Reticulum naming, row controls, and the transport gate
* web,data: fix Reticulum naming, row controls, and the transport gate
* web: cover the identity-group wiring and destination fetchers
2026-08-29 17:13:35 +02:00
Edwin Knuth
7fdbd94502
docs: correct .env.example's reticulum node id derivation (RE8) ( #898 )
...
.env.example still described the #896 model: the ingestor owning an RNS
identity and deriving its !xxxxxxxx from "the transport identity already
in RETICULUM_CONFIG_DIR". #897 shipped the opposite. RE8 excludes the
transport identity from the pick, because RNS generates it as an
independent keypair that matches none of the operator's announced
destinations; the id is the discovered primary identity, the one
announcing the most destinations on the machine. README says this
correctly and .env.example contradicted it, pointing operators at the
hash rnstatus prints as "Transport Instance".
The strands-the-old-row caveat #897 added to README and CHANGELOG is
carried over too, since .env.example is where an operator is standing
when they set the variable that moves the id.
Two guards in the deployment-surface class, both negative-tested against
main, where they correctly fail.
pytest 1443 passed; black clean.
2026-08-28 22:23:27 +02:00
l5y
96e0dbfd05
data,web: key Reticulum nodes on identity; discover host aspects ( #897 )
...
* data,web: key Reticulum nodes on destinations; fix e2e field findings (#888 )
* data,web: key Reticulum nodes on identity; discover host aspects
* data,web: restore announced names and interfaces on host destinations
* data,web,docs: fix review findings on identity-keyed Reticulum nodes
2026-08-28 21:11:31 +02:00
Edwin Knuth
dc0679234f
data: derive the Reticulum ingestor's own node id; scope CONNECTION out ( #888 ) ( #896 )
...
Answers the two questions left open on #888 after #893 .
INGESTOR_NODE_ID was required for PROTOCOL=reticulum because a passive
announce listener has no handshake revealing "our" node id. The premise
holds; the conclusion did not follow. The ingestor now owns an RNS
identity, generated on first run and stored 0600 as potato_mesh_identity
inside the app-owned RETICULUM_CONFIG_DIR, and derives its !xxxxxxxx
through the same identity-hash mapping applied to every peer, so its own
row is shaped like any other Reticulum row. A plain PROTOCOL=reticulum
deployment brings up the heartbeat, and so the reticulum packets/hour
scope, unaided; the variable still overrides, which also means no key is
generated for a deployment that does not need one. The identity is local
and never announced, so nothing new transmits. Persist-or-nothing is
deliberate: an unstorable identity would be regenerated per start and
each generation is a different node id, filing one orphan ingestor row
per restart, so the provider reports no id and warns instead. An existing
but unreadable key file is never overwritten. The startup warning #890
emitted for an unset INGESTOR_NODE_ID is removed.
CONNECTION and RETICULUM_CONFIG_DIR/RETICULUM_INTERFACES are disjoint
rather than in conflict: CONNECTION names one serial, TCP, or BLE
endpoint and an RNS stack has no such thing, which is why connect() has
always ignored it. What was wrong was the silence, since the image sets a
serial default for every protocol. connect() now says once at info that
the value is dropped and names the two variables that do apply. The image
default stays: removing it would change how meshtastic and meshcore
containers resolve their port, and a Reticulum follow-up is the wrong
change to carry that.
SPEC RN9/RN10, ACCEPTANCE RN-A9/RN-A10; CONTRACTS, README and
.env.example reconciled. 100% line and branch coverage on the provider;
pytest 1442 passed, rspec 1717 examples 0 failures.
2026-08-28 10:16:56 +02:00
l5y
5294261892
web: add reticulum frontend support ( #894 )
...
* web: add reticulum frontend support
* docs: update readme
* web: address ui review comments
2026-08-27 12:15:05 +02:00
l5y
4b586316ae
fix reticulum protocol loose ends from #888 review ( #893 )
...
* fix reticulum protocol loose ends from #888 review
* data: fix quoted Compose defaults blacking out every channel
* data,web: fix four defects found reviewing this PR
2026-08-27 08:04:08 +02:00
Edwin Knuth and oregonknuths
a25140ee57
Add Reticulum announce ingestor provider ( #888 ) ( #890 )
...
Co-authored-by: oregonknuths <159513803+oregonknuths@users.noreply.github.com >
2026-08-24 21:41:16 +02:00
Edwin Knuth and oregonknuths
ace03b6807
Add Reticulum protocol support to the web tier ( #888 ) ( #889 )
...
Co-authored-by: oregonknuths <159513803+oregonknuths@users.noreply.github.com >
2026-08-24 21:34:39 +02:00
l5y
40dfa14dfa
chore: release 0.7.5 ( #892 )
...
* chore: release 0.7.5
* app: raise iOS deployment target to 15.0; stop mobile CI failing fast
v0.7.5
2026-08-24 19:48:29 +02:00
l5y
24a9226df4
data: gate every ingestor transmission behind TX_ENABLED/TX_ANNOUNCE ( #891 )
2026-08-24 17:18:19 +02:00
seybsen
376320b2e2
Make the activity announcement opt-in via ANNOUNCE (default off) ( #886 )
...
The periodic activity announcement was gated only by RX_ONLY, which
defaults to off, so a stock ingestor deployed to feed a map starts
broadcasting on its community's default channel without the operator
having chosen to. The only opt-out, RX_ONLY=1, also silences the
MeshCore telemetry polls, so "ingest but stay quiet" was not expressible.
Add an ANNOUNCE boolean (default 0) as an opt-in gate on top of RX_ONLY,
which keeps its meaning as the global TX kill switch and overrides
ANNOUNCE=1. Amend SPEC MA7 (which had explicitly ruled out a separate
enable env) and MA-A7 with the reasoning, document both flags in the
README env table — the RX_ONLY row did not mention the announcement at
all — and add gate unit tests for all four combinations plus the
missing-attribute fail-closed path.
2026-08-24 12:29:04 +02:00
l5y
f43270d351
web: fix waypoints shipped-review audit findings ( #878 )
v0.7.4
2026-07-30 21:58:43 +02:00
l5y
179cc5c198
web: LCP critical-path refinements (icon caching, preconnect, chat-tabs reflow) ( #877 )
2026-07-30 19:48:50 +02:00
l5y
882bbc4d97
web: bump sqlite3 to 2.9.5 for use-after-free advisory ( #876 )
2026-07-30 09:50:48 +02:00
l5y
0b93eb8169
web,docker: bake git APP_VERSION into image for immutable asset caching ( #875 )
...
* web,docker: bake git APP_VERSION into image for immutable asset caching
* web,docker: bake git version + uniform v-prefixed APP_VERSION
2026-07-29 18:59:26 +02:00
l5y
a676a2997e
data,web: Meshtastic waypoints as a first-class POI layer ( #874 )
...
* data,web: Meshtastic waypoints as a first-class POI layer
* web: re-roll waypoint UI to signed-off variants + node-page section
* web: reconcile stats-pushdown plan spec with the five-table W9 umbrella
* web: legend waypoint sample follows the 1c-B teardrop marker
2026-07-29 18:22:08 +02:00
l5y
ad1dd5843b
perf(web): index-seek /api/stats telemetry umbrella to end GVL stall ( #873 )
2026-07-29 13:20:16 +02:00
l5y
f6945e5a08
web: immutable cache-control for versioned assets + configurable stats TTL ( #868 )
...
* web: immutable cache-control for versioned assets + configurable stats TTL
* web: address #868 review — git-gate immutable, scope to JS/CSS
* fix(spec): make the asset Cache-Control test mode-aware
2026-07-29 00:20:25 +02:00
l5y
4fb11d237c
web: cap the node table render to the top N with a show all control ( #869 )
...
* web: cap the node table render to the top N with a show all control
* web: address #869 review — style the show-all control, fix hover, re-arm cap
2026-07-28 22:36:57 +02:00
l5y
c5bde6280b
docs: document reverse-proxy deployment, asset caching, and scaling ( #872 )
2026-07-28 21:57:00 +02:00
l5y
5d2790bb48
data: harden MeshCore subscribe against unknown EventType ( #867 )
2026-07-28 12:55:55 +02:00
l5y
d501aeb4eb
web: frontent performance fixes ( #864 )
...
* web: de-jank cold-load backfill + scope module preload to the view
* web: defer Leaflet, lazy-load node overlay, skip data pipeline off-dashboard
* web: address review of frontend-perf fix
2026-07-28 09:15:14 +02:00
dependabot[bot]
63aa227784
build(deps): bump quinn-proto from 0.11.14 to 0.11.16 in /matrix ( #865 )
...
Bumps [quinn-proto](https://github.com/quinn-rs/quinn ) from 0.11.14 to 0.11.16.
- [Release notes](https://github.com/quinn-rs/quinn/releases )
- [Commits](https://github.com/quinn-rs/quinn/compare/quinn-proto-0.11.14...quinn-proto-0.11.16 )
---
updated-dependencies:
- dependency-name: quinn-proto
dependency-version: 0.11.16
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-27 22:03:20 +02:00
l5y
e0b9c22fab
chore: bump version to 0.7.4 ( #863 )
2026-07-27 17:06:12 +02:00
l5y
f0045c984f
matrix: tolerate compacted /api/messages rows ( #862 )
2026-07-27 15:55:30 +02:00
l5y
cd771c4eea
data: count every MeshCore RX-log frame; stamp position radio metadata ( #861 )
2026-07-27 11:21:16 +02:00
l5y
207150f235
web: mesh activity map card ( #860 )
...
* data,web: /api/stats packets rate as <scope>.packets.hour
* data,web: /api/stats packets as <scope>.packets.hour; total sums protocols
* web: mesh activity map card - packets/h total + per-protocol split
* web: /api/stats/activity bucketed packets/hour time-series
* web: mesh activity card draws the real 24h sparkline
* web: /charts mesh-activity figure, mobile card strip, legend-toggle fix
* web: mesh-activity design-review remediation
* web: /api/stats total sums rounded per-protocol rates + doc fixes
2026-07-26 20:59:26 +02:00
l5y
b52f3949e4
data,web: mesh activity reporting & announcements ( #859 )
2026-07-26 09:09:28 +02:00
l5y
86f49506ff
web: remediate frontend design & UX audit ( #855 )
...
* web: remediate frontend design & UX audit
* web: remediate design UX review follow-up
* web: remediate post-deploy design review (detail view, footer, marker recency)
* web: drop single-pass tag-strip in isReportedField
* web: legend shape key + pressed state + chat overflow
2026-07-25 22:06:59 +02:00
l5y
8d25dd42cd
fix(docker): bump ingestor base to python 3.12.10 for cryptography's Rust MSRV ( #858 )
2026-07-25 19:34:22 +02:00
l5y
b013faf13d
web,data: reconcile MeshCore stale same-name node duplicates ( #857 )
...
* web,data: reconcile MeshCore stale same-name node duplicates
* data: MeshCore roster sync must not warm last_heard
v0.7.3
2026-07-24 23:25:48 +02:00
l5y
8b095669cf
web: stack HOT over CARTO basemap layers, drop per-tile timeout ( #856 )
2026-07-24 22:06:37 +02:00
l5y
3d43061fff
web: live relative-time tick - last-seen/updated ages count up in place ( #851 )
2026-07-23 12:03:13 +02:00