mcpField
F
fold-findings

fold-findings

github.com/gtrabanco开发2263 次安装今天更新
代码仓库

关于 fold-findings

fold-findings 是用于处理 review-change 或 audit-pr 持久化 fix-now 发现项的 Agent 技能。它保留各项分类,要求验证修复并进行原子提交,同时逐项报告结果。

主要功能

  1. 01处理持久化发现项清单
  2. 02按根因分组发现项
  3. 03修复时保留原有分类
  4. 04运行验证门禁
  5. 05原子提交并推送修复批次
  6. 06逐项报告处理结果

适用场景

  1. 01修复 audit-pr 判定中的阻塞项
  2. 02处理 review-change 后的 fix-now 条目
  3. 03保留分类并追踪修复状态

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/gtrabanco/agentic-workflow --skill fold-findings

安装后在 Claude Code 中输入/fold-findings确认已加载。

附带文件references/FOLD_POLICY.mdreferences/FOLD_PROCESS.md

详细介绍

合并问题发现

修复已持久化的立即修复问题发现。review-change 和 audit-pr 负责分类;此技能会修复每个根本原因,绝不会重新标记、延期或弱化检查。

回合约定——结束回合前验证

✓ 1. Every finding taken up this turn produced its fixed per-finding output
     line (FOLDED <sha> | DISPUTED <reason> | BLOCKED <missing input> |
     REPLAN <proposed phase(s)>) — no finding silently skipped.
✓ 2. For each FOLDED batch: the gate was RUN (not assumed) and green, one
     atomic commit was RUN with its sha pasted, and (if the branch has an open PR)
     `git push` was RUN immediately after that commit.
✓ 3. The ledger row for each FOLDED finding was flipped `folded: no → yes`
     in the same commit — never a bare code fix with the ledger left stale.
✓ 4. No finding was reclassified: no severity downgrade, no fix-now →
     non-fix-now, no "actually this is fine" — a genuine objection produced
     `DISPUTED` with evidence for a user decision, never a silent drop/issue.
✓ 5. The closing `Folded: n/m · Disputed: k · Blocked: j[ · Replan: r]` tally
     and outcome-branched `→ Next:` block are printed as the ABSOLUTE last output.
     Every affected finding ID is named in that block, joined with ` + `.

任何未勾选的框都表示回合尚未完成。

使用时机

当 /review-change 报告 REVIEW-FAIL 且包含立即修复条目,或 /audit-pr 报告 VERDICT: BLOCKED(每个阻塞项都属于立即修复)时使用。如果台账缺失或不完整,请在步骤 0 中根据判定结果重建条目。绝不处理 postpone/wontfix/promote/documented-tradeoff 条目;这些应由 /triage-issue 处理。

步骤 0——发现项目(始终先执行)

按照工作流约定,阅读:

  1. 单元目录 docs/features/<NN>-<slug>/ 或 docs/fix/<n>-<topic>/ 下的 review-findings.md;其架构由 review-change/audit-pr 维护:

    | id | file:line | axis | severity | class | route | folded |
    

    VERDICT: BLOCKED 后,补充缺失条目(class: fix-now、folded: no、使用下一个空闲的 Fn、按 file:line+axis 去重),提交为 docs(<unit>): reconstruct fold ledger from audit-pr blockers,然后合并修复;绝不报告“没有问题发现”。

  2. 排入 folded: no 条目;指定 ID 时仅处理指定条目,其余条目保持不变。按根本原因、验证器和回滚边界分组。

  3. 项目的验证门禁和 forge CLI(使用已声明的 forge)。

  4. 分支是否存在未关闭的 PR;这决定提交后是否立即推送。

渐进式加载——合并修复队列

允许列表恰好包含以下两个路径;修改代码或台账前,必须按顺序阅读两者:

  1. 冻结的分类、修复定义及禁止操作
  2. 逐项问题发现的合并修复流程

两者均为规范性文件,且距本文仅一跳。资源缺失 → 停止;绝不推断分类或合并修复流程。

报告 — 严格按此结构输出(固定输出契约)

对每项发现,按处理顺序:

| <finding-id> | verdict: FOLDED <sha> | DISPUTED <reason → user decision> | BLOCKED <missing input> | REPLAN <proposed phase(s) → /execute-phase> |

然后严格输出:

Folded: n/m · Disputed: k · Blocked: j · Replan: r

当 r = 0 时省略 · Replan: r(保留现有的三字段格式)。

然后将 REPAIR-RECEIPT 与下方的分支 → Next: 块一起作为绝对最后的输出。收据一经打印即不可变;后续折叠会打印一张新收据(仅追加的输出历史 — 不增加账本行,也不增加架构字段)。始终包含六个字段:

## REPAIR-RECEIPT
- Repaired: <F-ids with (VF-<n>) refs, joined ` + `, or `none`>
- Refuted/open: <F-ids joined ` + `, or `none`>
- Gate: <command> → exit <n> at head <40-hex sha> · n/a when nothing was folded
- Batch class: <all-repair-in-place | frozen (replan present) | frozen (product owner present) | none>
- Fold diff: <shortstat from a real `git diff` run> · none when nothing was folded
- Branch: <RE-REVIEW-REQUIRED (delta) | RE-REVIEW-OPTIONAL | RE-REVIEW-SKIPPED | REPLAN-ROUTE | PRODUCT-ROUTE>
  • Gate 行记录运行门禁时所在提交上观察到的实际退出码 — 无论通过还是失败。门禁失败也绝不会让收据消失:批次需连同观察到的退出码一起报告,且不折叠任何内容(红色门禁不能形成无声缺口)。
  • Fold diff 简短统计来自对批次提交实际运行的 git diff。
  • Batch class 仅根据所取队列的冻结行得出 — 折叠绝不重新分类(all-repair-in-place、frozen (replan present)、frozen (product owner present) 或空队列时的 none);分类词汇来自 review-implementation 的封闭类别集合。

冻结批次(存在 replan)。 当所取队列包含任何冻结类别为 replan-in-unit 或 decision-required 的行时,不进行任何折叠:不将 folded: yes 翻转为其他值,不创建提交。收据记录 REPLAN-ROUTE 分支和每个保留(未折叠)行的 ID,并停止循环。后续执行依据的是已运行的路由器打印出的结论,而不是调用本身:对于 route: replan,执行它打印出的规划器命令 — 功能单元使用 /unit-lane <slug>,修复单元使用 /unit-lane --fix <n>;对于 route: decision,停止并向用户说明该决策,绝不调用规划器。<unit> 可以是纯文件夹编号,也可以是完整 slug(两者都能解析)。调用 node scripts/unit-route.mjs <unit> 是折叠过程中已运行的发现步骤,绝不是建议操作。

冻结批次(存在产品负责人)。 任何所取的 fix-now 行,只要其 Route 单元格以 product owner、product-owned 或 owned by product 开头(锚定于行首,与 scripts/unit-route.mjs 的 PRODUCT_ROUTE 正则表达式一致,依据 #293),也会冻结批次 — 不进行任何折叠、不将 folded: yes 翻转为其他值、不创建提交:折叠循环修复的是源代码,不是决策权(pre-execution-review POLICY §4,#293)。收据记录 PRODUCT-ROUTE 分支和保留行的 ID;后续执行依据的是路由器打印出的 route: product 通道移交。完整条件和移交表见:FOLD_PROCESS.md §批次分类。

护栏

范围限于账本(或明确指定的 ID 子集);未列出的发现属于待用户分流的提案。只有当同一个根因修正、验证器集合和回滚边界都覆盖这些行时,才将其合并为一个批次:一个提交/推送,各自更新刻度/行。否则拆分。

修复涵盖变更本身及所有依赖它的内容。 当某个部分接收的内容发生变化时,查找其调用方;当它交付的内容发生变化时,查找其使用方;当某项内容被移除时,检查还有什么在使用它,并在破坏兼容性之前先询问。任何仍提及已变更内容的残留内容 — 注释、说明性文字中的主张、已声明的验证器、清单中的描述、表达相同内容的相邻界面 — 都属于同一次折叠,绝不能留作下一轮的发现。只有在不再有任何内容断言已不真实的内容时,折叠才算结束;在提交中说明本次修正扫过了哪些界面。产物语言遵循:用户指示 > 项目文档语言 > 英语;对话语言不影响判断。

可移植性(Claude Code 以外的 Agent)

当某项基础功能缺失时,使用明确的回退方案:在全新上下文中打开指定的 SKILL.md 文件;处理细微逻辑/安全问题时使用能力最强的模型,且绝不弱于作者所用模型;对兼容的队列处理一次,并且只在出现新的审查证据后才重新运行。

与其他技能的关系

review-change ──FAIL──┐
audit-pr ──BLOCKED─────┼──▶ fold-findings ──FOLDED──▶ re-run review-change / audit-pr
                       │                  ──DISPUTED─▶ user decision
                       │                  ──BLOCKED──▶ user supplies missing input

review-change/audit-pr 负责分类并持久化; ledger-ownership@1 / fold-findings:folded-flag 是唯一能将 folded: no → yes 翻转的主体——此技能只会在确实修复后翻转该标志。execute-phase 中嵌入的折叠检查清单 是内联回退方案;此独立路径保留冻结的分类及其禁用列表,且绝不超出其层级运行。DISPUTED 会暂停并要求用户提供证据; 不会创建问题。

完成条件

每条排队的发现项都有各自的判定和统计;每条 FOLDED 发现项都属于一个已推送的原子批次,并且其行已勾选。队列之外的内容不得重新分类或触碰。

→ Next: (branches on outcome; list every affected finding ID once as `F1 + F2 + …`)
  · all FOLDED (<F1> + <F2> + …) → /review-change — re-review the branch now that all listed findings are fixed
  · any DISPUTED (<F1> + <F2> + …) → user decision — resolve every evidenced dispute without creating backlog
  · any BLOCKED (<F1> + <F2> + …) → supply the listed missing inputs, then re-run /fold-findings
  · any REPLAN (<F1> + <F2> + …) → /unit-lane <slug> or /unit-lane --fix <n> — the lane re-runs its plan step, appends the phases to the unit's SPEC; its review step gates before /execute-phase on this unit
  · any DECISION (<F1> + <F2> + …) → stop and surface the decision to the user — a `route: decision` conclusion names no planner, so the unit waits on the user before any plan or code change
  · any PRODUCT (<F1> + <F2> + …) → /unit-lane <slug> or /unit-lane --fix <n> — the lane repairs the half, its review step re-judges it

每个 · 子弹项必须恰好占据一个物理行——绝不能硬换行成多行,也不能合并为一行正文。

打印前,将占位符替换为所有实际受影响的发现项 ID;在实时交接中,绝不能打印 <F2>、… 或仅打印一个代表性 ID。以相同方式解析 /unit-lane <slug> / /unit-lane --fix <n> 单元参数——绝不能在实时交接中保留 <slug> 或 <n>。

收尾块决策分支(输出时选择一个)

收尾块恰好选择五种结果之一。只要本轮没有记录的先前消费者决策要求跳过,就适用无决策 → 默认重新审核规则。

批次状态分支→ Next:(消费者)
冻结批次(≥ 1 条产品归属行)PRODUCT-ROUTE路由器判定为 product 时使用 /unit-lane <slug>(功能)或 /unit-lane --fix <n>(修复)——该通道通过其 design 步骤修复这一半,再由其 review 步骤重新判定;结论由 node scripts/unit-route.mjs <unit> 打印(发现步骤已由折叠流程运行)
冻结批次(≥ 1 条重规划类行)REPLAN-ROUTE路由器判定为 replan 时使用 /unit-lane <slug>(功能)或 /unit-lane --fix <n>(修复)——用户确认后,该通道的 plan 步骤追加阶段,其 review 步骤把关,然后对此单元运行 /execute-phase;遇到 route: decision 时停止并向用户说明决策——结论由 node scripts/unit-route.mjs <unit> 打印(发现步骤已由折叠流程运行)
all-repair-in-place + 仅文档 + 没有折叠行的严重性为 high + 先前消费者决定跳过RE-REVIEW-SKIPPED跳过——消费者已明确决定跳过重新审核
all-repair-in-place + 仅文档 + 没有折叠行的严重性为 highRE-REVIEW-OPTIONAL/review-change(默认,差异模式)——或消费者记录的跳过决定
空批次(类别 none)RE-REVIEW-OPTIONAL默认运行 /review-change——安全:HEAD 未改变
其他情况(行为表面或任何折叠行的严重性为 high)RE-REVIEW-REQUIRED (delta)/review-change——差异模式为强制默认值

分支选择决策输入。

  • 仅文档测试(E-D3)。 RE-REVIEW-OPTIONAL 要求每个折叠差异文件都是 Markdown/文档文件;否则该批次属于行为变更 (→ RE-REVIEW-REQUIRED (delta))。
  • 冻结严重性为 high 的覆盖规则。 若某条折叠行的冻结严重性为 high,即使差异仅涉及文档,也必须使用 RE-REVIEW-REQUIRED (delta)。绝不编辑冻结字段来进入某个分支。
  • SKIPPED 要求先前消费者决策(E-D2)。 只有本轮携带明确的先前消费者跳过决定时,才会打印 RE-REVIEW-SKIPPED。 没有记录先前消费者决策的轮次会打印 RE-REVIEW-OPTIONAL + 重新审核默认值,绝不会打印 RE-REVIEW-SKIPPED。

评论

支持 Markdown