5.8 KiB
K1 onboard preview continuity and canonical scene R13
Observed regression
The owner confirmed R12 installation exit 0. Read-only package inspection
confirmed Node 0.8.9 and K1 0.1.9. The service was active with NRestarts=0.
Camera, points and trajectory appeared, but the live scene repeatedly went black
and accumulation/route restarted. A bounded journal selection for that exact run
showed repeated Node RRD subscriber failed exception=Full, plus media delivery
RuntimeErrors. This is failed preview acceptance, not an accepted R12 release.
The encoded outbox previously raised Full after 500 ms. SCTP delivery also terminated a peer after two seconds of backpressure. Every replacement peer constructed a new RerunBridge, called begin_session and discarded trajectory and recording identity. Separately, the UI hid the entire scene whenever source age expired. No scanner/service restart is needed to explain these symptoms.
Continuity contract
Preview protocol v3 keeps one native recording per acquisition view. The browser keeps its native channel and acknowledged batch cursor while disposable WebRTC peers recover. The board retains the corresponding subscriber for up to five minutes after disconnection. Every complete RRD batch is numbered and ACKed; a lost ACK causes retransmission of identical bytes, and the browser deduplicates it. Cursor mismatch/expired resumption reports a terminal reopen instruction; it must never silently create replacement history. Explicit view close frees capacity immediately; acquisition close retires every view.
The encoded outbox is bounded to two queued batches, one pending batch and one encoder-held batch, each no larger than 8 MiB. It waits without killing the recording. Decoded input coalesces independently per modality. The acquisition producer/archive never waits for the preview. Route snapshots come from the already bounded acquisition-owned trajectory, including motion during preview congestion. This is a disposable live view, not a replay of every archived frame. The chosen accumulation window still governs how long points remain visible.
Data-channel buffering is bounded at 256 KiB. Backpressure pauses sending while the peer is alive; a 30-second keepalive expiry bounds abandoned peers. Preview close/recovery does not send START, STOP, Wi-Fi, BLE or camera-producer commands. Camera lease renewal requires an existing active recording and restarts only the browser decoder. Source age includes time spent receiving each RRD payload; repeated metadata cannot make old points fresh. Stale history remains visibly marked instead of being replaced with a black canvas.
Exact scene composition
The owner supplied the direct LAB scene as the composition reference. Shared
SpatialScene now owns the existing toolbar, renderer allocation, device-control
slot, source controls, engine status, metrics, navigation hint, timeline and media
slots. Direct live and recorded hosts retain their existing renderers, profile
factories, AI/replay controls and authority. Their markup is consumed through
the shared scene instead of being independently re-created in the K1 Node UI.
The original K1 phase/telemetry capsule is extracted as K1SpatialSession, with
pure shared phase/metrics vocabulary. Direct and onboard views use the same
calibration/completion copy, timing, route, speed and capsule geometry. The
onboard adapter receives the actual acquisition phase; manual STOP uses the
existing guarded operation. The scene stays mounted during calibration and STOP.
The onboard scene uses the same ApplicationPanel header and floating camera window: title “Пространственная сцена”, live/wait status, expand and close. It omits LAB, descriptive subtitle, disk action and unused AI mode buttons. The three engine/layers/display tools, accumulation and movable/resizable camera remain. The enrollment “Настроить устройство” primary button occupies full width. No new Design Guideline primitive, navigation root, recorded blueprint, archive format, credential source or physical reconnection supervisor is introduced.
Validation
- Full Control Station regression: 804/804 passed after shared composition/model extraction. Focused UI checks are repeated after final media lifecycle changes.
- Python: 92 relevant tests across native RRD (6), media (10), Node control (22), installer (11) and camera gateway (43) covered by the combined pass and final affected-subset pass. The final native/media/control subset passed 38/38.
- Regressions include a blocked native outbox beyond 500 ms, ACK loss/resumption of the same native subscriber, expired cursor rejection, explicit view disposal, SCTP backpressure beyond two seconds, native RRD fragmentation, and idle/resume of a real bounded loopback WebRTC peer with camera. No physical device commands.
- Both UI typechecks and production/package builds are required before staging; final artifacts and installation outcome are recorded below when available.
The owner confirmed STOP; the paired Fleet snapshot was subsequently idle with control phase completed. Canonical Mission Core remains on port 8000. CUA exposes an in-app browser without documented cache/click controls, not the owner's Chrome session. Opening the home page is not clean-cache hardware acceptance. Required owner UI acceptance remains: clear Chrome cache before each run; START, calibration, camera/points, move the scanner, ensure route survives a delivery pause; move/resize camera; STOP and observe finalization. No Ops write or Git push is retried after the earlier automatic-approval rejections.
R13 is a matched public update: Node 0.8.10 and K1 0.1.10, protocol v3. It uses the existing root-owned encrypted K1 credential. No Keychain read or secret-bearing installer is part of this build. The standard installer safe-state guard remains.