Merge branch 'main' into rename
Keep pouch naming and .pouch/ack project state, and bring in ACK regression mode, deployer test-environment binding, and manage-release updates from main.
This commit is contained in:
+84
-35
@@ -2,16 +2,17 @@
|
||||
name: ack
|
||||
description: >-
|
||||
初始化、检查并运行 ACK 三角色协作闭环。仅在用户显式调用 /ack 或 $ack,并要求
|
||||
初始化 ACK、检查 .pouch/ack 配置、按 ACK 规划需求、指挥 Coordinator/Developer/Test
|
||||
工作,配置测试环境与发版方式,重新部署测试环境,或发布版本时使用。
|
||||
初始化 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`,不要复制或链接 Skill
|
||||
内容。
|
||||
`tasks.yaml`、`knowledge.yaml`、默认关闭的 `delivery.yaml` 和空的
|
||||
`regression.yaml`,不要复制或链接 Skill 内容。
|
||||
|
||||
开始时解析当前 `SKILL.md` 所在目录,记为 `<ack-skill-dir>`。所有通用规范、模板和
|
||||
脚本都相对此目录访问,不依赖固定的全局安装路径。
|
||||
@@ -20,12 +21,16 @@ description: >-
|
||||
|
||||
- 用户要求初始化、接入或安装 ACK:执行“初始化”。
|
||||
- 用户要求检查 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`
|
||||
@@ -67,7 +72,10 @@ description: >-
|
||||
8. 检查 `.pouch/ack/delivery.yaml`。新项目保留 `enabled: false`、空能力表和空 profile;
|
||||
不从 README 或 CI 猜测、启用交付。旧项目没有该文件时仍可继续使用原 ACK
|
||||
闭环;只有用户明确要求配置交付时,才按“交付配置维护”补齐。
|
||||
9. 更新 `updatedAt`,并运行:
|
||||
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
|
||||
@@ -75,14 +83,16 @@ description: >-
|
||||
--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
|
||||
```
|
||||
|
||||
10. 检查 `project.md`、`tasks.yaml`、`knowledge.yaml` 与 `delivery.yaml` 是否仍有
|
||||
`<...>` 占位符。
|
||||
结构校验通过且必填项目事实完整时才称“初始化完成”;否则称“部分完成”并列出
|
||||
缺失值。
|
||||
11. 报告创建的路径、检测到的命令、校验结果和下一步。除非用户明确要求,不提交、
|
||||
不推送。
|
||||
11. 检查 `project.md`、`tasks.yaml`、`knowledge.yaml`、`delivery.yaml` 与
|
||||
`regression.yaml` 是否仍有 `<...>` 占位符。
|
||||
结构校验通过且必填项目事实完整时才称“初始化完成”;否则称“部分完成”并列出
|
||||
缺失值。
|
||||
12. 报告创建的路径、检测到的命令、校验结果和下一步。除非用户明确要求,不提交、
|
||||
不推送。
|
||||
|
||||
## 检查
|
||||
|
||||
@@ -91,6 +101,7 @@ description: >-
|
||||
- `.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` 注入上下文。完整性仍由校验器检查。
|
||||
@@ -105,8 +116,10 @@ description: >-
|
||||
.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;详细的飞书配置、凭据初始化和读取方式见
|
||||
@@ -136,6 +149,8 @@ description: >-
|
||||
- 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` 写入当前任务上下文;
|
||||
@@ -160,9 +175,10 @@ description: >-
|
||||
`dispatched`、`fixed_by_dev`、`retesting`、`failed_retest`、`verified`、`blocked` 和
|
||||
`leftover` 只报告来源漂移,绝不覆盖;来源消失或读取失败时绝不删除已有任务。
|
||||
4. 新需求先写产品文档、任务拆分与可观测验收信号,更新 `tasks.yaml` 并校验,
|
||||
然后交给用户确认;若启用了交付,必须默认把 `defaultProfile`、目标、停止点和需要
|
||||
审批的步骤放入同一份计划,不能静默省略。用户可明确取消本轮交付;确认前不派发
|
||||
实现,也不执行交付。
|
||||
然后交给用户确认。修 bug 写短问题说明、复现步骤和可观测验收,不写大 PRD;
|
||||
Developer 先补会失败的用例再修。若启用了交付,必须默认把 `defaultProfile`、
|
||||
目标、停止点和需要审批的步骤放入同一份计划,不能静默省略。用户可明确取消
|
||||
本轮交付;确认前不派发实现,也不执行交付。
|
||||
5. 创建或更换 worker 时,只使用
|
||||
`<ack-skill-dir>/scripts/launch_worker.py plan|launch` 读取
|
||||
`tasks.yaml.project.orchestration` 的 profile。不得直接执行
|
||||
@@ -180,8 +196,11 @@ description: >-
|
||||
注入;卡在审批提示、未回车或额度限制时按环境失败处理并报告),等待期间用
|
||||
`scripts/worker_probe.py` 滚动检查活性,不盲等 `worker_done`。Coordinator 读取
|
||||
证据终检并唯一写入 `tasks.yaml`。Developer 回报 `knowledgeApplied` 和
|
||||
`knowledgeCandidates`,Test 回报 `knowledgeChecks`;`candidate` 只有在独立验证和
|
||||
gate 后才能由 Coordinator 写入或激活。
|
||||
`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,
|
||||
@@ -211,11 +230,13 @@ description: >-
|
||||
|
||||
## 交付配置维护
|
||||
|
||||
1. 读取 `references/delivery.md`、模板、schema、现有 `delivery.yaml`、项目构建/发布
|
||||
入口和 CI;把用户自然语言描述转换为结构化 `intents`、entrypoint、artifact、
|
||||
destination、environment 与 profile。测试环境部署和版本发布都写进这一份
|
||||
`delivery.yaml`,不要拆成第二份文档。配置只引用仓库内脚本或声明式工具 target,
|
||||
不保存 shell。
|
||||
1. 读取 `references/delivery.md`、deployer skill、模板、schema、现有
|
||||
`delivery.yaml`、项目构建/发布入口和 CI。测试环境写成
|
||||
`intents.testEnvironment: {via: deployer, env: <env>}`,并按 deployer skill
|
||||
准备 `.pouch/deployer/<env>`;不要把 compose/rsync 命令写进 ACK。发版仍指向
|
||||
本文件的 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 和解析出的执行顺序。
|
||||
@@ -227,13 +248,39 @@ description: >-
|
||||
|
||||
## 运行测试环境
|
||||
|
||||
1. 读取 `.pouch/ack/delivery.yaml` 与 `references/delivery.md`。
|
||||
1. 读取 `.pouch/ack/delivery.yaml`、`references/delivery.md` 和 deployer skill 的
|
||||
`SKILL.md`。
|
||||
2. `enabled` 不为 true,或 `intents.testEnvironment` 为 null:停止,请用户说明如何
|
||||
部署测试环境,转入交付配置维护。不猜测编译或启动命令。
|
||||
3. 不要求任务已 `verified`。按该 profile 执行 build → deploy → health-check。
|
||||
4. 把访问地址交给用户或随后的 Test 黑盒。证据写入 `deliveryRuns`,
|
||||
`intent: testEnvironment`,`taskIds` 可为空。
|
||||
5. 派发 Test 前若该 intent 已启用,必须先完成本步骤。
|
||||
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 未安装、环境目录
|
||||
不存在或健康检查失败:fail closed,报告 `userAction`,不把环境失败写成产品
|
||||
失败。
|
||||
|
||||
## 运行回归
|
||||
|
||||
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 为每条失败开任务。
|
||||
|
||||
## 运行版本发布
|
||||
|
||||
@@ -264,13 +311,15 @@ description: >-
|
||||
launch ID、外部 record 和 Orca live state 完成人工核对。
|
||||
- 不覆盖已有 `.pouch/ack` 文件;除用户确认的 ACK 任务或 delivery profile 外,不擅自
|
||||
提交、推送、创建终端、新 worktree、发布产物或部署。
|
||||
- 只有 Coordinator 写 `tasks.yaml`、`knowledge.yaml` 和 `deliveryRuns`;Developer
|
||||
与 Test 只读,只能通过回报提名或验证知识。`delivery.yaml` 只在显式的交付配置
|
||||
维护中修改。
|
||||
- 只有 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`;通用资源始终从当前
|
||||
ACK Skill 目录读取。
|
||||
`.pouch/ack/knowledge.yaml`、可选的 `.pouch/ack/delivery.yaml` 和可选的
|
||||
`.pouch/ack/regression.yaml`;通用资源始终从当前 ACK Skill 目录读取。
|
||||
- 不把完整 `regression.yaml` 注入上下文;使用 `select_regression.py` 获取有预算的
|
||||
用例视图,写回前仍运行完整校验。
|
||||
|
||||
Reference in New Issue
Block a user