Skip to content

RS-11.4 closed: in-train gradient gone under smooth pacing; boundary event is the new loss lead - #92

Merged
dorkmo merged 4 commits into
mainfrom
rs114-train-length-sweep
Aug 2, 2026
Merged

RS-11.4 closed: in-train gradient gone under smooth pacing; boundary event is the new loss lead#92
dorkmo merged 4 commits into
mainfrom
rs114-train-length-sweep

Conversation

@dorkmo

@dorkmo dorkmo commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Evidence-only PR closing RS-11.4 with the prescribed train-length sweep (SynthBudgetB 3000/1500/750 → 13/7/4 fragments per train, n=2, pinned operating point, all six -Archive bundles committed). Full analysis: bench-evidence/RS_11_4_train_length_sweep_2026-08-02/RESULTS.md.

The three findings

  1. The original question is moot. The D1 cumulative-with-index gradient (67 in-train losses, indices 8–11 taking 55%) does not reproduce under smooth pacing — in-train attributed loss collapsed to 2–8 per run (~0.15%) with no gradient at any train length. The mechanism was the AirtimeBudget token bucket (the index-10-notch family), fixed when smooth pacing shipped 2026-07-30, the day after RS-11.4 was opened.

  2. The dominant remaining loss is a per-train-boundary event, and it's bigger than the old floor. Raw fragment loss scales inversely with train length — 4.9% at 13-frag → 10% at 4-frag — with a near-constant ~0.20–0.25 events per boundary costing ~1.3–1.8 fragments each, timing out 23–34% of all trains (published + timeouts ≈ trains in every run). This is now the single largest known throughput lever.

  3. Instrument gap caught by the standing reconcile rule: lost_frag_idx attributes 2–8 losses against raw deltas of 118–190 — it never attributes fragments of trains that time out, so every prior per-index claim (including the F4 gate answer) described only completing trains.

Also recorded: the retained 0x63 encode-mode pending-ack retries radiate forever (~1/18 s) on synth benches where nothing acks — bench artifact plus a real bounded-retry robustness item.

Follow-up opened (RS-11.5)

Host-side: (1) attribute timed-out trains' missing indices before eviction, restoring the reconcile invariant; (2) re-run one 13-frag + one 4-frag pair and read the per-index histogram of failed trains — mass at index 0–1 discriminates the RX re-arm race from TX-side teardown; (3) bound the 0x63 retries.

No code changes; CI does not run on these paths (evidence + TODO only).

🤖 Generated with Claude Code

…is the new lead

Train-length sweep (3000/1500/750 B, n=2, all six -Archive bundles
committed): the D1 cumulative-with-index gradient is not reproduced
under smooth pacing — the mechanism was the token bucket, fixed
2026-07-30. The dominant remaining loss is a per-train-boundary event
(~0.20-0.25/boundary, ~1.3-1.8 fragments each): raw loss scales
inversely with train length (4.9% at 13-frag -> 10% at 4-frag), timing
out 23-34% of trains.

Also surfaced: lost_frag_idx never attributes timed-out trains (2-8
attributed vs 118-190 raw — caught by the standing reconcile rule), so
every prior per-index claim described only completing trains; and the
retained 0x63 pending-ack retries radiate forever unacked (~1/18 s) on
synth benches. RS-11.5 opened: timeout attribution, then the index-0-vs-
tail discrimination of the boundary event, plus bounded 0x63 retries.

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

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.

🟡 Not ready to approve

The new evidence summaries in TODO/RESULTS contain a couple of statements that conflict with the committed log artifacts (notably bounded 0x63 retries and the “no third bucket” claim), so the documentation should be corrected for internal consistency.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Pull request overview

This PR documents and closes RS-11.4 by committing a prescribed train-length sweep’s evidence bundle(s) and summarizing the re-baselined findings, while opening RS-11.5 as the next investigation step.

Changes:

  • Mark RS-11.4 as closed in TODO.md with a summary of findings and create the RS-11.5 follow-up item.
  • Add the sweep write-up (RESULTS.md) describing the train-length scaling results and implications.
  • Commit the referenced radio_monitor_..._bb21b053 evidence artifacts (logs + params) for the six -Archive bundles.
File summaries
File Description
LifeTrac-v25/DESIGN-CONTROLLER/TODO.md Records RS-11.4 closure summary and opens RS-11.5 follow-up tasks.
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/RS_11_4_train_length_sweep_2026-08-02/RESULTS.md Captures the sweep analysis, tables, and conclusions for RS-11.4.
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260801_214147_bb21b053/synth_pub.log Evidence artifact for the 750B synth publisher run.
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260801_214147_bb21b053/params.txt Run parameters for the 750B evidence bundle.
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260801_213622_bb21b053/synth_pub.log Evidence artifact for the 750B synth publisher run (twin).
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260801_213622_bb21b053/params.txt Run parameters for the 750B evidence bundle (twin).
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260801_213057_bb21b053/tx_daemon.log Evidence artifact for the 1500B TX daemon run.
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260801_213057_bb21b053/synth_pub.log Evidence artifact for the 1500B synth publisher run.
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260801_213057_bb21b053/params.txt Run parameters for the 1500B evidence bundle.
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260801_212534_bb21b053/tx_daemon.log Evidence artifact for the 1500B TX daemon run (twin).
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260801_212534_bb21b053/synth_pub.log Evidence artifact for the 1500B synth publisher run (twin).
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260801_212534_bb21b053/params.txt Run parameters for the 1500B evidence bundle (twin).
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260801_212010_bb21b053/tx_daemon.log Evidence artifact for the 3000B TX daemon run.
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260801_212010_bb21b053/synth_pub.log Evidence artifact for the 3000B synth publisher run.
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260801_212010_bb21b053/rx_daemon.log Evidence artifact for the 3000B RX daemon run.
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260801_212010_bb21b053/params.txt Run parameters for the 3000B evidence bundle.
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260801_211446_bb21b053/tx_daemon.log Evidence artifact for the 3000B TX daemon run (twin).
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260801_211446_bb21b053/synth_pub.log Evidence artifact for the 3000B synth publisher run (twin).
LifeTrac-v25/DESIGN-CONTROLLER/bench-evidence/radio_monitor_20260801_211446_bb21b053/params.txt Run parameters for the 3000B evidence bundle (twin).
Review details
  • Files reviewed: 8/26 changed files
  • Comments generated: 3
  • Review effort level: Lite

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

Comment thread LifeTrac-v25/DESIGN-CONTROLLER/TODO.md Outdated
Comment on lines +2116 to +2117
completing trains; and the retained 0x63 pending-ack retries radiate
~1/18 s forever when nothing acks (bench artifact + robustness point).
Comment on lines +36 to +38
`published + timeouts ≈ trains` in every run (122+64≈190, 280+94≈382,
436+133≈569) — every train either completes or times out; there is no
third bucket. Loss events per boundary are near-constant at ~0.20–0.25
Comment on lines +58 to +61
- **17 × 0x63 (ENCODE_MODE) radiations in every run** — the retained
encode-mode override retries unacked for the whole session because the
synth feed has no camera_service to ack it (pending-ack machinery never
gives up; throttled to ~1/18 s). Each TX blinds the base's RX briefly:
…timate-locked

The "2-8 attributed vs 118-190 raw" instrument-gap claim was an ANALYSIS
error: lost_frag_idx logs are per-10s-window (histogram reset at
image_rx_daemon.py:1630), and the first parser read the last window as a
run cumulative. Summing windows: 68-143 attributed = 55-75% of raw.
Recorded per the corrections discipline.

The corrected per-index histograms answer RS-11.5's discrimination
outright: the loss is position-locked to the SECOND-TO-LAST fragment at
every train length (30%/50%/75% of attributed at 13/7/4-frag; index 0
near-baseline). TX_DONE accounting + the synth size mix rule out TX-side
skips; 17 command TXs/run rule out host-TX blinding arithmetically. The
remaining split (demodulated-but-dropped vs never-demodulated) gets the
rs115_stats_probe.py L072 counter readout, committed here.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@dorkmo

dorkmo commented Aug 2, 2026

Copy link
Copy Markdown
Contributor Author

Correction pushed (97b2b5f), per the corrections discipline: finding 3 ("instrument gap: 2–8 attributed vs 118–190 raw") was an analysis error in my parser, not an instrument defect — lost_frag_idx logs are per-10 s-window (histogram resets after each stats log), and I read the last window as a run cumulative. Summing windows, the instrument attributes 68–143 per run ≈ 55–75% of raw.

The corrected per-index histograms strengthen the headline finding and answer the RS-11.5 discrimination outright: the boundary event is position-locked to the second-to-last fragment of the train at every train length (30% / 50% / 75% of attributed loss at 13/7/4-frag; index 0 near-baseline). TX_DONE accounting plus the synth size mix rule out TX-side skips; 17 command TXs per run rule out host-TX blinding arithmetically. The L072 counter readout to split demodulated-but-dropped vs never-demodulated (rs115_stats_probe.py, committed) is running now; results will land in the RS-11.5 follow-up.

dorkmo and others added 2 commits August 1, 2026 22:19
…rruption

Probe-bracketed L072 counter split (two 300 s runs, prepare-ahead A/B):
dio0 = rx_ok + crc_err + tx_ok reconciles exactly in both legs — every
fragment reaches the base demodulator, and the lost ones arrive CORRUPT
(+75/+80 CRC per run ~= the attributed loss). Host-side drops zero at
every counter. The prepare-ahead hypothesis is refuted (spike unchanged
at 21/79 with PA=0); the synth 12/13-frag size mix refines the lock to
per-frame slot total-2 — the v3 drain phase — not train-last.

Also recorded: base gpio163 NRST no longer resets the L072 (counters
survived ~8 harness launches); the CR-4/5 "zero CRC errors" basis was
measured at a layer that cannot see radio-CRC failures (radio-layer
rate 3.2-3.4%); daemon-vs-L072 frame gap is the synth DurationS+10
overrun. Three run archives committed; RS-11.5 reframed to the fix.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… two-bucket claim

Copilot caught two evidence-vs-text mismatches, both valid:
- The 0x63 pending-ack machinery is BOUNDED, not unbounded: all 17
  radiations land in the first ~10 s and the log says "cmd 0x63 GAVE UP
  after 17 attempts (10.3 s)". The "radiates ~1/18 s forever" claim was
  an averaging artifact (17/300 s without checking the distribution).
  Corrected in RESULTS §4 + TODO; the retry-bound follow-up dissolves,
  and the startup confinement strengthens the command-TX exoneration.
- "Every train either completes or times out; no third bucket"
  overstated the reconcile: 4-13 trains/run remain (whole-train losses
  + in-flight at teardown). Softened.

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