Skip to content

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
mainfrom
rs12-instrumentation-verify
Open

evidence: hold setting self-evidenced on air; leg-report bug fixed; survey-ranked channel refuted by link test#112
dorkmo wants to merge 4 commits into
mainfrom
rs12-instrumentation-verify

Conversation

@dorkmo

@dorkmo dorkmo commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

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 -NoParkLast differing:

leg A (fix) leg B (control)
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% 3.3%
penultimate (idx 11) 6% (uniform 8%) 35% (4.4x uniform)

The 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.py inferred train length from the total byte of corrupt capture headers via most_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:

927.5 927.25 (survey top pick)
loss 1.5% 3.5%
crc dumps 26 63
drop profile -- flat = interference, not RS-12

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

…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>
Copilot AI balanced review requested due to automatic review settings August 24, 2026 16:39

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

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]
dorkmo and others added 2 commits August 24, 2026 12:07
…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>
@dorkmo dorkmo changed the title evidence(RS-12): archives self-evidence the hold setting + leg-report train-length fix evidence: hold setting self-evidenced on air; leg-report bug fixed; survey-ranked channel refuted by link test Aug 24, 2026
…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>
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