Files
NODEDC_MISSION_CORE/docs/audits/2026-09-21-native-rerun-navigation.md

97 lines
5.3 KiB
Markdown

# Native Rerun navigation · 2026-09-21
## Scope
The owner accepted the recorded cloud quality and asked to finish navigation.
No scanner command, recording rewrite, cloud decimation, color change or matching
algorithm change belongs to this increment. OPS receives the final result only
after completion, per the owner's explicit instruction.
## Cause and implementation
Upstream orbital pan translates in the camera's screen plane. Consequently the
target can move above the ground grid; scrolling then approaches that floating
target rather than the intended ground location. Upstream also limits orbital
zoom-out to five scene diagonals. The application previously inferred a camera
from DOM deltas; that approximation was not the rendered native camera.
ADR 0052 admits a bounded patch to the pinned upstream 0.36.3 WebViewer:
- Project orbital pan onto the native grid plane and translate the complete rig.
- Anchor untracked orbital views before rendering; stop interpolation when the
operator navigates. Ordinary orbit keeps the target fixed.
- Zoom to that target independently of scene extent, retaining only 0.02 m
near-plane protection and a finite arithmetic guard.
- Read the native rendered eye through the existing disposable iframe boundary.
Remove the approximate DOM camera journal and its viewport/radius plumbing.
- Preserve first-person navigation and explicit follow/reset/plan actions.
Display-only updates carry the actual native eye and do not seek/reload data.
Browser QA caught that omitting eye fields on blueprint activation restored
the incoming store's startup camera despite the stable view identity. The
settings boundary now preserves the operator eye explicitly.
The existing canonical hint describes LMB orbit, RMB ground-pivot pan and wheel
zoom. No new product controls, renderer, debug UI or alternative event loop were
introduced. The product UI skill kept this change inside the shared viewer.
## Build and evidence
Pinned upstream commit: `6ded109d33c549e98185f7c95fa8009d44e4adef`.
Portable patch and generated artifacts are under
`apps/control-station/vendor/rerun-web-viewer-0.36.3`.
Worker006 used a temporary 4-CPU / 16-GB build-only container, no GPU, ports or
scanner data. Native Rust camera tests passed **6/6**, including fixed-pivot
rotation, ground pan, another grid orientation, top-down pan, zoom from over
20 km to below 3 cm and invalid-input / first-person regression.
The first browser build failed because macOS AppleDouble archive metadata was
interpreted as a WGSL shader. The versioned packaging/build step now excludes
and strips that metadata inside the disposable build workspace. No shader or
upstream dependency was changed to bypass the error.
The three source files on Worker006 were SHA-256 identical to the locally
audited patch result. `navigation-build.json` records source, toolchain and
paired JS/WASM identities. The installer validates the entire set before writing
and rejects package drift rather than silently applying a patch to a new SDK.
## Acceptance record
- Native tests: **6/6** passed. The source patch applies cleanly to the pinned
pristine upstream archive.
- Final application architecture: **4/4**; TypeScript: passed; complete frontend
suite: **895/895**, no skipped tests; production build: passed (14.36 s).
- Installer ran twice successfully. Generated JS/WASM ABI and all artifact
hashes passed. Served build uses WASM SHA-256
`2b661de545ac90bb950eda1a28fc5a7c3ce4ca7f5bb24894789acf7589495185`.
- Real in-app browser, canonical port 8000, `JA-STROITEL-SUN-RING-002`, paused
at 60 s: orbit, close/far wheel zoom, point size change to 0.5 px, cloud layer
off/on, follow on/off, expanded scene and return all exercised. After the
settings-boundary correction, the manually rotated view survived display and
layer changes. No browser console errors were reported.
- Host-focused Escape returned from the expanded scene. The automation did not
establish Escape delivery with focus inside the native canvas; that gesture
is not claimed as verified. No keyboard code was changed in this increment.
- Physical two-finger/right-button dragging is not exposed by the available
browser automation. Ground-plane pan and fixed-pivot invariants are covered
by the native tests; the owner's actual trackpad feel remains manual acceptance.
- The final recorded scene is left paused for owner review. The temporary
Worker006 build container was removed after artifacts/logs were copied.
No alternate backend or temporary renderer was left running.
The owner subsequently accepted navigation ("устраивает") and authorized OPS
documentation. Card #74 now records the accepted native patch, build manifest,
upgrade/rollback procedure and verification boundaries. This does not qualify
rover operation or alter the navigation test limitations above.
## Boundaries
The guide grid is a geometric plane, not measured terrain. Explicit following
may move a target because that is its requested purpose. Mission Core admits one
active 3D pane per iframe; multiple simultaneous panes would require a view-id
argument for snapshots. Floating-point/near-plane safeguards are retained;
"no route-size zoom cap" does not mean infinite numeric coordinates.
The accepted full-fidelity RRD and 30-minute accumulation are unchanged. Raw and
corrected map versions do not need regeneration for this navigation update.