Skip to content

docs: redirect moved pages to their new location - #1348

Merged
ivany-nv merged 1 commit into
mainfrom
ivany-nv/egohand-redirect
Oct 26, 2026
Merged

ivany-nv merged 1 commit into
mainfrom
ivany-nv/egohand-redirect

Conversation

@ivany-nv

@ivany-nv ivany-nv commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Description

Old docs URLs from the restructure land on a "This page has moved to …" stub, and the reader has to click through. For example:

  • main/getting_started/lerobot/index.html → main/integrations/lerobot/index.html
  • main/references/egocentric_hand_reconstruction.html → main/ego_post_processing/egohand.html

This adds a meta refresh to each of the 34 stubs on main, pointing at the page the stub already links to, so the browser goes straight there:

.. meta::
   :http-equiv=refresh: 0; url=../../integrations/lerobot/index.html

Sphinx emits this as <meta http-equiv="refresh"> in <head>. No JavaScript is involved, matching the docs' no-JS rule and the existing root docs/index.html redirect. The visible "has moved" link stays as the fallback.

The redirect is in each stub rather than in conf.py (e.g. sphinx-reredirects), because every version is built with main's conf.py and release branches still serve the original pages at these paths.

Not covered: a few pages deleted earlier without a stub are still served stale from gh-pages (keep_files: true), e.g. device/index.html, references/device.html, references/retargeting.html. They need a target chosen per page, so they are left for a follow-up.

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Testing

  • make current-docs (sphinx-build -W --keep-going) succeeds with no warnings.
  • In the built HTML, all 34 stubs have the refresh tag inside <head>; each target exists, matches the stub's visible link, and is not itself a redirect (no chains).
  • Served the build under /IsaacCapture/main/ and opened each of the 34 old URLs in a browser: every one landed on the expected page.

Checklist

  • I have read and understood the contribution guidelines
  • I have run the linter and formatter with SKIP=check-copyright-year pre-commit run --all-files
  • I have made corresponding changes to the documentation
  • I have added tests that prove my fix/feature works (or explained why not) — docs-only; verified by the build and browser checks above
  • I have signed off all my commits (git commit -s) per the DCO

Summary by CodeRabbit

  • Documentation
    • Added automatic redirects from legacy device, getting-started, teleoperation, and reference documentation pages to their current locations.
    • Existing links to moved pages now lead readers to the corresponding updated documentation, including LeRobot guides, build instructions, teleoperation topics, and device references.

Each "This page has moved" stub now carries a meta refresh to the page it
links to, so old URLs land on the new page without a click. The redirect
lives in the stub rather than conf.py because every version is built with
main's conf.py, and release branches still serve the original pages.

Signed-off-by: Ivan Yang <yifanyang@nvidia.com>
@coderabbitai

coderabbitai Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between db3da39 and 06017c9.

Files selected for processing: 34
  • docs/source/device/body_tracking.rst
  • docs/source/device/haptic_feedback.rst
  • docs/source/device/haptikos.rst
  • docs/source/device/joint_space.rst
  • docs/source/device/manus.rst
  • docs/source/device/oak.rst
  • docs/source/device/oglo.rst
  • docs/source/device/sharpa_avatar.rst
  • docs/source/device/soma.rst
  • docs/source/device/spacemouse.rst
  • docs/source/device/trackers.rst
  • docs/source/device/wuji_glove.rst
  • docs/source/getting_started/build_from_source/index.rst
  • docs/source/getting_started/build_from_source/webxr.rst
  • docs/source/getting_started/contributing.rst
  • docs/source/getting_started/lerobot/data_collection_real.rst
  • docs/source/getting_started/lerobot/data_collection_sim.rst
  • docs/source/getting_started/lerobot/devices.rst
  • docs/source/getting_started/lerobot/index.rst
  • docs/source/getting_started/lerobot/rebot.rst
  • docs/source/getting_started/lerobot/training_groot.rst
  • docs/source/getting_started/quick_start.rst
  • docs/source/getting_started/teleop_control_state_machine.rst
  • docs/source/getting_started/teleop_session.rst
  • docs/source/getting_started/televiz.rst
  • docs/source/references/egocentric_hand_reconstruction.rst
  • docs/source/references/license.rst
  • docs/source/references/migration.rst
  • docs/source/teleop/lerobot/data_collection_real.rst
  • docs/source/teleop/lerobot/data_collection_sim.rst
  • docs/source/teleop/lerobot/devices.rst
  • docs/source/teleop/lerobot/index.rst
  • docs/source/teleop/lerobot/rebot.rst
  • docs/source/teleop/lerobot/training_groot.rst

Included review availability: This review used your included allowance. Your plan provides up to 12 included reviews per hour; 11 remain after this review.

Walkthrough

The documentation pages now include immediate refresh directives that redirect browsers from legacy paths to replacement pages. The changes cover device, getting-started, reference, and teleoperation documentation.

Priority: Low

Estimated code review effort: 1 (Trivial) | ~5 minutes

Possibly related issues

Possibly related PRs

Merge Risk: Minimal · up to 06017

No merge-blocking issue was identified in the documentation redirects.

Pre-merge checks: Passed 5
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly and concisely describes the main change: adding redirects for documentation pages that moved to new locations.
Docstring Coverage Passed No eligible functions found in the changed files. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0 files. (34 skipped: 3…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

No eligible functions found in the changed files. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0 files. (34 skipped: 34 unsupported.)

Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@ivany-nv
ivany-nv requested a review from jiwenc-nv October 26, 2026 23:15
@ivany-nv ivany-nv self-assigned this Oct 26, 2026
@ivany-nv
ivany-nv requested a review from farbod-nv October 26, 2026 23:15
@github-actions

Copy link
Copy Markdown
Contributor

✅ Preview deployed: https://NVIDIA.github.io/IsaacCapture/preview/pr-1348/

Built from commit 06017c9. It may take a minute for the updated preview to appear.

@ivany-nv
ivany-nv merged commit fc4a256 into main Oct 26, 2026
42 checks passed
@ivany-nv
ivany-nv deleted the ivany-nv/egohand-redirect branch October 26, 2026 23:53
github-actions Bot added a commit that referenced this pull request Oct 26, 2026
ivany-nv pushed a commit that referenced this pull request Oct 28, 2026
Package the teleoperation examples with their configuration assets and update plugin discovery for the nested layout.

Part of #985.

Signed-off-by: Jiwen Cai <jiwenc@nvidia.com>
[Ivan Yang: rebased onto main past the guide reorganization, which moved
getting_started/quick_start.rst and getting_started/teleop_session.rst,
and #1290, which moved device/trackers.rst; #1348 turned the stubs they
left into redirects. The stubs keep main's
text; the same path edits are applied to teleop/quick_start.rst,
teleop/teleop_session.rst and device/trackers/index.rst. joint_space.rst
keeps main's text (the URDF note) with only the path and commands
reapplied. The pyproject.toml modify/delete conflict keeps main's glfw
dependency in the new root pyproject.toml. The modules main added since
(_example_loop.py and the gamepad, keyboard and SpaceMouse examples) move
into the package unchanged.]
Signed-off-by: Ivan Yang <yifanyang@nvidia.com>
ivany-nv added a commit that referenced this pull request Oct 28, 2026
* examples(oxr): package under isaaccapture_examples

Package the OpenXR examples while preserving the GPU test runner paths and plugin discovery.

Part of #985.

Signed-off-by: Jiwen Cai <jiwenc@nvidia.com>
[Ivan Yang: rebased onto main past #1348, which moved body_tracking.rst,
oak.rst and trackers.rst into subdirectories and left redirect stubs. The
stubs keep main's text; the same path edits are applied to
body_tracking/index.rst, cameras/oak.rst and trackers/index.rst.
python/README.md is deleted as in the original; the prerequisites link
that #1361 added to it is already in examples/oxr/README.md.]
Signed-off-by: Ivan Yang <yifanyang@nvidia.com>

* examples(oxr): move the CloudXR GPU test scripts to tests/

The test_*.py scripts are CI checks, not example code, so they move to
tests/python/xr_runtime/ instead of shipping in the example package. The
package keeps modular_example and modular_example_with_mcap.

- deps/cloudxr/Dockerfile.test copies tests/python/xr_runtime/ to
  /app/tests, so run_tests_with_cloudxr.sh lists the scripts by bare name
  again and the image's default command still finds test_extensions.py.
- The synthetic-hands, hand-inactive and OAK scripts find plugins through
  install_tree.plugins_dir(): the nearest install/plugins above the
  script, which is <checkout>/install/plugins or /app/install/plugins in
  the test image. They are no longer installed beside install/plugins.
- Docs and the OAK plugin README link the scripts at their new path.
- The example depends on isaaccapture[cloudxr], which both modules import
  for CloudXRLauncher, and no longer on numpy, which none imports. Its
  README lists the two modules and says to install isaaccapture first.
- tests/AGENTS.md says what the directory is and who runs it.

Signed-off-by: Ivan Yang <yifanyang@nvidia.com>

* examples(oxr): fix run instructions, plugin lookup and output paths

- README: the Python modules attach to or start CloudXR through
  CloudXRLauncher, which overwrites XR_RUNTIME_JSON, so the export is gone
  from both Python blocks. The README says how to stop the service, what
  --accept-eula does and how to use another runtime. The C++ blocks source
  ~/.cloudxr/run/cloudxr.env, as references/cloudxr.rst says, instead of
  exporting a file name the runtime never writes.
- README: install isaaccapture as Build from source step 4 does, pinned to
  X.Y+local with --reinstall-package, into a venv made with the build's
  Python. CI runs only the scripts listed in run_tests_with_cloudxr.sh,
  and the README says so and how to run one by hand.
- install_tree.plugins_dir() stops at the checkout root (VERSION plus
  CMakeLists.txt) or the test image's /app instead of walking to /, so a
  nested worktree no longer picks up another checkout's plugins. The three
  plugin scripts take --plugin-root for any other install prefix.
- modular_example_with_mcap and test_oak_camera write their MCAP under
  ./recordings/, which the root .gitignore covers, and create it.
- modular_example_with_mcap's docstring names McapRecordingConfig, not
  parameters DeviceIOSession.run() no longer takes.
- The OAK page and plugin README call test_oak_camera.py a test script
  and give its run line; tests/AGENTS.md uses a repo-root path.

Signed-off-by: Ivan Yang <yifanyang@nvidia.com>

* examples(oxr): complete the system-runtime and OAK run instructions

- references/cloudxr.rst: a system runtime also needs
  ISAAC_TELEOP_DISABLE_CXR_ENV_CHECKS, or OpenXRSession refuses to start
  without NV_CXR_RUNTIME_DIR. The oxr README links that section instead
  of restating half of it.
- oxr README: the C++ examples start the service with --accept-eula, as
  references/cloudxr.rst does.
- OAK page and plugin README: test_oak_camera.py loads the plugin from
  install/plugins, so it needs a full build and install, not only the
  camera_plugin_oak target, and isaaccapture in the active environment.
- --plugin-root and --mode help use %(default)s, so --mode shows its real
  default and a '%' in the checkout path no longer breaks --help.
- .gitignore describes what lands in /recordings/ instead of listing it;
  test_oak_camera's docstring says the MCAP goes under the current
  directory.

Signed-off-by: Ivan Yang <yifanyang@nvidia.com>

---------

Signed-off-by: Jiwen Cai <jiwenc@nvidia.com>
Signed-off-by: Ivan Yang <yifanyang@nvidia.com>
Co-authored-by: Jiwen Cai <jiwenc@nvidia.com>
ivany-nv added a commit that referenced this pull request Oct 28, 2026
* examples(teleop): package under isaaccapture_examples

Package the teleoperation examples with their configuration assets and update plugin discovery for the nested layout.

Part of #985.

Signed-off-by: Jiwen Cai <jiwenc@nvidia.com>
[Ivan Yang: rebased onto main past the guide reorganization, which moved
getting_started/quick_start.rst and getting_started/teleop_session.rst,
and #1290, which moved device/trackers.rst; #1348 turned the stubs they
left into redirects. The stubs keep main's
text; the same path edits are applied to teleop/quick_start.rst,
teleop/teleop_session.rst and device/trackers/index.rst. joint_space.rst
keeps main's text (the URDF note) with only the path and commands
reapplied. The pyproject.toml modify/delete conflict keeps main's glfw
dependency in the new root pyproject.toml. The modules main added since
(_example_loop.py and the gamepad, keyboard and SpaceMouse examples) move
into the package unchanged.]
Signed-off-by: Ivan Yang <yifanyang@nvidia.com>

* examples(teleop): fix what the package move left behind

- Import _example_loop relatively in the two examples that share it.
- Declare the cloudxr extra: every module starts CloudXR through
  CloudXRLauncher. The bimanual examples' ImGui tuning window comes from
  the example's optional ui extra and is imported only under
  --enable-tuning: imgui 2.0.0 does not build on Python 3.13, so a base
  dependency would break every example's install there.
- Remove examples/teleop/CMakeLists.txt. examples/CMakeLists.txt never
  adds it, so nothing installs teleop; the plugin-dir comments say the
  repo root has no plugins/ directory instead of naming an install path.
- joint_space_device_example's default --plugin-bin tries build/, then
  install/plugins, then PATH, as oglo_tactile's does, so a wheel install
  still finds a built plugin.
- Add a README that lists the modules and the command that runs them.
- Docs: the commands and paths main added since the original commit
  (Quick Start --duration, teleop_session, CloudXR
  --no-launch-cloudxr-runtime, gamepad, SpaceMouse), the Quick Start and
  CloudXR install steps, runnable module names in the Quick Start's list
  of other examples, and the retargeting page's directory link.
- Tests import the examples through isaaccapture_examples.teleop.

Part of #985.

Signed-off-by: Ivan Yang <yifanyang@nvidia.com>

* examples(teleop): name both install paths; fail fast without ui

- The README and the Teleop Session page say how to install isaaccapture
  from a source build as well as from the package index.
- dex_bimanual_example and full_bimanual_reordering_example check for the
  ui extra right after parsing arguments, so --enable-tuning without it
  exits with the install command before the retargeters load and
  CloudXR starts.
- The README says imgui 2.0.0 has wheels only for Python 3.11: 3.12
  builds it from source with a C++ toolchain, and 3.13 cannot build it.

Part of #985.

Signed-off-by: Ivan Yang <yifanyang@nvidia.com>

---------

Signed-off-by: Ivan Yang <yifanyang@nvidia.com>
Co-authored-by: Jiwen Cai <jiwenc@nvidia.com>

This branch was previously deployed

1 inactive deployment
dev — 06017c98 Deployed Oct 26, 2026 by ivany-nv via publish-wheel #6043
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants