Files
.pouch/skills/ack/SKILL.md
T
laily 10d8800f07 feat: add skill init/check and isolate builder makefile
Give ack, builder, and deployer an explicit init/check mode that reports
missing project config instead of failing mid-work. Point builder at
makefile.builder so its contract targets do not collide with an existing
Makefile.
2026-08-25 16:49:28 +08:00

341 lines
24 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: ack
description: >-
初始化、检查并运行 ACK 三角色协作闭环。仅在用户显式调用 /ack 或 $ack,并要求
初始化 ACK、检查 .pouch/ack 配置、按 ACK 规划需求或修复 bug、指挥
Coordinator/Developer/Test 工作,配置测试环境与发版方式,重新部署测试环境
(内部调用 deployer),发布版本,或运行回归测试时使用。
---
# ACK 项目协作入口
本 Skill 是 ACK 的完整能力包:`references/` 保存通用规范,`templates/` 保存项目
状态模板,`scripts/` 保存校验工具。目标项目只在 `.pouch/ack/` 保存 `project.md`
`tasks.yaml``knowledge.yaml`、默认关闭的 `delivery.yaml` 和空的
`regression.yaml`,不要复制或链接 Skill 内容。
开始时解析当前 `SKILL.md` 所在目录,记为 `<ack-skill-dir>`。所有通用规范、模板和
脚本都相对此目录访问,不依赖固定的全局安装路径。
## 选择模式
- 用户要求初始化、接入或安装 ACK:执行“初始化”。
- 用户要求检查 ACK 是否可用、配置是否完整:执行“检查”。
- 用户要求用 ACK 做需求、修复 bug 或继续任务:执行“工作”。修 bug 不写大 PRD;
飞书收件仍走本模式。
- 用户用自然语言说明怎么部署测试环境、怎么发布版本,或要求增加、修改、关闭交付
流程:执行“交付配置维护”。测试环境绑定 deployer,发版写在同一份
`.pouch/ack/delivery.yaml`
- 用户要求部署、重新部署测试环境,或按已配置方式开始测试:执行“运行测试环境”。
内部加载 deployer skill,不在 ACK 里复制 compose/rsync 命令。
- 用户要求发布版本:执行“运行版本发布”。
- 用户要求回归、跑回归测试:执行“运行回归”。先布测试环境,再派 Test 按
`.pouch/ack/regression.yaml` 用浏览器或 API 执行。
始终先解析真实项目根目录。优先使用 `git rev-parse --show-toplevel`;不是 Git
项目时使用用户指定目录或当前目录。不要修改项目的 `AGENTS.md``CLAUDE.md`
或其它 Agent 指令文件。
## 初始化
1. 确认 `pouch` 可执行,并检查 `<project>/.pouch/ack` 是否存在。
2. 不存在时执行:
```bash
pouch init ack --project <project-root>
```
该命令从本 Skill 的 `templates/` 生成项目状态,不会在项目中创建 Skill
软链接或资源副本。
3. 如果 `.pouch/ack` 已存在,不重复初始化、不覆盖文件;转入“检查”。旧项目只有
`project.md` 与 `tasks.yaml` 时,先报告缺少 `knowledge.yaml`。用户授权后,
从 `templates/knowledge.template.yaml` 生成这个缺失文件并替换项目名和时间;若
`tasks.yaml` 尚无 `project.knowledgeFile`,同时只补
`.pouch/ack/knowledge.yaml` 这一项。不要重跑 `pouch init`,也不要改写其它已有
项目状态。
4. 读取项目的公开配置和文档,例如 README、语言清单、包管理清单、测试配置与
CI,确定项目名、技术栈、源码/规格/测试路径及真实可执行命令。
5. 完善 `.pouch/ack/project.md`
- 用实际项目值替换全部占位符。
- 无服务地址时把 Base URL 写为 `n/a`,不要虚构端口。
- 无法从项目证据确定的命令写为 `n/a`,并在结果中列为待配置项。
- 只写项目差异,不复制 `references/` 中的通用规范。
6. 完善 `.pouch/ack/tasks.yaml` 的项目信息。纯初始化且用户没有提供真实任务时,
删除模板示例任务并保留 `tasks: []`;不要虚构需求或缺陷。
项目状态固定从当前项目根的 `.pouch/ack/` 推导,不写入 `repoPath` 或 `devWorktree`
worker 默认在 `--project-root`(权威状态目录)工作,不再配置
`allowedWorktrees` 白名单(v0.19 起废弃);需要隔离 worktree 时由 Coordinator 在
派发时显式指定。旧任务板中的 `repoPath`、`devWorktree` 仅兼容读取。
7. 检查 `.pouch/ack/knowledge.yaml`。新项目没有已验证的项目经验时保留
`verificationRegistry: {}` 与 `entries: []`,不从聊天、README 或单次失败中
猜测并激活知识。
8. 检查 `.pouch/ack/delivery.yaml`。新项目保留 `enabled: false`、空能力表和空 profile
不从 README 或 CI 猜测、启用交付。旧项目没有该文件时仍可继续使用原 ACK
闭环;只有用户明确要求配置交付时,才按“交付配置维护”补齐。
9. 检查 `.pouch/ack/regression.yaml`。新项目保留 `cases: []`。旧项目没有该文件时仍
可继续原闭环;用户授权后从 `templates/regression.template.yaml` 生成,并只补
`project.regressionFile` 与顶层 `regressionRuns: []`。不要从聊天虚构用例。
10. 更新 `updatedAt`,并运行:
```bash
python3 <ack-skill-dir>/scripts/validate_tasks.py .pouch/ack/tasks.yaml
python3 <ack-skill-dir>/scripts/validate_knowledge.py .pouch/ack/knowledge.yaml \
--tasks .pouch/ack/tasks.yaml
python3 <ack-skill-dir>/scripts/validate_delivery.py .pouch/ack/delivery.yaml \
--tasks .pouch/ack/tasks.yaml --project-root <project-root>
python3 <ack-skill-dir>/scripts/validate_regression.py .pouch/ack/regression.yaml \
--tasks .pouch/ack/tasks.yaml
```
11. 检查 `project.md`、`tasks.yaml`、`knowledge.yaml`、`delivery.yaml` 与
`regression.yaml` 是否仍有 `<...>` 占位符。
12. 按下面格式报告。结构校验通过且必填项目事实完整时才称「完成」;否则称
「部分完成」或「阻塞」并列出待配置项。除非用户明确要求,不提交、不推送。
初始化 ACK **不**自动初始化 deployer 或 builder。
```text
## ack 初始化:完成 | 部分完成 | 阻塞
已具备: …
待配置: 路径 + 字段 + 可粘贴示例 + 缺了会挡住哪步
工具链: pouch …
下一步: 一句话
```
## 检查
1. 检查以下路径:
- `.pouch/ack/project.md`
- `.pouch/ack/tasks.yaml`
- `.pouch/ack/knowledge.yaml`
- `.pouch/ack/delivery.yaml`(旧项目可无;存在或被任务板引用时必须校验)
- `.pouch/ack/regression.yaml`(旧项目可无;存在或被任务板引用时必须校验)
需要查看任务内容时,使用 `<ack-skill-dir>/scripts/select_tasks.py` 解析完整任务板并
只输出项目配置、摘要和可工作任务;不要用 `cat`、整文件 `sed` 或等价方式把完整
`tasks.yaml` 注入上下文。完整性仍由校验器检查。
2. 读取 `<ack-skill-dir>/VERSION`,对比 `tasks.yaml` 的 `ackVersion`。旧项目只有
`kitVersion` 时仍可读取,但建议迁移为 `ackVersion`。`ackVersion` 必须是合法
SemVer;从 `0.10.0` 起 `project.orchestration` 与顶层 `workerReceipts` 必须同时
存在。
3. 查找未替换占位符,并核对项目根、覆盖层路径、Developer 白盒命令、Test
黑盒命令和 Base URL。
4. 使用 `<ack-skill-dir>/scripts/validate_tasks.py` 校验任务板,使用
`<ack-skill-dir>/scripts/validate_knowledge.py .pouch/ack/knowledge.yaml --tasks
.pouch/ack/tasks.yaml` 校验项目知识和跨文件引用。如果存在交付配置或任务板声明了
`project.deliveryFile`,再使用 `<ack-skill-dir>/scripts/validate_delivery.py
.pouch/ack/delivery.yaml --tasks .pouch/ack/tasks.yaml --project-root <project-root>`
校验交付能力、顺序、安全边界和跨文件引用。如果存在回归目录或任务板声明了
`project.regressionFile`,再使用 `<ack-skill-dir>/scripts/validate_regression.py
.pouch/ack/regression.yaml --tasks .pouch/ack/tasks.yaml` 校验用例与跨文件引用。
只报告证据明确的问题,不因旧项目缺少可选交付或回归配置而宣称失败。
5. 若存在 `project.bugIntake`,运行
`python3 <ack-skill-dir>/scripts/feishu_bug_intake.py check .pouch/ack/tasks.yaml`。
它只接受 `feishu-base` 和显式 profile;详细的飞书配置、凭据初始化和读取方式见
`references/feishu-bug-intake.md`。
6. 检查知识引用能解析到固定 revision,candidate 仍留在任务证据中,且
`stale`、`superseded` 和 `archived` 不会被当作可派发的 `active` 知识。
7. 若存在 `project.orchestration`,检查 profile、model allowlist、默认 profile、
允许 worktree、顶层 `workerReceipts` 与 `dispatch.developer/test` 的引用;receipt
必须绑定当前 ACK task、同一 role/profile/attempt`receiptId` 与 `attemptId`
必须同时为空或同时填写。
缺少结构化路由的旧任务板只能使用手动模式,不能自动创建 worker。
8. 检查不会自动修复或覆盖现有配置;用户明确要求修复后再修改。
9. 若 `delivery.yaml` 已把 `intents.testEnvironment` 写成 `{via: deployer, env: <env>}`
只读运行已安装 deployer skill 的 `scripts/deploy/check.py --project <project-root>`。
未通过时列入待配置,加载 deployer skill 的「检查」说明;不要在 ACK 里复制
compose/rsync 命令,也不要静默初始化 deployer。
10. 用与「初始化」相同的报告格式,标题改为 `## ack 检查:…`。
## 工作
1. 若 `.pouch/ack` 不存在,停止并建议先用 `/ack` 初始化;不要静默初始化。
2. 依次读取:
- `.pouch/ack/project.md`
- 运行 `python3 <ack-skill-dir>/scripts/select_tasks.py .pouch/ack/tasks.yaml`,只读取
`project`、`summary` 和默认可工作状态的任务;已知当前任务时传
`--task-id <ack-task-id>`。选择器会解析并校验完整任务板,并只附带选中任务引用的
receipt 与 delivery run。命中超过默认预算时用 `--task-id` / `--status` 缩小,
不直接回退为输出完整 `tasks.yaml`。
- 通过 `<ack-skill-dir>/scripts/select_knowledge.py` 从
`.pouch/ack/knowledge.yaml` 选择的当前任务相关 `active` 条目
- `<ack-skill-dir>/references/kickoff.md`
- kickoff 指定且与当前任务相关的 references 文件
- 若 `tasks.yaml.project.deliveryFile` 存在,再读取该 `delivery.yaml` 和
`<ack-skill-dir>/references/delivery.md`
- 若 `tasks.yaml.project.regressionFile` 存在,再读取该 `regression.yaml` 和
`<ack-skill-dir>/references/regression.md`
3. 当前会话担任 Coordinator,遵守项目覆盖层中的命令、路径权限、模型路由和
worker 启动规则。项目覆盖层优先于通用示例命令。按 scope 推荐相关 `active`
知识,经确认后把固定 revision 的显式 `knowledgeRefs` 写入当前任务上下文;
不全量注入知识库。
`project.bugIntake.workflow` 为 `clarified-writeback-v1`(推荐)或
`reviewed-writeback-v1`(兼容旧项目)时,按
`references/feishu-bug-intake.md` 把飞书作为审核前的唯一协作区:先运行 check/plan
读取用户填写的 Bug。新工作流中,用户只维护标题、详细描述和附件;Coordinator 根据
来源事实与项目上下文整理问题说明、期望效果和可观测验收标准,不在收件箱写修复逻辑,
只通过安全适配器写回同一飞书记录并回读确认。用户反馈后继续只在飞书修订。
用户针对当前 `draftRevision` 明确审核通过并亲自在飞书把状态改为 `已确认` 前,不创建
或刷新 `tasks.yaml` 任务、不启动 worker、不派发 Developer/Test,也不修改应用代码。
Coordinator 不得自行写入 `已确认`。审核通过后重新读取,要求 revision 与批准值完全
一致,才通过 `import-approved` 生成规范 `taskDraft`,原样写入最终版本、
`source.workflow`、`source.approvedRevision` 与 `source.approvedPayloadHash`;校验器重算
payload hash 通过后,再用 `mark-imported` 把最终任务 ID 与同一 revision 写回飞书,
才进入三角色闭环。未声明 workflow 的旧八字段配置只按
`read-only-v1` 兼容,不得写回;
标题、详细描述和附件是来源事实,不得把 Coordinator 推断伪装成用户原文;整行空白
记录按批次 warning 跳过。
按每条记录的 `sourceRef` 去重:仅 `open` 任务可刷新描述;
`dispatched`、`fixed_by_dev`、`retesting`、`failed_retest`、`verified`、`blocked` 和
`leftover` 只报告来源漂移,绝不覆盖;来源消失或读取失败时绝不删除已有任务。
4. 新需求先写产品文档、任务拆分与可观测验收信号,更新 `tasks.yaml` 并校验,
然后交给用户确认。修 bug 写短问题说明、复现步骤和可观测验收,不写大 PRD;
Developer 先补会失败的用例再修。若启用了交付,必须默认把 `defaultProfile`、
目标、停止点和需要审批的步骤放入同一份计划,不能静默省略。用户可明确取消
本轮交付;确认前不派发实现,也不执行交付。
5. 创建或更换 worker 时,只使用
`<ack-skill-dir>/scripts/launch_worker.py plan|launch` 读取
`tasks.yaml.project.orchestration` 的 profile。不得直接执行
`orca terminal create --command`,不得接受或拼接自由 command、额外 argv、
executable、env 或 cwd。必须先审阅 `plan.launchFingerprint`,再把它作为
`launch --expected-launch-fingerprint` 传入。派发前先寻找同一 ACK 运行内的空闲
worker;只有角色、profile、worktree 和启动身份仍完全匹配,且后端能清理历史消息、
返回可核对的新会话身份时才复用。不得复用正在工作、等待回报或状态不明的 worker;
任一条件不符、清理能力不存在或无法确认清理成功时创建 fresh worker。持久化
receipt 只作审计与 dispatch 关联,不能单独授权复用。当前 Orca 终端接口不能提供
可验证的历史消息清理,因此使用 Orca 时仍走 fresh worker。
6. 用户已确认的任务按 ACK 闭环执行:Developer 实现与白盒验证;若
`intents.testEnvironment` 已启用,Coordinator 先按「运行测试环境」拉起服务,再
派 Test 独立黑盒复测。派发后先确认 worker 真正开始执行(terminal read 确认任务
注入;卡在审批提示、未回车或额度限制时按环境失败处理并报告),等待期间用
`scripts/worker_probe.py` 滚动检查活性,不盲等 `worker_done`。Coordinator 读取
证据终检并唯一写入 `tasks.yaml`。Developer 回报 `knowledgeApplied` 和
`knowledgeCandidates`Test 回报 `knowledgeChecks` 和 `regressionCandidates`
`candidate` 只有在独立验证和 gate 后才能由 Coordinator 写入或激活。
任务进入 `verified` 且改了用户可见行为或 API 后,按 `references/regression.md`
给出新增/更新/退役/无回归四选一,用户确认后写入 `.pouch/ack/regression.yaml`
并把 case id 记入 `regressionRefs`。Test 只提名,不写该文件。
7. 执行知识项的 `verification.ref` 时,只调用
`<ack-skill-dir>/scripts/run_verification.py .pouch/ack/knowledge.yaml
<verification-ref> --project-root <project-root>`。不要直接执行选择器返回的 path/args,
也不要给 runner 注入额外命令或参数。
8. 不把 `worker_done` 或 Test 自报成功直接当作完成。三轮预算只计算 Test 已对齐正确
服务、数据和工具后实际执行验收所得的产品失败;环境失败不占复验轮次,不写
`failed_retest`,而写入 `dispatch.environmentIncidents`。Coordinator 先做一次有界、
安全的恢复;事件未解决、需要用户动作或会阻断本轮时,立即向用户报告原因、影响、
已尝试动作、下一恢复动作和明确的 `userAction`;即使已自动恢复,也要在最终报告汇总。
每项最多三轮有效产品复验,仍失败才记录 `leftover` 并继续其它任务。细则见
`references/optimization-method.md` §4。
9. 关键的安全、正确性和兼容性约束应下沉为测试、lint、CI 或正式规范;
`knowledge.yaml` 只保存触发条件、原因与证据引用,不能替代可执行控制。
10. 选定任务全部进入 `verified` 后,若 `delivery.enabled: true` 且用户确认的本次计划
包含交付,按 `references/delivery.md` 顺序执行 profile,并由 Coordinator 把证据
写入 `tasks.yaml.deliveryRuns`。任务状态保持 `verified`;交付失败只改变 delivery
run,不回写成任务失败。开发或测试环境完成构建、部署和健康检查后写
`validation_ready`,并把访问地址、验证范围和用户下一步交给用户;不能停在
`verified` 却声称整轮 ACK 已结束。默认 profile 最多到 `validation_ready` 或
`review_ready`,稳定发布和生产部署必须在对应步骤再次取得明确批准。
11. Coordinator 最后标记整轮任务完成后,用 `scripts/reclaim_workers.py` 先
dry-run 审阅决策,再 `--apply` 回收所有只属于 `verified` 任务的 worker
终端,并核对关闭回执;历史 receipt 和任务证据继续保留。任何还被 `open`、`dispatched`、`fixed_by_dev`、
`retesting`、`blocked`、`failed_retest`、`leftover` 或未解决环境事件引用的终端
都保留,不设置 TTL,也不能因为同一终端还关联过 `verified` 任务而误关。若关闭
结果不确定,记录并报告,不重复关闭或伪报已回收。
## 交付配置维护
1. 读取 `references/delivery.md`、deployer skill、模板、schema、现有
`delivery.yaml`、项目构建/发布入口和 CI。测试环境写成
`intents.testEnvironment: {via: deployer, env: <env>}`。若
`.pouch/deployer/<env>` 不存在或 deployer `check.py` 未通过:停止,加载
deployer skill 的「初始化」,不要在 ACK 里复制 compose/rsync 命令。发版仍指向
本文件的 profile。不要拆成第二份文档。配置只引用仓库内脚本或声明式工具
target,不保存 shell。本地 `npm run dev` / `go run` 写在 `project.md` 的
Developer 白盒命令里,不算测试环境部署。
2. 若旧项目首次启用,生成 `.pouch/ack/delivery.yaml`,在 `tasks.yaml.project` 增加
`deliveryFile: .pouch/ack/delivery.yaml`,并增加顶层 `deliveryRuns: []`;不改写其它
项目状态。首次生成保持 `enabled: false`,先展示 diff 和解析出的执行顺序。
3. 运行 delivery、tasks 和跨文件校验;需要的脚本不存在、不可执行、引用不完整或
涉及凭据正文时 fail closed。凭据只写 secret 名称,值由外部环境提供。
4. 用户确认后才把配置设为启用。配置修改只影响下一次 delivery run;已确认或正在
执行的 run 使用开始时审阅的 commit/config revision 快照,不能借当前分支修改
扩大权限。
## 运行测试环境
1. 读取 `.pouch/ack/delivery.yaml`、`references/delivery.md` 和 deployer skill 的
`SKILL.md`。
2. `enabled` 不为 true,或 `intents.testEnvironment` 为 null:停止,请用户说明如何
部署测试环境,转入交付配置维护。不猜测编译或启动命令。
3. `intents.testEnvironment` 必须是 `{via: deployer, env: <env>}`。若仍是旧的
profile ID 字符串:停止,展示迁移说明,转入交付配置维护。不要执行 ACK
delivery profile 来布测试环境。
4. 不要求任务已 `verified`。按 deployer 的项目内环境布局操作
`.pouch/deployer/<env>`:list 确认服务,再按服务 sync + up(或用户要求的
recreate),并用 ps/logs/健康检查验证。不要复制 deployer 脚本,不要发明
第二套 compose 命令。
5. 把访问地址交给用户或随后的 Test 黑盒。证据写入 `deliveryRuns`
`intent: testEnvironment``profile` 记 `deployer-<env>``taskIds` 可为空。
6. 派发 Test 前若该 intent 已启用,必须先完成本步骤。deployer 未安装、环境目录
不存在或 `check.py` 未通过:停止,加载 deployer skill 的「初始化」,报告
`userAction`,不把环境失败写成产品失败,也不要在 ACK 里发明 compose 命令。
健康检查失败同样 fail closed。
## 运行回归
1. 若 `.pouch/ack` 不存在,停止并建议先初始化。
2. 若没有 `.pouch/ack/regression.yaml` 或 `project.regressionFile`:停止,用户授权后
从模板生成空文件并只补任务板指针与 `regressionRuns: []`。
3. 用 `scripts/select_regression.py` 读取 active 用例(默认 `--suite smoke`;用户
指定 full 或 case id 时缩小范围)。没有命中用例时停止并说明先收获用例。
不要把完整 `regression.yaml` 注入上下文。细则见 `references/regression.md`。
4. 先执行「运行测试环境」。
5. 当前会话担任 Coordinator:按 Test profile 启动独立 Test worker,派发回归清单、
Base URL 和每条 case 的 surface/steps/expected。Coordinator 不亲自点浏览器或
打 API。
6. Test 按 `surface` 执行:`browser` 必须走真实交互,不得改成只打 API。逐条对照
`expected` 回报。环境失败记环境事件,不记产品失败。
7. Coordinator 终检后写入 `regressionRuns`。失败只报告,不自动派 Developer,不占
任务三轮预算。用户明确要求修复时再按修 bug 为每条失败开任务。
## 运行版本发布
1. 读取同一份 `.pouch/ack/delivery.yaml` 与 `references/delivery.md`。
2. `enabled` 不为 true,或 `intents.release` 为 null:停止,请用户说明如何发版,
写入同一文件后再执行。
3. 按该 profile 顺序执行。stable 发布和生产部署的 `approval` 不能用口头「发版」
代替。
4. 证据写入 `deliveryRuns``intent: release`;绑定了任务时 `taskIds` 仍只能引用
`verified` 任务。
## 边界
- 不修改或追加任何项目 Agent 指令文件,包括 `AGENTS.md`。
- 不在项目中维护第二份 ACK 通用规范、模板或任务 schema。
- 不猜测项目命令、服务地址、worker handle 或模型名称。
- 不把 full-access、bypass、Grok `--yolo` / bypassPermissions、关闭 sandbox
或项目内“授权”字段当成 v0.10 自动 worker 的合法配置;这些 CLI 绕过标志
当前一律 fail closed。Grok worker 由 launcher 固定带 `--always-approve`
仍必须带 sandbox。
- OMP worker 使用结构化 `--model`、`--thinking` 和 `--approval-mode` 参数。
`--approval-mode yolo` 是 OMP worker 的审批模式,不是 CLI 绕过标志:规则层
直接允许并默认启用(workspace-write → yolo、read-only → always-ask);
仍禁止 `--auto-approve`,也不适用于 codex/cursor-agent/grok。
- 不把无密钥 `receiptHash` 或 Orca live metadata 当作旧终端的启动 attestation
没有可信空闲状态、配置匹配和历史消息清理证明时不复用既有 worker。
- launcher 返回 `indeterminate` 或 `reconcile required` 时,不直接重试;先按
launch ID、外部 record 和 Orca live state 完成人工核对。
- 不覆盖已有 `.pouch/ack` 文件;除用户确认的 ACK 任务或 delivery profile 外,不擅自
提交、推送、创建终端、新 worktree、发布产物或部署。
- 只有 Coordinator 写 `tasks.yaml`、`knowledge.yaml`、`regression.yaml`、
`deliveryRuns` 和 `regressionRuns`Developer 与 Test 只读,只能通过回报提名
或验证。`delivery.yaml` 只在显式的交付配置维护中修改。
- 不把知识正文或选择器输出拼成 shell;知识检查只能通过 `run_verification.py`
按 registry ID 执行。不自动修改 `AGENTS.md`、`CLAUDE.md` 或其它 Agent 指令文件。
- 不把完整 `tasks.yaml` 注入上下文;使用 `select_tasks.py` 获取有预算的项目与任务
视图,写回前仍运行完整任务板校验。
- 项目只保存 `.pouch/ack/project.md`、`.pouch/ack/tasks.yaml`、
`.pouch/ack/knowledge.yaml`、可选的 `.pouch/ack/delivery.yaml` 和可选的
`.pouch/ack/regression.yaml`;通用资源始终从当前 ACK Skill 目录读取。
- 不把完整 `regression.yaml` 注入上下文;使用 `select_regression.py` 获取有预算的
用例视图,写回前仍运行完整校验。