fmway-bugs 是一个结构化的缺陷修复流程技能,强调“不靠猜测修 bug”,以阶段推进和关卡确认来组织工作。
用途:适用于 bug 报告、功能回归、行为异常或生产事故等场景,尤其需要明确期望行为、收集证据并留下文档记录时使用。整个流程分七个阶段:Phase 0 发现与调研、Phase 1 记录缺陷、Phase 2 分析、Phase 3 复现测试、Phase 4 修复计划、Phase 5 实现、Phase 6 验证、Phase 7 提交 PR。
主要能力:
- 调研阶段会读取 PRD.md、docs/ 下相关文档、docs/bugs/ 中已有报告,以及 docs/requirements/{slug}/TICKET.md(若由 fmway-po 产出)。要求明确什么坏了、期望行为、影响对象、环境与严重程度、尚缺的数据,并梳理受影响的模块、函数、测试、集成及可能的回归提交。
- 隔离设置:Phase 0 之后询问用户选择在当前检出上新建分支(git switch develop && git pull --ff-only && git switch -c fix/{slug})还是创建独立 worktree(仅放在 .worktrees/ 下,命令为 git fetch origin develop && mkdir -p .worktrees && git worktree add .worktrees/fix-{slug} -b fix/{slug} origin/develop)。若当前有未提交改动会先停下询问。
- 状态跟踪:遵循 ways/v1alpha1 契约,维护 .ways/state.json(schemaVersion 2),其中 flow 为 bug、way 为 fmway/bugs、discipline 为 development,phase 从 discovery 开始,isolationType 记录分支或 worktree 选择;文档路径为 docs/bugs/{slug}/BUG.md、ANALYSIS.md、FIX_PLAN.md;gate 为 fix-plan 与 pr。每次阶段转换同步更新 lastPhase,实现阶段逐个 step 更新状态。技能本身不提交该文件,需持久化时建议调用 fmway-pr。
- 缺陷文档 BUG.md:slug 格式为补零序号加 kebab-case 描述(如 001-totales-importacion-en-cero),包含状态、描述、复现步骤、期望与实际行为、上下文(环境、受影响提交或版本、受影响用户或记录、严重程度)、日志或错误堆栈。
- 分析文档 ANALYSIS.md:记录根因、受影响代码、影响范围(受影响用户或记录数量、数据完整性风险)、复现路径。未获证据前不得把疑似根因当作已确认。
- 复现测试:先写一个针对异常行为的单元或端到端测试,在当前代码上必须失败;调试通过后由 fmway-pr 提交(建议提交信息 test(fix-{slug}): ...)。若无法用测试复现,需在 ANALYSIS.md 说明原因并询问用户。
- 修复计划 FIX_PLAN.md:包含分支或 worktree、隔离方式、一行根因、修复思路、受影响文件、风险与副作用、回滚方案。写完即触发关键关卡,必须停下等待用户批准。
- 实现:只做计划内改动,不做额外清理;在每个检查点运行项目的类型检查、lint、测试(依 CLAUDE.md),再建议调用 fmway-pr 提交;复现测试须转绿且现有测试无回归。建议提交格式 fix({slug}): {简短描述}。
- 验证清单:复现测试通过、全部现有测试通过、类型检查无错、lint 无错、构建成功、无回归、BUG.md 状态改为已修复、依赖审计无新增漏洞、对改动代码做人工安全审查。若修复涉及认证、权限、支付或个人数据,需在 PR 前以嵌入模式调用 fmway-security。无法运行的验证工具须记录缺失项与失败命令,并询问用户,不得把未执行的检查报告为通过。
- PR:由 fmway-pr 推送 fix/{slug} 并创建指向 develop 的 PR,标题 fix({slug}): {简短描述},正文含 BUG.md 链接、一行根因、修复说明、测试名称、检查清单(typecheck、lint、tests、build、依赖审计、安全审查)。打开后分享 URL 并等待用户批准合并。
适用场景:中小型缺陷修复、需要文档留痕的回归问题、生产事故的排查与修复、涉及安全敏感区域的缺陷修复。
限制与约束:不得在计划获批前写修复代码;不得超出计划范围修复;不得跳过复现测试;不得无证据臆断期望行为、根因或修复方向;报告信息不足时先指出缺失而非直接出计划;未跑类型检查、lint 和测试不得宣布完成;不得直接合并,必须走 PR;不得直接改动 develop 或 main,须使用用户选择的隔离方式。工作区中的 instructions 仅作为流程说明,技能不发起提权或越权操作;是否存在收费、价格或平台兼容性等具体信息暂未提供。