Skip to content

Build docs from the extra that provides Sphinx - #7834

Merged
ooctipus merged 3 commits into
isaac-sim:developfrom
vidurv-nvidia:vidurv/fix-docs-build-extra
Sep 19, 2026
Merged

ooctipus merged 3 commits into
isaac-sim:developfrom
vidurv-nvidia:vidurv/fix-docs-build-extra

Conversation

@vidurv-nvidia

Copy link
Copy Markdown
Contributor

Description

isaaclab -d (and ./isaaclab.sh -d) fails on develop:

$ ./isaaclab.sh -d
[INFO] Building documentation...
Installed 199 packages in 156ms
/home/.../bin/python: No module named sphinx
[ERROR] Command failed with code 1: "uv run --isolated --extra test -- python -m sphinx ..."

command_build_docs() in source/isaaclab/isaaclab/cli/commands/misc.py resolves its isolated environment from the test extra, but the Sphinx toolchain is declared in the dev extra (pyproject.toml: sphinx, sphinx-book-theme, sphinxcontrib-bibtex, sphinx-copybutton, sphinx-icon). test declares none of them.

This matters beyond the command itself: AGENTS.md instructs contributors to run ./isaaclab.sh -d after adding or changing public API symbols, so the documented workflow has been failing.

One-word fix: build from dev.

Type of change

  • Bug fix (non-breaking change which fixes an issue)

Testing

Verified both directions on the same checkout, changing only this line:

state result
clean develop No module named sphinx, exit 1
with this change build succeeds, docs/_build/current/index.html produced

Checklist

  • I have read and understood the contribution guidelines
  • I have run the pre-commit checks with ./isaaclab.sh --format
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • I have added a changelog fragment under source/<pkg>/changelog.d/ for every touched package
  • I have added my name to the CONTRIBUTORS.md or my name already exists there

The documentation build resolved its isolated environment from the ``test``
extra, which does not declare the Sphinx toolchain, so ``isaaclab -d`` failed
with ``No module named sphinx``. Point it at the ``dev`` extra, which declares
sphinx and the theme and extension packages the build needs.
@vidurv-nvidia
vidurv-nvidia requested a review from a team September 15, 2026 22:01
@github-actions github-actions Bot added bug Something isn't working isaac-lab Related to Isaac Lab team labels Sep 15, 2026

@isaaclab-review-bot isaaclab-review-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isaac Lab Review Bot

Updates the documentation build command to resolve its isolated environment from the existing dev extra that provides Sphinx, with a corresponding user-visible changelog fragment.

  • Design and architecture: The change is confined to the documentation command’s dependency-resolution boundary and reuses the project’s existing dev extra rather than duplicating Sphinx dependencies elsewhere. The main tradeoff is resolving the broader development dependency set for documentation builds.
  • API: The command names and arguments for isaaclab -d and ./isaaclab.sh -d remain unchanged. Their intended behavior is restored by making the required Sphinx toolchain available, and the change is documented in the package changelog fragment.
  • Implementation: The updated --extra dev argument directly affects the isolated uv run invocation that launches python -m sphinx. The Sphinx options, documentation working directory, output path, and command execution path remain unchanged.

No blocking issues. No inline issue met the actionable-evidence threshold; the assessment above records the review feedback.

Automated review; human maintainers own approval decisions.

@greptile-apps

greptile-apps Bot commented Sep 15, 2026

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 4/5

The dependency fix itself is sound, but the PR should not merge until the existing CLI unit test is updated to accept the new dev argument.

Findings

  1. P1 Docs command test now fails

Summary

This PR fixes the isolated documentation build by selecting the root dev extra, which provides Sphinx and the configured documentation extensions.

  • Changes command_build_docs() from the test-only dependency extra to the docs-capable development extra.
  • Adds a changelog fragment explaining the corrected dependency selection.
  • Leaves the directly related CLI unit test expecting the previous extra.

Reviews (1) · Last reviewed commit: "Build docs from the extra that provides ..."

"--isolated",
"--extra",
"test",
"dev",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Docs command test now fails

Changing this command to pass the dev extra leaves test_build_docs_runs_sphinx_with_the_uv_test_extra expecting --extra test. The targeted CLI test will fail until its expected command and name reflect the new docs environment.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

@ooctipus

Copy link
Copy Markdown
Collaborator

run-ci

@isaaclab-bot isaaclab-bot Bot added ci:run-docker Trigger the on-demand Docker and GPU CI workflow and removed ci:run-docker Trigger the on-demand Docker and GPU CI workflow labels Sep 17, 2026
kellyguo11 pushed a commit that referenced this pull request Sep 17, 2026
)

Franka Lift can stall while filling its reset-state bank: the updated
`franka_panda.usda` defaults to `Colliders=primitives`, whose first-link
capsule extends 6 cm below the ground. The existing ground-clearance
criterion rejects every candidate, leaving the RSL-RL export batch at
`0/2048` until its 600-second timeout. This PR selects
`Colliders=convex_hulls` on the robot configuration shared by rigid
Franka Lift and Reorient, restoring the previous collision geometry and
successful reset sampling.

The affected asset and reset setup originated in
[#6457](#6457)
([564a008](564a008)),
then moved into the current Lift tasks in
[#6732](#6732)
([73106da](73106da)).
The triggering change is external: the production Franka asset's top
layer now selects primitive colliders and reports `Last-Modified:
2026-09-15 22:49:27 GMT`. Controlled comparisons found 0 valid states in
128 draws with the new default; explicit convex hulls and the preserved
old asset both produced 63 valid states from the same draws.

The same reset hang appeared in CI for #7838, #7608, #7832, #7834, and
#7866. [The #7866 RL
log](https://github.com/isaac-sim/IsaacLab/actions/runs/35202342707/job/105139978507)
shows the batch blocked on Franka Lift after environment setup. #7866
fixes the independently configured Franka Pour task; it does not change
Lift's robot configuration. This change covers Lift/Reorient only.

Validation:

- Fresh regression check on this branch: both Lift/Reorient cases failed
without the production fix; all 9 tests in `test_lift_env_cfg.py` passed
with it.
- `uv run isaaclab -f` passed.
- Earlier GPU validation of the identical Lift change completed the
original 2,048-state harvest and reset in 22.169 seconds; the existing
four-task RSL-RL export batch passed in 107.92 seconds.
- Local GPU validation used PyTorch 2.11+cu128, Newton 1.6rc1, and
RSL-RL 5.4.1. The identical Lift fix also passed [the full
locked-environment RL CI job in
#7865](https://github.com/isaac-sim/IsaacLab/actions/runs/35207648168/job/105158711330).

Reset-bank sizes, clearance criteria, export behavior, the global Franka
defaults, and Pour remain unchanged.
kellyguo11 pushed a commit to kellyguo11/IsaacLab-public that referenced this pull request Sep 17, 2026
…aac-sim#7870)

Franka Lift can stall while filling its reset-state bank: the updated
`franka_panda.usda` defaults to `Colliders=primitives`, whose first-link
capsule extends 6 cm below the ground. The existing ground-clearance
criterion rejects every candidate, leaving the RSL-RL export batch at
`0/2048` until its 600-second timeout. This PR selects
`Colliders=convex_hulls` on the robot configuration shared by rigid
Franka Lift and Reorient, restoring the previous collision geometry and
successful reset sampling.

The affected asset and reset setup originated in
[isaac-sim#6457](isaac-sim#6457)
([564a008](isaac-sim@564a008)),
then moved into the current Lift tasks in
[isaac-sim#6732](isaac-sim#6732)
([73106da](isaac-sim@73106da)).
The triggering change is external: the production Franka asset's top
layer now selects primitive colliders and reports `Last-Modified:
2026-09-15 22:49:27 GMT`. Controlled comparisons found 0 valid states in
128 draws with the new default; explicit convex hulls and the preserved
old asset both produced 63 valid states from the same draws.

The same reset hang appeared in CI for isaac-sim#7838, isaac-sim#7608, isaac-sim#7832, isaac-sim#7834, and
isaac-sim#7866. [The isaac-sim#7866 RL
log](https://github.com/isaac-sim/IsaacLab/actions/runs/35202342707/job/105139978507)
shows the batch blocked on Franka Lift after environment setup. isaac-sim#7866
fixes the independently configured Franka Pour task; it does not change
Lift's robot configuration. This change covers Lift/Reorient only.

Validation:

- Fresh regression check on this branch: both Lift/Reorient cases failed
without the production fix; all 9 tests in `test_lift_env_cfg.py` passed
with it.
- `uv run isaaclab -f` passed.
- Earlier GPU validation of the identical Lift change completed the
original 2,048-state harvest and reset in 22.169 seconds; the existing
four-task RSL-RL export batch passed in 107.92 seconds.
- Local GPU validation used PyTorch 2.11+cu128, Newton 1.6rc1, and
RSL-RL 5.4.1. The identical Lift fix also passed [the full
locked-environment RL CI job in
isaac-sim#7865](https://github.com/isaac-sim/IsaacLab/actions/runs/35207648168/job/105158711330).

Reset-bank sizes, clearance criteria, export behavior, the global Franka
defaults, and Pour remain unchanged.

(cherry picked from commit c5d33ef)
@vidurv-nvidia vidurv-nvidia added the ci:run-docker Trigger the on-demand Docker and GPU CI workflow label Sep 17, 2026
kellyguo11 pushed a commit to kellyguo11/IsaacLab-public that referenced this pull request Sep 17, 2026
…aac-sim#7870)

Franka Lift can stall while filling its reset-state bank: the updated
`franka_panda.usda` defaults to `Colliders=primitives`, whose first-link
capsule extends 6 cm below the ground. The existing ground-clearance
criterion rejects every candidate, leaving the RSL-RL export batch at
`0/2048` until its 600-second timeout. This PR selects
`Colliders=convex_hulls` on the robot configuration shared by rigid
Franka Lift and Reorient, restoring the previous collision geometry and
successful reset sampling.

The affected asset and reset setup originated in
[isaac-sim#6457](isaac-sim#6457)
([564a008](isaac-sim@564a008)),
then moved into the current Lift tasks in
[isaac-sim#6732](isaac-sim#6732)
([73106da](isaac-sim@73106da)).
The triggering change is external: the production Franka asset's top
layer now selects primitive colliders and reports `Last-Modified:
2026-09-15 22:49:27 GMT`. Controlled comparisons found 0 valid states in
128 draws with the new default; explicit convex hulls and the preserved
old asset both produced 63 valid states from the same draws.

The same reset hang appeared in CI for isaac-sim#7838, isaac-sim#7608, isaac-sim#7832, isaac-sim#7834, and
isaac-sim#7866. [The isaac-sim#7866 RL
log](https://github.com/isaac-sim/IsaacLab/actions/runs/35202342707/job/105139978507)
shows the batch blocked on Franka Lift after environment setup. isaac-sim#7866
fixes the independently configured Franka Pour task; it does not change
Lift's robot configuration. This change covers Lift/Reorient only.

Validation:

- Fresh regression check on this branch: both Lift/Reorient cases failed
without the production fix; all 9 tests in `test_lift_env_cfg.py` passed
with it.
- `uv run isaaclab -f` passed.
- Earlier GPU validation of the identical Lift change completed the
original 2,048-state harvest and reset in 22.169 seconds; the existing
four-task RSL-RL export batch passed in 107.92 seconds.
- Local GPU validation used PyTorch 2.11+cu128, Newton 1.6rc1, and
RSL-RL 5.4.1. The identical Lift fix also passed [the full
locked-environment RL CI job in
isaac-sim#7865](https://github.com/isaac-sim/IsaacLab/actions/runs/35207648168/job/105158711330).

Reset-bank sizes, clearance criteria, export behavior, the global Franka
defaults, and Pour remain unchanged.

(cherry picked from commit c5d33ef)
kellyguo11 pushed a commit to kellyguo11/IsaacLab-public that referenced this pull request Sep 17, 2026
…aac-sim#7870)

Franka Lift can stall while filling its reset-state bank: the updated
`franka_panda.usda` defaults to `Colliders=primitives`, whose first-link
capsule extends 6 cm below the ground. The existing ground-clearance
criterion rejects every candidate, leaving the RSL-RL export batch at
`0/2048` until its 600-second timeout. This PR selects
`Colliders=convex_hulls` on the robot configuration shared by rigid
Franka Lift and Reorient, restoring the previous collision geometry and
successful reset sampling.

The affected asset and reset setup originated in
[isaac-sim#6457](isaac-sim#6457)
([564a008](isaac-sim@564a008)),
then moved into the current Lift tasks in
[isaac-sim#6732](isaac-sim#6732)
([73106da](isaac-sim@73106da)).
The triggering change is external: the production Franka asset's top
layer now selects primitive colliders and reports `Last-Modified:
2026-09-15 22:49:27 GMT`. Controlled comparisons found 0 valid states in
128 draws with the new default; explicit convex hulls and the preserved
old asset both produced 63 valid states from the same draws.

The same reset hang appeared in CI for isaac-sim#7838, isaac-sim#7608, isaac-sim#7832, isaac-sim#7834, and
isaac-sim#7866. [The isaac-sim#7866 RL
log](https://github.com/isaac-sim/IsaacLab/actions/runs/35202342707/job/105139978507)
shows the batch blocked on Franka Lift after environment setup. isaac-sim#7866
fixes the independently configured Franka Pour task; it does not change
Lift's robot configuration. This change covers Lift/Reorient only.

Validation:

- Fresh regression check on this branch: both Lift/Reorient cases failed
without the production fix; all 9 tests in `test_lift_env_cfg.py` passed
with it.
- `uv run isaaclab -f` passed.
- Earlier GPU validation of the identical Lift change completed the
original 2,048-state harvest and reset in 22.169 seconds; the existing
four-task RSL-RL export batch passed in 107.92 seconds.
- Local GPU validation used PyTorch 2.11+cu128, Newton 1.6rc1, and
RSL-RL 5.4.1. The identical Lift fix also passed [the full
locked-environment RL CI job in
isaac-sim#7865](https://github.com/isaac-sim/IsaacLab/actions/runs/35207648168/job/105158711330).

Reset-bank sizes, clearance criteria, export behavior, the global Franka
defaults, and Pour remain unchanged.

(cherry picked from commit c5d33ef)
@ooctipus

Copy link
Copy Markdown
Collaborator

run-ci

@isaaclab-bot isaaclab-bot Bot removed the ci:run-docker Trigger the on-demand Docker and GPU CI workflow label Sep 19, 2026
@isaaclab-bot isaaclab-bot Bot added ci:run-docker Trigger the on-demand Docker and GPU CI workflow and removed ci:run-docker Trigger the on-demand Docker and GPU CI workflow labels Sep 19, 2026
@ooctipus
ooctipus merged commit 9bae4fd into isaac-sim:develop Sep 19, 2026
53 checks passed
ooctipus added a commit that referenced this pull request Sep 20, 2026
…7904)

## Description

Backports ten `develop` PRs to `release/3.0.0`, including the PyTorch
2.12/CUDA 13.0 upgrade, the near-singular OSC fix, and the complete
cfg-first cloning and schema-fragment migrations.

The audit covers September 17, 2026 00:00 UTC through `develop` commit
`4269c29a39e463dd07c74a9704d890d7a5c01e08` (September 19, 23:55 UTC),
against release base `970d21ef48057a2efc3d749c0f2abab8e7e0c30e`.

| Source PR | Included change |
| --- | --- |
| #7777 | Refresh Newton solver transforms after fixed-root pose writes
|
| #7608 | Make direct cloning cfg-first, including assets, callers,
templates, tests, and migration documentation |
| #7895 | Apply the existing CI exclusion for Franka cable/cloth/soft
kitless rendering tests |
| #7872 | Load the CUDA runtime matching PyTorch for Newton graph
capture |
| #7831 | Check authored Newton mesh-collision schema tokens correctly |
| #7834 | Build documentation with the extra that provides Sphinx |
| #7838 | Migrate maintained consumers to physics schema fragments,
including readers and overrides |
| #7840 | Consistently name Isaac Lab 3.1 as the deprecation removal
release |
| #7903 | Handle near-singular operational-space control |
| #7674 | Upgrade PyTorch to 2.12, TorchVision to 0.27, and the CUDA
stack to 13.0, including installer, wheel, and cuRobo compatibility
changes |

All 305 changed non-lock files match the audited `develop` snapshot
exactly. The remaining file, `uv.lock`, matches that snapshot after
substituting the package versions from the release branch's existing
manifests; all 418 package entries were checked. Existing release
package versions, compiled changelogs, documentation routing, and OVRTX
compatibility code remain intact, including the #7880 revert. Source
commit hashes are recorded in the commit messages.

### Already present

#7866, #7870, #7867, #7869, and #7868 were included in #7851; #7819 was
backported by #7884; #7883, #7885, and #7887 were backported by #7889.
#7874, #7888, #7773, #7886, and #7042 were also already present.

The three automatic changelog/version compilation commits are excluded;
the release branch compiles its own fragments and maintains its own
versions.

## Type of change

- Release integration/backport
- Bug fixes and documentation updates
- Breaking changes already accepted for the 3.0 cloning and schema
migrations; their migration guidance and changelog fragments are
included

## Validation

- `uv run --no-sync isaaclab -f`: all checks passed using the existing
shared environment and the release base for changelog validation.
- Focused cloning, OSC feature, schema parity/shim, CLI, and task
configuration suite: **283 passed**.
- Newton fixed-root updates and CUDA runtime/capture regressions: **14
passed**.
- Complete OSC simulation suite: **21 passed**.
- Mesh-collision fragments: **17 passed**; cfg-first cloning
integration: **16 passed**; scene construction/ownership: **7 passed**.
- The above **358 tests passed with PyTorch 2.11**.
- With **PyTorch 2.12/CUDA 13.0**: installer/metadata/Docker tests **91
passed**; CPU/GPU OSC feature tests **17 passed**; complete OSC
simulation suite **21 passed**.
- `uv lock --check`: passed; release package manifests match their
lockfile entries.
- Repository skill validation: **23 skills passed**.
- File-by-file source audit, release-metadata preservation checks, and
`git diff --check`: passed.

Local simulation used RTX 5090 and Isaac Sim 6.0.1 with PyTorch 2.11 and
2.12. The full Docker image build and fresh installation matrix were not
rerun locally for this backport. Release CI uses its pinned Isaac Sim
6.1 image and remains the authoritative full integration check.
Kit-dependent suites run in separate processes to avoid loading
standalone USD before Kit.

## Release backport

Not applicable: this PR targets `release/3.0.0` directly.

## Checklist

- [x] Ran the complete pre-commit command.
- [x] Included the original migration documentation, regression tests,
and changelog fragments for every changed package.
- [x] Preserved source attribution and recorded every source commit.
- [x] Preserved the release branch's versions and existing
release-specific changes.

---------

Co-authored-by: vidurv-nvidia <vidurv@nvidia.com>
Co-authored-by: ooctipus <ooctipus@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working isaac-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants