Files
NODEDC_MISSION_CORE/docs/audits/2026-09-07-k1-onboard-live-template-r12.md
T

4.9 KiB

K1 onboard live presentation R12

Owner request and composition decision

The operator starts the enrolled K1 from Fleet and observes the live point cloud and camera from its paired onboard computer. The owner explicitly selected the established direct K1 live-acquisition template for this detail view: shared engine/layer/display tools, accumulation, floating resizable camera, source visibility, metrics and expansion. An independent simplified onboard viewer was rejected because it had already drifted in layout, controls and status meaning. This is reuse within the admitted Fleet sensor-detail surface, not a new product root, navigation change or Design Guideline primitive. The existing manual START/STOP authority remains in the device control card above the shared scene.

Primitives remain Design Guideline Button/IconButton, SettingsCard, StatusBadge, Inspector, Window and WorkspaceWindow. Shared domain composition is extracted to packages/spatial-ui: both the direct host and onboard plugin consume the same controls, timeline, media frame, source picker and styles. Direct live, recorded and LAB source/transport/profile owners remain separate. No recorded blueprint, archive format, physical command or reconnect supervisor policy changes here.

Evidence and fault

Owner's sequence after installing R11: Bluetooth/Wi-Fi enrollment, manual START and reopening Mission Core succeeded. The viewer repeatedly showed upstream welcome/loading chrome, eventually displayed points, had no camera and could present old points after a source pause. This confirms those user-observed behaviors only; it does not establish full live-preview acceptance.

The native Rerun binary sink returns None when there are no new bytes. RrdSubscriber.run called len(payload) unconditionally, swallowed TypeError and closed the subscription. NodeMediaPeers then closed the whole media peer, including camera delivery. Browser retry constructed another native runtime. A local native SDK reproduction and an actual loopback WebRTC regression now cover idle reads, idle media channels and subsequent new point/camera data.

A second presentation defect treated existence of the blueprint's stream_time range as proof of lidar data. Preview protocol v2 adds bounded sequence/age/point metadata after native RRD bytes. Only fresh source frames admit the scene. Repeated metadata cannot renew freshness. Old decoded frames are discarded before encoding; a newly opened subscriber does not replay expired cached data. No operator/board wall-clock synchronization is required for the age gate.

Implementation boundaries

  • Native runtime lifetime is the mounted scene, separate from its disposable WebRTC media connection. Recovery opens a new recording channel inside the existing runtime. No automatic START, STOP, Wi-Fi or BLE action is added.
  • Native Following remains owned by the live blueprint. Polling no longer repeatedly pauses and positions its cursor.
  • Both upstream loading/welcome content and native header/view tabs are masked using the same presentation gate and crop as the established direct viewer.
  • The heading is “Пространственная модель”; “Статус” is left aligned and its message is centered. Physical action loaders remain inside their button.
  • Display edits are serialized live-acquisition settings operations. Closing a modeless tool flushes changes and closes unconditionally; failures use the host's existing error channel. LAB and recorded settings are unchanged.
  • Camera visibility is local presentation, with its decoder kept mounted when hidden. Acquisition and the durable camera producer remain onboard-owned.

Validation and acceptance

Completed at draft time: both TypeScript projects; architecture/focused frontend checks except the deliberately obsolete old viewer-class assertion (updated to assert shared template and masked initial presentation); 12 Python checks across native subscriber and media, including one bounded loopback WebRTC peer with two channels and idle/resume. No real BLE/MQTT commands were issued for these checks. Full Control Station regression: 802/802 passed. Control Station production build passed. Node package build and physical acceptance remain pending.

R12 packages target Node 0.8.9 and optional K1 0.1.9. Immutable source/artifact identity, installation and acceptance are recorded after packaging.

Required physical acceptance remains: owner clears Chrome cache before each UI run; enrolled K1 START; both actual points and camera; settings/accumulation; normal/expanded windows and Escape; STOP; pause/recovery; browser reopen without stale live data. The agent's CUA session exposes the in-app browser, not Chrome cache reset. Do not describe that as a completed clean-cache hardware test.

No Ops publication or Git push is attempted here: prior specific automatic approval rejections remain unresolved. Private raw artifacts remain outside Git.