Skip to content

app,server,web: the noise floor the app measures never leaves the phone, so the map and its exports cannot show it #719

Description

@khagele

Component: app, server, web

Problem

The app measures the companion's noise floor per cell (#410, #698), and #708 (PR #711) shows the value in the cell and the HUD. The samples stay on the phone for 7 days. Nothing publishes them:

  • The site broker gets receptions only. The ingestor subscribes to meshcore/hunter/+/packets and nothing else (server/internal/config/config.go:54).
  • The wardrive track has no noise field. Its fields are v, origin_id, t0, t1, lat, lon, accuracy, rx_count, listening, src (AGENTS.md:755, app/src/wardrive.js:106).

So the map has no noise layer, and an export (#665) cannot say whether a stretch without a repeater was out of reach or drowned in noise, the question behind #277. The map can only estimate noise from each reception's RSSI and SNR. That estimate is untested: on the export of 7 September 2026 it puts 52 of 174 cells where a repeater was not heard in the loudest band (≥ -101 dBm).

Expected behaviour

Every noise sample the app takes reaches the server, tied to the companion that measured it (rx_pubkey), like a reception. The web map gets a noise layer over all hunters' samples, in the app's bands (NOISE_BANDS, app/src/noise.js:98). Exports read from that layer. The wardrive track carries the noise of its interval.

Acceptance criteria

  1. The app publishes each noise sample to the brokers it sends receptions to, with its own watermark, so a backlog goes out like receptions do (app: capture drops every reception it cannot name, throwing away the measurement with the identity #454).
  2. The ingestor stores the samples. A read API returns the median per cell for a bbox and a time window, with the rule of noiseCells: a parked session counts once per cell. Same role rules as /api/points.
  3. The web map has a noise layer in the app's bands.
  4. The wardrive track gets noise: the median of the samples in its interval, left out when there are none. AGENTS.md §9 lists the new field.
  5. Unit tests for the payload, the per-cell median and the track field; an e2e test for the web layer. Each new test is mutation-checked.

Not in this issue

Related

#277, #410, #698, #708, #665.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions