# Pull Request > ⚠️ **维护者无法手动复现你的 PR**。所以这个模板里要求的"跑通证据"不是形式主义,是 PR 能不能合的硬条件。证据缺了,PR 直接关,不解释。 > > 提 PR 之前请读完 [`CONTRIBUTING.md`](../CONTRIBUTING.md) 和 [`NOTICE`](../NOTICE)。 --- ## 1. 改动类型(必填) 请勾选这个 PR 属于哪一类(**只能选一类**,不同类要求的证据不同): - [ ] 🐛 **Bug fix** — 修了某个会让现有用户配置失效的行为 - [ ] ✨ **New feature** — 加了不破坏现有 API 的新功能 - [ ] 💥 **Breaking change** — 改动会让现有配置失效(必须在最后一节说明迁移路径) - [ ] 🧠 **hCaptcha solver** — 加了新题型 / 改进现有 solver - [ ] 🔄 **协议适配** — Stripe / PayPal / OpenAI 出 breaking change 后的修补 - [ ] 🛡️ **Daemon 自愈环** — 加了新失败模式的自愈分支 - [ ] 🔬 **研究内容** — 向 `docs/anti-fraud-research.md` 加新数据 / 新结论 - [ ] 📚 **文档** — README / docs/* / inline 注释 - [ ] 🌍 **翻译** — 中英互译,不改行为 - [ ] 🔧 **工具链 / CI** — 不改运行时行为 --- ## 2. 改动摘要(必填) **关闭 issue(如适用)**:Closes # --- ## 3. 详细说明 + 设计决策(必填,至少 100 字) --- ## 4. 跑通证据(**必填**,按你 PR 类型不同要求不同) > 维护者只能根据这一节的内容判断 PR 是否合理。**证据不足的 PR 不会被合并。** ### A. 通用要求(所有 PR 都要) - [ ] **本地跑过这个 PR 的代码**(不是只通过 review 改的字面) - [ ] **没引入新的真实凭证 / IP / 域名 / PII** —— `git diff main...HEAD` 自查过 ### B. 按类型补充证据(根据 §1 选的类型勾对应分支) #### 🐛 Bug fix / ✨ New feature / 💥 Breaking change - [ ] **复现命令**(reviewer 能直接 copy 跑的): ```bash # 你修复 / 实现的功能怎么触发? ``` - [ ] **修复前的失败日志**(脱敏后贴 30–50 行):
失败日志 ``` 贴这里 ```
- [ ] **修复后的成功日志**(同样脱敏):
成功日志 ``` 贴这里 ```
- [ ] **描述边界情况**:哪些场景测了?哪些没覆盖? #### 🧠 hCaptcha solver - [ ] **题型 prompt 文本**(完整字符串):`______` - [ ] **典型 challenge 截图** 1 张(脱敏后,附在 PR 评论区拖图上传) - [ ] **`/tmp/hcaptcha_auto_solver*/round_XX.json`** 内容(成功一轮,截最关键的字段):
round JSON ```json 贴这里 ```
- [ ] **`checkcaptcha_pass_*.json`** 至少 1 份(证明真过了) - [ ] **样本量**:你跑了多少次?通过率是多少? - 跑了 ___ 次,通过 ___ 次,通过率 ___% - [ ] **VLM 路径 + 启发式路径都测过了**(如果新加了启发式 solver) #### 🔄 协议适配(Stripe / PayPal / OpenAI 改了) - [ ] **抓包对比**(mitmproxy / Burp 都行): - 旧响应:附 1 段 - 新响应:附 1 段 - [ ] **服务方变更通知 / 公告链接**(如果有):______ - [ ] **本地完整跑一次 pipeline 的最后日志**(证明确实跑通到 `state=succeeded` 或类似终态):
pipeline 日志 ``` 贴这里 ```
#### 🛡️ Daemon 自愈环 - [ ] **触发场景描述**:什么情况下会触发?多久触发一次? - [ ] **触发那一刻的日志**(30 行):
触发日志 ``` 贴这里 ```
- [ ] **自愈成功后的下一轮跑通日志**(证明恢复有效):
恢复后日志 ``` 贴这里 ```
- [ ] **状态机变化**:`output/daemon_state.json` 在恢复前后的字段差异 #### 🔬 研究内容 - [ ] **数据采集时间窗口**:______ - [ ] **样本量 + 实验设置**:清楚说明对照组、变量 - [ ] **脱敏检查**(按 [`CONTRIBUTING.md`](../CONTRIBUTING.md#研究内容贡献的脱敏清单)): - [ ] IP 全用 RFC 5737 段(`203.0.113.x` / `198.51.100.x` / `192.0.2.x`) - [ ] 域名全用 `*.example` / `*.example.com` - [ ] ASN / ISP 名用 `AS-XX` / `ISP-A` - [ ] 没有真实账号 / token / cookie - [ ] **结论是否推翻 / 修正了 README 现有的某条结论?** 列出来 #### 📚 文档 / 🌍 翻译 / 🔧 工具链 - [ ] **改动后能正常渲染**(至少在 GitHub 网页 preview 看过) - [ ] **不破坏现有锚点链接**(README 和 docs/ 之间的内部跳转还能用) - [ ] **如果是 CI 改动**:本地跑通过;附 GitHub Actions URL 或本地输出 --- ## 5. Reviewer 怎么本地验证(必填) --- ## 6. 测了什么 / 没测什么(必填) ### 已测场景 - [ ] ______ - [ ] ______ ### 已知没覆盖的边界 - ______ - ______ ### Breaking change 迁移路径(如果勾了 §1 的"💥 Breaking change") --- ## 7. 脱敏检查(**必填强制勾选**) - [ ] 我搜过本 PR 所有改动里的真实 IP,全部用 `203.0.113.x` / `198.51.100.x` / `192.0.2.x` 替换了 - [ ] 我搜过所有改动里的真实域名,全部用 `*.example` 替换了 - [ ] 我搜过所有改动里的真实邮箱、token、cookie、卡号,全部脱敏或删除了 - [ ] 我跑过 `git diff --cached` 检查没有真实凭证带进 stage - [ ] 本 PR 描述里贴的所有日志 / 截图都已脱敏 --- ## 8. 授权与 License 确认(**必填强制勾选**) - [ ] 我贡献的内容是我自己写的,或者来自符合 MIT 兼容许可证的来源 - [ ] 我同意贡献按本项目的 [MIT License](../LICENSE) 发布 - [ ] 我已经读过并接受 [`NOTICE`](../NOTICE) 的全部条款 - [ ] 我已经读过 [`CODE_OF_CONDUCT.md`](../CODE_OF_CONDUCT.md) - [ ] 这个 PR **不是**为了协助任何针对未授权目标的使用 - [ ] 这个 PR 涉及的研究 / 数据 / 实验都是在我自己拥有或明确授权的目标上做的 --- ## 9. 其他(可选) --- > 提交前最后检查:上面所有 **必填** 项都填了?所有 **强制勾选** 项都勾了?跑通证据按你的 PR 类型给齐了?没填全的 PR 会被打 `needs-info` 标签,超过 14 天没补全自动关闭。