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

5.3 KiB

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.