Repository navigation
vNext Phase 0–1: Articulation test net + lazy public-API facade (ADR-0017/0019) - #147
Merged
Merged
Conversation
Runtime-free coverage for Articulation via a stateful fake robot handle: bind/enumeration, joint-matching + the four actuator-coverage ValueError paths, joint/root write->refresh round-trips, reset, build_per_joint_tensor, implicit-PD write_joint_targets_partial, and empty-env_ids guards. The prerequisite regression net for the Phase 5 decomposition.
…R-0017) Phase 1 of the vNext refactor: - PR 1.1: re-export the genelab.lab surface lazily. The 8-package import block moves under TYPE_CHECKING (type-only); runtime resolution is a module __getattr__ searching _SOURCE_MODULES (+ __dir__, future annotations). So `import genelab.lab` no longer eagerly drags in torch, and a new public symbol in a source package is reachable through lab without editing it. - PR 1.2: remove GenesisBackendCfg (clean cut, no alias) from lab.py and the genelab.__init__ re-export plumbing. Reference audit was clean (graph in_degree 0, no functional consumer). - PR 1.3: hard-rename the env protocol ManagerBasedEnv -> ManagerBasedEnvProtocol across all three facades (lab, genelab, genelab.envs), resolving the collision with the concrete ManagerBasedRlEnv. Audit clean (re-export only). Also adds tests/test_public_api_snapshot.py: pins lab.__all__ (now 76) and extensions.__all__ (9) to inline frozenset baselines, guarding the surface against accidental drift. __all__ kept explicit and snapshot-guarded; suite 488 passed, pyright clean, import-linter 6/6 kept.
KraHsu
added a commit
that referenced
this pull request
Jun 5, 2026
vNext Phase 0–1: Articulation test net + lazy public-API facade (ADR-0017/0019)
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.
Phases 0–1 of the vNext architecture refactor. Two concept-separated commits; full suite 488 passed, pyright 0 errors,
lint-imports6/6 kept.test(entity)— Articulation state/binding test net (ADR-0019 PR-A)Runtime-free coverage for
Articulationvia a stateful fake robot handle (no Genesis): bind/enumeration, joint-matching + the four actuator-coverageValueErrorpaths, joint/rootwrite_*→refreshround-trips,reset,build_per_joint_tensor, implicit-PDwrite_joint_targets_partial, and empty-env_idsguards. This is the prerequisite regression net gating the Phase 5 decomposition (the graph previously showed onlyrefresh/bindcovered).refactor(lab)— lazy public-API facade + clean-cut surface changes (ADR-0017)genelab.labre-exports lazily: the 8-package import block moves underTYPE_CHECKING(type-only); runtime resolution is a module__getattr__searching_SOURCE_MODULES(+__dir__,from __future__ import annotations).import genelab.labno longer eagerly drags intorch, and a new public symbol in a source package is reachable throughlabwithout editing it.__all__stays explicit and snapshot-guarded.GenesisBackendCfg(clean cut, no alias) fromlab.pyand thegenelab.__init__re-export plumbing.ManagerBasedEnv→ManagerBasedEnvProtocolacross all three facades (lab,genelab,genelab.envs), resolving the long-standing collision with the concreteManagerBasedRlEnv.tests/test_public_api_snapshot.py: pinslab.__all__(now 76) andextensions.__all__(9) to inlinefrozensetbaselines, guarding against accidental surface drift.Reference audits (repo convention)
GenesisBackendCfgremoval — memory graphin_degree=0, out_degree=0; full-tree grep found only the definition + facade plumbing, no functional consumer (its "used by GeneLab runners" docstring was dead). Clean.ManagerBasedEnvrename — graphin_degree=1, out_degree=0(re-export edge only); whole-word grep (isolating it fromManagerBasedEnvCfg/ManagerBasedRlEnv) confirmed no annotation/isinstanceusage; examples + docs clean. Old name now absent tree-wide.Verification
ruffclean ·pyright0 errors (fullsrc/genelab) ·lint-imports6/6 kept · full suite 488 passed · public surface guarded at 76 names;GenesisBackendCfg/ManagerBasedEnvno longer resolvable on any facade.🤖 Generated with Claude Code