在 2026-06-04 到 2026-07-08 期间,共提交了约 30 个外部 PR,其中 18 个被拒绝(60% 拒绝率)。通过分析这些被拒 PR 的维护者评论,提取出 4 个核心反模式。
| 仓库 | PR | 内容 | 拒绝原因 | 反模式 |
|---|---|---|---|---|
| vitejs/vite | #22701 | VITE_ERROR_HANDLER | “I don’t think this is useful” | cosmetic-no-user-pain |
| e2b-dev/E2B | #1413 | replace rich with stdlib | “mostly cosmetic” | cosmetic-no-user-pain |
| e2b-dev/E2B | #1458 | E2B_ERROR_HANDLER | 被拒 | cosmetic-no-user-pain |
| plastic-labs/honcho | #798 | json_object fallback | “pretty big breaking change” | breaking-change-no-compat |
| astral-sh/uv | #19685 | SARIF output | 官方自己做了 #19872 | upstream-already-implementing |
| patchwork-dev/patchwork-os | #870 | design doc | 不接受这类贡献 | low-value-contribution |
| patchwork-dev/patchwork-os | #890 | connector parity test | 不接受这类贡献 | low-value-contribution |
| patchwork-dev/patchwork-os | #891 | cross-layer parity test | 不接受这类贡献 | low-value-contribution |
| graphrag-toolkit | #310 | s3_path validation | 被拒 | 未知(repo 已删除) |
| autocontext | #1025 | Lean error body fix | 被拒 | 未知(repo 已删除) |
| apple-mail-fast-mcp | #324 | batch UID resolution | 被拒 | 未知(repo 已删除) |
| mcp_agent_mail_rust | #141 | INDEX.md | 被拒 | 未知(repo 已删除) |
| openlegion | #1026 | self-reflection module | 被拒 | 未知(repo 已删除) |
特征: 提交了美化/格式化/输出改进,但没有解决真实用户痛点。
典型案例:
预防策略:
特征: 提交了破坏性变更但没有考虑向后兼容性。
典型案例:
预防策略:
特征: 维护者已经在内部实现或计划实现相同功能。
典型案例:
为什么这是最有价值的反模式:
预防策略:
特征: 提交的贡献不符合项目的核心价值或维护者的需求。
典型案例:
预防策略:
错误做法: 直接提 PR,假设维护者会接受 正确做法: 先在 Issue 中讨论方案,确认维护者认可后再提 PR
错误做法: 用通用的贡献方式对待所有项目 正确做法: 研究每个项目的 CONTRIBUTING.md、维护者最近合并的 PR 类型
错误做法: 提交”我觉得这样更好”的改进 正确做法: 提交解决真实用户痛点的改进,最好有 Issue 支持
错误做法: 只考虑代码质量,不考虑维护成本 正确做法: 维护者需要 review、测试、维护你的代码,确保这个成本是值得的
提 PR 前检查:
| 类型 | 数量 | 成功 | 失败 | 成功率 |
|---|---|---|---|---|
| Error Handler | 3 | 0 | 3 | 0% |
| 文档/测试 | 4 | 0 | 4 | 0% |
| 依赖替换 | 1 | 0 | 1 | 0% |
| 功能改进 | 5 | 2 | 3 | 40% |
| Bug 修复 | 8 | 6 | 2 | 75% |
结论: Bug 修复的成功率最高(75%),Error Handler 和文档/测试的成功率最低(0%)。