Skip to content

[pull] develop from isaac-sim:develop - #63

Merged
pull[bot] merged 6 commits into
mataylor-nvidia:developfrom
isaac-sim:develop
Sep 24, 2026
Merged

pull[bot] merged 6 commits into
mataylor-nvidia:developfrom
isaac-sim:develop

Conversation

@pull

@pull pull Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

StafaH and others added 6 commits September 24, 2026 10:44
# Description

Part of the series that splits the core cleanup in #7949 into small,
reviewable pieces. An audit of the backend asset classes (after the
tendon issues in #7985 / #7990) found two public API signatures that
always fail on one backend. This PR fixes both. It is independent of
#7985 / #7990.

## Fixes
- **Newton, deprecated joint friction writers.**
`Articulation.write_joint_friction_coefficient_to_sim` (deprecated) was
overridden in Newton to pass `joint_friction_coeff` positionally to the
keyword-only `write_joint_friction_coefficient_to_sim_index`, and to
forward `full_data`, which that method does not accept. It always raised
`TypeError`, and so did the deprecated `write_joint_friction_to_sim`,
which the base class routes through it. The override is removed, so
Newton uses the base class implementation that PhysX and OVPhysX match
(keyword forwarding to the index writer).
- **PhysX, `RigidObjectCollection` mask writers.**
`write_body_link_pose_to_sim_mask`, `write_body_com_pose_to_sim_mask`,
`write_body_com_velocity_to_sim_mask`, and
`write_body_link_velocity_to_sim_mask` took `body_ids` instead of the
`body_mask` that the base class, OVPhysX, and Newton declare, so
`body_mask=` raised `TypeError` on PhysX. They now take `body_mask`.
`body_ids` still works but emits a `DeprecationWarning` (passing both
raises `ValueError`).

## Tests
- `test/assets/test_articulation_iface.py`: new
`test_deprecated_joint_friction_writers` calls both deprecated friction
writers on every backend; it fails for Newton on `develop`.
- `test/assets/test_rigid_object_collection_iface.py`: the mask writer
tests skipped `body_mask` for the link/com variants (with a note about
this mismatch). The workaround and note are removed, so `body_mask` is
exercised for all six mask writers on every backend. PhysX is only
available in these tests with Kit; I confirmed under Kit that all four
PhysX writers reject `body_mask=` on `develop` and accept it here. The
full file passes locally for Newton and OVPhysX (1276 passed).

## Type of change

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

## 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
`./isaaclab.sh --format`
- [ ] 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 (do **not** edit
`CHANGELOG.rst` or bump `extension.toml` — CI handles that)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
# Description

The `isaaclab_newton` CI job is the longest package-test job (~33 min,
~28 min of which is test wall time). This PR removes duplicated coverage
from the Newton test suite: tests that built the same scene to check
overlapping contracts are merged, tests that only round-tripped a Warp
array are removed, and parametrize matrices whose extra axes exercised
no distinct code path are trimmed. Test-only change.

**Contact sensor**
- `test_contact_lifecycle`: 32 → 8 items. Each shape still runs once,
and device × collision pipeline rotate across the shapes so every
(device, pipeline) pair runs on at least two shapes. The sensor has no
shape- or device-specific branch.
- `test_first_transition_with_aged_clock`: 12 → 4 items (CUDA only;
clock ages 2.5 s and 30 s). The float32 clock accumulates identically on
every device, and the largest age bounds the drift.

**Articulation / rigid objects**
- Bookkeeping tests that hard-coded `["cuda:0", "cpu"]` (ordering,
rebind, post-step hook, native gain write, branching fixture) and the
four velocity/effort-limit propagation tests now use
`test_devices(DeviceScope.CUDA)`. This also makes them honor the
multi-GPU runtime mask, which the hard-coded lists ignored.
- Merged into a sibling test that already built the same fixture:
- pose + velocity ordered-cache invalidation → one build (the velocity
cache is repopulated after the pose write, so only the velocity write
can invalidate it);
  - `test_initialization_hand_with_tendons` → the tendon-target test;
- `test_newton_clear_callbacks_deregisters_post_step_hook` → the
post-step hook test;
- `test_get_mass_matrix_symmetry_pd` → `test_dynamics_accessor_shapes`.
- Dropped `num_articulations=1` from `test_dynamics_accessor_shapes`;
`test_heterogeneous_scene_per_view_shapes` already asserts the same
shapes and diagonals at N=1 for both assets.
- Removed the three `*set_material_properties` tests. They wrote a Warp
binding and asserted that the same binding read back, so no Isaac Lab
code was under test.

**Actuators / manager**
- Removed `TestDelayedPDAuthoring`. `TestDelayedPDEquivalence` (2–4 step
delay) diverges if the delay is not authored.
- Folded `test_active_manager_create_builder_registers_mpm_attributes`
and `test_mpm_end_to_end_with_particle_custom_attributes` into
`test_mpm_project_outside_colliders_gates_projection`, which runs the
same builder, particles, reset and step.

### Measured impact (local RTX PRO 6000, warm Warp cache, one process
per file as in CI)

| File | Before | After |
|---|---:|---:|
| assets/test_articulation.py | 238.9 s | 198.0 s |
| sensors/test_contact_sensor.py | 72.3 s | 45.2 s |
| physics/test_newton_manager_abstraction.py | 43.2 s | 38.2 s |
| assets/test_rigid_object_collection.py | 45.8 s | 42.7 s |
| assets/test_rigid_object.py | 44.6 s | 41.1 s |
| assets/test_newton_actuators_newton.py | 42.9 s | 39.4 s |
| **Total** | **487.7 s** | **404.6 s (−17%)** |

All changed files pass locally.

### Not in this PR: most of the remaining time is kernel compilation
A cold vs warm Warp-cache run of the whole Newton suite locally is 1300
s vs 780 s, so **~40% of the job is kernel compilation**. The
`warm-warp-cache` job only warms rigid environments, so the Newton unit
tests (Kamino's blocked-Cholesky tile kernels alone take ~45 s, plus
Fabric sync, MPM, VBD, cable, …) recompile on every PR. That is a CI
change, addressed separately.

## Type of change

- Test-only cleanup (no user-facing change)

## 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
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] 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 (do **not** edit
`CHANGELOG.rst` or bump `extension.toml` — CI handles that)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
# Description

Apply configured observation noise to explicit resets in `DirectRLEnv`
and `DirectMARLEnv`. A private `_compute_observations()` method in each
base class now owns observation computation and noise application for
reset, step, and terminal-observation capture. Task implementations
continue to provide raw observations through `_get_observations()`;
single-agent critic observations remain clean, and multi-agent noise is
limited to configured agents.

This is an independent alternative to #7998 that addresses the same
issue with one observation processing path per direct environment type.

Fixes #7968

## Type of change

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

## Testing

- Focused CPU unit tests: 7 passed. The two enabled-noise reset cases
failed on unchanged `develop` and passed with this change.
- `uv run --frozen isaaclab -f`: passed, using a temporary local base
ref at the current upstream `develop` head for the changelog check.
- No simulator integration or GPU tests were run.

## 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
- [x] I have updated the reset method documentation
- [x] My changes generate no new warnings in the tests run
- [x] I have added regression tests that fail without the fix and pass
with it
- [x] I have added a changelog fragment
- [x] My name is already in `CONTRIBUTORS.md`
# Description

Adds `isaaclab-auditing-tests` (`skills/developer/test-audit/`), a
developer skill for deciding whether a test earns its cost. It has three
modes:

- **Authoring gate:** four questions every new test must answer
(contract, credible regression, why existing coverage misses it, whether
it needs a test-only production seam), plus a junk-pattern checklist.
- **Audit:** read-only discovery, then an evidence record for every
deletion or merge candidate (what it detects, the remaining stronger
proof, history, risk) before any edit.
- **Campaign:** `campaign.md`, the order of work for pruning a whole
package's test surface.

The skill is adapted from OpenClaw's
[`test-audit`](https://github.com/openclaw/openclaw/tree/80930af448ebabc84174146b56bc106d37fab3b4/.agents/skills/test-audit)
(MIT; the license is included as `LICENSE-openclaw.txt`). The
adaptation:

- replaces Vitest, plugin, and `$crabbox` tooling with `uv run python -m
pytest`, the per-file CI runner in `tools/conftest.py`, and the
repository's PR and changelog skills;
- adds the Isaac Lab duplication patterns found while consolidating the
Newton tests in #8003: cartesian parametrize products whose axes select
no distinct branch, CPU/GPU variants of device-independent bookkeeping
(scope with `test_devices(DeviceScope.CUDA)`), and a new scene per
assertion when a sibling already builds the fixture;
- requires a production mutation that turns the keeper red whenever a
merged or deleted test's "stronger proof" does not carry its assertions
verbatim.

That last rule comes from applying the skill to #8003 after it merged.
`TestDelayedPDAuthoring` was removed there because
`TestDelayedPDEquivalence` was assumed to cover delay authoring. With
delay authoring disabled in `schemas_actuators.py`, the equivalence test
still passes and the authoring test fails. That test, and three
material-property tests with no remaining proof, will be restored in the
follow-up audit PR that uses this skill.

Validated with `uv run --no-project python tools/skills/cli.py check`
(24 skills).

## Type of change

- Documentation update (agent skill)

## 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
`./isaaclab.sh --format`
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] 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 (do **not** edit
`CHANGELOG.rst` or bump `extension.toml` — CI handles that)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

## Release backport

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

Package curated Isaac Lab showcases and focused examples in the released
wheel. Run them without a source checkout through `uvx isaaclab demo
<name>` and `uvx isaaclab example <name>`.

This change:

- keeps one repository-level `examples/` tree: six showcases in
`examples/demos/`, 24 focused programs in `examples/` and topic folders
such as `examples/mpm/` and `examples/sensors/`, and shared data in
`examples/assets/`;
- adds the Zoo showcase, including `--num_envs` support, while
classifying the Newton dominoes scene as an example;
- packages that tree privately in the unified wheel and provides stable
CLI catalogs with argument forwarding;
- reuses the Isaac Lab terminal startup screen for demos and examples,
and adds a Newton GL selector for compatible packaged programs;
- keeps operational workflows and utilities under `scripts/`;
- updates documentation, the interactive command builder, standalone
tests, wheel checks, and migration notes; and
- removes the temporary `ppisp_camera_ovrtx.py` QA script.

There is no linked issue.

## Type of change

- New feature (non-breaking change which adds functionality)
- Breaking change (existing functionality will not work without user
modification)
- Documentation update

## Release backport

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

## Screenshots

Not applicable.

## Validation

- `uv run isaaclab -f` — passed.
- `uv run --extra test python -m pytest -q
source/isaaclab/test/cli/test_installed_workflow_entrypoints.py
source/isaaclab/test/app/test_loading_screen.py
source/isaaclab/test/app/test_standalone_scripts.py
source/isaaclab_visualizers/test/test_newton_visualizer_viewer_release.py`
— 109 passed; 334 simulator-launch cases skipped by the existing opt-in
gate.
- `uv run --isolated --extra dev -- make -C docs current-docs` — full
HTML build succeeded without warnings.
- Built the unified `isaaclab-3.0.0` wheel, installed it in a clean
environment, and resolved all six demos, 24 examples, and the domino
asset from the installed package.
- `uv run isaaclab demo zoo --help` and `uv run isaaclab example
newton-dominoes --help` — passed.

The existing install-CI wheel smoke fixture could not run locally
because its legacy `isaaclab.sh -u` setup did not create the expected
environment; the direct wheel build and isolated install checks above
passed.

## 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 -f`
- [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 (do **not** edit
`CHANGELOG.rst` or bump `extension.toml` — CI handles that)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

---------

Co-authored-by: Maximilian Krause <maximiliank@nvidia.com>
…llers (#7854)

# Description

Added Newton 1.6 model-free differential IK, joint impedance, and OSC
through `cfg.use_newton=True`; the original Lab controllers remain the
default. Consolidates #6693, #7482, and the differential-IK portion of
#6654. Ackermann remains in its separate draft.

Both paths share constructor, command, and compute signatures and return
independent results. Controller selection is independent of the physics
backend. Newton initializes from compute inputs, or from supplied DiffIK
limits when avoidance is enabled. Existing callers and tutorials retain
their setup; SO101 retains its wrist-orientation mask through a
Newton-only Jacobian adaptation.

Newton uses float32 computation. Its OSC selects motion before inertia
decoupling, requires at least six joints for decoupling, and retains
motion-force coupling that fails three hybrid force-tracking cases.
Those Newton cases run as strict expected failures; Lab cases remain
active, and thresholds are unchanged. Convergence checks now apply masks
in the actual control frame.

Newton DiffIK requires joint limits before the first compute when
avoidance is enabled; later limit updates retain its buffers. Its `pinv`
also rejects fewer controlled joints than active task axes. These
differences prevent blanket replacement of the Lab path. Joint impedance
retains the same control law, subject to Newton's precision boundary.
Includes the position-only SVD and joint-impedance
gain-clamping/batched-inertia fixes.

## Type of change
- New feature, bug fix, documentation update

## Release backport
- [ ] <!-- backport-active-release --> Backport to the active release
branch

## Validation
- Post-merge CPU controller suite: **204 passed, 3 CUDA capture tests
skipped**. Formatting and changelog checks passed.
- Focused GPU hybrid simulation with current controller/test overlays,
16 environments: **3 Lab passed, 3 Newton xfailed**. This was not a
full-repository run of the final head.
- Warning-free current documentation build passed.
- Matched full-policy Lab/Newton videos were recorded for
Reach-Franka-OSC on PhysX/MJWarp and Drawer DiffIK on MJWarp. SO101
keyboard rollout and training equivalence remain unverified.
- Fresh Docker/GPU CI requested for the updated head; results pending.

## Checklist
- [x] Contribution guidelines followed; contributor already listed
- [x] Pre-commit checks run with `uv run isaaclab -f`
- [x] Documentation and package changelog fragments updated
- [x] Both-backend and regression tests added
- [ ] Newton hybrid force-tracking limitations resolved
- [ ] Changes generate no new warnings

---------

Co-authored-by: Mustafa H <34825877+StafaH@users.noreply.github.com>
Co-authored-by: Mustafa Haiderbhai <mhaiderbhai@nvidia.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@pull pull Bot locked and limited conversation to collaborators Sep 24, 2026
@pull pull Bot added the ⤵️ pull label Sep 24, 2026
@pull
pull Bot merged commit 481a676 into mataylor-nvidia:develop Sep 24, 2026
2 checks passed
@github-actions github-actions Bot added documentation Improvements or additions to documentation infrastructure isaac-lab labels Sep 24, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

⤵️ pull documentation Improvements or additions to documentation infrastructure isaac-lab

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants