evidence: hold setting self-evidenced on air; leg-report bug fixed; survey-ranked channel refuted by link test - #112
Open
dorkmo wants to merge 4 commits into
Open
evidence: hold setting self-evidenced on air; leg-report bug fixed; survey-ranked channel refuted by link test#112dorkmo wants to merge 4 commits into
dorkmo wants to merge 4 commits into
Conversation
…ort train-length bug fixed Paired 300 s legs at 927.5 (clean 5/5 that morning), same session, only -NoParkLast differing, both bracketed: leg A no_park_last=1 loss 1.5% penultimate 6% (<= uniform 8%) leg B no_park_last=0 loss 3.3% penultimate 35% (4.4x uniform) Both params.txt AND the tx daemon startup log carry the setting, and the mechanism signature flips WITH it -- so an instrumented archive now proves its own hold state two ways, closing the PR #111 review gap where strict-hold claims rested on the session transcript. Loss values independently reproduce the RS-12 arms (ctrl 3.3, fix 1.5-1.8) on a different day and post-merge code. Tool bug found in the same leg, and it would have HIDDEN the result: rs12_leg_report.py inferred train length from CORRUPT capture headers via most_common with no sanity bound. Leg B had one readable dump whose garbage total byte said 208, so the tool placed the penultimate at idx 206 and printed 0 percent while the real lock was 35 percent at idx 11. A false negative on the headline metric from one corrupted byte. The first repair (modal over all tx trains) was also wrong: these legs are a MIXTURE (1x143 2x45 12x56 13x115) so the mode is 1 and short trains have no penultimate. Final behaviour: modal over trains of 3+ fragments from the tx log healthy lines, with the full mixture and the uniform baseline printed. Regression-checked against the archives the RS-12 closure and the 08-22 session rest on: every published number reproduces unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Adds paired RS-12 radio evidence for the strict-hold setting and updates leg reporting to infer train lengths from TX logs.
Changes:
- Archives control/fix radio legs and instrumentation snapshots.
- Documents observed loss and hold-setting behavior.
- Revises train-length and penultimate-loss reporting.
Reviewed changes
Copilot reviewed 12 out of 18 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
tools/rs12_leg_report.py |
Revises train-length reporting. |
RS_12.../RESULTS.md |
Summarizes paired-leg evidence. |
RS_12.../inst_A_pre_base.txt |
Leg A pre-run base counters. |
RS_12.../inst_A_post_base.txt |
Leg A post-run base counters. |
RS_12.../inst_A_pre_tractor.txt |
Leg A pre-run tractor counters. |
RS_12.../inst_A_post_tractor.txt |
Leg A post-run tractor counters. |
RS_12.../inst_B_pre_base.txt |
Leg B pre-run base counters. |
RS_12.../inst_B_post_base.txt |
Leg B post-run base counters. |
RS_12.../inst_B_pre_tractor.txt |
Leg B pre-run tractor counters. |
RS_12.../inst_B_post_tractor.txt |
Leg B post-run tractor counters. |
radio_monitor_...112905.../params.txt |
Records fix-leg parameters. |
radio_monitor_...112905.../tx_daemon.log |
Records fix-leg transmission behavior. |
radio_monitor_...112905.../rx_daemon.log |
Records fix-leg reception behavior. |
radio_monitor_...112905.../synth_pub.log |
Records fix-leg synthetic input. |
radio_monitor_...113520.../params.txt |
Records control-leg parameters. |
radio_monitor_...113520.../tx_daemon.log |
Records control-leg transmission behavior. |
radio_monitor_...113520.../rx_daemon.log |
Records control-leg reception behavior. |
radio_monitor_...113520.../synth_pub.log |
Records control-leg synthetic input. |
Suppressed comments (1)
LifeTrac-v25/DESIGN-CONTROLLER/tools/rs12_leg_report.py:98
- When the TX log contains no train of three or more fragments, this fabricates a 13-fragment train and the code below emits a meaningless penultimate percentage and uniform baseline. Since the preceding comments correctly state that short trains have no applicable penultimate metric, report the metric as unavailable instead while still allowing the later bracket/counter diagnostics to run.
tlen = 13
tlen_src = "DEFAULT 13 — no long trains in tx log, treat with care"
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| | `params.txt` | **`no_park_last=1`** | **`no_park_last=0`** | | ||
| | TX daemon startup log | **`no_park_last=1 gap_ms=80 pipeline_depth=2`** | **`no_park_last=0 gap_ms=80 pipeline_depth=2`** | | ||
| | loss | **1.5 %** (33/2177) | **3.3 %** (78/2362) | | ||
| | penultimate (idx 11) | **6 %** (2/33) — at/below uniform | **35 %** (27/78) — 4.4× uniform | |
| long_lens = collections.Counter( | ||
| {k: v for k, v in tx_lens.items() if k >= MIN_LONG}) | ||
| if long_lens: | ||
| tlen = long_lens.most_common(1)[0][0] |
…gradient gives first hail-set candidates 50/50 hot this pass (08-22 lone clean channel 904.25 went -84 -> -48), confirming the zero-hot criterion cannot pick a channel on the production grid while the ticker is active. Ranking on continuous metrics across both surveys DOES discriminate and reproduces the band-edge pattern from the x.0/x.5 grid: band median hot-sum 7.5 vs top-edge (>=925 MHz) median 5.0. First evidence-based hail-set candidates for POWER_MANAGEMENT rendezvous: 927.25 (best on both metrics, adjacent to the 5/5-clean 927.5), then 926.75, then 925.25 -- all top-edge. Bounds stated in-document: n=2 same week, gradient not a clean split, 927.25 leaves only a 500 kHz top guard (legal, and the reason it is quiet, but a deliberate choice). Makes the table-extension question less urgent since a table channel with similar protection now exists. Method note: survey_compare ranks hot-first and will read as 0-of-50-clean on this grid; the hot-sum-across-surveys ranking is the one to use for chantab picks. Folding it into the tool is the next RS-11.7 v1 step. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ommendation retracted Ran the obvious follow-up and it overturned this session own earlier conclusion, so both are on the record. Survey ranking put 927.25 first of 50 production-grid channels. A 300 s link leg at 927.25 (same config, same session as the morning 927.5 leg): 927.5 loss 1.5% crc 26 timeouts 31 penultimate 6% 927.25 loss 3.5% crc 63 timeouts 61 penultimate 11% (uniform) 2.3x worse, with a FLAT per-index drop profile = interference, not the RS-12 mechanism. Paired 60 s spot-checks straight after the leg name the cause: 927.25 took 5 hits at -55 dBm on a clean 7.02 s grid (the device-A ticker is ON it) while 927.5 took 0 at a -94 dBm floor. Retracted: the 927.25-first hail recommendation, and the claim that the table-extension question became less urgent. Both reversed -- no channel in the production table is emitter-free today, while an off-grid channel 250 kHz above the table top is clean 5/5, so extension gets MORE attractive. New RS-11.8 gate: no hail-set constant is adopted from passive ranking; every candidate must pass a link leg (926.75 and 925.25 are next). Method note rewritten -- do NOT promote hot-sum ranking to an automatic picker; surface hit CADENCE, noise floor, and an explicit no-clean-channel verdict instead. Caveat kept: n=1 link leg per channel and this bench varies run to run (crc swung 26->70 at fixed 927.5 across legs A/B), so the direction is corroborated by the spot-checks but the 2.3x magnitude is not pinned. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…aced, and it is informative Review catch, verified: lost_frag_idx reports an index with no train length, and these legs are mixed (12x56, 13x115 long trains), so idx 11 is the penultimate of the 13s AND the final of the 12s. The published shares are mixture-weighted, not per-population. The tool now prints the ambiguity on every mixed leg, naming what each index means per length and listing each length own penultimate count. The A/B contrast is unaffected: both legs carry near-identical mixtures (50:105 vs 56:115), so 6 percent vs 35 percent is like-for-like. The split also yields a substantive observation. Control leg per-length: len 13 -> idx 11 = 27, len 12 -> idx 10 = 3. Proportional locking would put ~13 at idx 10; it holds 3. Final-fragment losses are rare (idx 12 = 1), so 12-frag finals cannot explain the idx-11 spike either. Most economical reading: the lock is SPECIFIC to 13-fragment trains, exactly as the RS-12 mechanism predicts (it needs a SHORT final fragment to ride fire-on-TX_DONE; a 12-frag train final is nearly full-length, so no ride). Recorded as inference, not measurement. Follow-up noted in-document: give lost_frag_idx the train length so per-population shares become measurable. Host-side change, no flash. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three results from the 2026-08-24 bench session. Two of them overturn earlier claims, including one made earlier in this same session.
1. Archive instrumentation VERIFIED on air (closes the #111 review gap)
Paired 300 s legs, same channel, same session, ~6 min apart, only
-NoParkLastdiffering:params.txtno_park_last=1no_park_last=0no_park_last=1 gap_ms=80 pipeline_depth=2no_park_last=0 gap_ms=80 pipeline_depth=2The declared setting and the mechanism signature flip together -- that is what separates a faithful record from an echo of a parameter. Strict-hold claims no longer need transcript attestation. Both loss values independently reproduce the RS-12 arms (ctrl 3.3, fix 1.5-1.8) on a different day and post-merge code.
2. Tool bug that would have hidden result #1
rs12_leg_report.pyinferred train length from thetotalbyte of corrupt capture headers viamost_common(1)with no sanity bound. Leg B had one readable dump whose garbage byte said 208 -> the tool placed the penultimate at idx 206 and printed 0% while the real lock was 35% at idx 11. A false negative on the campaign headline metric from a single corrupted byte.First repair (modal over all TX trains) was also wrong: these legs are a mixture (1x143, 2x45, 12x56, 13x115), so the mode is 1 and the penultimate collapses to idx -1. Final: modal over 3+-fragment trains from healthy TX-log lines, with the full mixture and uniform baseline printed. Regression-checked -- every published historical number reproduces unchanged.
3. RETRACTED mid-session: survey ranking does not predict link loss
The second chantab-grid survey (50/50 hot; binary criterion saturated) produced a continuous-metric ranking that put 927.25 first of 50. I recommended it as hail candidate #1 -- then tested it:
Paired 60 s spot-checks immediately after named the cause: 927.25 took 5 hits at -55 dBm on a clean 7.02 s grid (the device-A ticker is on it); 927.5 took 0 hits at a -94 dBm floor.
Withdrawn: the 927.25 recommendation, and the claim that table-extension became less urgent. Both reverse -- no production-table channel is emitter-free today, while off-grid 927.5 is clean 5/5, so extending the table gets more attractive. New RS-11.8 gate: no hail constant from passive ranking; every candidate must pass a link leg (926.75, 925.25 next). The method note now says explicitly not to promote hot-sum ranking into an automatic picker, and to surface hit cadence + noise floor + an explicit no-clean-channel verdict instead.
Caveats kept in-document: n=1 link leg per channel; this bench varies run to run (crc swung 26->70 at fixed 927.5 between legs A and B), so the direction is corroborated by independent spot-checks but the 2.3x magnitude is not pinned.
Bench note: boards were quiesced overnight (radios in LoRa SLEEP, Linux up) and woke with tooling intact, zero checklist steps -- quiesce-instead-of-halt validated.
🤖 Generated with Claude Code