其中「文档与代码矛盾」和「文档发布别名固定在 0.8」两项已在 commit 71a5b34 修复;弃用策略本身仍待定。
1. 兼容层没有终点
代码里有 3 处会发 DeprecationWarning:
| 位置 |
内容 |
abses/core/base_module.py |
组件参数的小写 key 回退到 PascalCase 类名 |
abses/core/base_subsystem.py |
0.7.x 的 how= 参数被接受并忽略 |
abses/core/job_manager.py |
结果里的 repeat_id 列,已被 run_id 取代 |
另有 6 处不发警告的静默兼容层:
abses/core/base.py —— 整个 60 行文件只是 re-export 垫片,docstring 自陈用途;
abses/core/types.py 与 abses/core/type_aliases.py —— 同名 TypeVar 定义两遍(一份带 bound、一份不带),纯粹为了绕开循环 import;
abses/core/protocols.py 的 _MovementsProtocol = MovementProtocol 别名——私有名,外部不可能依赖,可以直接删;
abses/utils/config.py 的 reports → tracker、tracker.agent 键改名;
abses/core/experiment.py 两处 OmegaConf.set_struct(cfg, False),为 <0.8.x 项目全局关闭 Hydra 的 struct 模式。
三条警告的文案全是 "in a future version",没有一条写了目标版本。 0.7→0.8 的兼容层如今已经落后两个小版本(包已到 0.10.0),还背着 33 个专用测试(tests/test_backward_compatibility.py 21 个 + tests/test_actor_params_backward_compatibility.py 12 个)。
其中代价最大的是第 6 条:全局关掉 struct 模式意味着所有用户都永久失去 OmegaConf 的配置拼写检查。
建议
定一条明确的策略并写进 contributing.md 和 docs/api/stability_guarantee.md,例如:
在 X 版本引入的 DeprecationWarning,在 X+2 的小版本移除。
然后把每条警告的文案改成带具体版本号的,例如「will be removed in 0.12」。这样这堆维护负担就从开放式变成了有计划的清理。
_MovementsProtocol 这类私有别名可以立刻删。
2. 版本号在三处手写(部分已修)
pyproject.toml 的 version = "0.10.0"
abses/__init__.py 的回落值 "v0.10.0-dev"
.github/workflows/gh-page.yml 里写死的 mike deploy --update-aliases 0.8 latest —— 已改为从 pyproject.toml 读取
master 分支每次推送都曾把最新文档发布到 0.8 这个别名下(包已经是 0.10.0)。已修,但建议进一步统一:仓库里没有 .release-please-manifest.json,而 release-please-config.json 用的已经是 googleapis 的 schema——把版本号收敛成单一来源可以顺带解决 __init__.py 的手写回落值。
3. Action 版本全线滞后,且没有自动更新
.github/ 下没有 dependabot.yml,四个 workflow 的 action 都落后:
| Action |
当前 |
状态 |
google-github-actions/release-please-action |
v3 |
该 action 已迁移到 googleapis/release-please-action,v3 已弃用,v4 为当前版本 |
codecov/codecov-action |
v4 |
v5 为当前版本 |
astral-sh/setup-uv |
v4 |
v6 为当前版本 |
release-please 这条尤其别扭:根目录的 release-please-config.json 用的已经是 googleapis 的 schema,但 workflow 还指向旧的 google-github-actions 仓库。
建议
加一个 .github/dependabot.yml(package-ecosystem: github-actions,weekly),并把上述三个 action 升到当前版本。
验收标准
1. 兼容层没有终点
代码里有 3 处会发
DeprecationWarning:abses/core/base_module.pyabses/core/base_subsystem.pyhow=参数被接受并忽略abses/core/job_manager.pyrepeat_id列,已被run_id取代另有 6 处不发警告的静默兼容层:
abses/core/base.py—— 整个 60 行文件只是 re-export 垫片,docstring 自陈用途;abses/core/types.py与abses/core/type_aliases.py—— 同名 TypeVar 定义两遍(一份带 bound、一份不带),纯粹为了绕开循环 import;abses/core/protocols.py的_MovementsProtocol = MovementProtocol别名——私有名,外部不可能依赖,可以直接删;abses/utils/config.py的reports→tracker、tracker.agent键改名;abses/core/experiment.py两处OmegaConf.set_struct(cfg, False),为 <0.8.x 项目全局关闭 Hydra 的 struct 模式。三条警告的文案全是 "in a future version",没有一条写了目标版本。 0.7→0.8 的兼容层如今已经落后两个小版本(包已到 0.10.0),还背着 33 个专用测试(
tests/test_backward_compatibility.py21 个 +tests/test_actor_params_backward_compatibility.py12 个)。其中代价最大的是第 6 条:全局关掉 struct 模式意味着所有用户都永久失去 OmegaConf 的配置拼写检查。
建议
定一条明确的策略并写进
contributing.md和docs/api/stability_guarantee.md,例如:然后把每条警告的文案改成带具体版本号的,例如「will be removed in 0.12」。这样这堆维护负担就从开放式变成了有计划的清理。
_MovementsProtocol这类私有别名可以立刻删。2. 版本号在三处手写(部分已修)
pyproject.toml的version = "0.10.0"abses/__init__.py的回落值"v0.10.0-dev"—— 已改为从.github/workflows/gh-page.yml里写死的mike deploy --update-aliases 0.8 latestpyproject.toml读取master 分支每次推送都曾把最新文档发布到 0.8 这个别名下(包已经是 0.10.0)。已修,但建议进一步统一:仓库里没有
.release-please-manifest.json,而release-please-config.json用的已经是 googleapis 的 schema——把版本号收敛成单一来源可以顺带解决__init__.py的手写回落值。3. Action 版本全线滞后,且没有自动更新
.github/下没有dependabot.yml,四个 workflow 的 action 都落后:google-github-actions/release-please-actiongoogleapis/release-please-action,v3 已弃用,v4 为当前版本codecov/codecov-actionastral-sh/setup-uvrelease-please这条尤其别扭:根目录的release-please-config.json用的已经是 googleapis 的 schema,但 workflow 还指向旧的google-github-actions仓库。建议
加一个
.github/dependabot.yml(package-ecosystem: github-actions,weekly),并把上述三个 action 升到当前版本。验收标准
contributing.md与stability_guarantee.md写明弃用策略(引入版本 → 移除版本)。DeprecationWarning的文案都带具体的移除版本号。_MovementsProtocol等私有别名已删除。OmegaConf.set_struct(cfg, False)给出结论:要么定版本移除,要么改成可配置项(默认恢复 struct 模式)。.github/dependabot.yml存在,三个滞后的 action 已升级。