Skip to content

fix(tasks): review-loop fixes — parity revert + close Native* guardrail hole + CI enforcement#801

Merged
geng-haoran merged 2 commits into
mainfrom
deep-fix/revert-mjpg-process-action-migration
Jun 29, 2026
Merged

fix(tasks): review-loop fixes — parity revert + close Native* guardrail hole + CI enforcement#801
geng-haoran merged 2 commits into
mainfrom
deep-fix/revert-mjpg-process-action-migration

Conversation

@geng-haoran

@geng-haoran geng-haoran commented Jun 29, 2026

Copy link
Copy Markdown
Collaborator

Consolidated fixes from the 5-angle clean-context review of the unification work.

1. Behavior parity (revert): keep mujoco_playground pick/open_cabinet as step() overrides — the #798 _process_action migration changed episode-boundary _last_action semantics (latch survived auto-reset instead of being discarded). Restored exact behavior; re-allowlisted.

2. Guardrail hole (the real one): the Tier-3 exemption was NAME-based, so NativeLiberoEnv(BaseTaskEnv) (seed-less reset + step + close) silently dodged the contract. Made exemption PATH-only; in-contract classes now always checked. Added seed to NativeLiberoEnv.reset; allowlisted its native-port step/close.

3. Enforcement gap: guardrail ran in NO CI → added .github/workflows/task-contract.yml (backend-free, runs on tasks/ PRs).

4. Hardening: test_unified_bases_accept_seed now also catches async reset.

7/7 guardrail tests pass; ruff clean. Not a regression cleanup — the 5 reviewers found zero runtime regressions (seed reproducibility verified on MuJoCo); these close the soundness/parity gaps they flagged.

Tracked as follow-ups (pre-existing, not regressions): mjlab v2 unseeded np.random.default_rng (sim-repro completeness), libero checker-reset ordering unification (P3 base merge), post-step hook for the reward-in-step overrides.

…rrides

The #798 migration of these two delta-control tasks to _process_action was NOT
strictly behavior-preserving at episode boundaries: the old step() rebinds
self._last_action = real_actions AFTER super().step() runs auto-reset, so for
envs that terminate this step the next-episode delta baseline is the final
action; moving the latch into the pre-step _process_action hook makes the reset
pose survive instead. A multi-angle review flagged this as a behavior change
smuggled into a 'behaviour identical' refactor (and handover, unmigrated, now
disagreed). Per the repo's load-bearing-parity rule, revert to the exact
step() overrides and document why; a genuine delta-reset fix should be a
separate, parity-tested change. Re-adds both to KNOWN_STEP_OVERRIDES. 7/7
guardrail tests pass; ruff clean.
…orce in CI

Multi-angle clean-context review found two real guardrail gaps:
- The Tier-3 exemption was NAME-based (Native*/Passthrough*), so NativeLiberoEnv
  (libero/native_libero.py) — a first-party BaseTaskEnv subclass with a seed-less
  reset + step + close — silently dodged the contract. Make the exemption
  PATH-only (_native/ , _passthrough); in-contract classes are now always checked.
  Add seed to NativeLiberoEnv.reset (deterministic native replay; forwarded
  best-effort to handler.set_seed). Allowlist its native-port step/close explicitly.
- The guardrail ran in NO CI (repo only had deploy-docs). Add
  .github/workflows/task-contract.yml running the backend-free guardrail on PRs
  touching tasks/ — so the contract is actually enforced, not manual-only.
Also harden test_unified_bases_accept_seed to catch async reset, and drop a
stray benchmark artifact swept into the revert commit.

7/7 guardrail tests pass; ruff clean; workflow YAML valid.
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jun 29, 2026

Copy link
Copy Markdown

Deploying roboverse-release with  Cloudflare Pages  Cloudflare Pages

Latest commit: 5202998
Status: ✅  Deploy successful!
Preview URL: https://052e1902.roboverse-release.pages.dev
Branch Preview URL: https://deep-fix-revert-mjpg-process.roboverse-release.pages.dev

View logs

@geng-haoran geng-haoran changed the title revert(tasks): keep mujoco_playground pick/open_cabinet as step() overrides (parity) fix(tasks): review-loop fixes — parity revert + close Native* guardrail hole + CI enforcement Jun 29, 2026
@geng-haoran geng-haoran merged commit e9b5c6e into main Jun 29, 2026
2 of 3 checks passed
@geng-haoran geng-haoran deleted the deep-fix/revert-mjpg-process-action-migration branch June 29, 2026 06:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant