Repository navigation
Description
Component: app
Supersedes #480: its regions scope moves in here, joined by the owner ask and the scheduling.
Problem
A simple_repeater answers three anonymous request kinds without a login: regions, owner info, clock. One shared bucket, 4 answers per 180 s (anon_limiter, examples/simple_repeater/MyMesh.cpp:868). Every answer is a zero-hop transmission from that repeater: a real measurement at our position, plus metadata we cannot get any other way.
Autoping never touches that bucket. A cycle is a Discover broadcast plus trace-pings, to the selected targets or to the sweep (#484). The regions ask was specified in #480. Its scheduling lived in #479, which closed with the sweep built and the anon rotation unbuilt. The owner ask was never specified anywhere.
Expected
The probe (from #480, unchanged): port regionreq.js from efiten/coredrive-rx, which runs this in the field. Framing [57][pubkey:32][0x01][reply_path_len], the contact-path force-to-direct dance with restore on failure, NUL-padding trim, truncation flag at >= 139 bytes. The reply carries the repeater clock plus the region CSV, so regions and clock are one ask.
The owner ask: same anon bucket, its own request type. Byte layout verified against MeshCore firmware before building, per AGENTS.md §7. coredrive-rx is the first place to look.
Scheduling: fold anon asks into the autoping rotation. The trace-ping stays every cycle. An anon ask fires at most once per 60 s per target: the bucket refills at 4 per 180 s, and asking faster is refused airtime. The sweep stays trace-only: anon asks go to selected targets, where the answer has a reader.
Storage: answers stored per node, as #480 specified. Rendering and publishing stay out; the consumers are #375 and #554.
Acceptance
- Unit tests on framing and parser, including a NUL-padded payload and a CSV at the truncation floor.
- The out-path override is restored after the ask, on the failure path too.
- A request is only built for a full 64-hex pubkey.
- The rotation never exceeds one anon ask per 60 s per target, and the trace cadence is unchanged.
- Autoping off means nothing transmits, exactly as today.
Related
- app: a repeater answers an anonymous regions request without a login, out of a bucket we never touch #480: superseded by this issue.
- app: autoping sends one kind of probe, so most of what a repeater will answer is never asked for #479: closed; the sweep half landed as feat(app): sweep the repeaters you can hear when no target is picked #484, the anon half re-lands here.
- app: a trace reply carries the SNR that node heard us at, and we drop it #482: the SNR inside a trace reply, adjacent but separate.
- spike: a repeater regions request alongside the Discover ping #411: the research that established the regions ask.
Activity
feat(app): ask a selected repeater for its regions, owner and clock (e…
feat(app): publish to several MQTT brokers, with a page to manage them (