Skip to content

[Docs] DOC-007: Migration guide: per-section review owners and checks - #8389

Merged
kellyguo11 merged 3 commits into
isaac-sim:developfrom
AntoineRichard:antoiner/docs/doc-007-migration-guide-owners
Oct 10, 2026
Merged

kellyguo11 merged 3 commits into
isaac-sim:developfrom
AntoineRichard:antoiner/docs/doc-007-migration-guide-owners

Conversation

@AntoineRichard

@AntoineRichard AntoineRichard commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator

Description

Before the 3.0 release, the domain owners need to review the "Migrating to 3.0" guide (docs/source/migration/migrating_to_isaaclab_3-0.rst and docs/source/migration/include/*) one section at a time. This PR assigns each section to likely reviewers and gives each one a concrete check. Reviewers come from .github/CODEOWNERS and from git log on the source the section describes, counting commits since 2025-10. Names are plain handles with no mentions, so nobody is pinged yet.

While preparing the checklist, I compared every Sphinx cross-reference and every from X import Y in the guide against the source tree. I fixed the statements that were clearly stale. No other content was rewritten.

Doc fixes in this PR

  • Actuator limit aliases: the guide said they stay "through the 3.x release line and will be removed in 3.1". actuator_base_cfg.py says they are removed in 3.1, so the guide now says that.
  • RayCasterCfg.attach_yaw_only: the guide called it deprecated, but it was removed (isaaclab CHANGELOG 4.6.11).
  • isaaclab.utils.math.convert_quat: the guide said it was removed. It still exists and is still called by the HDF5 dataset handler and a contrib task, so the guide now says it is no longer needed for Isaac Lab data and is kept for external WXYZ data.
  • Legacy write_*_to_sim(data, env_ids): the guide said these were removed. They are deprecated forwarders to the _index variants.
  • MJCF importer: fix_base and link_density came out of the "Removed Settings" list. They were added back to MjcfConverterCfg in Updates URDF/MJCF importer to use the latest Isaac Sim importer #5394.
  • MJCF collision_type example: replaced "default", which the Literal type does not accept, with values it does accept.
  • Data Access and Math overview card: write_root_pose_to_sim_index(pose, env_ids) became write_root_pose_to_sim_index(root_pose=pose, env_ids=env_ids), since its arguments are keyword-only on every backend.
  • XR teleop install: pip install isaacteleop~=1.0 --extra-index-url ... became uv sync --extra teleop --extra isaacsim. The teleop extra pins isaacteleop~=1.4.145, and uv is the only supported install method.

The skills/user/migrate-2x-to-3x/ skill does not repeat any of these claims, so it needs no change.

Per-section review checklist

Format: Section — reviewers — check. "Verified" means the symbol or path was found in develop. Each reviewer still needs to run the snippets in a real environment.

Isaac Lab 2.x → 3.0

  • Installation — StafaH, kellyguo11, myurasov-nv — On a fresh checkout, run uv sync --extra isaacsim and the isaaclab train ... physics=isaacsim_physx command. Confirm that the isaacsim / ovphysx extras and the installation-method-uv reference still match pyproject.toml. Verified: isaaclab.sh / isaaclab.bat are gone.
  • Multi-Backend Architecture and Presets (overview, Multi-Backend Architecture, New isaaclab_physx / isaaclab_newton Extensions, Backend-Neutral Imports, Newton Backend Implementations) — AntoineRichard, ooctipus, StafaH — Run the import snippets under the PhysX, Newton and OVPhysX presets. Confirm the factory still resolves backend classes by module path. Confirm that SurfaceGripper is only in isaaclab_physx, and that the list of Newton-backed classes is complete (deformables and other sensors). Verified: all referenced classes exist.
  • Schema Configuration Class Refactor — vidurv-nvidia, ooctipus, mmichelis — For every row of the deprecated-class → fragment table, construct the deprecated class and compare its warning with the listed replacement set. Confirm that the three warnings.filterwarnings regexes still match the emitted messages (they match schemas_cfg.py today). Check the removal versions: classes go in 3.2, the max_effort / max_velocity field aliases in 4.0. The gravcomp note recommends MujocoRigidBodyPropertiesCfg, which is itself deprecated; decide whether it should point at MujocoRigidBodyCfg. Verified: all fragment classes and apply_* writers exist.
  • Multi-Backend Support: PresetCfg Pattern — ooctipus, StafaH, AntoineRichard — Run --task Isaac-Open-Drawer-Franka-Direct physics=newton_mjwarp and the default launch. Check that the Reach "After" snippet still matches the Reach task source, and that the MJWarpSolverCfg parameter table matches the cfg fields. The first MyPhysicsCfg snippet uses PhysxCfg / NewtonCfg without importing them; decide whether to add the imports. Verified: isaaclab.physics.PhysxAutoCfg and isaaclab_tasks.utils.PresetCfg exist.
  • Isaac Sim API Compatibility — kellyguo11, ooctipus, hujc7 — Compare the module rename table with the Isaac Sim 6.1 deprecation list. Run the enable_extension(...) + XformPrim snippet inside Kit. Verified: every listed isaaclab.sim.utils.{stage,prims,queries} function exists, PhysxManager / NewtonManager are exported, source/isaaclab/test/deps/isaacsim is gone, and no apps/*.kit contains extsDeprecated.
  • PhysX Tensors API Module Path — AntoineRichard, ooctipus, kellyguo11 — Confirm on Isaac Sim 6.1 that omni.physics.tensors.api exposes the view types. Verified: source/ no longer imports omni.physics.tensors.impl.
  • Renaming of XformPrimView to FrameView — ooctipus, AntoineRichard, StafaH — Confirm that the deprecated XformPrimView alias is still exported and warns, and that the FrameView factory dispatches to FabricFrameView (PhysX) and NewtonSiteFrameView (Newton). Verified: all five new classes exist.
  • Actuator effort and joint-limit names — ooctipus, StafaH, AntoineRichard — Run an explicit-actuator task and confirm the behaviour change (the solver keeps joint_effort_limit). Confirm that the resolve_joint_parameter(...) call in the snippet matches its signature. Verified: every read and write target in the removed-group-property table exists, with dynamic friction only on PhysX and OVPhysX. Fixed: removal version.
  • Actuator API Moves to ActuatorCollection — ooctipus, StafaH, AntoineRichard (LEAPP exception: frlai) — Run the before/after example. Confirm the set_*_index / _mask setters are keyword-only and that the LEAPP exception still holds. Verified: target_command, computed_effort and applied_effort exist, and ArticulationData.gear_ratio is gone.
  • RigidObjectCollection API Renaming — AntoineRichard, ooctipus — The rename table and the "After" example point at write_body_state_to_sim and similar methods, which are themselves deprecated forwarders in 3.0. Decide whether to point at the _index / _mask variants instead. Confirm that every listed object_* property still forwards.
  • Deformable Object API Changes + Migration of Deformables (include/deformables.rst) — mmichelis, ooctipus, AntoineRichard — Run examples/deformables.py on PhysX and Newton, and the volume before/after snippet. Confirm the removed-property table against PhysxDeformableBodyPropertiesCfg. Verified: every listed material and props cfg is exported from isaaclab_physx.sim / isaaclab_newton.sim, and linear_damping / settling_damping exist.
  • IMU Sensor Renamed to PVA; New Lightweight IMU Sensor — AntoineRichard, ooctipus, StafaH — Check the gravity claims: PVA acceleration excludes gravity and IMU always includes it. Confirm that ImuData only exposes ang_vel_b / lin_acc_b. Verified: pva_orientation / pva_projected_gravity exist and gravity_bias is gone.
  • Sensor Pose Properties Deprecation — ooctipus, AntoineRichard — Confirm that ContactSensorData.pose_w / pos_w / quat_w emit a deprecation warning on every backend, and run the FrameTransformer replacement snippet.
  • Contact force property names — ooctipus, AntoineRichard, yufengsjtu — Check every row of the backend table on PhysX, OVPhysX and Newton: the warn paths and the NotImplementedError for net_friction_forces_w* on PhysX. Verified: every listed property exists on the base and backend data classes.
  • Articulation Joint Wrench Data Moved to JointWrenchSensor — ooctipus, AntoineRichard, StafaH — Run both scene snippets. Confirm the body-ordering claim: PhysX includes the root link, Newton reports child bodies only. Verified: body_incoming_joint_wrench_b is gone, and mdp.body_incoming_wrench, body_names and find_bodies exist.
  • Ray Caster Warp Backend — ooctipus, AntoineRichard, pascal-roth — Run the RayCasterCfg(ray_alignment="yaw") snippet. Verified: env_mask is the first kernel argument and RayCaster.meshes is keyed by (prim_path, device). Fixed: attach_yaw_only is removed, not deprecated.
  • Quaternion Format / Quaternion Finder Tool / Runtime Quaternion Access Detector / Quaternion Utility API Changes / Quaternion Migration Checklist — AntoineRichard, StafaH — Run scripts/tools/find_quaternions.py with every documented flag (--path, --base, --check-identity, --likely-wxyz, --all-quats, --fix, --fix-identity-only, --dry-run, --force) and check the sample output format. Verified: WARN_ON_TORCH_QUATF_ACCESS exists in proxy_array.py. Fixed: convert_quat still exists.
  • ProxyArray Backend for Asset and Sensor Data / ProxyArray Interop — AntoineRichard, StafaH, ooctipus — Confirm that the affected-classes table should also list the Newton and OVPhysX sensors. Run the torch.* bridge and confirm its one-time DeprecationWarning. Verified: the wp.to_torch shim, __torch_function__ and __cuda_array_interface__ all exist.
  • Write Method Index/Mask Split — AntoineRichard — Confirm that every listed _index / _mask writer exists on Articulation, RigidObject and RigidObjectCollection for every backend. Fixed: the legacy writers are deprecated forwarders, not removed, and the Data Access and Math overview card now uses keyword arguments.
  • Timestamped buffers — ooctipus, AntoineRichard — Run the TimestampedBuffer(wp.zeros(...)) snippet. Verified: TimestampedBufferWarp is gone.
  • Reinforcement Learning CLI Entrypoints / Unified Checkpoint and Iteration Arguments — StafaH, ooctipus, kellyguo11 (RLinf rows: mingxueg-nv) — Run isaaclab train and isaaclab play for each of rsl_rl, rl_games, skrl, sb3 and rlinf, plus the torch.distributed.run command. Check the --checkpoint latest|best|pretrained support matrix and the RLinf --model_path / --checkpoint semantics. Verified: scripts/reinforcement_learning/train.py exists.
  • Visualizer CLI and Headless Behavior — matthewtrepte, StafaH, kellyguo11 — Confirm that --headless is rejected, then check HEADLESS=1 with --viz kit (plus --enable_cameras) and with --viz newton_gl, and run --video viz:kit.
  • Viewport Camera Configuration (ViewerCfg deprecated) — matthewtrepte, ooctipus — Confirm the viewer.* shim and the ViewportCameraController warning. Run the KitVisualizerCfg(origin_type="asset", origin_track_path=...) snippet. Check the custom-visualizer initialize(..., cameras=, stage=) paragraph against base_visualizer.py. Verified: resolve_camera_sources and get_visualized_env_ids exist.
  • Streaming Camera View (tiled_cam_* fields removed) — matthewtrepte, ooctipus, pbarejko — Run the NewtonGLVisualizerCfg(streaming_*) snippet with a scene-declared camera. Confirm that the removed helpers are gone. Verified: resolve_streaming_envs and Camera.set_world_poses_from_view exist.
  • Newton Visualizer Type Split — matthewtrepte, StafaH — Confirm that NewtonVisualizerCfg warns, that --viz newton aliases to newton_gl, and that visualizer:newton / viz:newton_gl work as video sources.
  • Video Recording (gym.wrappers.RecordVideo replaced) — matthewtrepte, ooctipus — Run the VideoRecorderCfg(source="viz", ...) snippet. Confirm eye / lookat were removed and recording_hooks is gone. Verified: SimulationContext.add_render_callback exists.
  • URDF Importer — kellyguo11, stevfeng, ooctipus — With the Isaac Sim 6.1 importer, run convert_urdf.py with the documented flags and the Python before/after snippet. Confirm that the deprecated settings warn and that the output path is {usd_dir}/{robot_name}/{robot_name}.usda. Verified: the CLI flags exist.
  • MJCF Importer — kellyguo11, stevfeng — Run convert_mjcf.py with the documented flags and the Python snippet. The Python before/after example still drops fix_base, which is now supported again; decide whether to keep it. Fixed: fix_base / link_density are no longer listed as removed, and collision_type examples are valid values.
  • Benchmark Workflows — AntoineRichard, StafaH, ooctipus — Run the runtime, training, play and startup commands and --benchmark_formatter schema,omniperf. The guide says the "transitional runtime, startup, training, and play scripts were removed", but scripts/benchmarks/{runtime,startup,training,play}.py still exist as supported launchers; clarify which scripts are meant. The PhysX micro-benchmarks now live under source/isaaclab_physx/benchmark/{assets,sensors}/. Verified: isaaclab.test.benchmark is gone and the formatter names match BenchmarkFormatter.
  • XR Teleoperation: Isaac Capture Integration — rwiltz, hougantc-nvda, kellyguo11 — Run the pipeline-builder snippet against the pinned isaacteleop~=1.4. Confirm that the deprecated isaaclab.devices.openxr classes warn and that the import-mapping table is still accurate. Fixed: install command.
  • Section overview cards (Assets, Actuators, and Sensors / Data Access and Math / Reinforcement Learning / Visualizers, Cameras, and Recording / Tools and Integrations) — ooctipus (Assets), AntoineRichard (Data Access), StafaH (Reinforcement Learning), matthewtrepte (Visualizers), kellyguo11 (Tools) — Check each 2.x/3.0 card against the detailed subsections below it, and run the 3.0 card snippets.
  • Getting Help — AntoineRichard, kellyguo11 — Check the links. The CHANGELOG link points at main.

Isaac Gym / IsaacGymEnvs (include/from_isaacgymenvs.rst, include/comparing_simulation_isaacgym.rst)

  • Migration from Isaac Gym and IsaacGymEnvs — StafaH, kellyguo11, ooctipus — Compare the snippets with source/isaaclab_tasks/isaaclab_tasks/core/cartpole, then run the training and inference commands. Verified: the referenced classes and the CARTPOLE_CFG import exist.
  • Comparing Simulations Between Isaac Gym and Isaac Lab — kellyguo11, StafaH — Re-run the OmniPVD recording workflow with isaaclab benchmark runtime and the current kit args.

Cross-cutting

  • Agent skills sync — StafaH, AntoineRichard — After the reviews above land, update skills/user/migrate-2x-to-3x/ and skills/user/migrate-from-isaac-gym/ to match, since the guide is their source of truth.

Validation

  • Clean docs build (uv run --extra dev make -C docs current-docs, which runs sphinx-build -W --keep-going): succeeded with 0 warnings, and the changed passages render. Sphinx does not run in nitpicky mode, so unresolved py: cross-references would not fail this build. The symbol check below covers them.
  • pre-commit run --files docs/source/migration/migrating_to_isaaclab_3-0.rst: all hooks passed.
  • Static symbol check: a throwaway script, not committed, resolved every :class: / :func: / :meth: / :attr: / :mod: target and every from X import Y in the four migration files against source/. The only unresolved targets were intentional 2.x "before" snippets. I also used targeted greps for the CLI flags, file paths and deprecation messages listed above. I did not run any snippet in a simulator.
  • Docs-only change outside source/<pkg>/, so no changelog fragment is needed.

Type of change

  • Documentation update

Release backport

  • Backport this pull request to the active release branch after it merges into develop

Checklist

  • I have read and understood the contribution guidelines
  • I have run the pre-commit checks with uv run isaaclab --format
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have validated the changed behavior with focused coverage and applied the test-audit criteria to any test changes
  • I have added a changelog fragment under source/<pkg>/changelog.d/ for every touched package (do not edit CHANGELOG.rst or bump package versions — CI handles that)
  • I have added my name to the CONTRIBUTORS.md or my name already exists there

Correct statements in the Isaac Lab 3.0 migration guide that no longer
match the source tree:

- Actuator limit aliases are removed in 3.1, not kept through 3.x.
- RayCasterCfg.attach_yaw_only was removed, not deprecated.
- isaaclab.utils.math.convert_quat still exists; it is only unneeded
  for Isaac Lab data.
- Legacy write_*_to_sim methods are deprecated forwarders, not removed.
- MjcfConverterCfg.fix_base and link_density are supported again.
- Isaac Capture ships with the teleop extra; drop the pip install with
  an outdated isaacteleop~=1.0 pin.
"default" is not an accepted MjcfConverterCfg.collision_type value; list values from the Literal type instead.
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Oct 8, 2026
@AntoineRichard AntoineRichard changed the title [Docs] Migration guide: per-section review owners and checks [Docs] DOC-007: Migration guide: per-section review owners and checks Oct 8, 2026
…n guide

- The Data Access and Math overview card called write_root_pose_to_sim_index
  positionally, but its arguments are keyword-only on every backend.
- convert_quat is only unneeded for Isaac Lab data; keep it for external
  WXYZ data, as the HDF5 dataset handler still does.
- Drop the nested literal inside the bold convert_quat heading, which
  rendered the backticks verbatim.
@AntoineRichard
AntoineRichard marked this pull request as ready for review October 9, 2026 15:59
@AntoineRichard
AntoineRichard requested a review from a team October 9, 2026 15:59

@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

Needs attention: Style consistency (1). Other reviewed categories look good.

  • PR description: The title promises per-section owners and checks, but the diff only corrects eight migration passages; retitle for the actual scope and move the long review checklist to a tracking issue.
  • Design and architecture: Architecture looks good.
  • Scope and over-engineering: No over-engineering issues.
  • API: API changes look good.
  • Compatibility and deprecation: No breaking changes identified.
  • Implementation: Implementation looks good.
  • Style consistency: The convert_quat passage labels its retained external-data example “OLD - No longer needed,” contradicting the new conditional guidance; relabel the example for external WXYZ input.
  • Test quality: Test quality looks good.

Minor fixes needed. Posted 1 inline finding.

Automated review; human maintainers own approval decisions.

**The convert_quat function is no longer needed**

Previously, IsaacLab had a utility function to convert between quaternion formats:
IsaacLab provides a utility function to convert between quaternion formats:

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.

🟡 Warning · Style Consistency — convert_quat guidance contradicts its example

The new text says Isaac Lab provides convert_quat and to keep it for external WXYZ data, but the snippet it introduces is still labeled # OLD - No longer needed and the next sentence says…

@greptile-apps

greptile-apps Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 4/5

[Low impact] Updates migration guide documentation text.

The PR appears safe to merge, with two non-blocking improvements to the migration advice.

Findings

  1. P2 Some conversions are still needed ▶
  2. P2 Installing teleoperation removes other extras ▶

Summary

Updates the 3.0 migration guide to match current APIs and installation commands.

  • Corrects actuator alias lifetimes, ray alignment removal, indexed writes, and MJCF settings.
  • Restores documentation of convert_quat and switches teleoperation installation to project extras.
  • Two non-blocking documentation fixes remain: narrow the quaternion conversion advice and explain how to preserve existing extras.
  • AntoineRichard acknowledged that the MJCF example still drops fix_base and deferred the decision to section reviewers.

Reviews (1) · Last reviewed commit: "Fix keyword-only write call and convert_..." · Reviewed by Greptile

Comment on lines +2062 to +2064
Since everything now uses XYZW natively, this function is no longer needed for Isaac Lab data.
If you were using it, simply remove the conversion calls. Keep it only to convert external
data that still uses WXYZ order.

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.

P2 Some conversions are still needed

The corrected paragraph still tells readers to remove conversions for all Isaac Lab data. Older Isaac Lab datasets use WXYZ, and generate_data.py still converts their action quaternions before replay. convert_quat also converts current XYZW data to WXYZ for external policies.

Limit the removal advice to conversions around current native XYZW data. Keep conversions for older datasets and external policies; removing them can silently produce wrong rotations.

Suggested change
Since everything now uses XYZW natively, this function is no longer needed for Isaac Lab data.
If you were using it, simply remove the conversion calls. Keep it only to convert external
data that still uses WXYZ order.
Current Isaac Lab APIs use XYZW natively, so remove conversions that only adapted native
Isaac Lab data to the old WXYZ convention. Keep conversions when reading older WXYZ datasets
or exchanging data with external tools and policies that use WXYZ.

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!

.. code-block:: bash

pip install isaacteleop~=1.0 --extra-index-url https://pypi.nvidia.com
uv sync --extra teleop --extra isaacsim

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.

P2 Installing teleoperation removes other extras

Unlike the old additive install command, uv sync --extra teleop --extra isaacsim removes packages from other extras the user previously selected. Someone adding teleoperation to an environment with sb3 or rl-games can lose those integrations and break their training workflows.

Add a note to repeat existing compatible extras, as the installation guide already requires.

Suggested change
uv sync --extra teleop --extra isaacsim
uv sync --extra teleop --extra isaacsim
Repeat any existing compatible ``--extra`` selections in this command; otherwise,
``uv sync`` removes packages belonging to extras you omit.

@kellyguo11

Copy link
Copy Markdown
Contributor

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 Oct 10, 2026
@kellyguo11
kellyguo11 merged commit fa014dc into isaac-sim:develop Oct 10, 2026
61 checks passed
isaaclab-bot Bot pushed a commit that referenced this pull request Oct 10, 2026
…#8389)

# Description

Before the 3.0 release, the domain owners need to review the "Migrating
to 3.0" guide (`docs/source/migration/migrating_to_isaaclab_3-0.rst` and
`docs/source/migration/include/*`) one section at a time. This PR
assigns each section to likely reviewers and gives each one a concrete
check. Reviewers come from `.github/CODEOWNERS` and from `git log` on
the source the section describes, counting commits since 2025-10. Names
are plain handles with no mentions, so nobody is pinged yet.

While preparing the checklist, I compared every Sphinx cross-reference
and every `from X import Y` in the guide against the source tree. I
fixed the statements that were clearly stale. No other content was
rewritten.

**Doc fixes in this PR**

- Actuator limit aliases: the guide said they stay "through the 3.x
release line and will be removed in 3.1". `actuator_base_cfg.py` says
they are removed in 3.1, so the guide now says that.
- `RayCasterCfg.attach_yaw_only`: the guide called it deprecated, but it
was removed (isaaclab CHANGELOG 4.6.11).
- `isaaclab.utils.math.convert_quat`: the guide said it was removed. It
still exists and is still called by the HDF5 dataset handler and a
contrib task, so the guide now says it is no longer needed for Isaac Lab
data and is kept for external WXYZ data.
- Legacy `write_*_to_sim(data, env_ids)`: the guide said these were
removed. They are deprecated forwarders to the `_index` variants.
- MJCF importer: `fix_base` and `link_density` came out of the "Removed
Settings" list. They were added back to `MjcfConverterCfg` in #5394.
- MJCF `collision_type` example: replaced `"default"`, which the
`Literal` type does not accept, with values it does accept.
- Data Access and Math overview card:
`write_root_pose_to_sim_index(pose, env_ids)` became
`write_root_pose_to_sim_index(root_pose=pose, env_ids=env_ids)`, since
its arguments are keyword-only on every backend.
- XR teleop install: `pip install isaacteleop~=1.0 --extra-index-url
...` became `uv sync --extra teleop --extra isaacsim`. The `teleop`
extra pins `isaacteleop~=1.4.145`, and uv is the only supported install
method.

The `skills/user/migrate-2x-to-3x/` skill does not repeat any of these
claims, so it needs no change.

## Per-section review checklist

Format: `Section — reviewers — check`. "Verified" means the symbol or
path was found in `develop`. Each reviewer still needs to run the
snippets in a real environment.

**Isaac Lab 2.x → 3.0**

- [ ] Installation — StafaH, kellyguo11, myurasov-nv — On a fresh
checkout, run `uv sync --extra isaacsim` and the `isaaclab train ...
physics=isaacsim_physx` command. Confirm that the `isaacsim` / `ovphysx`
extras and the `installation-method-uv` reference still match
`pyproject.toml`. Verified: `isaaclab.sh` / `isaaclab.bat` are gone.
- [ ] Multi-Backend Architecture and Presets (overview, Multi-Backend
Architecture, New `isaaclab_physx` / `isaaclab_newton` Extensions,
Backend-Neutral Imports, Newton Backend Implementations) —
AntoineRichard, ooctipus, StafaH — Run the import snippets under the
PhysX, Newton and OVPhysX presets. Confirm the factory still resolves
backend classes by module path. Confirm that `SurfaceGripper` is only in
`isaaclab_physx`, and that the list of Newton-backed classes is complete
(deformables and other sensors). Verified: all referenced classes exist.
- [ ] Schema Configuration Class Refactor — vidurv-nvidia, ooctipus,
mmichelis — For every row of the deprecated-class → fragment table,
construct the deprecated class and compare its warning with the listed
replacement set. Confirm that the three `warnings.filterwarnings`
regexes still match the emitted messages (they match `schemas_cfg.py`
today). Check the removal versions: classes go in 3.2, the `max_effort`
/ `max_velocity` field aliases in 4.0. The gravcomp note recommends
`MujocoRigidBodyPropertiesCfg`, which is itself deprecated; decide
whether it should point at `MujocoRigidBodyCfg`. Verified: all fragment
classes and `apply_*` writers exist.
- [ ] Multi-Backend Support: PresetCfg Pattern — ooctipus, StafaH,
AntoineRichard — Run `--task Isaac-Open-Drawer-Franka-Direct
physics=newton_mjwarp` and the default launch. Check that the Reach
"After" snippet still matches the Reach task source, and that the
`MJWarpSolverCfg` parameter table matches the cfg fields. The first
`MyPhysicsCfg` snippet uses `PhysxCfg` / `NewtonCfg` without importing
them; decide whether to add the imports. Verified:
`isaaclab.physics.PhysxAutoCfg` and `isaaclab_tasks.utils.PresetCfg`
exist.
- [ ] Isaac Sim API Compatibility — kellyguo11, ooctipus, hujc7 —
Compare the module rename table with the Isaac Sim 6.1 deprecation list.
Run the `enable_extension(...)` + `XformPrim` snippet inside Kit.
Verified: every listed `isaaclab.sim.utils.{stage,prims,queries}`
function exists, `PhysxManager` / `NewtonManager` are exported,
`source/isaaclab/test/deps/isaacsim` is gone, and no `apps/*.kit`
contains `extsDeprecated`.
- [ ] PhysX Tensors API Module Path — AntoineRichard, ooctipus,
kellyguo11 — Confirm on Isaac Sim 6.1 that `omni.physics.tensors.api`
exposes the view types. Verified: `source/` no longer imports
`omni.physics.tensors.impl`.
- [ ] Renaming of `XformPrimView` to `FrameView` — ooctipus,
AntoineRichard, StafaH — Confirm that the deprecated `XformPrimView`
alias is still exported and warns, and that the `FrameView` factory
dispatches to `FabricFrameView` (PhysX) and `NewtonSiteFrameView`
(Newton). Verified: all five new classes exist.
- [ ] Actuator effort and joint-limit names — ooctipus, StafaH,
AntoineRichard — Run an explicit-actuator task and confirm the behaviour
change (the solver keeps `joint_effort_limit`). Confirm that the
`resolve_joint_parameter(...)` call in the snippet matches its
signature. Verified: every read and write target in the
removed-group-property table exists, with dynamic friction only on PhysX
and OVPhysX. Fixed: removal version.
- [ ] Actuator API Moves to `ActuatorCollection` — ooctipus, StafaH,
AntoineRichard (LEAPP exception: frlai) — Run the before/after example.
Confirm the `set_*_index` / `_mask` setters are keyword-only and that
the LEAPP exception still holds. Verified: `target_command`,
`computed_effort` and `applied_effort` exist, and
`ArticulationData.gear_ratio` is gone.
- [ ] RigidObjectCollection API Renaming — AntoineRichard, ooctipus —
The rename table and the "After" example point at
`write_body_state_to_sim` and similar methods, which are themselves
deprecated forwarders in 3.0. Decide whether to point at the `_index` /
`_mask` variants instead. Confirm that every listed `object_*` property
still forwards.
- [ ] Deformable Object API Changes + Migration of Deformables
(`include/deformables.rst`) — mmichelis, ooctipus, AntoineRichard — Run
`examples/deformables.py` on PhysX and Newton, and the volume
before/after snippet. Confirm the removed-property table against
`PhysxDeformableBodyPropertiesCfg`. Verified: every listed material and
props cfg is exported from `isaaclab_physx.sim` / `isaaclab_newton.sim`,
and `linear_damping` / `settling_damping` exist.
- [ ] IMU Sensor Renamed to PVA; New Lightweight IMU Sensor —
AntoineRichard, ooctipus, StafaH — Check the gravity claims: PVA
acceleration excludes gravity and IMU always includes it. Confirm that
`ImuData` only exposes `ang_vel_b` / `lin_acc_b`. Verified:
`pva_orientation` / `pva_projected_gravity` exist and `gravity_bias` is
gone.
- [ ] Sensor Pose Properties Deprecation — ooctipus, AntoineRichard —
Confirm that `ContactSensorData.pose_w` / `pos_w` / `quat_w` emit a
deprecation warning on every backend, and run the `FrameTransformer`
replacement snippet.
- [ ] Contact force property names — ooctipus, AntoineRichard,
yufengsjtu — Check every row of the backend table on PhysX, OVPhysX and
Newton: the warn paths and the `NotImplementedError` for
`net_friction_forces_w*` on PhysX. Verified: every listed property
exists on the base and backend data classes.
- [ ] Articulation Joint Wrench Data Moved to `JointWrenchSensor` —
ooctipus, AntoineRichard, StafaH — Run both scene snippets. Confirm the
body-ordering claim: PhysX includes the root link, Newton reports child
bodies only. Verified: `body_incoming_joint_wrench_b` is gone, and
`mdp.body_incoming_wrench`, `body_names` and `find_bodies` exist.
- [ ] Ray Caster Warp Backend — ooctipus, AntoineRichard, pascal-roth —
Run the `RayCasterCfg(ray_alignment="yaw")` snippet. Verified:
`env_mask` is the first kernel argument and `RayCaster.meshes` is keyed
by `(prim_path, device)`. Fixed: `attach_yaw_only` is removed, not
deprecated.
- [ ] Quaternion Format / Quaternion Finder Tool / Runtime Quaternion
Access Detector / Quaternion Utility API Changes / Quaternion Migration
Checklist — AntoineRichard, StafaH — Run
`scripts/tools/find_quaternions.py` with every documented flag
(`--path`, `--base`, `--check-identity`, `--likely-wxyz`, `--all-quats`,
`--fix`, `--fix-identity-only`, `--dry-run`, `--force`) and check the
sample output format. Verified: `WARN_ON_TORCH_QUATF_ACCESS` exists in
`proxy_array.py`. Fixed: `convert_quat` still exists.
- [ ] ProxyArray Backend for Asset and Sensor Data / ProxyArray Interop
— AntoineRichard, StafaH, ooctipus — Confirm that the affected-classes
table should also list the Newton and OVPhysX sensors. Run the `torch.*`
bridge and confirm its one-time `DeprecationWarning`. Verified: the
`wp.to_torch` shim, `__torch_function__` and `__cuda_array_interface__`
all exist.
- [ ] Write Method Index/Mask Split — AntoineRichard — Confirm that
every listed `_index` / `_mask` writer exists on Articulation,
RigidObject and RigidObjectCollection for every backend. Fixed: the
legacy writers are deprecated forwarders, not removed, and the Data
Access and Math overview card now uses keyword arguments.
- [ ] Timestamped buffers — ooctipus, AntoineRichard — Run the
`TimestampedBuffer(wp.zeros(...))` snippet. Verified:
`TimestampedBufferWarp` is gone.
- [ ] Reinforcement Learning CLI Entrypoints / Unified Checkpoint and
Iteration Arguments — StafaH, ooctipus, kellyguo11 (RLinf rows:
mingxueg-nv) — Run `isaaclab train` and `isaaclab play` for each of
`rsl_rl`, `rl_games`, `skrl`, `sb3` and `rlinf`, plus the
`torch.distributed.run` command. Check the `--checkpoint
latest|best|pretrained` support matrix and the RLinf `--model_path` /
`--checkpoint` semantics. Verified:
`scripts/reinforcement_learning/train.py` exists.
- [ ] Visualizer CLI and Headless Behavior — matthewtrepte, StafaH,
kellyguo11 — Confirm that `--headless` is rejected, then check
`HEADLESS=1` with `--viz kit` (plus `--enable_cameras`) and with `--viz
newton_gl`, and run `--video viz:kit`.
- [ ] Viewport Camera Configuration (`ViewerCfg` deprecated) —
matthewtrepte, ooctipus — Confirm the `viewer.*` shim and the
`ViewportCameraController` warning. Run the
`KitVisualizerCfg(origin_type="asset", origin_track_path=...)` snippet.
Check the custom-visualizer `initialize(..., cameras=, stage=)`
paragraph against `base_visualizer.py`. Verified:
`resolve_camera_sources` and `get_visualized_env_ids` exist.
- [ ] Streaming Camera View (`tiled_cam_*` fields removed) —
matthewtrepte, ooctipus, pbarejko — Run the
`NewtonGLVisualizerCfg(streaming_*)` snippet with a scene-declared
camera. Confirm that the removed helpers are gone. Verified:
`resolve_streaming_envs` and `Camera.set_world_poses_from_view` exist.
- [ ] Newton Visualizer Type Split — matthewtrepte, StafaH — Confirm
that `NewtonVisualizerCfg` warns, that `--viz newton` aliases to
`newton_gl`, and that `visualizer:newton` / `viz:newton_gl` work as
video sources.
- [ ] Video Recording (`gym.wrappers.RecordVideo` replaced) —
matthewtrepte, ooctipus — Run the `VideoRecorderCfg(source="viz", ...)`
snippet. Confirm `eye` / `lookat` were removed and `recording_hooks` is
gone. Verified: `SimulationContext.add_render_callback` exists.
- [ ] URDF Importer — kellyguo11, stevfeng, ooctipus — With the Isaac
Sim 6.1 importer, run `convert_urdf.py` with the documented flags and
the Python before/after snippet. Confirm that the deprecated settings
warn and that the output path is
`{usd_dir}/{robot_name}/{robot_name}.usda`. Verified: the CLI flags
exist.
- [ ] MJCF Importer — kellyguo11, stevfeng — Run `convert_mjcf.py` with
the documented flags and the Python snippet. The Python before/after
example still drops `fix_base`, which is now supported again; decide
whether to keep it. Fixed: `fix_base` / `link_density` are no longer
listed as removed, and `collision_type` examples are valid values.
- [ ] Benchmark Workflows — AntoineRichard, StafaH, ooctipus — Run the
runtime, training, play and startup commands and `--benchmark_formatter
schema,omniperf`. The guide says the "transitional runtime, startup,
training, and play scripts were removed", but
`scripts/benchmarks/{runtime,startup,training,play}.py` still exist as
supported launchers; clarify which scripts are meant. The PhysX
micro-benchmarks now live under
`source/isaaclab_physx/benchmark/{assets,sensors}/`. Verified:
`isaaclab.test.benchmark` is gone and the formatter names match
`BenchmarkFormatter`.
- [ ] XR Teleoperation: Isaac Capture Integration — rwiltz,
hougantc-nvda, kellyguo11 — Run the pipeline-builder snippet against the
pinned `isaacteleop~=1.4`. Confirm that the deprecated
`isaaclab.devices.openxr` classes warn and that the import-mapping table
is still accurate. Fixed: install command.
- [ ] Section overview cards (Assets, Actuators, and Sensors / Data
Access and Math / Reinforcement Learning / Visualizers, Cameras, and
Recording / Tools and Integrations) — ooctipus (Assets), AntoineRichard
(Data Access), StafaH (Reinforcement Learning), matthewtrepte
(Visualizers), kellyguo11 (Tools) — Check each 2.x/3.0 card against the
detailed subsections below it, and run the 3.0 card snippets.
- [ ] Getting Help — AntoineRichard, kellyguo11 — Check the links. The
CHANGELOG link points at `main`.

**Isaac Gym / IsaacGymEnvs (`include/from_isaacgymenvs.rst`,
`include/comparing_simulation_isaacgym.rst`)**

- [ ] Migration from Isaac Gym and IsaacGymEnvs — StafaH, kellyguo11,
ooctipus — Compare the snippets with
`source/isaaclab_tasks/isaaclab_tasks/core/cartpole`, then run the
training and inference commands. Verified: the referenced classes and
the `CARTPOLE_CFG` import exist.
- [ ] Comparing Simulations Between Isaac Gym and Isaac Lab —
kellyguo11, StafaH — Re-run the OmniPVD recording workflow with
`isaaclab benchmark runtime` and the current kit args.

**Cross-cutting**

- [ ] Agent skills sync — StafaH, AntoineRichard — After the reviews
above land, update `skills/user/migrate-2x-to-3x/` and
`skills/user/migrate-from-isaac-gym/` to match, since the guide is their
source of truth.

## Validation

- Clean docs build (`uv run --extra dev make -C docs current-docs`,
which runs `sphinx-build -W --keep-going`): succeeded with 0 warnings,
and the changed passages render. Sphinx does not run in nitpicky mode,
so unresolved `py:` cross-references would not fail this build. The
symbol check below covers them.
- `pre-commit run --files
docs/source/migration/migrating_to_isaaclab_3-0.rst`: all hooks passed.
- Static symbol check: a throwaway script, not committed, resolved every
`:class:` / `:func:` / `:meth:` / `:attr:` / `:mod:` target and every
`from X import Y` in the four migration files against `source/`. The
only unresolved targets were intentional 2.x "before" snippets. I also
used targeted greps for the CLI flags, file paths and deprecation
messages listed above. I did not run any snippet in a simulator.
- Docs-only change outside `source/<pkg>/`, so no changelog fragment is
needed.

## Type of change

- Documentation update

## Release backport

- [x] <!-- backport-active-release --> Backport this pull request to the
active release branch after it merges into `develop`

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`uv run isaaclab --format`
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have validated the changed behavior with focused coverage and
applied the [test-audit
criteria](https://github.com/isaac-sim/IsaacLab/blob/develop/skills/developer/test-audit/SKILL.md)
to any test changes
- [ ] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package (do **not** edit
`CHANGELOG.rst` or bump package versions — CI handles that)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

(cherry picked from commit fa014dc)
@isaaclab-bot

isaaclab-bot Bot commented Oct 10, 2026

Copy link
Copy Markdown
Contributor

Backported to release/3.0.0 as 973bdf1.

jnskkmhr added a commit to jnskkmhr/IsaacLab that referenced this pull request Oct 11, 2026
* Update the cartpole OVRTX goldens for OVRTX 0.5.1 (isaac-sim#8443)

# Description

Updates the four cartpole OVRTX goldens
(`cartpole/{newton,ovphysx}-ovrtx_renderer-{rgb,rgba}.png`) to the CI
runner's OVRTX 0.5.1 renders. Since isaac-sim#8350,
`rendering-correctness-kitless (legacy)` fails on them deterministically
(about 1.95% different pixels against the 1.5% threshold; repeated runs
are byte-identical).

## Type of change

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

## Release backport

- [x] <!-- backport-active-release --> Backport this pull request to the
active release branch after it merges into `develop`

## Checklist

Docker and GPU tests run on demand. Push the commits you want tested,
then
comment `run-ci` on the pull request.

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`uv run isaaclab --format`
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have validated the changed behavior with focused coverage and
applied the [test-audit
criteria](https://github.com/isaac-sim/IsaacLab/blob/develop/skills/developer/test-audit/SKILL.md)
to any test changes
- [x] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package (do **not** edit
`CHANGELOG.rst` or bump package versions — CI handles that)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

* Deprecate legacy deformable cfgs and add OvPhysX fragment support (isaac-sim#8348)

# Description

Deformable fragment slots now create bodies on OvPhysX. PhysX and
OvPhysX use the same OmniPhysics USD authoring for the simulation API,
rest state, and bind pose. The legacy deformable cfgs and
`define_deformable_body_properties` /
`modify_deformable_body_properties` remain functional but warn in 3.1
ahead of removal in 3.2.

The affected tutorials, example, and fragment-path tests use the slots.
An empty slot creates a body with backend defaults; fragments are needed
only for properties being set. The Franka soft and cloth presets retain
`deformable_props` during the deprecation period so downstream overrides
keep working. The spawner continues to reject configurations that set
more than one deformable slot.

The legacy OmniPhysics writer and both PhysX managers share one
authoring function. No new precedence or adapter path is added.

## Validation

- Deprecation tests: 96 passed; deformable fragment tests: 10 passed;
backend-split tests: 4 passed.
- PhysX mesh spawning: 2 passed; OVPhysX deformables: 20 passed and 1
skipped, with both volume and surface fragment-slot cases passing when
the tetrahedralization extra is installed; Newton deformables: 8 passed.
- Repository formatting, changelog gate, and a clean Sphinx build with
warnings treated as errors passed.
- Franka training and tutorial scripts were not run end to end.

---------

Co-authored-by: Octi Zhang <zhengyuz@nvidia.com>

* [Docs] DOC-007: Migration guide: per-section review owners and checks (isaac-sim#8389)

# Description

Before the 3.0 release, the domain owners need to review the "Migrating
to 3.0" guide (`docs/source/migration/migrating_to_isaaclab_3-0.rst` and
`docs/source/migration/include/*`) one section at a time. This PR
assigns each section to likely reviewers and gives each one a concrete
check. Reviewers come from `.github/CODEOWNERS` and from `git log` on
the source the section describes, counting commits since 2025-10. Names
are plain handles with no mentions, so nobody is pinged yet.

While preparing the checklist, I compared every Sphinx cross-reference
and every `from X import Y` in the guide against the source tree. I
fixed the statements that were clearly stale. No other content was
rewritten.

**Doc fixes in this PR**

- Actuator limit aliases: the guide said they stay "through the 3.x
release line and will be removed in 3.1". `actuator_base_cfg.py` says
they are removed in 3.1, so the guide now says that.
- `RayCasterCfg.attach_yaw_only`: the guide called it deprecated, but it
was removed (isaaclab CHANGELOG 4.6.11).
- `isaaclab.utils.math.convert_quat`: the guide said it was removed. It
still exists and is still called by the HDF5 dataset handler and a
contrib task, so the guide now says it is no longer needed for Isaac Lab
data and is kept for external WXYZ data.
- Legacy `write_*_to_sim(data, env_ids)`: the guide said these were
removed. They are deprecated forwarders to the `_index` variants.
- MJCF importer: `fix_base` and `link_density` came out of the "Removed
Settings" list. They were added back to `MjcfConverterCfg` in isaac-sim#5394.
- MJCF `collision_type` example: replaced `"default"`, which the
`Literal` type does not accept, with values it does accept.
- Data Access and Math overview card:
`write_root_pose_to_sim_index(pose, env_ids)` became
`write_root_pose_to_sim_index(root_pose=pose, env_ids=env_ids)`, since
its arguments are keyword-only on every backend.
- XR teleop install: `pip install isaacteleop~=1.0 --extra-index-url
...` became `uv sync --extra teleop --extra isaacsim`. The `teleop`
extra pins `isaacteleop~=1.4.145`, and uv is the only supported install
method.

The `skills/user/migrate-2x-to-3x/` skill does not repeat any of these
claims, so it needs no change.

## Per-section review checklist

Format: `Section — reviewers — check`. "Verified" means the symbol or
path was found in `develop`. Each reviewer still needs to run the
snippets in a real environment.

**Isaac Lab 2.x → 3.0**

- [ ] Installation — StafaH, kellyguo11, myurasov-nv — On a fresh
checkout, run `uv sync --extra isaacsim` and the `isaaclab train ...
physics=isaacsim_physx` command. Confirm that the `isaacsim` / `ovphysx`
extras and the `installation-method-uv` reference still match
`pyproject.toml`. Verified: `isaaclab.sh` / `isaaclab.bat` are gone.
- [ ] Multi-Backend Architecture and Presets (overview, Multi-Backend
Architecture, New `isaaclab_physx` / `isaaclab_newton` Extensions,
Backend-Neutral Imports, Newton Backend Implementations) —
AntoineRichard, ooctipus, StafaH — Run the import snippets under the
PhysX, Newton and OVPhysX presets. Confirm the factory still resolves
backend classes by module path. Confirm that `SurfaceGripper` is only in
`isaaclab_physx`, and that the list of Newton-backed classes is complete
(deformables and other sensors). Verified: all referenced classes exist.
- [ ] Schema Configuration Class Refactor — vidurv-nvidia, ooctipus,
mmichelis — For every row of the deprecated-class → fragment table,
construct the deprecated class and compare its warning with the listed
replacement set. Confirm that the three `warnings.filterwarnings`
regexes still match the emitted messages (they match `schemas_cfg.py`
today). Check the removal versions: classes go in 3.2, the `max_effort`
/ `max_velocity` field aliases in 4.0. The gravcomp note recommends
`MujocoRigidBodyPropertiesCfg`, which is itself deprecated; decide
whether it should point at `MujocoRigidBodyCfg`. Verified: all fragment
classes and `apply_*` writers exist.
- [ ] Multi-Backend Support: PresetCfg Pattern — ooctipus, StafaH,
AntoineRichard — Run `--task Isaac-Open-Drawer-Franka-Direct
physics=newton_mjwarp` and the default launch. Check that the Reach
"After" snippet still matches the Reach task source, and that the
`MJWarpSolverCfg` parameter table matches the cfg fields. The first
`MyPhysicsCfg` snippet uses `PhysxCfg` / `NewtonCfg` without importing
them; decide whether to add the imports. Verified:
`isaaclab.physics.PhysxAutoCfg` and `isaaclab_tasks.utils.PresetCfg`
exist.
- [ ] Isaac Sim API Compatibility — kellyguo11, ooctipus, hujc7 —
Compare the module rename table with the Isaac Sim 6.1 deprecation list.
Run the `enable_extension(...)` + `XformPrim` snippet inside Kit.
Verified: every listed `isaaclab.sim.utils.{stage,prims,queries}`
function exists, `PhysxManager` / `NewtonManager` are exported,
`source/isaaclab/test/deps/isaacsim` is gone, and no `apps/*.kit`
contains `extsDeprecated`.
- [ ] PhysX Tensors API Module Path — AntoineRichard, ooctipus,
kellyguo11 — Confirm on Isaac Sim 6.1 that `omni.physics.tensors.api`
exposes the view types. Verified: `source/` no longer imports
`omni.physics.tensors.impl`.
- [ ] Renaming of `XformPrimView` to `FrameView` — ooctipus,
AntoineRichard, StafaH — Confirm that the deprecated `XformPrimView`
alias is still exported and warns, and that the `FrameView` factory
dispatches to `FabricFrameView` (PhysX) and `NewtonSiteFrameView`
(Newton). Verified: all five new classes exist.
- [ ] Actuator effort and joint-limit names — ooctipus, StafaH,
AntoineRichard — Run an explicit-actuator task and confirm the behaviour
change (the solver keeps `joint_effort_limit`). Confirm that the
`resolve_joint_parameter(...)` call in the snippet matches its
signature. Verified: every read and write target in the
removed-group-property table exists, with dynamic friction only on PhysX
and OVPhysX. Fixed: removal version.
- [ ] Actuator API Moves to `ActuatorCollection` — ooctipus, StafaH,
AntoineRichard (LEAPP exception: frlai) — Run the before/after example.
Confirm the `set_*_index` / `_mask` setters are keyword-only and that
the LEAPP exception still holds. Verified: `target_command`,
`computed_effort` and `applied_effort` exist, and
`ArticulationData.gear_ratio` is gone.
- [ ] RigidObjectCollection API Renaming — AntoineRichard, ooctipus —
The rename table and the "After" example point at
`write_body_state_to_sim` and similar methods, which are themselves
deprecated forwarders in 3.0. Decide whether to point at the `_index` /
`_mask` variants instead. Confirm that every listed `object_*` property
still forwards.
- [ ] Deformable Object API Changes + Migration of Deformables
(`include/deformables.rst`) — mmichelis, ooctipus, AntoineRichard — Run
`examples/deformables.py` on PhysX and Newton, and the volume
before/after snippet. Confirm the removed-property table against
`PhysxDeformableBodyPropertiesCfg`. Verified: every listed material and
props cfg is exported from `isaaclab_physx.sim` / `isaaclab_newton.sim`,
and `linear_damping` / `settling_damping` exist.
- [ ] IMU Sensor Renamed to PVA; New Lightweight IMU Sensor —
AntoineRichard, ooctipus, StafaH — Check the gravity claims: PVA
acceleration excludes gravity and IMU always includes it. Confirm that
`ImuData` only exposes `ang_vel_b` / `lin_acc_b`. Verified:
`pva_orientation` / `pva_projected_gravity` exist and `gravity_bias` is
gone.
- [ ] Sensor Pose Properties Deprecation — ooctipus, AntoineRichard —
Confirm that `ContactSensorData.pose_w` / `pos_w` / `quat_w` emit a
deprecation warning on every backend, and run the `FrameTransformer`
replacement snippet.
- [ ] Contact force property names — ooctipus, AntoineRichard,
yufengsjtu — Check every row of the backend table on PhysX, OVPhysX and
Newton: the warn paths and the `NotImplementedError` for
`net_friction_forces_w*` on PhysX. Verified: every listed property
exists on the base and backend data classes.
- [ ] Articulation Joint Wrench Data Moved to `JointWrenchSensor` —
ooctipus, AntoineRichard, StafaH — Run both scene snippets. Confirm the
body-ordering claim: PhysX includes the root link, Newton reports child
bodies only. Verified: `body_incoming_joint_wrench_b` is gone, and
`mdp.body_incoming_wrench`, `body_names` and `find_bodies` exist.
- [ ] Ray Caster Warp Backend — ooctipus, AntoineRichard, pascal-roth —
Run the `RayCasterCfg(ray_alignment="yaw")` snippet. Verified:
`env_mask` is the first kernel argument and `RayCaster.meshes` is keyed
by `(prim_path, device)`. Fixed: `attach_yaw_only` is removed, not
deprecated.
- [ ] Quaternion Format / Quaternion Finder Tool / Runtime Quaternion
Access Detector / Quaternion Utility API Changes / Quaternion Migration
Checklist — AntoineRichard, StafaH — Run
`scripts/tools/find_quaternions.py` with every documented flag
(`--path`, `--base`, `--check-identity`, `--likely-wxyz`, `--all-quats`,
`--fix`, `--fix-identity-only`, `--dry-run`, `--force`) and check the
sample output format. Verified: `WARN_ON_TORCH_QUATF_ACCESS` exists in
`proxy_array.py`. Fixed: `convert_quat` still exists.
- [ ] ProxyArray Backend for Asset and Sensor Data / ProxyArray Interop
— AntoineRichard, StafaH, ooctipus — Confirm that the affected-classes
table should also list the Newton and OVPhysX sensors. Run the `torch.*`
bridge and confirm its one-time `DeprecationWarning`. Verified: the
`wp.to_torch` shim, `__torch_function__` and `__cuda_array_interface__`
all exist.
- [ ] Write Method Index/Mask Split — AntoineRichard — Confirm that
every listed `_index` / `_mask` writer exists on Articulation,
RigidObject and RigidObjectCollection for every backend. Fixed: the
legacy writers are deprecated forwarders, not removed, and the Data
Access and Math overview card now uses keyword arguments.
- [ ] Timestamped buffers — ooctipus, AntoineRichard — Run the
`TimestampedBuffer(wp.zeros(...))` snippet. Verified:
`TimestampedBufferWarp` is gone.
- [ ] Reinforcement Learning CLI Entrypoints / Unified Checkpoint and
Iteration Arguments — StafaH, ooctipus, kellyguo11 (RLinf rows:
mingxueg-nv) — Run `isaaclab train` and `isaaclab play` for each of
`rsl_rl`, `rl_games`, `skrl`, `sb3` and `rlinf`, plus the
`torch.distributed.run` command. Check the `--checkpoint
latest|best|pretrained` support matrix and the RLinf `--model_path` /
`--checkpoint` semantics. Verified:
`scripts/reinforcement_learning/train.py` exists.
- [ ] Visualizer CLI and Headless Behavior — matthewtrepte, StafaH,
kellyguo11 — Confirm that `--headless` is rejected, then check
`HEADLESS=1` with `--viz kit` (plus `--enable_cameras`) and with `--viz
newton_gl`, and run `--video viz:kit`.
- [ ] Viewport Camera Configuration (`ViewerCfg` deprecated) —
matthewtrepte, ooctipus — Confirm the `viewer.*` shim and the
`ViewportCameraController` warning. Run the
`KitVisualizerCfg(origin_type="asset", origin_track_path=...)` snippet.
Check the custom-visualizer `initialize(..., cameras=, stage=)`
paragraph against `base_visualizer.py`. Verified:
`resolve_camera_sources` and `get_visualized_env_ids` exist.
- [ ] Streaming Camera View (`tiled_cam_*` fields removed) —
matthewtrepte, ooctipus, pbarejko — Run the
`NewtonGLVisualizerCfg(streaming_*)` snippet with a scene-declared
camera. Confirm that the removed helpers are gone. Verified:
`resolve_streaming_envs` and `Camera.set_world_poses_from_view` exist.
- [ ] Newton Visualizer Type Split — matthewtrepte, StafaH — Confirm
that `NewtonVisualizerCfg` warns, that `--viz newton` aliases to
`newton_gl`, and that `visualizer:newton` / `viz:newton_gl` work as
video sources.
- [ ] Video Recording (`gym.wrappers.RecordVideo` replaced) —
matthewtrepte, ooctipus — Run the `VideoRecorderCfg(source="viz", ...)`
snippet. Confirm `eye` / `lookat` were removed and `recording_hooks` is
gone. Verified: `SimulationContext.add_render_callback` exists.
- [ ] URDF Importer — kellyguo11, stevfeng, ooctipus — With the Isaac
Sim 6.1 importer, run `convert_urdf.py` with the documented flags and
the Python before/after snippet. Confirm that the deprecated settings
warn and that the output path is
`{usd_dir}/{robot_name}/{robot_name}.usda`. Verified: the CLI flags
exist.
- [ ] MJCF Importer — kellyguo11, stevfeng — Run `convert_mjcf.py` with
the documented flags and the Python snippet. The Python before/after
example still drops `fix_base`, which is now supported again; decide
whether to keep it. Fixed: `fix_base` / `link_density` are no longer
listed as removed, and `collision_type` examples are valid values.
- [ ] Benchmark Workflows — AntoineRichard, StafaH, ooctipus — Run the
runtime, training, play and startup commands and `--benchmark_formatter
schema,omniperf`. The guide says the "transitional runtime, startup,
training, and play scripts were removed", but
`scripts/benchmarks/{runtime,startup,training,play}.py` still exist as
supported launchers; clarify which scripts are meant. The PhysX
micro-benchmarks now live under
`source/isaaclab_physx/benchmark/{assets,sensors}/`. Verified:
`isaaclab.test.benchmark` is gone and the formatter names match
`BenchmarkFormatter`.
- [ ] XR Teleoperation: Isaac Capture Integration — rwiltz,
hougantc-nvda, kellyguo11 — Run the pipeline-builder snippet against the
pinned `isaacteleop~=1.4`. Confirm that the deprecated
`isaaclab.devices.openxr` classes warn and that the import-mapping table
is still accurate. Fixed: install command.
- [ ] Section overview cards (Assets, Actuators, and Sensors / Data
Access and Math / Reinforcement Learning / Visualizers, Cameras, and
Recording / Tools and Integrations) — ooctipus (Assets), AntoineRichard
(Data Access), StafaH (Reinforcement Learning), matthewtrepte
(Visualizers), kellyguo11 (Tools) — Check each 2.x/3.0 card against the
detailed subsections below it, and run the 3.0 card snippets.
- [ ] Getting Help — AntoineRichard, kellyguo11 — Check the links. The
CHANGELOG link points at `main`.

**Isaac Gym / IsaacGymEnvs (`include/from_isaacgymenvs.rst`,
`include/comparing_simulation_isaacgym.rst`)**

- [ ] Migration from Isaac Gym and IsaacGymEnvs — StafaH, kellyguo11,
ooctipus — Compare the snippets with
`source/isaaclab_tasks/isaaclab_tasks/core/cartpole`, then run the
training and inference commands. Verified: the referenced classes and
the `CARTPOLE_CFG` import exist.
- [ ] Comparing Simulations Between Isaac Gym and Isaac Lab —
kellyguo11, StafaH — Re-run the OmniPVD recording workflow with
`isaaclab benchmark runtime` and the current kit args.

**Cross-cutting**

- [ ] Agent skills sync — StafaH, AntoineRichard — After the reviews
above land, update `skills/user/migrate-2x-to-3x/` and
`skills/user/migrate-from-isaac-gym/` to match, since the guide is their
source of truth.

## Validation

- Clean docs build (`uv run --extra dev make -C docs current-docs`,
which runs `sphinx-build -W --keep-going`): succeeded with 0 warnings,
and the changed passages render. Sphinx does not run in nitpicky mode,
so unresolved `py:` cross-references would not fail this build. The
symbol check below covers them.
- `pre-commit run --files
docs/source/migration/migrating_to_isaaclab_3-0.rst`: all hooks passed.
- Static symbol check: a throwaway script, not committed, resolved every
`:class:` / `:func:` / `:meth:` / `:attr:` / `:mod:` target and every
`from X import Y` in the four migration files against `source/`. The
only unresolved targets were intentional 2.x "before" snippets. I also
used targeted greps for the CLI flags, file paths and deprecation
messages listed above. I did not run any snippet in a simulator.
- Docs-only change outside `source/<pkg>/`, so no changelog fragment is
needed.

## Type of change

- Documentation update

## Release backport

- [x] <!-- backport-active-release --> Backport this pull request to the
active release branch after it merges into `develop`

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`uv run isaaclab --format`
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have validated the changed behavior with focused coverage and
applied the [test-audit
criteria](https://github.com/isaac-sim/IsaacLab/blob/develop/skills/developer/test-audit/SKILL.md)
to any test changes
- [ ] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package (do **not** edit
`CHANGELOG.rst` or bump package versions — CI handles that)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

* [6Aiii] Use native Newton RTX with a borrowed scene stage (isaac-sim#8303)

# Description

Newton RTX now uses native `ViewerRTX(ovstage=...)` with a
simulation-owned scene stage instead of rebuilding viewer USD from the
Newton model. Authored lighting, materials, and clone placements reach
the viewer directly; Newton retains its window, perspective camera, and
debug markers. OVStage and OVRTX share private copy batching that omits
children already supplied by their parent.

GL and RTX share camera selection and model-reset code. Contact
rendering uses the sensor interface directly; selected PhysX
environments retain the correct body-pose ordering. Marker inputs
normalize directly to the simulation device, including host arrays and
partial prototype-index updates. Window defaults merge per field without
sharing mutable state. Newton and Kit use shared `WindowCfg(size=...)`;
Newton windows use a wall-clock `fps` limit (30 by default) instead of
skipping simulation frames. Scene-camera images stay on the GPU for
display, and window resizing scales fixed-resolution images without
resizing sensors. Backend construction stays inside the visualizer,
using the simulation owner passed to `initialize(sim, cameras=...)`.

This is **PR6Aiii**. Shared `ImageViewCfg`, window/recorder frame
caching, and removal of duplicate CPU composition are split into
**PR6Aiv (isaac-sim#8432)**. Follows merged isaac-sim#8103, isaac-sim#8319, and isaac-sim#8381; incorporates
isaac-sim#8221 without isaac-sim#8232.

**Migration:** Use Camera View instead of Open/Hide. Remove RTX
`rtx_environment`, `world_spacing`, and GL model options; author lights
and placement in the scene. Use GL for dragging and model overlays.
Custom visualizers must adopt `initialize(sim, cameras=...)`. Move
`window_width`/`window_height` to `window=WindowCfg(size=(width,
height))`, replace Newton `update_frequency` with `window.fps`, and use
`render_tiled_rgba_array()` for GPU images. Runtime material
randomization is not yet propagated to the borrowed stage.

## Validation

The review cleanup passed 121 tests on GPU0, including the full marker
suite and native RTX motion/pause/marker integration; the two lighting
cases below remain skipped. The extended existing tests reproduced the
window aliasing, partial-default inheritance, and marker-device bugs
before their fixes. The RTX media configuration now constructs
successfully. Formatting/lint and changelog checks passed; full CI is
being rerun.

Startup to the first rendered image, in seconds: **baseline → combined
implementation**, measured at preserved revision `00adda3a9` against
`a3acc244d` before this split. These measurements include the
shared-view follow-up and are not a new measurement of the isolated
PR6Aiii branch. Every case includes the **Newton RTX viewer** at
640×480; RGB adds one 64×64 OVRTX sensor per environment. Timings
include process launch, physics, scene, and viewer setup.

| Task / physics | Sensor cameras | 1,024 environments | 4,096
environments |
|---|---|---:|---:|
| ANYmal rough / Newton MJWarp | None | 55.8 → **28.4** | 251.8 →
**29.3** |
| ANYmal rough / Newton MJWarp | RGB | 60.1 → **32.5** | 258.7 →
**44.1** |
| ANYmal rough / OVPhysX | None | 64.7 → **38.8** | 294.1 → **70.7** |
| ANYmal rough / OVPhysX | RGB | 74.7 → **38.4** | 302.3 → **92.6** |
| Kuka–Allegro lift / Newton MJWarp | None | 46.1 → **17.3** | RAM limit
→ **28.9** |
| Kuka–Allegro lift / Newton MJWarp | RGB | 45.2 → **21.9** | RAM limit
→ **42.1** |
| Kuka–Allegro lift / OVPhysX | None | 102.1 → **71.6** | RAM limit →
**121.9** |
| Kuka–Allegro lift / OVPhysX | RGB | 101.4 → **78.3** | RAM limit →
**141.5** |

Single runs with warmed caches and identical dependencies on an RTX
5090, GPU0 only. All 16 PR cases passed image validation and three
rollout steps. Four 4,096-environment Kuka baselines exceeded available
host RAM; these have no valid timing and need a repeat after memory is
freed. The other 12 baselines passed. [Benchmark
setup](isaac-sim#8303 (comment)).

## Temporary test skip and follow-up

The two lighting/lifetime cases using an OVRTX sensor are temporarily
skipped because the sensor and native viewer create separate OVRTX
renderers; the second can stall when the first has loaded a scene but
never rendered. The two Warp-sensor cases remain enabled and passed on
GPU0 (2 passed, 2 skipped in 18 seconds). This skips affected coverage;
it does not fix the runtime stall.

Re-enable those cases after [Newton
isaac-sim#4627](newton-physics/newton#4627) merges and
Isaac Lab adopts its shared-renderer API. The test body and its
ownership, lighting, and sensor-buffer assertions remain intact.

The shared-renderer integration will also address stale deformable
geometry, pose-offset inference on hard reset, and unnecessary
perspective-scene construction for sensor-only windows. These are
confirmed limitations of the current separate-stage path, not fixed by
this cleanup.

GL sensor navigation still reads input one frame late. Fixing that
requires an input-update phase before image composition in Newton; the
current code does not add a second input pump.

## Type of change

- New feature
- Breaking change
- Bug fix
- Documentation update

## Release backport

- [ ] <!-- backport-active-release --> Backport this pull request to the
active release branch after it merges into `develop`

## Checklist

- [x] Read the contribution guidelines
- [x] Ran formatting/lint and changelog checks
- [x] Updated documentation and migration guidance
- [x] Validated the split with existing focused tests
- [x] Added package changelog fragments
- [x] Contributor already listed
- [x] Clean local documentation build
- [ ] Pass GPU CI

* [Tests] Serialize flaky Kit lifecycle tests in CI (isaac-sim#8447)

# Description

Two independent Kit lifecycle operations deadlocked in the same CI run
for isaac-sim#8443:

- the Spot LEAPP export wrote and validated its artifacts, cleared
`SimulationContext`, and then timed out in native Kit shutdown;
- the Galbot suction RMPFlow case timed out while synchronously enabling
`isaacsim.robot.surface_gripper` during the PhysX reset callback.

Both files were running alongside several independent Kit processes
through the package scheduler. Keep their behavioral coverage, but run
each file alone and run the LEAPP cases serially. This avoids concurrent
native extension loading and shutdown without skipping tests or
increasing their timeout.

Failed jobs:

-
https://github.com/isaac-sim/IsaacLab/actions/runs/38010614299/job/114089646270
-
https://github.com/isaac-sim/IsaacLab/actions/runs/38010614299/job/114089646003

This branch is rebased onto isaac-sim#8443 after it merged.

## Validation

- [Final `Docker + Tests`
workflow](https://github.com/isaac-sim/IsaacLab/actions/runs/38016776634):
passed
- [`isaaclab_tasks
[3/3]`](https://github.com/isaac-sim/IsaacLab/actions/runs/38016776634/job/114109605708):
passed, including all four RMPFlow cases
-
[`isaaclab_rl`](https://github.com/isaac-sim/IsaacLab/actions/runs/38016776634/job/114109605911):
passed; LEAPP export flow had 17 passed and 1 unavailable-checkpoint
skip, including the Spot case
- [`rendering-correctness-kitless
(legacy)`](https://github.com/isaac-sim/IsaacLab/actions/runs/38016776634/job/114109605883):
passed with the merged isaac-sim#8443 goldens
- All PR checks passed: 49 successful and 11 intentionally skipped
- `PYTHONPATH=tools:source/isaaclab uv run pytest --noconftest
tools/test_file_scheduler.py -q` (9 passed)
- `ISAACLAB_CHANGELOG_BASE_REF=upstream/develop uv run isaaclab -f`
- `uv run python tools/changelog/cli.py check upstream/develop
--include-worktree`

### CI timing impact

Both measurements used the `Docker + Tests` workflow on `cuda:0`, the
same 18-case LEAPP suite (17 passed, 1 unavailable-checkpoint skip), its
declared mix of default PhysX, Newton MJWarp, Isaac Sim PhysX, and
OvPhysX presets, and the same restored Warp cache key (387 MB restored,
578 MB final). The runners differed, so the comparison is directional
rather than a hardware-normalized benchmark.

| | Parallel baseline | Serial candidate |
| --- | ---: | ---: |
| Revision | isaac-sim#8443 `976de17` | isaac-sim#8447 `fc66fed` |
| Runner | `g6e.4xlarge` | `g7.4xlarge` |
| Full `isaaclab_rl` job | 13m 52s | 19m 20s |
| LEAPP file wall time | 388.63s | 1051.96s |

The candidate adds about five and a half minutes to the full RL job
while keeping it far below the workflow budget. (`d6372b0`, the next
isaac-sim#8443 revision, changed only changelog-fragment text.)

## Type of change

- Bug fix (CI / test infrastructure)

## Release backport

- [x] <!-- backport-active-release --> Backport this pull request to the
active release branch after it merges into `develop`

## Screenshots

Not applicable.

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`uv run isaaclab --format`
- [x] Documentation changes are not required for this CI-only change
- [x] My changes generate no new warnings
- [x] I have validated the changed behavior with focused coverage and
applied the [test-audit
criteria](https://github.com/isaac-sim/IsaacLab/blob/develop/skills/developer/test-audit/SKILL.md)
- [x] No source package is touched, so no package changelog fragment is
required
- [x] My name already exists in `CONTRIBUTORS.md`

* Add mesh_collision_props slot to all rigid-object spawners (isaac-sim#8349)

# Description

Adds the `mesh_collision_props` fragment slot to every rigid-object
spawner: the USD, URDF and MJCF file spawners, the shape spawners and
the mesh spawners. Several deprecation messages already pointed users at
"the spawner's `mesh_collision_props` slot", but only `MeshFileCfg` had
it. This makes that guidance true and migrates the last in-repo users of
the deprecated mesh-collision cfgs.

**The slot**
- Lives on `RigidObjectSpawnerCfg`. It accepts a `{pattern: fragments}`
mapping, a bare fragment, or a list.
- Applies only to matched prims that already carry
`UsdPhysics.CollisionAPI`. It never creates a collider, and a pattern
that matches none logs a warning.
- Default target:
- File spawners use `"(/.*)?"`, meaning every collider under the spawn
prim. That matches the reach of the legacy nested
`mesh_collision_property`, so migrating authors identical USD.
- Shape and mesh spawners target their geometry prim. On mesh spawners
the slot overrides the built-in default approximation.
- Legacy `MeshCollisionBaseCfg` / `*PropertiesCfg` values are still
accepted in the slot. They are routed through the deprecated writer and
warn as before.
- Setting it together with any deformable setting raises `ValueError`,
on the mesh spawners and on the USD/URDF/MJCF file spawners.
- `MeshFileCfg` keeps its existing narrower override, which takes a bare
fragment or a list but not the `{pattern: fragments}` mapping. It
anchors at each converted mesh prim, which is a single collider, so a
mapping would add nothing.

**Deprecation guidance and docs**
- The Newton mesh/SDF collision warnings now say which fragments go in
`collision_props` and which in `mesh_collision_props`.
- The `NewtonSDFCollisionCfg` docstring said it authors an approximation
token. It doesn't, and neither did the legacy class: Newton enables SDF
from `NewtonSDFCollisionAPI` itself.
- The schema-fragments concept page and the migration guide are updated.

**nist Factory** (`factory_assets_cfg.py`): the robot, socket and plug
presets move to `collision_props` + `mesh_collision_props` fragments,
with all-`None` fragments dropped. The PhysX presets are unchanged.

**Implementation:** The spawner selects existing colliders with the
public prim matcher and calls the existing single-prim mesh-collision
writer. Coverage is folded into the existing file, shape, mesh, and
deformable suites; the two standalone test files and duplicate changelog
entry were removed.

## Verification

- **Parity on the real assets** (franka_mimic, bolt_m16, nut_m16;
schemas, every attribute and relationship): legacy and migrated are
identical. All 7 negative controls are flagged.
- **Through the gym entry point:** `IsaacContrib-Factory-Franka` cfgs
for the default, physx, isaacsim_physx and newton_mjwarp presets were
spawned and compared against develop. All 12 are identical, and the
branch emits no legacy deprecation warnings.
- **Newton runtime:** the Factory task steps 20 times on newton_mjwarp
with finite rewards.
- **Sphere collider:** the legacy path also applies
`PhysicsMeshCollisionAPI` to the franka force-sensor Sphere collider.
The slot reproduces this so that migration stays USD-identical. Newton
models built with and without it are identical, so it is inert.
- **After rebasing:** 116 kitless routing, Factory parity,
schema-fragment parity, and deprecation checks passed. The repository
formatting and changelog hooks passed. Kit integration checks are
pending CI.

## Type of change

- New feature (non-breaking change which adds functionality)

## Checklist

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

---------

Co-authored-by: Octi Zhang <zhengyuz@nvidia.com>

* Fix convert_instanceable mesh path and migrate schema docs to fragments (isaac-sim#8353)

# Description

The schema-fragment migration left `convert_instanceable.py` passing the
removed `collision_approximation` argument to `MeshConverterCfg`, so
converting a mesh raised `TypeError`. The script now passes a
`UsdPhysicsMeshCollisionCfg` fragment, or `None` when collisions are
disabled.

`MujocoJointCfg(actuatorgravcomp=True)` also overwrote an explicitly
authored body `mjc:gravcomp=0.0`. It now supplies `1.0` only when that
attribute has no authored value. The existing joint-drive test covers
both `0.0` and a nonzero authored value.

The affected guides and Newton asset skill now use the fragment API,
with the legacy schema page labeled as deprecated. The Cartpole example
edits its existing Newton articulation fragment instead of adding a
duplicate. Deprecated PhysX schema docstrings now agree with their 3.2
removal warnings.

# Validation

- Repository formatter and pre-commit checks passed (`uv run isaaclab
-f`).
- Skill validation passed (`tools/skills/cli.py check`).
- A Kitless USD probe passed for unset, `0.0`, and `0.5` body gravcomp;
converter configuration and the Cartpole example instantiated
successfully.
- The integration test could not run locally because Isaac Sim/Kit is
unavailable in this environment. Sphinx is also unavailable locally; the
documentation build remains for CI.

---------

Co-authored-by: Octi Zhang <zhengyuz@nvidia.com>

* [CI][Auto Version Bump] Compile changelog fragments (schedule)

Bumped packages:
- isaaclab: 35.2.0 → 36.0.0
- isaaclab_experimental: 0.2.6 → 0.2.7
- isaaclab_mimic: 2.1.2 → 2.1.3
- isaaclab_newton: 9.1.5 → 9.2.0
- isaaclab_ov: 4.1.3 → 5.0.0
- isaaclab_physx: 7.4.4 → 7.5.0
- isaaclab_rl: 4.0.1 → 5.0.0
- isaaclab_tasks: 25.0.1 → 25.0.2
- isaaclab_tasks_experimental: 1.0.0 → 1.0.1
- isaaclab_teleop: 0.10.2 → 0.10.3
- isaaclab_visualizers: 2.0.2 → 3.0.0

* Fix unintended stacking cubes in Agibot place scenes (isaac-sim#8454)

# Description

Agibot Toy2Box and upright mug place tasks reused the stacking
`ObjectTableSceneCfg`. When that shared scene gained three default
stacking cubes, both place tasks also began spawning and resetting those
unrelated rigid bodies.

Introduce a dedicated `AgibotPlaceSceneCfg` with the robot, end-effector
sensor, task-supplied table, ground plane, and lighting. Toy2Box now
contains only the toy truck and box; upright mug contains only the mug.
Their existing table geometry and poses are preserved. Both Agibot Mimic
variants inherit the corrected scene.

Audited all five registered Galbot tasks: they are stacking tasks that
explicitly configure and use all three cubes, so they require no change.

The regression checks assert the place tasks' configured rigid objects.
Both cases fail on the original code because of `cube_1`, `cube_2`, and
`cube_3`, and pass with the dedicated scene. This removes the unintended
cubes involved in the reported reset issue; it does not claim to fix a
general PhysX collision defect.

## Validation

- `uv run --no-sync python -m pytest
source/isaaclab_tasks/test/contrib/test_agibot_place_env_cfg.py -q`: 5
passed. The two added cases failed on the original implementation for
the expected extra cubes.
- Instantiated and validated both registered Agibot tasks, all five
registered Galbot tasks, and both Agibot Mimic configs after resolving
presets.
- `uv run --no-sync isaaclab -f`: passed all repository formatting and
lint hooks.
- `uv run --no-sync python tools/changelog/cli.py check develop
--include-worktree`: passed.
- `git diff --cached --check`: passed.

Full Kit simulation was not completed: first launch requested acceptance
of the NVIDIA Omniverse EULA. The requested QA branch currently pins
Isaac Sim 6.1.0.0, whereas the report names 6.2 rc9; its Kit asset root
points at 6.2. The full teleop extra also failed while compiling `imgui`
2.0.0 on Python 3.12. Configuration validation used the local
`isaaclab_teleop` package without the optional XR/UI dependencies.

## Type of change

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

## Release backport

- [x] <!-- backport-active-release --> Backport this pull request to the
active release branch after it merges into `develop`

## Checklist

- [x] I have read and understood the contribution guidelines.
- [x] I have run the pre-commit checks with `uv run isaaclab --format`
(using `--no-sync` to preserve the validated environment).
- [x] I have validated the changed behavior with focused coverage and
applied the test-audit criteria.
- [x] I have added a changelog fragment for the touched package.
- [x] My name already exists in `CONTRIBUTORS.md`.
- [ ] Full Isaac Sim 6.2 rc9 visual/reset reproduction.

---------

Co-authored-by: Ege Sekkin <72572910+nvsekkin@users.noreply.github.com>
Co-authored-by: vidurv-nvidia <vidurv@nvidia.com>
Co-authored-by: Octi Zhang <zhengyuz@nvidia.com>
Co-authored-by: Antoine RICHARD <antoiner@nvidia.com>
Co-authored-by: Kelly Guo <kellyg@nvidia.com>
Co-authored-by: isaaclab-bot[bot] <282401363+isaaclab-bot[bot]@users.noreply.github.com>
Co-authored-by: Rebecca Zhang <168459200+rebeccazhang0707@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants