Files
NODEDC_MISSION_CORE/docs/audits/2026-09-21-rerun-planning-customizations.md
T
DCCONSTRUCTIONS e515ab1b8c feat(planning): consolidate recorded-route localization and spatial scene
Preserve the completed teach-and-repeat laboratory stage: reference preparation, cascaded acquisition, local tracking and recovery, recording lifecycle, replay qualification, and persistent Rerun scene controls. Document the open grid-picking regression and Rerun upgrade contract. No autonomous driving or loop-closure optimization is claimed.
2026-09-21 08:47:19 +03:00

5.5 KiB

Rerun customization register: planning profile addendum

Date: 2026-09-21. Documentation-only inventory of the implementation completed on 2026-09-20, plus the owner's subsequent grid-picking regression report. This does not implement a fix or update the Rerun dependency.

Scope and version

The existing complete baseline remains 2026-09-05-rerun-customization-inventory.md and Ops MISSIONCOR #74. Web Viewer and Python SDK remain pinned to 0.36.3. This planning work changes Mission Core adapters, not the vendor SDK/WASM. The September 5 package/hash audit is historical evidence; package provenance was not re-audited here.

The planning viewer is a separate profile from recorded Sessions and canonical LAB replay. Do not assume their camera-journal, FOLLOW or blueprint-lease mechanisms are interchangeable.

Runtime and geometry transport

  • components/missions/PlanningLiveScene.tsx owns one isolated Rerun host and one channel per run/retry. Layers, clipping, point size and tool-window state are not dependencies of its mounting effect.
  • core/missions/planningSceneStream.ts admits latest-only deltas with one in-flight request. The last admitted cursor survives stale replies and transport errors. needsBase repairs geometry independently of camera intent.
  • missions/live_scene_delta.py records camera intent as [mode, reset]. Only initial admission or an explicit mode/reset change sends log_view. log_base refreshes reference, trajectory and grid entities without writing the operator's eye. A display epoch or alignment change is not a camera reset.
  • The query transform, bounded cloud chunks, current temporal cloud head and accepted-match display are separate entities. Clear, static component replacement and Transform3D inheritance are upgrade-sensitive semantics.
  • HTTP reset generation is explicitly carried by web/planning_live_api.py. A transport cursor is not localization evidence. Expired live replies remain rejected; renderer recovery must not restore green localization authority.
  • Browser presentation telemetry measures channel admission and two bounded animation-frame opportunities, not actual GPU paint or physical accuracy.

Operator controls and camera ownership

  • PlanningSceneToolWindow.tsx uses the Design Guideline WorkspaceWindow: modeless, draggable, resizable and scene-bounded, with maximize/restore and Escape. Layers and Display share it and retain its position when switching.
  • PlanningSpatialWorkspace.tsx and workspaces/spatial/SpatialWorkspace.tsx supply the window through the shared scene tools slot. The duplicate Planning and Engine toolbar actions are absent in this spatial profile. The optional source action remains available to other consumers.
  • Height clipping uses canonical vertical RangeControl, right-side shaft, left-side endpoints, no perimeter outline, and a displayed upper bound of 80 m. The full-scale position sends no extra height cut. Presentation extraction and numerical localization extraction are independent; this is not evidence of sensor range, terrain height or vehicle clearance.
  • Native camera navigation is retained by not sending a replacement blueprint. This planning path does not reconstruct eye from a pointer-input journal. Explicit reset and top/3D presets may intentionally change the eye.

Known open regression: selectable grid

To avoid a grid toggle reactivating a camera blueprint, the native LineGrid3D is disabled and world/grid is logged as LineStrips3D in missions/live_scene.py. Its XY extent follows reference bounds with 80 m padding and adaptive spacing. It is a visual guide, not inferred ground.

The owner screenshot on September 21 shows a hover tooltip for /world/grid[20] and a highlighted line. Ordinary data geometry participates in native picking; the previous acceptance missed this behavioral regression. It remains unfixed in this checkpoint. A future fix must make the guide non-interactive without disabling useful point/trajectory picking or reintroducing camera resets. Prefer a supported viewer/blueprint mechanism; do not silently patch WASM or intercept all pointer input.

Upgrade acceptance extension

  • Preserve iframe, native recording/channel and eye through clipping, layer toggles, point-size/grid changes, stale replies and geometry repair.
  • Confirm explicit reset and top/3D presets still work.
  • Confirm static replacement, child transforms, current cloud head and historical/live separation with the new SDK and Web Viewer together.
  • Drag/resize/maximize tools while orbiting/zooming; test Escape, full screen and focus without blocking scene interaction or remounting the viewer.
  • Verify full-scale 80 m display, partial glyph contrast and no focus/drag perimeter. UI clipping must not alter recording or registration inputs.
  • Resolve and verify grid picking independently; retain useful picking on actual scene data. Do not mark this item complete from the older screenshot QA.
  • Repeat scene stream, scene tools, fast-display/API tests and browser QA; retain the separate recorded Sessions/FOLLOW upgrade checks from the baseline.

Evidence limits

September 20 acceptance: 875 frontend tests, typecheck/build, 8 focused backend tests and browser interaction QA, recorded in 2026-09-20-planning-scene-camera-and-tools.md. These results predate the grid report and do not prove that grid picking was correct. No new physical scan, SLAM closure algorithm, registration threshold change or device command is part of this documentation update.