# ProcTHOR / RB-Y1 native navigation

The desktop recording adds one source-native navigation task in existing
ProcTHOR test house 0. The separate house catalogue still contains 100 houses.
This is recorded-state replay, not a browser simulator or a learned-policy score.

MolmoSpaces commit `735138876887eb64650742631b8dda841dd264bf` supplies
`NavToObjDataGenConfig`, `NavToObjTask`, and `AStarSmoothPlannerPolicy`.
The preset uses RB-Y1 with virtual holonomic base position control, not wheel
dynamics. The original horizon is 500 policy steps; policy/control/simulation
intervals are 200/2/2 ms. Goal success requires both planar distance below 1.5 m
and positive visibility from the native head camera.

The selected seed 1 recording first satisfies the native goal at step 111. The
source planner subsequently exhausts return-waypoint retries and terminates at
step 211. The final distance is about 0.785 m and the native goal remains true.
Both outcomes are retained. Seed0's earlier countertop diagnostic failed; the
selected successful seed and its repeat do not estimate a success rate.

## Reproduce

Use an isolated CPython 3.11.15 environment with EGL support. The source resource
manager may eagerly download unrelated default resources during its first
initialization; the original preparation used roughly 14 GB of isolated cache.
Do not replace a user's existing asset cache.

```bash
git clone https://github.com/allenai/molmospaces.git .cache/procthor-navigation/upstream
git -C .cache/procthor-navigation/upstream checkout 735138876887eb64650742631b8dda841dd264bf
uv venv --python 3.11.15 .cache/procthor-navigation/venv
uv pip install --python .cache/procthor-navigation/venv/bin/python -r scripts/worlds/procthor-native-requirements.txt
mkdir -p .cache/procthor-navigation/assets .cache/procthor-navigation/resource-cache
.cache/procthor-navigation/venv/bin/python scripts/worlds/record_procthor_navigation.py \
  --source .cache/procthor-navigation/upstream \
  --assets .cache/procthor-navigation/assets \
  --cache .cache/procthor-navigation/resource-cache \
  --output .cache/procthor-navigation/run-a --seed 1
.cache/procthor-navigation/venv/bin/python scripts/worlds/record_procthor_navigation.py \
  --source .cache/procthor-navigation/upstream \
  --assets .cache/procthor-navigation/assets \
  --cache .cache/procthor-navigation/resource-cache \
  --output .cache/procthor-navigation/run-b --seed 1
gh api 'repos/RainbowRobotics/rby1-sdk/git/trees/ac7e83056e0775c4680a50d8c7cb3d9c3c66164d?recursive=1' \
  > .cache/procthor-navigation/vendor-tree.json
PYTHONPATH=scripts .cache/procthor-navigation/venv/bin/python -m worlds.publish_procthor_navigation \
  --run .cache/procthor-navigation/run-a --repeat .cache/procthor-navigation/run-b \
  --assets .cache/procthor-navigation/assets \
  --source .cache/procthor-navigation/upstream \
  --vendor-tree .cache/procthor-navigation/vendor-tree.json
PYTHONPATH=scripts python3 -m worlds.molmospaces_navigation_registry
```

Run each native execution sequentially. The recorder refuses an existing output
directory and preserves failure reports. A completed diagnostic process can
contain a failed native task; inspect `native_success`, not just its exit code.
The publisher requires distinct execution IDs, matching full samples, matching
native model/source/producer seals, and the retained source termination log.

## State and scene fidelity

The recorder never restores state after reset and never changes the source
task's predicate, policy, controller, or horizon. A passive observer copies the
world compilation input. Original actions pass through native `task.step`.

After a MuJoCo step, the task's body arrays may describe the preceding integration
state. Raw `body_positions`/`body_quaternions` are retained unchanged. A separate
`MjData` computes `xpos`/`xquat` from the post-step `qpos` for replay. This avoids
changing native task state just to export a frame. The observed raw position lag
was at most 0.001967 m. The recorded success is always the original task outcome.

The detached XML writer emits an unnamed attached robot default and a padded
skybox layout. The exporter restores the robot defaults' scope and the exact
source skybox layout, retains native body-frame precision, rewrites asset URLs,
and adds the recorded reset keyframe. All 274 body origins, quaternions and unit
basis points match exactly at all 212 recorded timestamps after recompilation.
All 2,948 geometry origins also match; the maximum rotation-matrix component
difference is about 1.59e-7. Some physics parameters are rounded by XML writing;
the derived XML is an inspection scene, not a replacement native simulator model.

The browser uses the house's group 0 and the assembled robot's group 2 visual
geometries, excluding alpha-zero spheres. Its 374 visual shapes are distinct
from the 2,948 native geometries, which include collision geometry.

## Desktop camera

The navigation recording enables Follow the robot by default. The viewer moves
its initial camera with the recorded base translation while preserving orbit
and zoom. This is a viewer camera, not a recorded camera stream or a sensor
calibration claim. Turning Follow off keeps the camera stationary. The source
house stays complete, so walls may still obstruct manually chosen viewpoints.

## Sources and access

- House scene version: `20251121_with_occupancy`; THOR objects: `20251117`.
  Existing [archive/member lock](/worlds/procthor-source-lock.json) remains canonical.
- Native RB-Y1 asset version: `20251224`. All 1,112 referenced files match Git
  blobs in Rainbow Robotics commit `ac7e83056e0775c4680a50d8c7cb3d9c3c66164d`.
  Robot geometry loads directly from commit-pinned vendor URLs.
- House/THOR assets: Ai2 CC BY 4.0. Robot assets: Rainbow Robotics Apache 2.0.
  MolmoSpaces code: Apache 2.0. These licences remain separate in the asset closure.
- [Navigation evidence](/worlds/procthor/navigation-evidence.json) binds local
  execution receipts, runtime/source files, native artifact seals, asset closure,
  and pose comparisons. The receipts are unsigned local integrity evidence.
  Original 285 MB MJB snapshots and native logs remain in the local execution
  directories; they are not served as browser assets.

Physical phone testing is owner-deferred. The [desktop check](/worlds/procthor/navigation-desktop.json) passed on Chromium 151 / Intel Arc at 1440×1000: all 212 samples and 273 non-world body frames within 0.9 micrometres, camera translation at every sample within floating-point precision, visible play/pause, and five seeks in 16–41 ms. Two observed loads took 4.372 s and 2.201 s; external cache state was uncontrolled. Three seconds of playback had 16.7 ms median/p95 requestAnimationFrame intervals. Metadata and native recipe downloads also passed. No failed requests or console errors were recorded in the final UI or export checks. These are local staged-site measurements; production verification follows review and merge. Earlier failed test-selector and stale-bundle probes remain retained and identified in the audit.
