--- name: task-finish version: 1.1.0 last_updated: 2026-04-08 repository: https://github.com/312362115/claude changelog: skills/task-finish/CHANGELOG.md description: > 提交前质量门禁:CR 自检(快速/深度)。在 commit 之前触发。 只负责代码质量自检,不负责复盘——复盘在需求标 done 时由 task-manager 触发。 触发词:提交代码、自检、准备提交。 工作流位置:task-start → task-execute → task-finish(自检)→ task-manager(需求关闭时复盘) --- # 提交前自检(Task Finish) > 提交前自检发现问题的成本是上线后的 1/10。 > 本 skill 只负责**代码质量门禁**。复盘沉淀在需求关闭时由 task-manager 触发。 --- ## 第一步:判断自检深度 ``` 准备提交 │ ├─ 单文件小改动(修 typo、调样式、改注释)? │ └─ YES → 【跳过】直接提交 │ ├─ 改动 ≤3 文件,不涉及公共接口? │ └─ YES → 【快速自检】执行第二步的快速清单(5 项) │ └─ 改动 >3 文件 / 涉及公共接口 / 核心业务逻辑? └─ YES → 【深度自检】执行第二步的完整清单(15 项) ``` --- ## 第二步:CR 自检(Self Code Review) > 用"审查别人代码"的视角审查自己的代码。 ### 执行方式 1. **先 `git diff` 审查自己的改动**:逐文件看 diff,而不是凭记忆 2. **对照清单逐项检查**:不需要每条都适用,但每条都过一遍脑子 3. **发现问题当场修**:不要想着"先提交再说" 4. **不确定的地方主动说**:在提交时告知用户"这里我不确定 X,建议关注" ### 快速自检清单(≤3 文件改动) | # | 检查项 | 要点 | |---|--------|------| | 1 | 改动解决了目标问题? | 跑一遍核心路径确认 | | 2 | 没有遗留 debug 代码? | console.log、print、TODO hack | | 3 | 命名清晰、无硬编码敏感信息? | 密钥、token、密码 | | 4 | 没有混入不相关变更? | 改动范围最小化 | | 5 | 代码能正常运行? | 改后验证,不是"我觉得对" | ### 深度自检清单(>3 文件 / 公共接口 / 核心逻辑) **正确性检查**: - [ ] 改动是否真的解决了目标问题?跑一遍核心路径确认 - [ ] 边界情况是否处理?空值、零值、超长输入、并发场景 - [ ] 错误处理是否完整?异常不会被吞掉,错误信息有意义 - [ ] 是否引入了回归?改动是否可能破坏现有功能 **设计检查**: - [ ] 改动范围是否最小化?有没有混入不相关的变更 - [ ] 命名是否自解释?新增的函数/变量/类型名能否让人一眼理解 - [ ] 是否重复造轮子?项目里有没有已有的工具或模式可以复用 - [ ] 复杂度是否合理?有没有过度抽象或不必要的间接层 **安全检查**: - [ ] 外部输入是否校验?用户输入、API 参数、URL 参数 - [ ] 有没有硬编码的敏感信息?密钥、token、密码、内部地址 - [ ] SQL/命令拼接是否安全?是否使用了参数化查询 - [ ] 前端是否防 XSS?动态内容是否正确转义 **可维护性检查**: - [ ] 没有遗留 debug 代码(console.log、print、TODO hack) - [ ] 复杂逻辑是否有注释说明"为什么" - [ ] 公共接口的改动是否向后兼容?不兼容是否已标注 --- --- ## 与其他 skill 的衔接 ``` task-start — 启动:对焦需求 + 设计方案 │ ↓ task-execute — 执行:持续编码 + 跨会话进度管理 │ ↓ task-finish(本 skill)— 提交前自检 │ ├─ 自检通过 → 提交代码 ├─ 文档同步提醒(按改动内容判断,可能同时命中多条): │ ├─ 涉及新模块 / 模块间交互变更?→ 提醒更新 architecture/ 或 user-guide/(docs-management.Synthesize) │ ├─ 涉及依赖/工具链/环境配置变更?→ 提醒更新 guides/ │ └─ 涉及部署流程/基础设施变更?→ 提醒更新 runbooks/ ├─ 涉及上线服务?→ 提示跑 security-audit(安全审查) ├─ 准备发版?→ 引导到 release skill │ ↓ 提交完成后 ├─ 主动询问用户:"这个需求是否彻底完成?如果是,可以标记 done 触发复盘和经验沉淀。" │ ↓ (用户确认完成) task-manager 标 done — 触发复盘 + 经验沉淀 + docs-management.Ingest ``` > **复盘不在 task-finish 中触发。** 因为"编码完成"不等于"需求完成"——后续可能还有手动测试、bug 修复、调整。 > 复盘在需求被用户明确标记为 done 时,由 task-manager 触发,确保覆盖完整的交付过程。 > **但 task-finish 有责任提醒**:提交代码后主动询问用户是否需要关闭需求,避免复盘被遗忘。