HOSTILE-BUT-LEGAL RF TESTING

RF Gauntlet

Every interferer in the chamber is 100% within its radio spec. Only the combination — and the duty cycle — is worst-case. An LLM conductor ramps the hostility per band until something breaks, and scores our devices as neighbors, not just survivors.

2.4 GHz — the war zone 5 GHz — Wi-Fi on Wi-Fi 6 GHz — wide-channel OBSS

A hostile-but-legal RF environment for connectivity testing.

Field connectivity failures almost never come from a single broken device. They come from density: thirty APs in an apartment building, a parking lot full of cars running phone-as-key, a conference hall of BLE beacons. Every interferer in this rig is 100% within its radio spec. Only the combination — and the duty cycle — is worst-case.

The goal is two-sided:

  1. Survivability — put our device (wearable + paired phone) in the middle of that and prove the link stays up.
  2. Citizenship — prove our device isn't contributing to the hell. Passive observers capture everything the DUT transmits and score it against docs/dut-citizenship.md. A device that holds its link by shouting over everyone else fails.

Principle

Architecture

                        +------------------+
                        |  LLM conductor   |  plans, executes, scores
                        +--------+---------+
                                 | control plane (HTTP/JSON-RPC)
        +------------------------+------------------------+
        |              RF chamber / quiet room             |
        |                                                  |
        |  [BR/EDR nodes]  [BLE nodes]  [LE Audio] [Wi-Fi] |
        |  inquiry looper   adv spammers  Auracast  AP farm |
        |  page stormer     active scan   (BIS)     slow    |
        |  A2DP hog        conn saturator            client |
        |                  phone-key sim  [15.4]    probe   |
        |                  ext-adv spam    zigbee    stormer |
        |                                                  |
        |   DUT: wearable + paired phone                   |
        |   (behind programmable attenuator)               |
        +--------------------------------------------------+

The conductor never touches firmware. It drives node agents through the control plane: start/stop nodes, set parameters, set chamber path loss, sample DUT metrics, and render a verdict.

Repo map

Quickstart

  1. Build the fleet per docs/bom.md and flash node firmware.
  2. Place nodes in the chamber; DUT behind the programmable attenuator.
  3. Bring up the control plane: one HTTP agent per node + driver/orchestrator.py.
  4. Run the smoke scenario, then let the conductor escalate:
python driver/orchestrator.py --scenario scenarios/smoke.yaml

Safety