Skip to content

refactor(schemas): migrate rigid_props to fragments; deprecate RigidBodyPropertiesCfg (2/2) - #4

Draft
vidurv-nvidia wants to merge 1 commit into
vidurv/schema-frag-frameworkfrom
vidurv/schema-frag-migration
Draft

vidurv-nvidia wants to merge 1 commit into
vidurv/schema-frag-frameworkfrom
vidurv/schema-frag-migration

Conversation

@vidurv-nvidia

@vidurv-nvidia vidurv-nvidia commented Jun 4, 2026 •

Copy link
Copy Markdown
Owner

Description

Summary (PR 2 of 2 — stacked on the framework PR)

Builds on the additive fragment API (isaac-sim#5976). Flips the legacy name and moves every call site to fragment lists.

  • isaaclab_physx: RigidBodyPropertiesCfg → deprecation factory returning [UsdPhysicsRigidBodyCfg(...), PhysxRigidBodyCfg(...)] (removal in 5.0).
  • Migrate all RigidBodyPropertiesCfg usages across isaaclab_assets, isaaclab_tasks, isaaclab_mimic, and the test suites to fragment lists.
  • Fix consumer sites that treated rigid_props as a single object: disable_gravity mutations, .replace(), attribute reads.

Breaking: RigidBodyPropertiesCfg no longer returns a single cfg object.

This PR targets the fork branch vidurv/schema-frag-framework so the diff shows only the migration (116 files). Once isaac-sim#5976 merges to upstream develop, retarget this PR to isaac-sim/IsaacLab:develop.

Test Plan

  • test_schema_fragments.py 8 · test_schemas 39 · test_schemas_shim 145 · test_spawn_shapes 12 · test_spawn_meshes 10
  • pre-commit clean · docs build clean
  • test_spawn_from_files (Nucleus assets) + full task regression in CI

Fixes # (N/A — part of the staged physics schema-fragment refactor; no tracked public issue)

Type of change

  • Breaking change (existing functionality will not work without user modification)

Screenshots

N/A — no user-facing visual changes.

Checklist

  • I have read and understood the contribution guidelines
  • I have run the pre-commit checks (ruff + ruff-format) on the changed files
  • I have made corresponding changes to the documentation (the public API reference is auto-generated via ./isaaclab.sh -d; not separately authored)
  • My changes generate no new warnings
  • I have added tests that prove my feature works
  • I have added a changelog fragment under source/<pkg>/changelog.d/ for every touched package
  • I have added my name to CONTRIBUTORS.md

…odyPropertiesCfg

Build on the additive rigid-body fragment API: flip the legacy name and
move every call site to the new fragment-list form.

- isaaclab_physx: RigidBodyPropertiesCfg becomes a deprecation factory
  returning [UsdPhysicsRigidBodyCfg(...), PhysxRigidBodyCfg(...)] (removal in 5.0).
- Migrate all RigidBodyPropertiesCfg usages across isaaclab_assets,
  isaaclab_tasks, isaaclab_mimic and the test suites to fragment lists.
- Update consumer sites that treated rigid_props as a single object:
  disable_gravity mutations, .replace(), and attribute reads.

BREAKING: RigidBodyPropertiesCfg no longer returns a single cfg object.
Pass a fragment list to rigid_props; code mutating attributes on it must
set the field on the PhysxRigidBodyCfg fragment in the list.
vidurv-nvidia added a commit to isaac-sim/IsaacLab that referenced this pull request Jun 24, 2026
# Description

## Summary (PR 1 of 2 — additive, no behavior change)

Introduces single-namespace schema **fragments** so a prim can carry
rigid-body properties from multiple USD namespaces at once (`physics:`,
`physxRigidBody:`, `mjc:`), with core naming no backend. **Purely
additive** — existing cfgs and the deprecated `RigidBodyPropertiesCfg`
class are untouched.

- **core:** `SchemaFragment`, `RigidBodyFragment`,
`UsdPhysicsRigidBodyCfg`; `apply_namespaced` (generic per-fragment
writer) and `apply_rigid_body_properties` (applies a fragment list with
`UsdPhysics.RigidBodyAPI` as the implicit anchor).
- **spawner:** `rigid_props` accepts a fragment list; legacy single cfgs
keep working via a transition bridge
(shapes/meshes/from_files/mesh_converter).
- **backends:** `PhysxRigidBodyCfg` (physx), `MujocoRigidBodyCfg`
(newton).
- new `test_schema_fragments.py` + exports.

**PR 2** (stacked) flips `RigidBodyPropertiesCfg` to a deprecation
factory and migrates all call sites: vidurv-nvidia#4 (review
after this lands).

## Test Plan
- [x] `test_schema_fragments.py` — 7 passed
- [x] pre-commit clean · `./isaaclab.sh -d` docs build clean
- [ ] CI

First slice of the staged physics schema-cfg refactor (collision / mass
/ joint-drive / … follow later). Draft for review of the fragment API
shape.


## Type of change

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

## Screenshots

N/A — no user-facing visual changes.

## 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 (`ruff` + `ruff-format`) on the
changed files
- [ ] I have made corresponding changes to the documentation (the public
API reference is auto-generated via `./isaaclab.sh -d`; not separately
authored)
- [x] My changes generate no new warnings
- [x] I have added tests that prove my feature works
- [x] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package
- [ ] I have added my name to `CONTRIBUTORS.md`

---------

Co-authored-by: ooctipus <zhengyuz@nvidia.com>
matthewtrepte pushed a commit to matthewtrepte/IsaacLab that referenced this pull request Aug 4, 2026
# Description

## Summary (PR 1 of 2 — additive, no behavior change)

Introduces single-namespace schema **fragments** so a prim can carry
rigid-body properties from multiple USD namespaces at once (`physics:`,
`physxRigidBody:`, `mjc:`), with core naming no backend. **Purely
additive** — existing cfgs and the deprecated `RigidBodyPropertiesCfg`
class are untouched.

- **core:** `SchemaFragment`, `RigidBodyFragment`,
`UsdPhysicsRigidBodyCfg`; `apply_namespaced` (generic per-fragment
writer) and `apply_rigid_body_properties` (applies a fragment list with
`UsdPhysics.RigidBodyAPI` as the implicit anchor).
- **spawner:** `rigid_props` accepts a fragment list; legacy single cfgs
keep working via a transition bridge
(shapes/meshes/from_files/mesh_converter).
- **backends:** `PhysxRigidBodyCfg` (physx), `MujocoRigidBodyCfg`
(newton).
- new `test_schema_fragments.py` + exports.

**PR 2** (stacked) flips `RigidBodyPropertiesCfg` to a deprecation
factory and migrates all call sites: vidurv-nvidia#4 (review
after this lands).

## Test Plan
- [x] `test_schema_fragments.py` — 7 passed
- [x] pre-commit clean · `./isaaclab.sh -d` docs build clean
- [ ] CI

First slice of the staged physics schema-cfg refactor (collision / mass
/ joint-drive / … follow later). Draft for review of the fragment API
shape.


## Type of change

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

## Screenshots

N/A — no user-facing visual changes.

## 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 (`ruff` + `ruff-format`) on the
changed files
- [ ] I have made corresponding changes to the documentation (the public
API reference is auto-generated via `./isaaclab.sh -d`; not separately
authored)
- [x] My changes generate no new warnings
- [x] I have added tests that prove my feature works
- [x] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package
- [ ] I have added my name to `CONTRIBUTORS.md`

---------

Co-authored-by: ooctipus <zhengyuz@nvidia.com>
vidurv-nvidia pushed a commit that referenced this pull request Sep 15, 2026
…dential (isaac-sim#7741)

# Description

A job that pulls a public `nvcr.io/nvidia/*` base image fails with
`denied: Access Denied`. The runners carry an ambient docker credential
for a private NGC organization, and nvcr.io refuses that credential a
pull token for a public repository instead of downgrading the request to
anonymous. `_lib/setup-docker-config` now takes an optional
`base-image-ref`: when the configured credentials are denied that image
and anonymous access can read it, the stored nvcr.io credential is
dropped from the job's temp config so the pull proceeds anonymously.
`_lib/compute-deps-hash` stops swallowing an unreadable base image
manifest, which silently dropped the digest from the dependency-cache
key.

| Before | After |
| ------ | ----- |
| `load metadata for nvcr.io/nvidia/isaac-sim:6.1.0` fails with `failed
to fetch oauth token: denied: Access Denied`, and an unreadable manifest
degrades the deps-cache key to a bare tag string with only a `🟠` note |
The credential is dropped for nvcr.io only when it is provably the
obstacle, the pull proceeds anonymously, and an unreadable manifest
fails with a named `::error::` |

## Reproduction

1. Point `.github/workflows/config.yaml` at a public base image:
`isaacsim_image_name: nvcr.io/nvidia/isaac-sim` and `isaacsim_image_tag:
6.1.0`.
2. Open a pull request from a fork, so no `NGC_API_KEY` is available and
the runner's ambient credential is the only one present.
3. Observe any job that builds the base image, for example `Docker
Dependency Licenses Check`:

```
#3 [auth] nvidia/isaac-sim:pull token for nvcr.io
#4 [internal] load metadata for nvcr.io/nvidia/isaac-sim:6.1.0
#4 ERROR: failed to authorize: failed to fetch oauth token: denied: Access Denied
ERROR: failed to build: failed to solve: failed to fetch oauth token: denied: Access Denied
```

4. The same step also logs `🔵 Base image ID:
nvcr.io/nvidia/isaac-sim:6.1.0` with no `sha256:` suffix, which is the
silent digest fallback in `compute-deps-hash`.

## Scope

Every workflow on this branch pins the private
`nvcr.io/0947644777160149/internal/isaac-sim` image today, where the
configured credentials succeed and the fallback stays dormant. This
change is the prerequisite that lets a public base image be configured
without the failure above; it does not change which image any workflow
uses.

## 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`

## Screenshots

Not applicable; this changes CI action behavior only.

## Validation

The fallback only narrows credentials, never widens them, so each guard
was exercised against a stubbed `docker` and a realistic three-registry
config (nvcr.io, ECR, Docker Hub):

- Public nvcr.io image, credentials denied, anonymous readable: the
nvcr.io entry is dropped and the ECR and Docker Hub entries survive, so
pushes keep working.
- `ubuntu:24.04`, which `kitless-docker.yml` passes: the ref is not an
nvcr.io image, so the config is left untouched and the Docker Hub
credential keeps its pull-rate budget.
- Private internal image readable with credentials: no probe fallback,
no change.
- Registry 503 rather than an authorization refusal: retried, then a
warning, and the credential is kept, so a transient error cannot cost a
working credential.
- A docker config this action did not create: left unchanged, so a
runner-level `DOCKER_CONFIG` is never edited.
- `NVCR.IO/...` and `nvcr.io:443/...` resolve to the same registry as
`nvcr.io/...`; `nvcr.io.evil.com/...` does not match.
- `compute-deps-hash`: a digest-pinned tag such as
`latest-develop@sha256:...` is used directly with no network call, a
malformed digest pin fails with a named error, an authorization refusal
fails immediately, a transient failure is retried 5 times over about 50
seconds, and a warning on stderr during a successful read is no longer
concatenated into the digest.
- These are committed as
`.github/actions/_lib/test_registry_credential_fallback.py` (14 tests,
the co-located pattern of
`run-package-tests/test_cleanup_docker_storage.py`) and registered in
`tools-tests.yml` so they run in CI.
- Mutation checks: removing the nvcr.io scope, the exact-digest check,
the ownership guard, or the `credHelpers` handling each makes the
corresponding test fail, so the suite exercises the intended behavior
rather than only the happy path.
- `python -m py_compile` on the new helper, `bash -n` on every `run:`
block in the five changed files, YAML parse of each, and `codespell`
clean.

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [ ] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format` — not run; this change touches only `.github/`,
validated with `bash -n`, `py_compile`, a YAML parse and `codespell`,
and the repository's own `pre-commit` check on this branch
- [x] I have made corresponding changes to the documentation — the
action's `description` and the new input document the fallback
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package (do **not** edit
`CHANGELOG.rst` or bump `extension.toml` — CI handles that) — not
applicable; no package is touched
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant