{"slug":"cm-fix","title":"cm-fix","summary":"用户说“修复这个可复现 bug”或要求根据失败报告修代码时使用。执行红灯测试、根因定位、最小修复、独立审查和回归；尚未确认的问题先用 cm-test，新功能和架构重设计转交 cm-prd。","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-24T15:43:01.472299Z","repo":{"url":"https://github.com/kingxiaozhe/cm-workflow","stars":27,"forks":0,"license":"MIT","updatedAt":"2026-09-24T10:35:03Z"},"bodyHtml":"<hr>\n<h2>name: cm-fix\ndescription: 用户说“修复这个可复现 bug”或要求根据失败报告修代码时使用。执行红灯测试、根因定位、最小修复、独立审查和回归；尚未确认的问题先用 cm-test，新功能和架构重设计转交 cm-prd。</h2>\n<h1>cm-fix — 缺陷修复小闭环</h1>\n<p>执行前读取 <code>../../runtime/project-context.md</code>、<code>../../runtime/orchestration.md</code>、\n<code>../../runtime/review.md</code>、<code>../../runtime/model-efficiency.md</code> 与\n<code>../../runtime/logging.md</code>。Codex 入口为 <code>$cm-fix</code>；Claude Code 跨平台入口为\n<code>/cm-fix</code>，macOS/Linux 另有历史别名 <code>/cm:fix</code>。</p>\n<p>每个缺陷开始/恢复时按 <code>../../runtime/project-learning.md</code> 重读项目根 AGENTS.md，\n筛选相关教训辅助复现与定位；同一合同约束收尾写回，不以旧经验代替本次证据。</p>\n<p>用户明确要求外部专家，或为本次修复开启 AUTO 时，仍必须先完成第 1 步本地复现，\n再按 <code>../../runtime/external-expert.md</code> 执行 <code>../external-expert/SKILL.md</code> 的任务\n路由。代码、修复、测试和审查保持 LOCAL；只有竞争根因或高风险事实查证可路由到\nCONSULT/VERIFY。外部假设必须回到本地证伪；咨询记录不能代替 2.5 或第 5 步独立\n审查。</p>\n<p><strong>用法</strong>：<code>$cm-fix {specs路径} {代码项目路径} 缺陷描述（现象/报错/截图均可）</code></p>\n<h2>JS 只读准入</h2>\n<p>在读取项目内容、解析角色、写 <code>run_start</code>、运行复现命令或创建档案前，先确认本轮包含非空缺陷\n描述，但不要把描述正文拼进 shell；随后执行：</p>\n<pre><code>node \"{CM_WORKFLOW_ROOT}/scripts/cm-fix-entry.mjs\" \\\n  --skill-dir \"{CM_WORKFLOW_ROOT}/skills/cm-fix\" --project \"{CODE_PROJECT}\" \\\n  [--specs \"{SPECS_DIR}\"] --defect-present\n</code></pre>\n<p>没有 specs 的裸项目省略 <code>--specs</code>。缺少描述时不传 <code>--defect-present</code>，入口返回\n<code>blocked / defect_required</code> 后只向用户补要描述。只有 <code>ready / reproduce</code> 才进入下方既有闭环；\n它不提前声称缺陷可复现、不可复现或属于设计问题，只声明复现失败仍走 <code>observation</code>、确认设计\n问题仍转 <code>$cm-prd --change</code>。返回的角色、日志和 Learning 均为 <code>pending</code>，执行/写入权限为 false；\n入口不运行命令、不调用 provider/browser/外部专家、不创建日志/测试/档案，也不替代七步流程。</p>\n<h2>执行入口选择</h2>\n<p>准入通过后，具备当前会话双向进程通道、分离的 specs/代码根、命令式复现与测试配置时，\n读取 <code>references/js-host.md</code>，使用既有 <code>cm-fix-host.mjs</code> 执行；Codex/Claude 共用同一 owner。\n下文七步仍是业务要求，但 JS 分支的日志、交接、Review 发布及完成全部交给 owner，\n不得再手工执行对应写入步骤。只读准入的 <code>ready</code> 不是执行、外发或完成许可。</p>\n<p>JS 步骤留在 <code>unknown</code> 时先检查原调用和磁盘现场。只有本地复现、诊断、测试、修复、回归、\n复盘及走查等列在 <a href=\"references/js-host.md#%E6%9C%AC%E5%9C%B0-unknown-%E6%AD%A5%E9%AA%A4%E7%9A%84%E6%98%BE%E5%BC%8F%E6%94%BE%E5%BC%83%E4%B8%8E%E9%87%8D%E5%81%9A\">JS 宿主手册</a> 的步骤，\n才可在确认后用 <code>abandon_step</code> 说明原因并重做；普通 <code>advance</code>/<code>run</code> 不会自行放弃。\n独立审查、Learning 写回及交接文件仍按各自恢复或人工检查路径处理，不走此出口。</p>\n<p>裸项目、无自动测试/纯视觉替代、父 N6 运行衔接等尚未接通 JS 的场景，要明确报告缺口；\n不得宣称已完成 JS 迁移。只有用户明确选择既有非 JS 流程且尚未创建 JS 运行时，才执行\n下文手工流程；JS 已启动后遇到阻断，不得切换旁路、换身份或双写状态。</p>\n<p>以下手工流程中，两个路径校验通过后调用统一写入器记录 <code>run_start</code>；暂停/续跑沿用同一\n<code>.cm-run.json</code>，本次缺陷闭环或观测闭环退出时写 <code>run_done</code>。不得直接拼 JSON。</p>\n<h2>项目角色路由</h2>\n<p>从代码项目根解析 <code>coder</code>、<code>tester</code>、<code>reviewer</code>（命令、参数和日志字段见\n<code>runtime/workflow-routing.md</code>）。<code>coder</code> 只作为最小修复的请求路由元数据，<code>tester</code>\n负责防护网/回归，<code>reviewer</code> 只描述独立审查候选通道；<code>declared-adapter</code> 必须记录为\n未观测适配器，不能伪造调用或绕过本地执行与独立审查。resolver 返回非零或配置错误\n时立即 <code>BLOCKED</code>，不得复现、修改或写入缺陷档案；配置不存在时保持当前默认行为。\n<code>managed-adapter</code> 按 <code>runtime/model-efficiency.md</code> 返回文本建议并自动记录真实 usage；\n复现、修复落盘、测试和独立审查仍由本地流程执行。</p>\n<p>角色调用按 <code>runtime/model-efficiency.md</code> 只传当前缺陷的复现证据、根因范围、修复\ndiff、回归结果和对应规则；不重复投喂整仓、完整历史日志或其他缺陷上下文。失败输出\n保留首个可行动错误与证据路径，防护网、独立审查和回归要求不因精简而变化。</p>\n<p>修 bug 专用的<strong>轻量闭环</strong>——不走 N1–N8 全链（那是 feature 流程），也不许脱离工作流裸改（裸改没防护网没审查，修一个坏三个）。</p>\n<p><strong>多缺陷输入</strong>：先对全部缺陷做第 1-2 步（复现+定位），<strong>按根因聚类</strong>——同根缺陷合并为一次修复（多个失败测试、一次改动、档案互链），修复顺序按严重度排,不按输入顺序。不聚类的代价：三个现象一个根因跑三个闭环,且第一个修复落地后,后两个的复现步骤可能已失效（第 1 步卡死）。</p>\n<p><strong>转交进场</strong>（消费上游落盘物,不改上游流程）：缺陷描述可附上游档案引用——<code>$cm-test</code> 的只读测试报告、<code>$cm-refactor</code> 档案的未修缺陷清单、N6 业务走查报告的偏差项、观测闭环的半份档案（按 slug 在 <code>fixes/</code> 检索）。带引用进场的缺陷,第 1 步<strong>采信上游已有证据</strong>（位置/现象/日志原文）,仍须实际复现一次核实,但不从零摸排。</p>\n<p><strong>$cm-ai 全局规则在本流程内同等生效</strong>：灾难级与节点显式卡点暂停、多方案自主决策留痕、状态落盘（node 写 <code>FIX</code>）、运行日志照记、独立审查按 <code>runtime/review.md</code> 执行。\n修改代码前预检 fresh 独立审查通道；无可用通道时暂停修复，已有改动保持待审。\n当前支持 Codex 子代理/隔离 CLI；未验证的 Claude-native 适配不能改名冒充 Codex。</p>\n<p><strong>跨边界证据（条件触发）</strong>：缺陷涉及跨进程/跨服务、异步队列或流、路由目标、缓存/状态不一致或时序偶现时，读取 <code>references/cross-boundary-debugging.md</code>；它只补定位证据，不新增入口、状态或完成标准。普通可复现缺陷不补表，仍走以下七步。</p>\n<h2>闭环七步（每个缺陷）</h2>\n<h3>1. 复现（不能复现的 bug 不许修）</h3>\n<ul>\n<li>按描述复现：实际操作/运行一次，拿到<strong>失败证据</strong>（报错原文、错误截图、错误返回值）;<strong>证据要用严格裁判</strong>——宽容裁判会把坏产物蒙混成功（实跑:补丁类缺陷 GNU patch 的 fuzz 容错险些吞掉复现,换 git apply --check 才拿到硬证据）</li>\n<li>未复现先做复现探索：主动构造输入值（边界/空/超长/非法编码）、前置状态（空数据/脏数据/并发写入中间态）、时序（先后顺序/失焦与点击/异步未完成）、环境（版本/区域设置/权限/离线）、规模（单条/大量）场景；每次只改一个维度，记录「场景 → 结果」，沿用既有授权，不扩执行权限。</li>\n<li>探索最多 3 个场景或 15 分钟（先到为准）；命中即进第 2 步定位，该场景脚本/步骤作为第 3 步红灯测试骨架。到上限仍未复现 → 不猜着修，才走<strong>观测闭环</strong>（偶现 bug 专用，两段式）：\n① 先判断是否命中跨边界证据条件；命中时按参考先列“边 → 预期证据 → 实际证据”，再在可疑路径加最小观测点（日志/埋点——观测点本身按最小改动+审查纪律入库，<strong>观测点不是修复尝试</strong>）\n② 缺陷档案先落半份，状态记 <code>观测中</code>，列出已试场景，说明观测点为何这样埋，写清\"等什么证据（哪个日志出现什么内容）\"\n③ 本次命令正常收口退出，不挂着等——运行日志记 <code>run_done</code>,detail 写「观测中:等{什么证据}」;状态文件 state 复位,不留悬挂的 running\n④ 证据到手后再次运行 <code>$cm-fix</code> 附上证据，<strong>按 slug 定位 <code>fixes/</code> 下的半份档案</strong>,从第 2 步定位续跑,档案续写、状态改 <code>修复中</code>,运行日志记 <code>resume</code>(detail 注证据摘要)\n——<strong>\"我改了点东西你再试试\"依然被禁止</strong></li>\n</ul>\n<h3>2. 定位（先找根因，不是找改哪行能让现象消失）</h3>\n<ul>\n<li>按 <code>../codebase-context/references/writeback.md</code> 确定项目地图及本次文档范围；有地图先读相关链路与影响映射，项目指定架构文档同样适用</li>\n<li>无地图 → 从失败点向上追调用链，找到<strong>根因层</strong>（现象在 UI，根因可能在数据层）</li>\n<li>命中跨边界证据条件 → 将调用链、每条边的最小证据、<strong>最后正常边</strong>与<strong>首个失败边</strong>写入缺陷档案；同时写“假设 → 支持证据 → 反证试验 → 结果”，一次只检验一个假设。日志与试验必须本地且脱敏，<strong>不自动联网、不外发日志、不安装依赖、不重启服务、不清理缓存</strong>。</li>\n<li>输出一句话根因结论 + 波及面清单（本次修改会牵连哪些模块）——写进缺陷档案（第 7 步）</li>\n</ul>\n<h3>2.5 根因与修法对抗确认（条件触发；根因错误是本流程最贵的错误,必须在防护网之前拦）</h3>\n<p>任一<strong>客观条件</strong>命中才触发(简单缺陷零负担,判断依据同\"门槛是客观项不是判断题\"):波及面 ≥3 个模块 / 根因层与现象层不同层 / 观测闭环续跑的缺陷 / 拟走升级出口。</p>\n<ul>\n<li>把根因结论 + 复现证据 + 波及面清单 + **拟采用修法（含放弃的备选）**交给新上下文的独立审查者；命中跨边界证据条件时一并交调用链、最后正常边、首个失败边和已完成的反证试验。提示词要义：「<strong>假设这个根因判断是错的，找出更深层的解释；再审修法：治本还是治症？有没有更小的改动？会不会引入新耦合？</strong>」。通道与降级规则同 N4</li>\n<li><strong>仅 1 轮</strong>:推翻 → 回第 2 步重定位;分歧 → 交人裁决;通过 → 进第 3 步</li>\n<li>凭证落 <code>{SPECS_DIR}/.reviews/fix-{slug}-cause-r1.md</code>——<strong>命名带 <code>cause</code> 是有意的</strong>:不落入第 5 步 <code>fix-{slug}-r*.md</code> 的匹配域,两个卡点各自独立,根因凭证不会误满足 diff 审查卡点</li>\n</ul>\n<h3>3. 防护网（先让 bug 有测试，再修）</h3>\n<ul>\n<li><strong>写一个能复现此 bug 的失败测试</strong>（红）——它是\"修好了\"的客观定义，也是永久回归资产;<strong>红的原始输出落进档案</strong>(第 5 步审查要核对红证据,从未红过的测试转绿是空话)</li>\n<li>项目有存量测试 → 先跑一遍记录基线（修完对照，防止修 A 坏 B）</li>\n<li>JS owner：首轮补测走原 test-author；保留原红灯和存量基线。最终审查要求补测时，按 <code>references/test-extension.md</code> 在第二轮登记扩充，修复回调仍不得改测试。</li>\n<li>写不了自动化测试的形态（如纯视觉）→ 截图/录屏留\"修前\"证据</li>\n</ul>\n<h3>4. 修复（最小改动）</h3>\n<ul>\n<li>只改根因层，<strong>禁止顺手重构</strong>（N3 同款纪律：看不惯的代码记 LESSONS 待触发备忘，事后走 <code>$cm-refactor</code>，不在修 bug 时动）</li>\n<li>修法有多个方案 → 自主决策选最优，<code>decision</code> 事件留痕</li>\n<li><strong>升级出口</strong>：定位发现是设计缺陷/需要跨模块大改 → 停止硬修，先通过第 2.5 步根因审查。JS 返回 <code>design_change_required</code> 后，有 <code>redTest</code> 就沿原测试编写/红测入口取得真实失败；意外通过或失败原因不符照常阻断。红测确认后进入 <code>escalation_required</code>，不跑基线、修复、回归或最终实现审查。</li>\n<li><strong>已建资产不弃</strong>：失败测试留在仓库；档案状态记 <code>升级立项</code>，列出根因、影响范围、诊断方案、根因审查凭证、测试路径和红证据路径，建议用 <code>$cm-prd --change</code> 立项，以新方案使该测试变绿为验收。非视觉运行未配置 <code>redTest</code> 时直接进入升级归档，并明写没有失败测试及原因；视觉运行必须配置视觉 <code>redTest</code>（<code>testFiles:[]</code>），先走视觉红测核验真实修前载体再升级，不冒充自动红测。</li>\n<li>JS 可先 <code>publish_dossier</code>，再用获准的 <code>finish</code> 写 <code>run_done / escalation / escalated</code> 并关闭 owner；中断后在原运行重开收口，冲突则阻断。重开后的 <code>escalated</code> 是终态，<code>completionEligible</code> 始终为 false，不记 task_done 或修复完成指标；立项建议不自动创建变更项目。</li>\n</ul>\n<h3>5. 审查（独立审查同 N4）</h3>\n<ul>\n<li><p>修后按 <code>../cm-test/references/unit-coverage.md</code> 检查已授权修复范围的增量单测覆盖率，\n核对正常/异常/边界及相邻场景并重跑，纳入下面的同一份 handoff；原失败测试红绿证据必须保留。\n普通流程在审前补足授权测试；JS owner 若第一轮最终审查要求补测，按 <code>references/test-extension.md</code> 登记测试编写和实跑结果，\n再走第二轮修复、回归与独立审查；不在 owner 外修改测试或重建原红灯、基线。</p>\n</li>\n<li><p>先按 <code>../codebase-context/references/writeback.md</code> 完成地图评估与必要回写；无地图建本次局部地图，有地图只更新受影响章节。普通流程记 handoff evidence，JS 复用已绑定的 plan、修后文件与 Review；改动纳入摘要与独立审查，不能等第 7 步再写。</p>\n</li>\n<li><p>审查前按 <code>../../runtime/project-learning.md</code> 复盘并完成必要的 AGENTS.md 增量写回，纳入本次审查 diff；无新增记入缺陷档案。微缺陷通道也必须复盘，新增 AGENTS.md 改动导致不再满足单文件门槛时走完整流程。</p>\n</li>\n<li><p>失败测试转绿 + 存量基线不退化后，按 <code>runtime/review.md</code> 审查本缺陷 diff（重点：根因是否真被修掉、有无只治症状、波及面有无遗漏）</p>\n</li>\n<li><p><strong>防护网测试本身是审查对象</strong>(实测最大问题类:测试是戏台):红的原因是否=该缺陷、断言测的是根因还是症状、有无安慰剂/前提共谋;<strong>核对第 3 步落档的红证据</strong>——没有红过的记录,测试可信度按不成立处理</p>\n</li>\n<li><p>所有缺陷零豁免；独立通道不可用则待审，<code>self-degraded</code> 仅作诊断，不得成功收口；通道故障不算代码 finding/实现审查轮次，有效 finding 不能靠换人消除；≤2 轮上限同样生效</p>\n</li>\n<li><p><code>{slug}</code> 先规范成跨平台安全的 ASCII kebab；令 <code>REVIEW_FEATURE=fix-{slug}</code>、\n<code>REVIEW_TASK=T-FIX-{slug}</code>。主执行者按真实 diff 写\n<code>{SPECS_DIR}/.reviews/fix-{slug}-T-FIX-{slug}-a{attempt}-handoff.json</code>，格式与\n<code>runtime/task-handoff.schema.json</code> 相同。先按 handoff 的完整 <code>changed_files</code> 运行\n<code>cm-task-gate.py hash-implementation --project-root {CODE_PROJECT} --file ...</code>，把返回的\n<code>implementation_sha256</code> 写入 handoff，再真跑：</p>\n</li>\n</ul>\n<pre><code>python3 {CM_WORKFLOW_ROOT}/scripts/cm-task-gate.py check-n4 \\\n  --handoff {HANDOFF_PATH} --reviews-dir {SPECS_DIR}/.reviews \\\n  --feature fix-{slug} --task T-FIX-{slug} --project-root {CODE_PROJECT}\n</code></pre>\n<ul>\n<li>独立审查凭证严格落\n<code>{SPECS_DIR}/.reviews/fix-{slug}-T-FIX-{slug}-r{attempt}.md</code>，包含当前 handoff\n文件名和 SHA。审查完成后必须真跑下列命令；只有当前 attempt 的\n<code>independent: true</code> 且 <code>verdict: approved</code> 才能进入第 6 步：</li>\n</ul>\n<pre><code>python3 {CM_WORKFLOW_ROOT}/scripts/cm-task-gate.py check-n5 \\\n  --handoff {HANDOFF_PATH} --reviews-dir {SPECS_DIR}/.reviews \\\n  --feature fix-{slug} --task T-FIX-{slug} --project-root {CODE_PROJECT}\n</code></pre>\n<ul>\n<li><code>changes_requested</code> 后修改代码必须生成 attempt 2 handoff 并复审；第 2 轮仍有阻断项\n写 <code>blocked</code> 并停止。文件存在、旧凭证或 <code>ls</code> 输出都不构成批准。</li>\n<li>后续回归、文档或经验整理如修改被审代码、测试或执行指令，原批准失效；重新形成证据并独立审查，不能重置轮次或在收口时顺手改实现</li>\n</ul>\n<h3>6. 回归（按波及面，不是只看 bug 消失）</h3>\n<ul>\n<li>跑第 3 步防护网测试（红→绿）+ 存量测试全量（对照基线）</li>\n<li>按第 2 步波及面清单逐项走一遍关键流（同 B2 口径：波及面=回归范围）</li>\n<li><strong>回归失败的回路（显式分支,不许临场发挥）</strong>：任何一项红 → 退回第 4 步重修,重修后<strong>必须复审</strong>且轮次并入第 5 步的 ≤2 轮总上限——上限耗尽仍打转 = 根因判断可疑,按升级出口处置,不许无限修-回归循环</li>\n</ul>\n<h3>7. 落盘（审计链闭合）</h3>\n<ul>\n<li>核验地图评估结果和已审文件版本，缺评估、待同步或审后变化不写成功 <code>task_done</code>；遵守回写合同的项目规则豁免，不把缺失地图静默跳过。</li>\n<li>收口前核对复盘记录、AGENTS.md 的审查范围与磁盘摘要；有新增则回读确认，无新增如实记录。缺记录、无法写回或批准后变化时不写成功 <code>task_done</code>，按学习合同与第 5 步处理。</li>\n<li><strong>缺陷档案</strong>：<code>{SPECS_DIR}/fixes/{YYYYMMDD}-{简短slug}.md</code>——现象 / 复现步骤 / 复现尝试（逐条「场景 → 改了哪个维度 → 结果（复现/未复现/环境不支持）」；按描述一次命中只写一行）/ 根因 / 修法（含放弃的方案）/ 波及面与回归结果 / 测试文件路径；命中跨边界证据条件时追加“证据链与假设”（调用链、边证据、最后正常边、首个失败边、反证结果）。这是缺陷知识库，同类 bug 再犯先查这里</li>\n<li><strong>METRICS.md 追加一行</strong>：Feature 列写 <code>fix</code>，任务列写档案文件名，其余列同口径（轮次/拦截数/人工介入）</li>\n<li>根因具普遍性（如\"平台 API 返回结构变了\"）→ 追记 LESSONS.md（[已结构化]/[仅记忆] 分级同 N5）</li>\n<li>Git 按有效 <code>policies.delivery</code>：diff 不 stage/commit；branch/draft-mr 提交\n<code>fix: {一句话} (档案: fixes/xxx.md)</code>，审查摘要进 commit message（同 N4）</li>\n<li>运行日志事件：<code>task_start</code>/<code>review</code>/<code>task_done</code>/<code>run_done</code> 照记，node 字段写 <code>FIX</code></li>\n</ul>\n<h2>微缺陷快速通道（四个硬门槛全中才准走）</h2>\n<p><strong>门槛是客观项不是判断题</strong>——\"感觉这个 bug 很小\"不构成理由，四条全中才走，任一不中走完整七步：</p>\n<ul>\n<li><input disabled=\"disabled\" type=\"checkbox\"> 只改文案/样式/配置常量——<strong>不新增、不修改任何条件分支与函数签名</strong></li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> 单文件且 diff ≤ 10 行</li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> 波及面为零（改动处无被其他模块引用的行为；有业务地图查 08 映射表核实）</li>\n<li><input disabled=\"disabled\" type=\"checkbox\"> 有截图/文案前后对照可作验收证据</li>\n</ul>\n<p><strong>快速通道可省</strong>：第 3 步防护网测试、第 6 步全量回归（用前后对照截图代替）。\n<strong>不可省</strong>：独立审查（凭证照落）、地图评估（回写导致多文件则走完整流程）、缺陷档案（显式标注 <code>快速通道</code>）、METRICS 行（Feature 列写 <code>fix-lite</code>）。\n<strong>快速通道的审查特化</strong>：独立审查是该通道的主要质量防线，第一职责是复核四个客观门槛；diff 任一项不符或波及面存疑即打回完整七步。</p>\n<blockquote>\n<p>fix-lite 的占比进运行日志——快速通道被滥用（占比异常高/出现分支改动混入）时收紧门槛，数据说了算。</p>\n</blockquote>\n<h2>输出格式（每个缺陷收口时）</h2>\n<pre><code>\uD83D\uDD27 缺陷闭环: {slug}\n根因: {一句话}\n修法: {一句话} | 放弃方案: {有则一句话,无则省}\n防护网: 新增 {测试文件}(红→绿) · 存量基线 {N} 项无退化\n审查: 独立审查({channel}) {通过/N轮N条} | 回归: 波及面 {N} 项通过\n档案: fixes/{文件名}   METRICS 已记\n学习: {AGENTS.md已写回并回读/已复盘，无新增}\n业务地图: {已更新/已建局部地图/无需更新/项目规则豁免/待同步} {路径或原因}\n</code></pre>\n<h2>边界</h2>\n<ul>\n<li><strong>不承接</strong>：新功能（走 $cm-prd）、需求变更（走 $cm-prd --change）、架构级返工（升级出口交人立项）</li>\n<li>specs 目录没有 fixes/ 子目录时自动创建；没有 specs 目录的裸项目也可用：档案落代码项目 <code>docs/fixes/</code>，<strong>审查凭证落 <code>docs/fixes/.reviews/</code></strong>（第 5 步卡点同样生效），METRICS 跳过</li>\n</ul>\n","files":[{"path":"references/cross-boundary-debugging.md","sizeBytes":2725,"isText":true},{"path":"references/js-host.md","sizeBytes":20739,"isText":true},{"path":"references/test-extension.md","sizeBytes":3942,"isText":true},{"path":"SKILL.md","sizeBytes":20269,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-24T15:43:45.122398Z","sha256":"C7E988052174D89DD854676CAAD6094A1CA5835048854A90C7A1A7C3468A5095","sizeBytes":24995},"review":null,"source":{"repositoryUrl":"https://github.com/kingxiaozhe/cm-workflow","path":"skills/cm-fix","license":"MIT","commit":"3f79f657e2e9e21f1300efe8e5c0bd5d4d6d208c","subtreeSha":"B3E84296FCE598BBAEDCBBC2A2C4A65C60A87BD76FE5ECF844CDE653F499D8E9","lastSyncedAt":"2026-09-24T15:42:59.811488Z"},"reviewedAt":"2026-09-24T15:45:58.628442Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/kingxiaozhe/cm-workflow/tree/main/skills/cm-fix"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install kingxiaozhe-cm-workflow@llmmart"},{"target":"git","command":"git clone https://github.com/kingxiaozhe/cm-workflow.git"}]}