feat: consume physical entities in manager reset transactions (#1599) - #1600
Merged
Merged
Conversation
This was referenced Sep 16, 2026
This was referenced Sep 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Manager-Based object-only reset previously rebuilt a full state row from global defaults, which could reset the robot and broadcast environment zero's variant state. This change binds logical entities to UniSim's public physical layout, stages one selected-entity reset request and restores per-environment state/control defaults through public backend methods.
The A/B audit additionally removes quadratic row lookup and unused whole-batch snapshots from reset staging. Different joint position/velocity subsets merge without losing untouched columns; validation precedes the single native commit. Cold binding rejects logical roots that name descendant bodies, so queries, defaults and root writes refer to the same physical object. Scene/config owners collect all declared physical/variant asset paths. A registered primitive task uses the same pickleable EnvFactory for MuJoCo and IsaacSim, with passive joints adding state without actions.
Fixes #1599. Refs unilabsim/unisim#108/#113 and merged audit unilabsim/unisim#138. Declared/PR base:
main; governing ADRs: ADR-0006 and ADR-0007. No training, learner/runner, reward, M3 contact/DR capability or runtime lifecycle change.Merge status: all final-head checks pass, but
mainprotection requires one approving review and none is present. GitHub rejected ordinary merge; repository auto-merge is disabled. This PR remains open for the required review; branch protections were not bypassed.Released dependency: normal and ROCm metadata require
unisim-core>=1.5.0, and both locks resolve PyPI 1.5.0 without Git source overrides. Upstream v1.5.0 release passed source-distribution installation/smoke and publication.uv sync --locked --extra mujoco --extra motrixinstalled it in site-packages; distribution metadata is 1.5.0 with nodirect_url.json, so this is neither editable nor Git-only validation. ROCm lock resolution is checked, without claiming ROCm hardware execution. IsaacSim recording acceptance was explicitly deferred by the maintainer to unilabsim/unisim#133 and is not claimed passed.Validation on final implementation/dependency head
9e8a0977:make test-all: 1485 passed / 28 skipped / 588 slow deselected, 70% coverage; required benchmark import smoke 34/34 module and 35/35 script, plus Ruff/mypy/Pyright. NoUV_NO_SYNCor editable override; optional Drake warning remains.UNILAB_TEST_M2_ISAACSIM=1 uv run pytest -q tests/envs/test_multi_entity_consumer.py -k native --basetemp=/tmp/unilab-m2-pypi-native -x: 2 passed with the PyPI dependency, actual registered factory → Manager-Based → public UniSim → native IsaacSim.uv lock --check: passed for normal and isolated ROCm profile pairs;git diff --check: passed.uv run pytest -q tests/scripts/test_check_docs.py: 19 passed on the final head; CI builds Sphinx.uv run python scripts/benchmark/physics/m2_reset_ablation.py --output /tmp/reset-ab.json; upstream bilingual audit records the evidence and limits.9e8a0977ba73296549addba66dc8f5de161c2752: format, lint, mypy, pyright, benchmark smoke and tests. Sphinx build passed; PR deployment is intentionally skipped. An earlier duplicate run on the same commit was superseded when the PR became ready.Go2/Allegro assets are obtained via the registered hub and stay ignored. The fresh-process physics/registry test explicitly disables graphics before interpreter startup, avoiding unrelated OSMesa dependencies while still exercising real physics construction/reset. This does not change rendering acceptance.