Docs sync: settings/protocol/pipeline references to shipped 2026-08 reality; RS-6.0 K-phase revision - #96
Merged
Merged
Conversation
…telemetry (RS-6.1)
Two desk-work items ahead of the antenna swap:
- image_rx_daemon: windowed HEALTHY-population RSSI/SNR, summarized in
the 10 s stats block as "rx_rf: n rssi[min/med/max] snr[min/med/max]"
and reset per window. Until now only corrupt packets carried visible
RF numbers (crc_dump) — the good-frame SNR margin was unmeasurable,
flagged as the missing instrument in the RS-11.5 closure. Tomorrow's
antenna legs get both distributions.
- web_ui: RS-6.1 aggregate tile-age telemetry on
lifetrac/v25/status/tile_age every stale-scan tick: {n_tiles, missing,
p50/p95/max age, stale count}. Audit found the rest of RS-6.1 had
landed with F10 (per-tile age_ms on /ws/state; diag-gated
staleness_overlay.js renders it) — this adds the archivable aggregate
the K-phase exit tests score against; published even when quiet since
a healthy link's p95 age IS the sweep-rotation measurement.
9 new tests (RF window semantics; age summary percentiles, missing-tile
accounting, pre-keyframe None). Suite 1109/2446.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…samples Copilot's catch, valid on both points: an SNR-only window (pre-F8 frames can yield None on either axis independently) never triggered the summary — so _rf_snr grew unbounded across windows — and an RSSI-only window logged a fabricated 0.0 SNR from the placeholder. The stats block now gates on EITHER list, reports per-axis counts, formats a missing axis as "None", and always resets both. New test pins the single-axis accumulation. Suite 1110/2446. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…revision - SETTINGS_REFERENCE: rows for the ten new knobs (F10 stale-scan trio, F10/F11 keyframe gates, RS-11.5 RXCONT_ARM + TX_POWER_DBM, harness passthroughs) with file:line pointers and the sweep-rotation rule. - LORA_PROTOCOL: new "Shipped 0xFB bench command set" table (0x60-0x6C as implemented, F10/F11 semantics) + an explicit namespace-drift warning: the design-era frame_type 0x30 table and the shipped CMD_OP_* set collide on 0x60/0x62 — nothing mis-parses today (different envelopes) but RS-6/RS-7 unification must reconcile deliberately. - IMAGE_PIPELINE: canvas row + validation gate updated to the F10/F11 keyframe policy (cold start / grid mismatch / tile-decode error only; tile-level loss repairs via 0x6C; staleness scored from status/tile_age). - CONTROL_PLANE_DESIGN: F10 roadmap row annotated SHIPPED + verified. - K-phase strategies doc: RS-6.0 addendum v1.1 — LoRa-only transport respecification; K-B recorded as substantially shipped by F10; K-C as a downlink payload type; K-G mapped to the retained cold-start request with req_tiles(all) proposed as an all-ones 0x6C bitmap; uplink budget accounted; numbering collision flagged. RS-6.0 checked off in TODO. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Updates LifeTrac v25 design/controller documentation to match the shipped 2026-08 behavior (F10/F11, RS-11.5/11.6) and records the RS-6.0 K-phase transport revision, while also adding the missing “archivable” tile-age aggregate telemetry and RX-side RF-window instrumentation with tests.
Changes:
- Document the shipped 0xFB command set (and explicitly call out the opcode namespace collision vs design-era 0x30 commands), plus update image pipeline/keyframe recovery policy text to match F10/F11 reality.
- Extend settings documentation with newly shipped knobs (stale-scan trio, keyframe gates, RS-11.5 diagnostics, harness passthroughs) and mark RS-6.0/RS-6.1 TODO items as done with pointers.
- Add RS-6.1 MQTT-published aggregate tile-age telemetry and RS-11.6 “healthy-frame” RSSI/SNR window stats logging, with unit tests for both.
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| LifeTrac-v25/DESIGN-CONTROLLER/TODO.md | Marks RS-6.0 and RS-6.1 items as completed and records the shipped evidence/paths. |
| LifeTrac-v25/DESIGN-CONTROLLER/SETTINGS_REFERENCE.md | Documents newly added environment knobs and harness passthroughs with file:line references. |
| LifeTrac-v25/DESIGN-CONTROLLER/LORA_PROTOCOL.md | Adds shipped 0xFB opcode table and warns about opcode collisions with design-era namespace. |
| LifeTrac-v25/DESIGN-CONTROLLER/IMAGE_PIPELINE.md | Updates canvas/keyframe and recovery gate descriptions to match shipped F10/F11 behavior. |
| LifeTrac-v25/DESIGN-CONTROLLER/CONTROL_PLANE_DESIGN.md | Annotates F10 stale-tile report row as shipped/verified with evidence pointer. |
| LifeTrac-v25/DESIGN-CONTROLLER/base_station/web_ui.py | Publishes RS-6.1 aggregate tile-age summary to MQTT each stale-scan tick. |
| LifeTrac-v25/DESIGN-CONTROLLER/base_station/tests/test_tile_stale.py | Adds unit tests for the new aggregate tile-age summary logic. |
| LifeTrac-v25/DESIGN-CONTROLLER/base_station/tests/test_rx_rf_stats.py | Adds unit tests for the new healthy-frame RF window accumulator. |
| LifeTrac-v25/DESIGN-CONTROLLER/base_station/image_rx_daemon.py | Logs windowed healthy-frame RSSI/SNR distribution and resets each stats interval. |
| LifeTrac-v25/AI NOTES/2026-07-25_Keyframe_Elimination_Strategies_Copilot_v1_0.md | Adds addendum v1.1 documenting RS-6.0 LoRa-only back-channel revision and instrumentation status. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
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.
Documentation-only PR bringing the living references in line with everything shipped this week, plus the queued RS-6.0 design-doc revision.
What was stale, and what changed
LIFETRAC_TILE_STALE_ENABLE/AFTER_MS/PERIOD_S, including the sweep-rotation sizing rule), the F10/F11 keyframe gates (LIFETRAC_KF_ON_REASM_TIMEOUT,LIFETRAC_KF_ON_SEQ_GAP), the RS-11.5 diagnostics (LIFETRAC_RXCONT_ARMwith its never-ship-0 warning,LIFETRAC_TX_POWER_DBMwith the 2..17 host clamp), and the harness passthroughs.frame_type 0x30opcode table and the shipped0xFBcommand set collide on0x60/0x62(PERSON_APPEAREDvsREQ_KEYFRAME). A new "Shipped 0xFB bench command set" section documents the implemented 0x60–0x6C table (F10/F11 semantics included) plus an explicit drift-warning box: nothing mis-parses today because the envelopes differ, but RS-6/RS-7 unification must reconcile the numbering deliberately.lora_proto.pyis named as shipped truth.0x6C, aggregate staleness scored fromstatus/tile_age.0x6C(the staleness-driven NACK, on air), K-C as a downlink payload type whose response reuses0x6C, K-G mapped to the retained cold-start request withreq_tiles(all)proposed as an all-ones bitmap + flag rather than a new opcode, uplink budget accounted (<0.6% duty), and the numbering collision flagged. RS-6.0 checked off in the TODO.Deliberately untouched:
HIL_RUNBOOK.md(re-read shows it's already unambiguous — "for this gate"; the earlier misreading was the analyst's, not the doc's) andSAFETY_CASE.md(awaits operator sign-off, per standing agreement).🤖 Generated with Claude Code