94 lines
5.8 KiB
Markdown
94 lines
5.8 KiB
Markdown
# 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.
|