背景
5月11日,发现 OpenClaw 项目 Issue #80721 ,描述 config unset 不支持 --dry-run 的功能缺失。基于该 Issue 提交了实现 PR #80773。
时间线
| 时间 | 事件 |
|---|---|
| 5月11日 | 发现已有 Issue #80721,基于该 Issue 提交 PR #80773 |
| 5月11日-13日 | ClawSweeper 进行 8 轮审查,所有 P1/P2 问题修复,通过全部审核 |
| 5月13日 | 在 PR 中主动询问是否需要额外改进,表达合作意愿 |
| 5月13日 | Gio Della-Libera(微软 VP)提交 PR #81497 |
| 5月13日 | Gio 关闭 #81497,评论承认 #80773 "more complete" |
| 5月14日 | Gio 提交 PR #81895,重新实现相同功能,无任何沟通 |
| 5月14日 | ClawSweeper Bot 关闭 #80773,理由:#81895 是 maintainer-labeled PR |
| 5月15日 | 在 PR 和 Issue 下发表申诉评论 |
技术对比
| 指标 | PR #80773(独立实现) | PR #81895(Maintainer 重构) |
|---|---|---|
| 审核状态 | ✅ 通过全部 8 轮审查 | ❌ 存在 2 个 P2 缺陷 |
| JSON 输出 | ✅ 正确 | ❌ ClawSweeper 判定为缺陷 |
| SecretRef 检测 | ✅ 覆盖完整路径 | ❌ ClawSweeper 判定为缺陷 |
| 文档 | ✅ 完整 | ❌ 缺失 |
| Co-author | - | ❌ 没有给 |
关键事实: PR #81895 的两个缺陷,正是 #80773 在第 3、4 轮已修复的内容。
维护者的公开承认
Gio 关闭自己的 PR #81497 时,评论写道:
"Closing this draft as a duplicate of #80773, which already covers config unset --dry-run more completely with docs, JSON output, behavior proof, and review history. We should let that PR be the canonical fix for #80721."
这段评论是公开记录,任何人都能看到。
然而不到 24 小时后,同一个人提交了功能完全重叠的 PR #81895。
ClawSweeper 的表态
在 #81895 的审查中,ClawSweeper 承认存在 "overlapping implementation":
"Two narrow P2 dry-run defects remain and can be repaired mechanically if maintainers choose this PR as the canonical branch over the overlapping implementation."
在关闭 #80773 时,ClawSweeper 更新评论:
"Close as superseded: the same config unset --dry-run work is now owned by the open maintainer-labeled PR at #81895."
关键:只要 PR 有 maintainer 标签,就自动成为 canonical 实现,无论先来后到或技术质量。
治理结构不透明
根据 CONTRIBUTING.md,官方 maintainer 列表有 28 人,但 giodl73(Gio Della-Libera)不在其中。
然而 PR #81895 却有 maintainer 标签,ClawSweeper 以此为优先理由关闭了 #80773。
| 矛盾点 | 事实来源 |
|---|---|
| giodl73 不在 maintainer 列表 | CONTRIBUTING.md |
| PR #81895 有 maintainer 标签 | GitHub PR labels |
| ClawSweeper 以此为优先理由 | ClawSweeper 评论 |
maintainer 标签的授予机制不透明。
我的评论
合作询问(未获回复)
Hi @giodl73-repo, I noticed PR #81895 also addresses #80721.
Is there anything I should improve or change in this PR (#80773)?
Happy to help if there's a way to combine efforts or if additional work is needed.
表达失望
I'm disappointed that this PR was closed without any response to my comment
or explanation of the decision, especially after passing all ClawSweeper reviews.
申诉 steipete
在 Issue #80721 下向 OpenClaw 创始人发出申诉:
Hi @steipete, I'd like to bring your attention to this issue.
My PR #80773 passed all 8 rounds of ClawSweeper review and was explicitly
acknowledged by @giodl73-repo as "more complete" before he closed his own
draft #81497.
However, my PR was then closed by ClawSweeper Bot in favor of @giodl73-repo's
later PR #81895, which still has 2 P2 defects unresolved.
I would appreciate your review on this matter. Thank you.
问题总结
| 问题 | 说明 |
|---|---|
| 先来后到 | 独立贡献者先提交,先通过审查 |
| 技术质量 | 独立实现更完整,Maintainer 版本有 P2 问题 |
| 沟通缺失 | Maintainer 没有回复任何评论 |
| 决策不透明 | Bot 以 maintainer-labeled 为由关闭,未解释原因 |
| Credit 缺失 | 没有给独立贡献者 co-author |
行为分析
这属于典型的 "Not Invented Here" 现象,但情节更严重:
- 维护者已书面认可外部贡献质量,仍选择重新实现
- 整个过程绕过外部贡献者,无任何沟通
- 替代实现至今有已知缺陷,而这些缺陷在外部版本早已修复
如果架构方向是唯一考量,维护者理应在外部 PR 上评论要求调整,而非无沟通覆盖。
项目整体 vs 个人行为
OpenClaw 有 2000+ contributor,项目整体是接受外部贡献的。
这次是 giodl73 个人的行为,不代表项目政策。
| 层面 | 态度 |
|---|---|
| OpenClaw 项目 | 整体开源,接受贡献 |
| giodl73 个人 | 这次行为不尊重贡献者 |
不能因一人行为否定整个项目。但不同 maintainer 的行为风格有差异。
我的收获
尽管 PR 被关闭,技术贡献留下了公开记录:
- 维护者的书面承认:PR #81497 的关闭评论是任何人都能看到的客观事实
- 完整的技术记录:8 轮审查、所有修复的提交历史,是技术能力的证明
另外:提 PR 之前了解仓库维护者的作风 LOL
关键经验
1. ClawSweeper 是迭代式审查
每次修复后请求 re-review,会原地更新评论。
2. Real Behavior Proof 格式严格
必须用 - **Key**: 格式,必须有真实终端输出。
3. CI 失败可能不是你的问题
检查是否涉及你修改的文件,不涉及就不用处理。
4. 文档和代码同样重要
P3 级别的发现也要重视。
5. Maintainer 可能不按开源精神行事
即使你:
- 先提交
- 通过审查
- 表达合作意愿
Maintainer 仍可能:
- 开自己的 PR
- 不和你沟通
- 直接关闭你的 PR
- 不给你 co-author
这是现实。学习经验,继续前进。
相关链接
- PR #80773(opens in a new tab) - 独立实现(已关闭)
- PR #81895(opens in a new tab) - Maintainer 重构
- Issue #80721(opens in a new tab) - 原始 Issue
最后更新: 2026-05-15