Repository navigation
Conversation
|
There was a problem hiding this comment.
Isaac Lab Review Bot
The change additively exposes VBD rigid-contact history and contact stabilization, introduces collision-pipeline contact matching, and resets matching state for reset worlds. The documented defaults preserve existing behavior, and the supplied test covers matching, solver history allocation, and reset behavior.
- Design and architecture: The solver configuration, VBD manager, and collision pipeline retain their existing ownership boundaries. The history-enabled standalone VBD path initializes contacts before solver construction to satisfy the allocation-order requirement; the later base lifecycle call creates some ordering coupling, but the supplied evidence does not establish that it rebuilds or invalidates those resources.
- API: The new public fields are additive and default to Newton-compatible disabled or unset values, preserving existing configurations and coupled/external-rigid paths. Their requirements and behavior are documented, and the user-visible change has an appropriate package changelog fragment.
- Implementation: The implementation validates that standalone VBD contact history has a matching-enabled collision configuration, initializes matching before constructing VBD, and clears matching state for reset worlds. The focused regression test exercises the new configuration forwarding, matching behavior, history capacity, and reset clearing. The candidate concern about duplicate initialization depends on unprovided behavior of
_initialize_contactsand does not demonstrate a concrete defect.
No blocking issues. No inline issue met the actionable-evidence threshold; the assessment above records the review feedback.
Automated review; human maintainers own approval decisions.
…vbd-contact-history-alpha
|
run-ci |
AntoineRichard
left a comment
There was a problem hiding this comment.
🤖 AI-assisted review — generated with Claude Code against the repo's
test-auditandcoding-styleskills and the contributing guide; reviewed and posted by @antoiner.
The production change looks good to me: the matching mode is a typed Literal, a misconfiguration fails hard instead of warning, and matching is reset once in base forward(). Most comments are about the tests (~130 test lines for ~60 production lines, with the same contract asserted in three places) and about trimming prose.
Tests
test_vbd_contact_history_initializes_matches_and_resetscovers five contracts: the validation error, forwarding of alpha and history, matching, the capture step, and the reset. It does this through ~15 monkeypatches ofNewtonManagerprivate state. I'd suggest splitting it by owner. Alpha and history forwarding could be one moreoverridesrow intest_vbd_rigid_solver_controls, with no model needed. One integration test would then cover "history preallocated before capture → reset clears matches".- The capacity test in
test_newton_manager_abstraction.pyand the VBD test build the same sphere-on-ground scene, callcollidetwice and assertrigid_contact_match_index >= 0. Please keep the matching assertion in one of them only. Replacing the fake pipeline with a real CPU model is a nice improvement. - The MPM
forward()test now also covers the matching reset through a_RecordingPipelinemock, and its docstring has changed meaning. The VBD test already covers the reset with a real pipeline, so I'd revert this test todevelop. test_coupler.py: the passing row addsif error_type is None: returninside a parametrized test and renames the test. Please drop the row and keep the original name. If you keep the row, add a one-line justification (it guards thenot integrate_with_external_rigid_solverclause).
Code
5. coupler.py: as Greptile noted, a particle-only VBD entry with rigid_contact_history=True is rejected even though it has no rigid contacts. Please fix this or list it under known limitations.
6. forward(): if Newton's reset_contact_matching is already a no-op when matching is disabled, the != "disabled" clause can go.
7. vbd_manager._build_solver now calls _initialize_contacts() before the solver exists. Please add a sentence to the PR body explaining why (Newton sizes history from the pipeline when it constructs VBD) and why the later lifecycle call is a no-op.
Docs / changelog
8. The coupler paragraph in tune_vbd.rst repeats the table rows and docstrings. I'd keep the table rows and the code block and cut the paragraph to one sentence. The cfg docstrings could also be 1–2 lines each.
9. isaaclab_contrib/changelog.d/…fixed.rst: nothing was broken before, since this restricts a field added in this PR. .changed fits better, or fold it into the newton .added fragment and give contrib a .skip.
PR shape
- Title: add the area prefix, e.g.
[Newton] Expose VBD contact history and contact stabilization. - Body: add
Migration: none. Dependencies: none.Also add a Known limitations section covering:- coupled rigid entries can't use history;
- the coupler's entry-local pipelines aren't reset by
forward()(Greptile P1, still open); - particle-only entries are rejected.
- Validation: replace "Focused Newton manager and coupler reset tests — 14 passed" with the exact
uv run --frozen python -m pytest …commands.
Scope is otherwise one concern, with no lockfile churn. 👍
Concrete trims that would roughly halve the test diff (~130 → ~60 lines) without dropping any contract:
|
|
Addressed the review in
I retained two small checks after mutation testing: a real collision is needed to catch undersized sorting storage even when Newton 1.6.1 already resets private proxy pipelines. A real CPU/CUDA sticky-pipeline check confirmed matched contacts become unmatched after public coupled reset, so no duplicate Isaac Lab traversal was added. After the merge and dependency update: 203 tests passed across the four separately run files; the clean documentation build, formatting, and changelog validation passed. Inline threads include the individual fixes and evidence. |
|
run-ci |
mmichelis
left a comment
There was a problem hiding this comment.
Looks good! A few questions I left that I would be curious to hear your answers to.
|
run-ci |
|
run-ci |
|
run-ci |
Keep the VBD contact-history branch current with develop at 9b6d2d8. Validate contact history, capacity, reset and coupled-entry behavior on\nthe updated dependency pins before publishing the integration.
Integrate the recorded main revision while preserving the PR scope. Validate the merged tree with focused tests and full repository hooks.
Keep this branch current with upstream main at e4df255. Preserve the PR behavior.
Integrate recorded upstream main and follow the shared fixture namespace in coupled VBD history checks so both ownership cases reach the unsupported-history guard rather than failing body lookup. Recorded upstream main: e907f82
Description
Expose VBD rigid-contact history and contact-only stabilization, plus collision contact matching. Native defaults remain unchanged.
forward()reset boundary, including specialized solver hooks.Related: #6733 and #7913. Coupled correspondence support is tracked in Newton #4532; broader allocation ordering is a separate follow-up in #8478. Neither requires a universal contacts-first rewrite in this PR.
Migration: none. New runtime dependencies: none. This PR is independent of the tablecloth example.
Type of change
Release backport
developValidation
Merged upstream
developat2224495df6d66cfe46c35fda6ed8926417f7f3e4and resolved the four overlaps with merged #8360, preserving both sets of configuration fields and regression assertions. Validated merge commit9fc59f9574d3f5b0f0c9cb9fe09e8ff88ba9e9f5on an NVIDIA L40, pinned Newton1.7.0.dev0(5ea82eef6f7911388025a8df6ccdb172e2fed286) and Warp1.17.0. Each file ran separately withuv run --frozen --no-sync python -m pytest -q:source/isaaclab_newton/test/physics/test_vbd_core.pysource/isaaclab_newton/test/physics/test_newton_manager_abstraction.pysource/isaaclab_contrib/test/coupling/test_coupler.pysource/isaaclab_contrib/test/coupling/test_coupler_runtime.py206 passed, zero failed or skipped. The capture/reset regression now proves that a prior contact match exists before checking reset. Existing upstream deprecation/fixture warnings remain.
ISAACLAB_CHANGELOG_BASE_REF=origin/develop UV_FROZEN=1 uv run --no-sync isaaclab -fpassed, including the changelog gate. A clean warning-as-error documentation build passed usinguv run --frozen --no-sync python -m sphinx -b html -W --keep-going -E -a -j 4 docs /tmp/vbd-history-merge-8107-20261013.TiDyS7/docs.Earlier failure-sensitive mutations for allocation, capacity and specialized MPM reset are documented in the addressed review threads; they are not counted as extra tests in the total above. New-head CI is requested separately.
Checklist
CONTRIBUTORS.md.