Skip to content

RS-11.5 leg C: RXCONT turnaround exonerated — software discriminator space closed - #93

Merged
dorkmo merged 1 commit into
mainfrom
rs115-turnaround-discriminator
Aug 2, 2026
Merged

RS-11.5 leg C: RXCONT turnaround exonerated — software discriminator space closed#93
dorkmo merged 1 commit into
mainfrom
rs115-turnaround-discriminator

Conversation

@dorkmo

@dorkmo dorkmo commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Continues the RS-11.5 diagnosis from PR #92 with the last host-side discriminator.

The experiment

New diagnostic gate LIFETRAC_RXCONT_ARM (daemon env + harness -RxcontArm, production default 1, unchanged): setting 0 disables all RXCONT arming, so the firmware's RS-4.12 re-arm chain never starts and the tractor radio sits in STANDBY between fragments — no TX→RXCONT→TX turnaround cycling at all. The code comment and TODO both carry the warning: never ship 0 — in-stream command delivery lives in those inter-fragment listening gaps, and inter-train-only delivery would blow the 700 ms hydraulic-control latency budget.

The result

One 300 s probe-bracketed run at the pinned operating point (archive committed):

leg RXCONT cycling ΔCRC errors idx-11 spike
A/B (PR #92) on +75 / +80 23/82, 21/79
C (this PR) off +62 22/66

Unchanged. The turnaround hypothesis is refuted, and with it the software-layer candidate space is closed: TX skips, host command TX, RX re-arm at train start, prepare-ahead, host-side drops, in-train cumulative, and now RXCONT cycling are all eliminated by direct measurement.

Where this leaves the diagnosis

11–18% of trains lose per-frame slot total−2 to on-air CRC corruption whose cause is physical/silicon-level: either the TX chain radiates corrupt bits for a reason invisible to the C-code guards (FIFO/PLL/PA behaviour), or deterministic self-EMI at the tractor. The next discriminators need a flash session (post-TX FIFO readback CRC at slot total−2, measured TX duration in RFCO_PERTX, IRQ-flag capture) — or an SDR capture of a corrupt slot, which would settle it without touching firmware.

Also recorded: the idle bench accumulates ambient false-demod CRC errors at ~4/h (the counter's noise floor; negligible against 62–80 per 300 s run).

Suite: 1103/2446 green (default-path behavior unchanged).

🤖 Generated with Claude Code

…are space closed

New diagnostic gate LIFETRAC_RXCONT_ARM (daemon env + harness
-RxcontArm, production default 1): 0 disables all RXCONT arming so the
firmware's RS-4.12 re-arm chain never starts and the radio sits in
STANDBY between fragments. NEVER ship 0 — in-stream command delivery
(99.8%) lives in those listening gaps and inter-train-only delivery
would blow the 700 ms control latency budget.

Leg C result (300 s @ 3000 B, probe-bracketed, archive committed): the
slot-(total-2) spike is UNCHANGED with no turnaround cycling (idx11
22/66 attributed, CRC delta +62 vs +75/+80 in legs A/B). With this,
every software-layer candidate is eliminated; the corruption is
physical/silicon in the TX chain or deterministic self-EMI. Next
discriminators need a flash session (post-TX FIFO readback CRC,
measured TX duration in RFCO, IRQ-flag capture) or an SDR capture.

Also recorded: idle-bench ambient false-demod CRC floor ~4/h (negligible
vs 62-80 per 300 s run).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings August 2, 2026 14:43

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR completes the RS-11.5 host-side discriminator by adding a diagnostic gate to disable RXCONT arming on the tractor TX daemon (while keeping the production default behavior unchanged), and it records the resulting “leg C” evidence and conclusions in the design notes and bench-evidence bundle.

Changes:

  • Add LIFETRAC_RXCONT_ARM / -RxcontArm diagnostic toggle and wire it into the TX daemon’s RXCONT arming paths.
  • Update design TODO + RESULTS writeups to document leg C and the conclusion that the RXCONT turnaround hypothesis is refuted.
  • Commit an archived probe-bracketed run (logs + params) for leg C under bench-evidence/.

Reviewed changes

Copilot reviewed 5 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
LifeTrac-v25/DESIGN-CONTROLLER/TODO.md Updates RS-11.5 notes to include leg C results and next steps.
LifeTrac-v25/DESIGN-CONTROLLER/firmware/x8_lora_bootloader_helper/run_live_radio_monitor.ps1 Adds -RxcontArm parameter and passes LIFETRAC_RXCONT_ARM into the TX container.
LifeTrac-v25/DESIGN-CONTROLLER/firmware/tractor_x8/image_tx_daemon.py Adds LIFETRAC_RXCONT_ARM env gate to disable RXCONT arming/re-arming logic for diagnostics.
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/RS_11_4_train_length_sweep_2026-08-02/RESULTS.md Documents leg C methodology and conclusion; updates session verdict residuals accordingly.
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260802_094053_86bf5d7f/tx_daemon.log Adds archived TX daemon log for leg C evidence bundle.
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260802_094053_86bf5d7f/synth_pub.log Adds archived synthetic publisher log for leg C evidence bundle.
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260802_094053_86bf5d7f/rx_daemon.log Adds archived RX daemon log for leg C evidence bundle.
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260802_094053_86bf5d7f/params.txt Adds archived run parameters for leg C evidence bundle.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.


Write-Host "[LAUNCH] Starting TX Daemon on Board $TxAdbSerial (mqtt=$txMqtt, depth=$TxPipelineDepth)..." -ForegroundColor Yellow
cmd /c "`"$adbExe`" -s $TxAdbSerial shell `"echo fio | sudo -S -p '' docker rm -f tx_smoke 2>/dev/null ; echo fio | sudo -S -p '' docker run -d --name tx_smoke --network=host --entrypoint python3 --device=/dev/ttymxc3 -v /tmp/lifetrac_strict:/work -w /work -e PYTHONPATH=/work:/work/paho -e LIFETRAC_MQTT_HOST=$txMqtt -e LIFETRAC_SKIP_RESET_REQ=1 $profEnv -e LIFETRAC_TX_PIPELINE=$TxPipeline -e LIFETRAC_TX_PIPELINE_DEPTH=$TxPipelineDepth -e LIFETRAC_TX_BATCH=$TxBatch -e LIFETRAC_TX_PREPARE_AHEAD=$TxPrepareAhead -e LIFETRAC_TRAIN_GAP_MS=$TrainGapMs -e LIFETRAC_PARITY_GROUP=$ParityGroup -e LIFETRAC_ACK_COPIES=$AckCopies -e LIFETRAC_PROBE_ECHO=$ProbeEcho hub.foundries.io/arduino/arduino-ootb-python-devel:738bc44 -u /work/image_tx_daemon.py --log-level INFO`""
cmd /c "`"$adbExe`" -s $TxAdbSerial shell `"echo fio | sudo -S -p '' docker rm -f tx_smoke 2>/dev/null ; echo fio | sudo -S -p '' docker run -d --name tx_smoke --network=host --entrypoint python3 --device=/dev/ttymxc3 -v /tmp/lifetrac_strict:/work -w /work -e PYTHONPATH=/work:/work/paho -e LIFETRAC_MQTT_HOST=$txMqtt -e LIFETRAC_SKIP_RESET_REQ=1 $profEnv -e LIFETRAC_TX_PIPELINE=$TxPipeline -e LIFETRAC_TX_PIPELINE_DEPTH=$TxPipelineDepth -e LIFETRAC_TX_BATCH=$TxBatch -e LIFETRAC_TX_PREPARE_AHEAD=$TxPrepareAhead -e LIFETRAC_TRAIN_GAP_MS=$TrainGapMs -e LIFETRAC_PARITY_GROUP=$ParityGroup -e LIFETRAC_ACK_COPIES=$AckCopies -e LIFETRAC_PROBE_ECHO=$ProbeEcho -e LIFETRAC_RXCONT_ARM=$RxcontArm hub.foundries.io/arduino/arduino-ootb-python-devel:738bc44 -u /work/image_tx_daemon.py --log-level INFO`""
@dorkmo

dorkmo commented Aug 2, 2026

Copy link
Copy Markdown
Contributor Author

The params.txt audit-trail catch is valid and is fixed on the stacked PR #94 branch (which contains this PR's commits) — rxcont_arm and tx_power_dbm are now recorded in every archive bundle. Merging this PR first, then #94 lands the fix on main minutes later.

dorkmo added a commit that referenced this pull request Aug 2, 2026
…dation, power clamp

Copilot findings, all valid:
- Archived params.txt now records rxcont_arm and tx_power_dbm (the two
  new run-affecting knobs were invisible in evidence bundles — the
  PR #93 catch, applied here on the stacked branch).
- -RxcontArm gets [ValidateSet(0,1)] — any non-1 int silently disabled
  RXCONT (the daemon checks == "1").
- LIFETRAC_TX_POWER_DBM is range-checked host-side to 2..17 before the
  wire: a negative value wrapped via & 0xFF to 255, which the firmware
  normalizes DOWN to 17 dBm — junk input could silently RAISE power.
  Out-of-range now warns and leaves the profile default.

Suite 1103/2446 green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@dorkmo
dorkmo merged commit e03b314 into main Aug 2, 2026
11 of 23 checks passed
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