Add bidirectional RF handoff coordination
This commit is contained in:
@@ -1,76 +1,83 @@
|
||||
# RX watcher usage
|
||||
|
||||
## START
|
||||
## Start
|
||||
|
||||
On the RX laptop, pull `video-development`, install the project's normal Python dependencies, then double-click:
|
||||
On the RX laptop, pull video-development and double-click:
|
||||
|
||||
```text
|
||||
tools\start_rx_watcher.cmd
|
||||
```
|
||||
tools\start_rx_watcher.cmd
|
||||
|
||||
The watcher stays in a visible console and polls `origin/video-development` every 30 seconds. The interval is configurable with `--poll-interval`. It does not start ChatGPT, Codex or another agent.
|
||||
The watcher stays in a visible console and polls origin/video-development every 30 seconds. It does not start ChatGPT, Codex or another agent.
|
||||
|
||||
## IDLE
|
||||
## Idle
|
||||
|
||||
While no new `TASK_ID` exists, the watcher performs only `git fetch`, reads the remote task file and compares IDs with `.local/rx_agent_state.json`. There is no model execution or token use.
|
||||
While no new TASK_ID exists, the watcher performs only git fetch, reads the remote task file and compares IDs with .local/rx_agent_state.json. There is no model execution or token use.
|
||||
|
||||
## NEW TASK
|
||||
## New task
|
||||
|
||||
The console shows:
|
||||
|
||||
```text
|
||||
NEW TASK DETECTED
|
||||
NEW TASK DETECTED
|
||||
|
||||
TASK ID =
|
||||
TITLE =
|
||||
SAFETY LEVEL =
|
||||
HARDWARE ACCESS =
|
||||
RF RX =
|
||||
RF TX =
|
||||
```
|
||||
TASK ID =
|
||||
TITLE =
|
||||
SAFETY LEVEL =
|
||||
HARDWARE ACCESS =
|
||||
RF RX =
|
||||
RF TX =
|
||||
|
||||
Choose `[A] Approve`, `[D] Defer` or `[S] Stop watcher`. An RF TX task also requires the exact separate phrase `AUTHORIZE RF TX`; another RED task requires `AUTHORIZE <TASK_ID>`. This only opens the executor gate; the first version's `ManualExecutor` still performs no RF action and starts no model.
|
||||
Choose [A] Approve, [D] Defer or [S] Stop watcher. RF TX also requires the exact phrase AUTHORIZE RF TX. Another RED action requires AUTHORIZE <TASK_ID>.
|
||||
|
||||
## APPROVE
|
||||
## Approve and execute
|
||||
|
||||
After approval, open:
|
||||
|
||||
```text
|
||||
.local\rx_agent_outbox\<TASK_ID>\TASK.md
|
||||
```
|
||||
.local\rx_agent_outbox\<TASK_ID>\TASK.md
|
||||
|
||||
Transfer that prepared task to the chosen agent manually. Fill the adjacent `RX_RESULT.md` and `RX_RESULT.json` with measured results. When work is actually complete, run:
|
||||
Transfer that prepared task to the chosen executor. The watcher records last_approved_task_id, which is required for result publication. Preparing the outbox is not evidence that the hardware task ran.
|
||||
|
||||
```powershell
|
||||
python -B tools/rx_agent_watcher.py --mark-completed <TASK_ID>
|
||||
```
|
||||
When the task is actually complete, run:
|
||||
|
||||
Do not claim completion merely because the prompt was prepared.
|
||||
python -B tools/rx_agent_watcher.py --mark-completed <TASK_ID>
|
||||
|
||||
## DONE and result publication
|
||||
## Publish READY
|
||||
|
||||
If the task says `ALLOW_PUSH = RX_RESULT_ONLY` and the user separately authorizes publication, publish only small result Markdown/JSON and log metadata to `rx-node`. Never commit or push from the RX laptop to `video-development`. Do not put raw IQ, video or waveform files in Git.
|
||||
For RF001A_OTA_CAPTURE_002, create the strict READY JSON outside Git only after the capture child is alive and the file is growing. Then run:
|
||||
|
||||
## STOP
|
||||
python -B tools/rx_agent_watcher.py --publish-result <ready-json-path> --result-branch rx-node
|
||||
|
||||
On success, the watcher prints RX RESULT PUBLISH = PUBLISHED or UNCHANGED, the result commit, and RF TX = 0.
|
||||
|
||||
The command fails if:
|
||||
|
||||
- the task was not approved locally;
|
||||
- the TASK_ID differs;
|
||||
- source_head differs from the checkout HEAD;
|
||||
- origin/rx-node does not exist;
|
||||
- the schema is invalid;
|
||||
- Git commit or push fails.
|
||||
|
||||
A failed publication is not READY evidence and cannot authorize TX.
|
||||
|
||||
## Publish COMPLETE
|
||||
|
||||
After capture completion, build the strict final JSON with state CAPTURE_COMPLETE and publish it with the same command:
|
||||
|
||||
python -B tools/rx_agent_watcher.py --publish-result <final-json-path> --result-branch rx-node
|
||||
|
||||
Only the two fixed result files are committed. Raw IQ, video, waveform, stdout, stderr and large logs stay outside Git.
|
||||
|
||||
## Stop
|
||||
|
||||
Double-click:
|
||||
|
||||
```text
|
||||
tools\stop_rx_watcher.cmd
|
||||
```
|
||||
tools\stop_rx_watcher.cmd
|
||||
|
||||
The script creates a local stop request and waits for the watcher PID to clear. The approval prompt is interruptible on Windows, and the polling delay checks the stop request every 0.1 seconds. A successful stop prints `WATCHER STOPPED`; no polling process remains.
|
||||
The script creates a local stop request and waits for the watcher PID to clear. A successful stop prints WATCHER STOPPED.
|
||||
|
||||
## DRY RUN
|
||||
## Dry run
|
||||
|
||||
From the repository root:
|
||||
|
||||
```powershell
|
||||
python -B tools/rx_agent_watcher.py --dry-run --once --approval approve --task-file tests/fixtures/watcher_test_task.md
|
||||
```
|
||||
python -B tools/rx_agent_watcher.py --dry-run --once --approval approve --task-file tests/fixtures/watcher_test_task.md
|
||||
|
||||
Expected behavior: the fake task is detected, approved and written under `.local/rx_agent_outbox/WATCHER_TEST_001/`. No Git fetch, SDR access, agent call, RF RX/TX, commit or push occurs. Delete `.local/` at any time if the local state and outbox are no longer needed.
|
||||
|
||||
## Executor availability
|
||||
|
||||
Version 1 always provides `ManualExecutor`. Before adding or selecting a Codex backend on RX, run `Get-Command codex` on that laptop and verify a harmless local invocation. Do not infer RX availability from the main PC.
|
||||
The fake task is written under .local/rx_agent_outbox/WATCHER_TEST_001/. No Git fetch, SDR access, agent call, RF RX, RF TX, commit or push occurs.
|
||||
|
||||
Reference in New Issue
Block a user