Skip to content

Commit 8322a18

Browse files
committed
docs(roadmap): mark cross-platform infra P0/P1 items as fixed
Five hardening items shipped in this session move to [x] with brief descriptions + pointers to the regression tests that pin each fix in place: P0 — State Cache Consistency P0 — set_states silent-drop guard P0 — Robot-config validation tests P0 — Backend contract enforcement P1 — Parallel-sim error handling P1 — Newton joint-name parity P1 — Newton silent-action drop guard P1 — Actuator partial-spec warning (MuJoCo + Newton) P1 — Benchmark reproducibility (env.reset(seed=N)) Each entry has an explicit forward / backward compat statement so adopters can verify no behaviour surprises. The full migration write-up lives in MetaSim ``docs/source/developer_guide/architecture_review.md`` v1.1.
1 parent 86899c3 commit 8322a18

1 file changed

Lines changed: 53 additions & 4 deletions

File tree

ROADMAP.md

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,65 @@ This document provides a high-level overview of the RoboVerse improvement roadma
1515

1616
### P0 - Critical (Immediate)
1717

18-
- [ ] **State Cache Consistency** - Fix data corruption when switching state formats
19-
- [ ] **Test Coverage** - Add validation tests for robot configs and core tasks
18+
- [x] **State Cache Consistency** - Fixed: dual tensor/dict caches in `BaseSimHandler`,
19+
invalidated on `set_states` / `set_dof_targets` / `simulate`. Regression tests:
20+
`metasim/test/sim/test_state_modes.py` (integration) + `metasim/test/test_set_states_key_validation.py`
21+
(unit, no sim env).
22+
- [x] **`set_states` silent-drop guard** - Added: unknown / control-input keys now log a
23+
one-shot warning (e.g. `dof_pos_target` → "use `set_dof_targets`"). Catches the silent
24+
no-op bug that broke 15 downstream BC experiments.
25+
- [x] **Robot-config validation tests** - Added static `-k general` tests for every shipped
26+
`RobotCfg`: instantiation, non-empty `name`, default joint positions match `joint_limits`
27+
keys + lie inside the limit ranges. Surfaces 9 real config bugs (xfail-documented:
28+
AlohaAgilex/G1Tracking orphan joints, YamCfg/ArxL5Cfg/Vega/SoArm100/Koch/Go2/AllegroHand
29+
out-of-range defaults). `metasim/test/test_robot_cfg_validation_general.py` +
30+
`tests/test_roboverse_robot_cfg_validation.py`.
31+
- [x] **Backend contract enforcement** - Static `-k general` test asserts every concrete
32+
`BaseSimHandler` subclass overrides each documented contract method. Known incomplete
33+
backends (pyrep, partial pybullet/genesis) are xfail-documented. Self-check guards the
34+
xfail list against staleness. `metasim/test/test_backend_contract_general.py`.
2035
- [ ] **CI Coverage Reporting** - Integrate pytest-cov with Codecov
2136

2237
### P1 - High (Next Release)
2338

24-
- [ ] **Abstract Method Declarations** - Complete @abstractmethod annotations
39+
- [x] **Parallel-sim error handling** - Fixed: every public method on `ParallelHandler`
40+
now drains `error_queue` + checks `process.is_alive` after wire I/O. EOFError/BrokenPipe
41+
on recv is translated into a `RuntimeError` carrying the real worker traceback instead
42+
of a cryptic IPC exception. OOM-killed workers (queue stays empty) are surfaced via the
43+
dead-process check. Tests: `metasim/test/test_parallel_error_handling_general.py`.
44+
- [x] **Newton joint-name parity** - Fixed: Newton's `_collect_joint_names` now strips
45+
the object prefix (`box_base/box_joint``box_joint`) when the bare name is unambiguous,
46+
matching mujoco / sapien3 / isaacgym / isaacsim. Cross-platform tasks doing
47+
`dof_pos["box_joint"]` previously silently broke on Newton. Falls back to the full key
48+
on collision so no information is lost. Verified by `test_dict_state_all_objects[newton-*]`
49+
flipping from failed to passed.
50+
- [x] **Newton silent-action drop guard** - Added: Newton's `_set_dof_targets` now warns
51+
once if `model.control()` has no `joint_target_pos` / `joint_target_vel` / `joint_f`
52+
buffer — previously every action was silently swallowed. Same antipattern that broke
53+
MuJoCo `set_states`.
54+
- [x] **Actuator partial-spec warning (MuJoCo + Newton)** - Identified as task #6 root
55+
cause: when an actuator cfg overrides `stiffness` / `damping` but doesn't set
56+
`effort_limit_sim`, the asset-authored force-range (MJCF `forcerange` / Newton
57+
`joint_effort_limit`) silently dominates. Same `stiffness=1e5` config produces
58+
different effective behaviour per backend. Both handlers now warn once per
59+
(robot, joint) so the asymmetry is visible.
60+
- [x] **Benchmark reproducibility — `env.reset(seed=N)` now actually reseeds** -
61+
End-to-end wired: `GymEnvAdapter.reset(seed=)``RLTaskEnv.reset(seed=)` /
62+
`TaskBase.reset(seed=)``BaseSimHandler.set_seed`. Added a default
63+
`set_seed` on the base handler that reseeds Python `random` + NumPy +
64+
Torch (CPU and CUDA), so every backend gets reproducibility for free.
65+
Backends with extra internal RNG (Newton warp kernels, Sapien physics
66+
noise) can override and call `super().set_seed(seed)` first. Tests:
67+
`test_set_seed_is_deterministic_on_numpy_and_torch` and
68+
`test_set_seed_differs_with_different_seeds` in
69+
`metasim/test/test_set_states_key_validation.py`. Backward-compat:
70+
`seed` is a keyword-only parameter — every existing call site is
71+
unchanged.
72+
- [ ] **Abstract Method Declarations** - Mostly covered by the new backend-contract test;
73+
still want `@abstractmethod` on `_get_joint_names` / `_get_body_names` once pyrep /
74+
partial pybullet / genesis catch up.
2575
- [ ] **Unified Environment Factory** - Create `roboverse.make_env()` API
2676
- [ ] **Configuration System** - Document and standardize config approaches
27-
- [ ] **Error Handling** - Improve parallel simulation error propagation
2877

2978
### P2 - Medium (Future)
3079

0 commit comments

Comments
 (0)