Skip to content

⭐ TOP PRIORITY post-v1: per-timer Tune page — live node RSSI + enter/exit calibration from the RD console #355

Description

@ryan-johnson2

User decision 2026-07-04: first priority after the v1 cut. Until then, calibration happens on the timer (RotorHazard's own UI).

What

An RH-style tuning surface in the RD console, per timer, in the Timers menu: live per-node RSSI with the node's current enter/exit levels drawn as draggable lines, and an explicit Apply that writes calibration back to the timer.

Design commitments (from the design discussion)

  • Capability-gated, never timer-kind-gated: the Tune view appears only for timers whose plugin handshake advertises live-signal + calibrate capabilities (extends the existing PluginPresence.capabilities). A future LapRF adapter reporting the same capabilities gets the page for free; Mock offers nothing.
  • Tuning telemetry is EPHEMERAL, not evidence: bench/idle tuning streams must never touch the event log (race-time RSSI is logged because it backs results; tuning noise would bloat every event). On-demand plugin stream (subscribe on view open, stop on close) → in-memory per-timer state in the Director → live read/stream endpoint → console. The practice-board live-laps pattern is the precedent.
  • Preview-then-commit: dragging adjusts locally; per-node Apply sends gridfpv_calibrate {node, enter, exit} via the plugin (RHAPI alter; RH persists its own config). No streaming writes on drag.
  • Safety rail: Apply blocked while a heat is Running (mid-race detector changes are a results-integrity hazard); tune during practice/idle.
  • Labels: "Node N · ‹frequency›" honestly; resolve to the seated pilot's callsign when the active event has a heat staged (friendly-names rule).
  • Same visual language as the marshaling RSSI graph (reuse the threshold-handle interaction shipped in Marshaling: live enter/exit re-detection with manual commit #348/Marshaling: no rulings before commit — kill click-to-insert; unified re-detection preview #354).

Building blocks already in place

  • Plugin handshake + capability list + versioned guided-install machinery (D16/S1) — a protocol/capability bump rides the existing skew handling.
  • gridfpv_calibrate write-back was designed in the plugin spike (docs/rotorhazard-plugin.html) and prototyped in the overnight S4 work ("staged for review", never merged).
  • Threshold-handle drag UX shipped in the marshaling tune panel.

The compounding follow-up

Once this exists, add "push these levels to the timer" on the marshaling tune panel — post-hoc discovery (what levels would have detected this heat right) becomes forward calibration in one click. Explicitly out of scope for the first slice of this issue; file separately when this lands.

Related: #348 (threshold re-detection), #353 (full-audit model), D16 (plugin direction).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions