Skip to content

docs(plan): add HITL test harness plan#128

Draft
ringof wants to merge 3 commits into
mainfrom
claude/plan-radio-test-harness-uLJlg
Draft

docs(plan): add HITL test harness plan#128
ringof wants to merge 3 commits into
mainfrom
claude/plan-radio-test-harness-uLJlg

Conversation

@ringof

@ringof ringof commented May 17, 2026

Copy link
Copy Markdown
Owner

Summary

Adds PLAN.md — a phased plan for a Hardware-in-the-Loop (HITL) test harness that catches firmware-induced regressions to the RX888 RF chain without requiring a live operator test for every change.

The bench is nearly all USB-in / USB-out: a QRP Labs QDX transmits via its built-in WSPR beacon, fixed attenuators connect to the RX888 RF input, and both devices are USB to a docker host already running ka9q-radio and wsprdaemon.

The plan ladders four phases, ordered to ship a weak gate fast and let trust accrue before per-PR enforcement lands:

Phase Deliverable Gates on
1 Operator-run HITLtest, decode-or-not via QDX built-in WSPR beacon nothing yet
1.5 Passive SNR CSV logging nothing
2 SNR-delta gate vs. empirical baseline operator pre-tag
3 CW tone + radiod status-multicast reader + self-hosted GH runner every PR touching firmware
4 (deferred) FT8, MDS sweep, IQ-domain metrics unscoped

This PR is documentation only — no code, no container changes, no workflow YAML.

Test plan

  • Confirm PLAN.md renders on GitHub (tables in §3, ASCII topology in §2)
  • Confirm the four-phase ladder reflects the agreed direction
  • Confirm §9 (open items / risks) calls out wsprdaemon log path, QDX beacon timing, and baseline drift
  • git diff --stat main..HEAD shows only PLAN.md added — nothing else changed

https://claude.ai/code/session_01SAUYC8th4ENSgP76LYfEg8


Generated by Claude Code

claude added 2 commits May 17, 2026 17:57
Phased plan for a hardware-in-the-loop regression harness covering
the RX888 RF chain end-to-end (QDX TX over fixed attenuators into
RX888 RX, USB to a docker host running ka9q-radio + wsprdaemon).
Ladders four phases from operator-run decode/no-decode through
SNR-delta gating to a CW-tone + self-hosted CI runner gate, so trust
in the harness is built progressively before per-PR enforcement
lands.

https://claude.ai/code/session_01SAUYC8th4ENSgP76LYfEg8
Captures the decision point if the HITL bench is ever shared across
sibling repos: org-level runner group with restricted access,
host-side flock plus single-runner invariant to serialize across
repos (since Actions concurrency groups don't span repositories),
trust-surface tightening, and a repository_dispatch carve-out for
public-repo sharing. Flags the two moments to revisit.

https://claude.ai/code/session_01SAUYC8th4ENSgP76LYfEg8
Two corrections folded in: the QDX is not a standalone beacon
(unlike the U3S) so Phase 1 must include the audio + CAT plumbing,
not just CAT; and the plan is rewritten to ~1030 words / 3 pages.
Once the Phase 1 audio path lands, every WSJT-family mode is roughly
a free addition, so CW (Phase 1.7) and FT8 (Phase 1.8) slot in
cheaply. The CW-tone gate moves out of Phase 3 and into Phase 1.7
as a degenerate case of the same harness. Multi-repo bench wiring
folded into Phase 3's paragraph rather than its own subsection.

https://claude.ai/code/session_01SAUYC8th4ENSgP76LYfEg8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants