From codestable
Fixes confirmed bugs by root cause — applies the fix, validates it, and writes the record. Activates when the root cause and solution are already determined, enforcing strict scope discipline and minimal changes.
How this skill is triggered — by the user, by Claude, or both
Slash command
/codestable:cs-issue-fixThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
开始任何判断或动作前,先执行 CodeStable preflight:读 `.codestable/attention.md`;缺失先 `cs-onboard`;不读外部 AI 入口替代(详见 `.codestable/reference/execution-conventions.md`)。
开始任何判断或动作前,先执行 CodeStable preflight:读 .codestable/attention.md;缺失先 cs-onboard;不读外部 AI 入口替代(详见 .codestable/reference/execution-conventions.md)。
根因和方案已经确定(标准路径在 analysis、快速通道在 report 阶段口头确认过),你的活是按方案改代码、验证效果、写下修复记录。
fix 阶段最容易出问题的不是改代码本身,而是改的过程中冒出的"顺手"冲动——顺手优化、顺手重构、顺手加抽象。每项单独看说得通,但合在一个 PR 里让别人分不清"这次到底为了修 bug 改了什么"。
共享路径与命名约定看
.codestable/reference/shared-conventions.md第 0 节和cs-issue的"文件放哪儿"。
进入修复前运行 start gate,{slug} 为 issue 目录名:
python3 .codestable/tools/codestable-worktree-gate.py --root . --json start --unit .codestable/issues/YYYY-MM-DD-{slug}
gate 不通过就不要开始改代码;用户批准 override 时先在 unit 目录写 worktree-override.md(reason / scope / approval)。
修复完成、输出汇报前运行 commit gate:
python3 .codestable/tools/codestable-worktree-gate.py --root . --json commit --unit .codestable/issues/YYYY-MM-DD-{slug}
gate 不通过就先处理 findings,不把"测试已过"当成完成。gate 工具的安装与 branch-guard hook 说明见 .codestable/reference/branch-guard-hooks.md。
doc_type=issue-analysis 且 status=confirmed,第 5 节用户选定了哪个方案.codestable/attention.md + 沉淀目录搜索:
grep -r "{关键词}" .codestable/compound/——确认修复方式不违背已有库用法 / 模式 / 调研结论进入这个入口时 AI 在 report 阶段已读过代码并对根因有把握。
{文件}:{行号} 的 {具体代码} 存在 {问题描述}",让用户确认根因判断准确.codestable/attention.mdcompound/(trick + explore),避免误把已知边界条件当新问题先做 shared-conventions.md 第 7 节的第一性原则 pre-pass:外部行为就是"复现路径不再失败",约束来自 report / analysis / fix 方案,最小充分改动只服务根因;从这三项推不出的抽象、兜底和顺手重构都不写。
修复范围来自 analysis 第 5 节"推荐方案"的"影响面"。超出范围的文件——哪怕顺眼——不动。
发现范围外值得改的记一条"顺手发现"不改代码:
> 顺手发现:{文件:行号} {问题简述}。不在本次修复范围,可后续另开 issue。
为什么这么严:顺手改的代码不在分析里,验收对不上,git blame 分不清哪些改动是为这个 bug。
修复只针对根因,不引入新抽象、新接口、新模式。如果发现"要把这个改好得先重构 X"——停下来跟用户确认是否在这个 issue 里做重构,还是拆成独立工作。
为什么:bug 修复天然窄场景,引入新抽象意味着只有这一个使用点支撑——典型过早抽象。
修 bug 看似动作小但 AI 写修复代码一样会漂——大文件再塞特殊处理、大类再加方法、为绕开边界加 if 分支。反射检查见 shared-conventions.md 第 7 节。
issue-fix 比 feature-implement 更谨慎:触发反射信号但结论是"该拆"时默认不在本次 PR 做——按"改动最小化"记成顺手发现。唯一例外是"不拆就没法干净修这个 bug",那停下来跟用户确认"修这个 bug 的前置是 {重构动作},合进来还是拆出去单独做"。
修复汇报模板见同目录 reference.md,不允许含糊汇报。汇报后停下等用户回复。
修复改完后逐项核对:
.codestable/attention.md 的硬要求执行,不能只 typecheck走完验证清单仍问题复现或行为与期望不符——别在原有猜测上反复试错,切换到日志调试模式重新收集运行时证据。
为什么切换:反复试错本质是猜测在原假设下还有什么可能性,但如果原假设就错了再猜也是绕圈。日志强制看实际运行时数据,往往一眼看出原假设哪里偏了。
日志调试步骤、用户取日志提示词、循环限制见同目录 reference.md。
验证通过后在 issue 目录建 {slug}-fix-note.md(位置见 cs-issue 的"文件放哪儿"),记录完整闭环。标准路径模板和快速通道模板都在同目录 reference.md。
{slug}-fix-note.md 已建并填写完整按 shared-conventions.md 第 4 节"scoped-commit"规则执行。本阶段:
{slug}-fix-note.md + 本次一并更新的 report / analysis{slug}-fix-note.md 已落盘",紧接着问是否需要 commit告诉用户:"issue 修复完成,工作流闭环。report + analysis + fix-note 已存档。"
按 shared-conventions.md 第 3 节"issue-fix"收尾推荐顺序各问一句(用户"不用"立即跳过):
cs-code-review 做独立 diff 评审;Critical/Important 未清零不进 commit,scoped-commit 发起权归 cs-code-review。cs-keep)"cs-note)"建议:把 issue 目录文件和代码改动放同一次提交方便追溯;"顺手发现"另开 cs-issue-report 处理别塞这个 PR。
修复中发现问题实际是功能缺失(不是 bug)→ 建议另开 cs-feat,别在 issue 工作流里偷偷做新功能。
{slug}-fix-note.md 没建就宣告完成git commitnpx claudepluginhub codestable/codestable --plugin codestableLightweight bug-fix workflow for small, pre-decided fixes with no design space: root-cause analysis with spec back-lookup, TDD fix, optional acceptance. Escalates to requirement-analysis on contract-crossing signals.