Parent roadmap: #1252(候选项 7 的扩展)
Related: #360(已关闭;当前安装文档仍记录同一缺口)
Work type: research
Area: CI/tooling
一句话问题
UniLab 的 pyproject.toml 已声明 uv_build、0.1.0 元数据和 console scripts,但 package 产物、仓外可运行的 CLI、资产/依赖边界及 PyPI 发布流程尚未闭环。
为什么现在做
src/unilab/cli.py:40-57 明确要求源码 checkout 同时存在 conf/ 和 scripts/;二者位于仓库顶层,clean wheel/sdist 不包含它们。安装文档也明确说明 pip/wheel 尚不支持仓外训练(EN、中文)。
- 对
origin/main@34880c7a 做 clean archive 后运行 uv build:wheel 55,860,217 bytes、sdist 55,738,839 bytes;wheel 含 279 个 asset member(未压缩约 140 MiB),但没有 conf//scripts/。src/unilab/__init__.py:5 仍为 0.0.0,与 pyproject.toml 的 0.1.0 不一致;当前 uv 0.12.5 还会提示 build-system 上限 <0.12。
- PyPI 上已经存在
unilab==0.0.0 占位项目(项目页),发布前必须确认项目所有权、2FA 和 Trusted Publisher 配置。
- UniLab 当前没有 mjlab 所具备的
RELEASING.md、make build/publish-test/publish、tag 触发的 release workflow 或 wheel/sdist 安装冒烟 job;现有 CI 只验证源码 checkout。
- mjlab v1.6.0 是可复用的发布先例:运行脚本、任务配置和必要 XML 都在
src/mjlab 包内;使用 uv_build 和完整 PyPI metadata/extras;Makefile 提供 build/TestPyPI/发布目标;RELEASING.md 固化版本、annotated tag 和发布后验证;release.yml 用 v* tag、PyPI OIDC、wheel+sdist isolated smoke 后再 publish;PyPI 产物约 14 MB,可用 uvx --from mjlab demo 验证。UniLab 仍须保留 Hydra、多后端和 owner-config contract,不能直接照搬 mjlab 的单后端布局。
最小交付结果
只产出一份 maintainer 可决策的发布分析和一个后续 child issue 草案,不改代码、不改配置、不改 CI、不上传包。推荐把“单一 unilab wheel/sdist、明确支持的 CLI 子集、package-owned 配置/脚本、backend extras、动态资产使用用户可写缓存”作为最小方案基线,同时说明 library-only 与拆分 package 的真实成本;最终支持面由 maintainer 确认。
In scope
- 审计 wheel/sdist 的文件清单、版本来源、console scripts,以及
cli.py、demo.py、HORA/多卡路径中的源码根目录假设。
- 对照 mjlab v1.6.0 的 package layout、metadata、extras、build/release workflow 和 artifact smoke,标出可借鉴与不适用部分。
- 比较最多三个发布面选项(library-only、仓外可运行的 self-contained CLI、拆分 core/backend/assets),给出用户价值、规模和长期维护成本。
- 盘点 Hydra 配置、MuJoCo/MJWarp/Motrix extras、PyTorch 私有 index、
mujoco-uni-runtime 原生构建、资产体积/许可证、PyPI 名称所有权等阻塞项。
- 写出 wheel/sdist、干净环境、仓外命令和 optional backend 的最小验证矩阵,并拆出一个独立 implementation issue(含文件/LOC/PR 预算)。
Non-goals
Owner 与预计改动
Owner layer 为 package/release boundary + CI/tooling;建议 owner @TATP-233(待 maintainer 确认)。本 issue 预计 0 个文件、0 行代码、0 个 PR;后续实现必须另立并单独确认的 child issue。
Acceptance criteria
- issue comment 或附录记录可复现的 clean-tree build 命令、artifact manifest/size、缺失的
conf/scripts 和版本不一致事实。
- 给出 UniLab 与 mjlab 的对照表,并明确哪些机制采用、哪些因 Hydra/多后端/资产约束拒绝。
- 明确首个发布版本支持的安装方式、命令、extras、平台和“不支持”边界。
- 对 PyPI 名称/权限、依赖索引与原生构建、资产许可证/缓存位置给出结论或责任人;未解决项有 stop condition。
- 产出一个可独立 review 的 implementation child 草案,声明文件数、净手写 LOC、PR 数和近风险验证;本 issue 全程无代码/发布副作用。
Stop conditions
- maintainer 尚未在 library-only 与仓外可运行 CLI 之间做出选择时,暂停,不进入实现。
- 资产再分发权、包大小/缓存写入策略或 optional dependency 的平台可用性无法确认时,拆分或回到决策。
- 需要新增公共 contract、execution path、runner/lifecycle 或长期 CI/support claim 时,另立 issue 并重新确认。
unilab 项目所有权或 Trusted Publisher 未确认时,不执行任何发布动作。
Parent roadmap: #1252(候选项 7 的扩展)
Related: #360(已关闭;当前安装文档仍记录同一缺口)
Work type: research
Area: CI/tooling
一句话问题
UniLab 的
pyproject.toml已声明uv_build、0.1.0元数据和 console scripts,但 package 产物、仓外可运行的 CLI、资产/依赖边界及 PyPI 发布流程尚未闭环。为什么现在做
src/unilab/cli.py:40-57明确要求源码 checkout 同时存在conf/和scripts/;二者位于仓库顶层,clean wheel/sdist 不包含它们。安装文档也明确说明 pip/wheel 尚不支持仓外训练(EN、中文)。origin/main@34880c7a做 clean archive 后运行uv build:wheel55,860,217bytes、sdist55,738,839bytes;wheel 含 279 个 asset member(未压缩约 140 MiB),但没有conf//scripts/。src/unilab/__init__.py:5仍为0.0.0,与pyproject.toml的0.1.0不一致;当前 uv 0.12.5 还会提示 build-system 上限<0.12。unilab==0.0.0占位项目(项目页),发布前必须确认项目所有权、2FA 和 Trusted Publisher 配置。RELEASING.md、make build/publish-test/publish、tag 触发的 release workflow 或 wheel/sdist 安装冒烟 job;现有 CI 只验证源码 checkout。src/mjlab包内;使用uv_build和完整 PyPI metadata/extras;Makefile提供 build/TestPyPI/发布目标;RELEASING.md固化版本、annotated tag 和发布后验证;release.yml用v*tag、PyPI OIDC、wheel+sdist isolated smoke 后再 publish;PyPI 产物约 14 MB,可用uvx --from mjlab demo验证。UniLab 仍须保留 Hydra、多后端和 owner-config contract,不能直接照搬 mjlab 的单后端布局。最小交付结果
只产出一份 maintainer 可决策的发布分析和一个后续 child issue 草案,不改代码、不改配置、不改 CI、不上传包。推荐把“单一
unilabwheel/sdist、明确支持的 CLI 子集、package-owned 配置/脚本、backend extras、动态资产使用用户可写缓存”作为最小方案基线,同时说明 library-only 与拆分 package 的真实成本;最终支持面由 maintainer 确认。In scope
cli.py、demo.py、HORA/多卡路径中的源码根目录假设。mujoco-uni-runtime原生构建、资产体积/许可证、PyPI 名称所有权等阻塞项。Non-goals
pyproject.toml、src/、conf/、scripts/、资产、文档或 GitHub Actions,不 bump version,不创建 release,不上传 TestPyPI/PyPI。SimBackend、env、runner、learner、registry 或 sim2sim contract。Owner 与预计改动
Owner layer 为 package/release boundary + CI/tooling;建议 owner
@TATP-233(待 maintainer 确认)。本 issue 预计 0 个文件、0 行代码、0 个 PR;后续实现必须另立并单独确认的 child issue。Acceptance criteria
conf/scripts和版本不一致事实。Stop conditions
unilab项目所有权或 Trusted Publisher 未确认时,不执行任何发布动作。