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.
This commit is contained in:
@@ -19,8 +19,8 @@ ACK 只在用户显式调用 `/ack` 或 `$ack` 时运行。
|
||||
|
||||
| 场景 | 怎么说 | 结果 |
|
||||
| --- | --- | --- |
|
||||
| 初始化 | `/ack 初始化` | 生成并补全 `.pouch/ack/` |
|
||||
| 检查 | `/ack 检查配置` | 只读校验,默认不改文件 |
|
||||
| 初始化 | `/ack 初始化` | 生成并补全 `.pouch/ack/`;缺项按统一格式列出 |
|
||||
| 检查 | `/ack 检查配置` | 只读校验,默认不改文件;测试环境缺 deployer 时转交 |
|
||||
| 做需求 | `/ack 处理这个需求:…` | 产品文档 + 拆任务 → 确认 → 三角色闭环 |
|
||||
| 修 bug | `/ack 修这个 bug:…` 或处理飞书收件 | 短描述 + 验收 → 确认(飞书须你点「已确认」)→ 同一闭环 |
|
||||
| 交付配置 | 说明怎么布测试环境 / 怎么发版 | 写入同一份 `delivery.yaml`;测试环境绑定 deployer |
|
||||
@@ -171,7 +171,9 @@ delivery profile。可以直接说:
|
||||
```
|
||||
|
||||
ACK 把测试环境写成 `intents.testEnvironment.via: deployer`,把发版写成
|
||||
`intents.release` 指向的 profile。首次配置保持关闭,确认后才启用。之后可以说:
|
||||
`intents.release` 指向的 profile。`.pouch/deployer/<env>` 还没就绪时,ACK
|
||||
会转去 deployer 的初始化,而不是自己编 compose。首次配置保持关闭,确认后才启用。
|
||||
之后可以说:
|
||||
|
||||
```text
|
||||
/ack 重新布一下测试环境,我要测试
|
||||
|
||||
+23
-8
@@ -89,10 +89,18 @@ description: >-
|
||||
|
||||
11. 检查 `project.md`、`tasks.yaml`、`knowledge.yaml`、`delivery.yaml` 与
|
||||
`regression.yaml` 是否仍有 `<...>` 占位符。
|
||||
结构校验通过且必填项目事实完整时才称“初始化完成”;否则称“部分完成”并列出
|
||||
缺失值。
|
||||
12. 报告创建的路径、检测到的命令、校验结果和下一步。除非用户明确要求,不提交、
|
||||
不推送。
|
||||
12. 按下面格式报告。结构校验通过且必填项目事实完整时才称「完成」;否则称
|
||||
「部分完成」或「阻塞」并列出待配置项。除非用户明确要求,不提交、不推送。
|
||||
初始化 ACK **不**自动初始化 deployer 或 builder。
|
||||
|
||||
```text
|
||||
## ack 初始化:完成 | 部分完成 | 阻塞
|
||||
|
||||
已具备: …
|
||||
待配置: 路径 + 字段 + 可粘贴示例 + 缺了会挡住哪步
|
||||
工具链: pouch …
|
||||
下一步: 一句话
|
||||
```
|
||||
|
||||
## 检查
|
||||
|
||||
@@ -132,6 +140,11 @@ description: >-
|
||||
必须同时为空或同时填写。
|
||||
缺少结构化路由的旧任务板只能使用手动模式,不能自动创建 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 检查:…`。
|
||||
|
||||
## 工作
|
||||
|
||||
@@ -232,8 +245,9 @@ description: >-
|
||||
|
||||
1. 读取 `references/delivery.md`、deployer skill、模板、schema、现有
|
||||
`delivery.yaml`、项目构建/发布入口和 CI。测试环境写成
|
||||
`intents.testEnvironment: {via: deployer, env: <env>}`,并按 deployer skill
|
||||
准备 `.pouch/deployer/<env>`;不要把 compose/rsync 命令写进 ACK。发版仍指向
|
||||
`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 白盒命令里,不算测试环境部署。
|
||||
@@ -262,8 +276,9 @@ description: >-
|
||||
5. 把访问地址交给用户或随后的 Test 黑盒。证据写入 `deliveryRuns`,
|
||||
`intent: testEnvironment`,`profile` 记 `deployer-<env>`,`taskIds` 可为空。
|
||||
6. 派发 Test 前若该 intent 已启用,必须先完成本步骤。deployer 未安装、环境目录
|
||||
不存在或健康检查失败:fail closed,报告 `userAction`,不把环境失败写成产品
|
||||
失败。
|
||||
不存在或 `check.py` 未通过:停止,加载 deployer skill 的「初始化」,报告
|
||||
`userAction`,不把环境失败写成产品失败,也不要在 ACK 里发明 compose 命令。
|
||||
健康检查失败同样 fail closed。
|
||||
|
||||
## 运行回归
|
||||
|
||||
|
||||
@@ -68,11 +68,12 @@ intents:
|
||||
|
||||
- `testEnvironment` 绑定 deployer skill 的项目环境目录。用户说「重新布测试环境」
|
||||
「我要测试」时,ACK 加载 deployer 的 `SKILL.md`,对 `.pouch/deployer/<env>`
|
||||
按服务执行 sync + up 和健康检查。派发 Test 复测或跑回归前,若该 intent 已配置
|
||||
且 `enabled: true`,Coordinator 也先执行它。不要求当前有 `verified` 任务。
|
||||
Test 不对这个 intent 发明编译或启动命令。旧的 profile ID 字符串不再执行,必须
|
||||
迁到 `{via: deployer, env: <env>}`。本地进程启动写在 `project.md`,不算这个
|
||||
intent。
|
||||
按服务执行 sync + up 和健康检查。环境目录不存在或 deployer `check.py` 未通过
|
||||
时,加载 deployer skill 的「初始化」,不要在 ACK 里复制 compose 命令。派发
|
||||
Test 复测或跑回归前,若该 intent 已配置且 `enabled: true`,Coordinator 也先
|
||||
执行它。不要求当前有 `verified` 任务。Test 不对这个 intent 发明编译或启动
|
||||
命令。旧的 profile ID 字符串不再执行,必须迁到 `{via: deployer, env: <env>}`。
|
||||
本地进程启动写在 `project.md`,不算这个 intent。
|
||||
- `release` 指向 `stopAt: released` 的 profile。用户说「发布一个版本」时执行它。
|
||||
口头「发版」不能代替 stable/production 的 `approval` 步骤。
|
||||
- 对应 intent 为 `null` 或交付未启用:停止,请用户说明怎么做,按「交付配置维护」
|
||||
|
||||
@@ -130,8 +130,9 @@ candidate 留在任务证据中,不会被派发。只有 Test 独立验证且
|
||||
新项目的 `.pouch/ack/delivery.yaml` 保持 `enabled: false`、空能力表、空 profile,以及
|
||||
`intents.testEnvironment: null` 与 `intents.release: null`。
|
||||
不要根据 README 或 CI 自动推断并启用发布/部署。用户说明测试环境后,Coordinator
|
||||
按 deployer skill 准备 `.pouch/deployer/<env>`,并把
|
||||
`intents.testEnvironment` 写成 `{via: deployer, env: <env>}`;发版仍指向 profile。
|
||||
把 `intents.testEnvironment` 写成 `{via: deployer, env: <env>}`,若
|
||||
`.pouch/deployer/<env>` 尚未就绪则加载 deployer skill 的「初始化」;发版仍指向
|
||||
profile。ACK 初始化不自动跑 deployer 初始化。
|
||||
配置中不保存 shell、环境变量值或凭据正文;稳定发布和生产部署必须有显式
|
||||
approval 步骤。
|
||||
|
||||
@@ -171,12 +172,8 @@ python3 <ack-skill-dir>/scripts/validate_regression.py .pouch/ack/regression.yam
|
||||
|
||||
## 初始化报告
|
||||
|
||||
完成后报告:
|
||||
按 `SKILL.md`「初始化」最后一步的格式报告(`## ack 初始化:完成 | 部分完成 | 阻塞`),
|
||||
列出已具备项、待配置项(路径 + 字段 + 示例)、工具链和下一步。
|
||||
|
||||
- 创建或确认的项目文件(含回归目录)。
|
||||
- 检测到的技术栈和验证命令。
|
||||
- 任务板、项目知识和交付契约校验结果。
|
||||
- 仍需用户补充的值。
|
||||
|
||||
只有结构校验通过且必填项目事实完整时才称“初始化完成”;否则称“部分完成”,并列出
|
||||
具体阻塞项。除非用户明确要求,不提交、不推送。
|
||||
只有结构校验通过且必填项目事实完整时才称「完成」;否则称「部分完成」或「阻塞」。
|
||||
除非用户明确要求,不提交、不推送。
|
||||
|
||||
Reference in New Issue
Block a user