@heihei0299/matt-skills 1.3.2 → 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/ci-guard/SKILL.md +94 -0
- package/.agents/skills/ci-guard/agents/openai.yaml +5 -0
- package/.agents/skills/commit-check/SKILL.md +13 -18
- package/.agents/skills/diagnose-fix/SKILL.md +0 -1
- package/.agents/skills/grill-to-spec/SKILL.md +0 -3
- package/.agents/skills/instance-test/SKILL.md +36 -27
- package/.agents/skills/instance-test/agents/openai.yaml +1 -1
- package/.agents/skills/instance-test/references/instances.md +63 -36
- package/.agents/skills/scaffold-functional-test/SKILL.md +75 -0
- package/.agents/skills/scaffold-functional-test/agents/openai.yaml +5 -0
- package/.agents/skills/tdd-implement/SKILL.md +0 -1
- package/.agents/skills/tdd-implement/references/orchestration.md +2 -2
- package/.agents/skills/tdd-implement/references/stages.md +2 -7
- package/README.md +55 -54
- package/bin/cli.js +216 -64
- package/config/engineering.json +20 -0
- package/config/proprietary.json +8 -1
- package/package.json +2 -1
- package/scripts/sync-upstream.js +69 -43
- package/template/.agents/skills/ask-matt/PHASE-BOUNDARIES.md +55 -0
- package/template/.agents/skills/ask-matt/SKILL.md +90 -0
- package/template/.agents/skills/ask-matt/agents/openai.yaml +5 -0
- package/template/.agents/skills/ci-guard/SKILL.md +94 -0
- package/template/.agents/skills/ci-guard/agents/openai.yaml +5 -0
- package/template/.agents/skills/code-review/SKILL.md +87 -0
- package/template/.agents/skills/code-review/agents/openai.yaml +3 -0
- package/template/.agents/skills/codebase-design/DEEPENING.md +37 -0
- package/template/.agents/skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
- package/template/.agents/skills/codebase-design/SKILL.md +114 -0
- package/template/.agents/skills/codebase-design/agents/openai.yaml +3 -0
- package/template/{.opencode → .agents}/skills/commit-check/SKILL.md +13 -18
- package/template/{.pi → .agents}/skills/diagnose-fix/SKILL.md +0 -1
- package/template/.agents/skills/diagnosing-bugs/SKILL.md +138 -0
- package/template/.agents/skills/diagnosing-bugs/agents/openai.yaml +3 -0
- package/template/.agents/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +44 -0
- package/template/.agents/skills/domain-modeling/ADR-FORMAT.md +47 -0
- package/template/.agents/skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
- package/template/.agents/skills/domain-modeling/SKILL.md +74 -0
- package/template/.agents/skills/domain-modeling/agents/openai.yaml +3 -0
- package/template/.agents/skills/grill-me/SKILL.md +7 -0
- package/template/.agents/skills/grill-me/agents/openai.yaml +5 -0
- package/template/{.pi → .agents}/skills/grill-to-spec/SKILL.md +0 -3
- package/template/.agents/skills/grill-with-docs/SKILL.md +7 -0
- package/template/.agents/skills/grill-with-docs/agents/openai.yaml +5 -0
- package/template/.agents/skills/grilling/SKILL.md +28 -0
- package/template/.agents/skills/grilling/agents/openai.yaml +3 -0
- package/template/.agents/skills/handoff/SKILL.md +16 -0
- package/template/.agents/skills/handoff/agents/openai.yaml +5 -0
- package/template/.agents/skills/implement/SKILL.md +15 -0
- package/template/.agents/skills/implement/agents/openai.yaml +5 -0
- package/template/.agents/skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
- package/template/.agents/skills/improve-codebase-architecture/SKILL.md +71 -0
- package/template/.agents/skills/improve-codebase-architecture/agents/openai.yaml +5 -0
- package/template/.agents/skills/instance-test/SKILL.md +70 -0
- package/template/.agents/skills/instance-test/agents/openai.yaml +5 -0
- package/template/.agents/skills/instance-test/references/instances.md +75 -0
- package/template/.agents/skills/prototype/LOGIC.md +67 -0
- package/template/.agents/skills/prototype/SKILL.md +26 -0
- package/template/.agents/skills/prototype/UI.md +112 -0
- package/template/.agents/skills/prototype/agents/openai.yaml +3 -0
- package/template/.agents/skills/research/SKILL.md +12 -0
- package/template/.agents/skills/research/agents/openai.yaml +3 -0
- package/template/.agents/skills/resolving-merge-conflicts/SKILL.md +14 -0
- package/template/.agents/skills/resolving-merge-conflicts/agents/openai.yaml +3 -0
- package/template/.agents/skills/scaffold-functional-test/SKILL.md +75 -0
- package/template/.agents/skills/scaffold-functional-test/agents/openai.yaml +5 -0
- package/template/.agents/skills/setup-matt-pocock-skills/SKILL.md +116 -0
- package/template/.agents/skills/setup-matt-pocock-skills/agents/openai.yaml +5 -0
- package/template/.agents/skills/setup-matt-pocock-skills/domain.md +51 -0
- package/template/.agents/skills/setup-matt-pocock-skills/issue-tracker-github.md +45 -0
- package/template/.agents/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +46 -0
- package/template/.agents/skills/setup-matt-pocock-skills/issue-tracker-local.md +30 -0
- package/template/.agents/skills/setup-matt-pocock-skills/triage-labels.md +15 -0
- package/template/.agents/skills/tdd/SKILL.md +38 -0
- package/template/.agents/skills/tdd/agents/openai.yaml +3 -0
- package/template/.agents/skills/tdd/mocking.md +59 -0
- package/template/.agents/skills/tdd/tests.md +77 -0
- package/template/{.opencode → .agents}/skills/tdd-implement/SKILL.md +0 -1
- package/template/{.pi → .agents}/skills/tdd-implement/references/orchestration.md +2 -2
- package/template/{.opencode → .agents}/skills/tdd-implement/references/stages.md +2 -7
- package/template/.agents/skills/teach/GLOSSARY-FORMAT.md +35 -0
- package/template/.agents/skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
- package/template/.agents/skills/teach/MISSION-FORMAT.md +31 -0
- package/template/.agents/skills/teach/RESOURCES-FORMAT.md +32 -0
- package/template/.agents/skills/teach/SKILL.md +140 -0
- package/template/.agents/skills/teach/agents/openai.yaml +5 -0
- package/template/.agents/skills/to-questionnaire/SKILL.md +54 -0
- package/template/.agents/skills/to-questionnaire/agents/openai.yaml +5 -0
- package/template/.agents/skills/to-spec/SKILL.md +75 -0
- package/template/.agents/skills/to-spec/agents/openai.yaml +5 -0
- package/template/.agents/skills/to-tickets/SKILL.md +105 -0
- package/template/.agents/skills/to-tickets/agents/openai.yaml +5 -0
- package/template/.agents/skills/triage/AGENT-BRIEF.md +207 -0
- package/template/.agents/skills/triage/OUT-OF-SCOPE.md +105 -0
- package/template/.agents/skills/triage/SKILL.md +112 -0
- package/template/.agents/skills/triage/agents/openai.yaml +5 -0
- package/template/.agents/skills/wait-what/SKILL.md +7 -0
- package/template/.agents/skills/wait-what/agents/openai.yaml +5 -0
- package/template/.agents/skills/wayfinder/SKILL.md +128 -0
- package/template/.agents/skills/wayfinder/agents/openai.yaml +5 -0
- package/template/.agents/skills/wizard/SKILL.md +44 -0
- package/template/.agents/skills/wizard/agents/openai.yaml +3 -0
- package/template/.agents/skills/wizard/template.sh +204 -0
- package/template/.agents/skills/writing-for-agents/SKILL-MECHANICS.md +22 -0
- package/template/.agents/skills/writing-for-agents/SKILL.md +81 -0
- package/template/.agents/skills/writing-for-agents/agents/openai.yaml +3 -0
- package/template/.opencode/CONTEXT.md +8 -8
- package/template/.opencode/skills/.gitkeep +0 -0
- package/template/.opencode/skills/README.md +4 -0
- package/template/.pi/CONTEXT.md +8 -8
- package/template/.pi/skills/.gitkeep +0 -0
- package/template/.pi/skills/README.md +4 -0
- package/template/AGENTS.md +5 -8
- package/template/.opencode/skills/diagnose-fix/SKILL.md +0 -66
- package/template/.opencode/skills/grill-to-spec/SKILL.md +0 -83
- package/template/.opencode/skills/instance-test/SKILL.md +0 -61
- package/template/.opencode/skills/instance-test/agents/openai.yaml +0 -5
- package/template/.opencode/skills/instance-test/references/instances.md +0 -48
- package/template/.opencode/skills/tdd-implement/references/orchestration.md +0 -136
- package/template/.pi/skills/commit-check/SKILL.md +0 -67
- package/template/.pi/skills/commit-check/agents/openai.yaml +0 -5
- package/template/.pi/skills/commit-check/scripts/scan-sensitive.sh +0 -36
- package/template/.pi/skills/diagnose-fix/agents/openai.yaml +0 -5
- package/template/.pi/skills/diagnose-fix/references/anti-patterns.md +0 -20
- package/template/.pi/skills/grill-to-spec/agents/openai.yaml +0 -5
- package/template/.pi/skills/grill-to-spec/references/rules.md +0 -33
- package/template/.pi/skills/instance-test/SKILL.md +0 -61
- package/template/.pi/skills/instance-test/agents/openai.yaml +0 -5
- package/template/.pi/skills/instance-test/references/instances.md +0 -48
- package/template/.pi/skills/tdd-implement/SKILL.md +0 -48
- package/template/.pi/skills/tdd-implement/agents/openai.yaml +0 -5
- package/template/.pi/skills/tdd-implement/references/stages.md +0 -316
- /package/template/{.opencode → .agents}/skills/commit-check/agents/openai.yaml +0 -0
- /package/template/{.opencode → .agents}/skills/commit-check/scripts/scan-sensitive.sh +0 -0
- /package/template/{.opencode → .agents}/skills/diagnose-fix/agents/openai.yaml +0 -0
- /package/template/{.opencode → .agents}/skills/diagnose-fix/references/anti-patterns.md +0 -0
- /package/template/{.opencode → .agents}/skills/grill-to-spec/agents/openai.yaml +0 -0
- /package/template/{.opencode → .agents}/skills/grill-to-spec/references/rules.md +0 -0
- /package/template/{.opencode → .agents}/skills/tdd-implement/agents/openai.yaml +0 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ci-guard
|
|
3
|
+
description: "Guard the GitHub Actions release pipeline: orchestrate workflow flow, enforce pre-release verification, and self-correct after publish. Use when CI is flaky/failing, when setting up or editing .github/workflows/ci.yml, or before tagging a release to npm."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# CI Guard
|
|
7
|
+
|
|
8
|
+
**guard** 为领衔词的发布门禁技能:以一次**可复现的失败**为起点,把 `verify → build → publish` 编排成不可绕过的门,把**预发布校验**做成硬门槛,把**发布后自纠**做成闭环。本技能沉淀自 `heihei0299/pi-switch` 23 次运行中 14 次失败的复盘(见 `.scratch/research/ci-actions-调研.md`)——不替代 `diagnose-fix` 的通用诊断,只收敛 CI/发布这一条链。
|
|
9
|
+
|
|
10
|
+
## 何时用
|
|
11
|
+
|
|
12
|
+
- Actions 持续红 / 偶发红(尤其是 `verify` 单点红而 `publish` 仍绿)
|
|
13
|
+
- 新建或改动 `.github/workflows/ci.yml`、调整 `cargo test` / `clippy` / `rustfmt` 参数
|
|
14
|
+
- 打 tag 前、发 npm 前、或发布后需要自检/回滚
|
|
15
|
+
|
|
16
|
+
## 三段式门禁
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
① 编排 flows → ② 预发布 gate → ③ 发布后自纠
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
每段有**完成条件**(可验证),未满足不进入下一段。
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
### ① 编排 flows —— 让工作流不可被绕过
|
|
27
|
+
|
|
28
|
+
**做**:
|
|
29
|
+
- `on`:`push.tags: ["v*"]` **必须**同时配 `push.branches: [main]`(或 `master`)+ `pull_request.branches: [main]` + `workflow_dispatch`。否则直推 `main` 的修复(如 `2d68f62`)无法被 CI 验证,tag 才暴露问题
|
|
30
|
+
- `jobs` 依赖:`publish.needs: [build, verify]`,**禁止** `needs: build` 单依赖。门禁失效的直接原因就是 `verify` 红仍发包
|
|
31
|
+
- `permissions` 最小化:`verify`/`build` 只需 `contents: read`,仅 `publish` 保留 `contents: write` + `packages: write`(或 `id-token: write` 若用 OIDC)
|
|
32
|
+
- `concurrency`:`group: ci-${{ github.ref }}` + `cancel-in-progress: true`,避免同分支并行互踩
|
|
33
|
+
|
|
34
|
+
**完成条件**:
|
|
35
|
+
- [ ] `git diff HEAD -- .github/workflows/ci.yml` 显示 `on.push.branches` 存在
|
|
36
|
+
- [ ] `publish.needs` 包含 `verify`
|
|
37
|
+
- [ ] `workflow_dispatch` 可手动触发全量
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
### ② 预发布 gate —— 测试 GitHub Action 流程
|
|
42
|
+
|
|
43
|
+
本段是**硬门槛**,顺序固定:`action lint → workflow dry-run → dispatch 验证`,任一步红即阻断 `publish`。
|
|
44
|
+
|
|
45
|
+
**action lint**:
|
|
46
|
+
- `actionlint` 校验 `.github/workflows/ci.yml` 语法与 `on/needs/permissions` 完整性
|
|
47
|
+
- `yamllint` 检查缩进与重复键
|
|
48
|
+
|
|
49
|
+
**workflow dry-run**:
|
|
50
|
+
- `act --dry-run` 或 `gh workflow view` 模拟 `verify/build/publish` 三 job 依赖与 `if` 条件
|
|
51
|
+
- 校验 `publish.needs` 含 `verify` 且 `workflow_dispatch` 可手动触发
|
|
52
|
+
|
|
53
|
+
**dispatch 验证**:
|
|
54
|
+
- 通过 `gh workflow run ci.yml --ref main -f dry_run=true` 触发试运行,观察 `verify` 日志与产物上传
|
|
55
|
+
- 失败即阻断 `publish`,日志留存于 Actions
|
|
56
|
+
|
|
57
|
+
**完成条件**:
|
|
58
|
+
- [ ] `actionlint` 0 error
|
|
59
|
+
- [ ] `act --dry-run` 三 job 依赖正确
|
|
60
|
+
- [ ] `workflow_dispatch` 试运行通过
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
### ③ 发布后自纠 —— 发出去的包自己负责
|
|
65
|
+
|
|
66
|
+
**发布时**:
|
|
67
|
+
- `npm publish --access public` 仅在 `if: startsWith(github.ref, 'refs/tags/v')` 且 `needs` 全绿时执行
|
|
68
|
+
- 发布前 `actions/download-artifact` 校验 `if-no-files-found: error`,发布后 `npm view <pkg>@<version> version` 回读确认
|
|
69
|
+
|
|
70
|
+
**自纠**:
|
|
71
|
+
- 失败即 **阻断**:`verify` 红 → `publish` 不执行(由 `needs` 保证);`publish` 自身失败(`409 already exists` / `401`)→ 工作流整体 `failure`,不静默
|
|
72
|
+
- 发布后 30s 内 `curl https://registry.npmjs.org/<pkg>/<version>` 校验可用;失败则 `gh issue create --title "chore(release): vX.Y.Z 发布后自检失败" --body "run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"` 并 `gh release delete vX.Y.Z --yes`(或 `npm unpublish <pkg>@<version>` 在 72h 内)
|
|
73
|
+
- `workflow_dispatch` 支持 `inputs.rollback_version` 手动回滚
|
|
74
|
+
|
|
75
|
+
**完成条件**:
|
|
76
|
+
- [ ] `npm view` 回读与 tag 一致
|
|
77
|
+
- [ ] 失败路径有 issue/通知(非静默)
|
|
78
|
+
- [ ] `git tag` 与 `package.json version` 一致(`scripts/release.sh` 或 `npm version` 保证)
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 反模式
|
|
83
|
+
|
|
84
|
+
- **单依赖 publish**:`needs: build` 是本仓 7 次带病发布的根因
|
|
85
|
+
- **仅 tag 触发**:`push.branches` 缺失导致主干修复无 CI
|
|
86
|
+
- **静默发布**:`publish` 失败不建 issue / 不删 tag,下次 `409` 叠加
|
|
87
|
+
- **`-A clippy::all`**:掩盖真实告警
|
|
88
|
+
|
|
89
|
+
## 引用
|
|
90
|
+
|
|
91
|
+
- 调研:`.scratch/research/ci-actions-调研.md`(23 次运行全量、`proxy.rs:115` vs `config.rs:460` 对比)
|
|
92
|
+
- 修复:`2d68f62 fix(ci): gate publish on verify and serialize Rust tests`
|
|
93
|
+
- 关联技能:`diagnose-fix`(通用诊断)、`commit-check`(提交前门禁)、`tdd`(测试隔离后的回归)
|
|
94
|
+
|
|
@@ -5,35 +5,32 @@ description: "Run the pre-commit gate before any commit: verify docs match the i
|
|
|
5
5
|
|
|
6
6
|
# Commit Check
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
提交前的**门禁检查**:文档一致性 → 保持目录卫生 → 规范 commit message,三项全过才允许 commit。本技能是轻量检查清单,不重写 code-review 的审查语义([code-review](.agents/skills/code-review/SKILL.md) 是唯一事实源),也不替代任何完整实现流程——它是任何 commit 前的通用门禁,无论改动来自哪个流程。
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## 三项检查(全部通过才 commit)
|
|
11
11
|
|
|
12
|
-
### ①
|
|
12
|
+
### ① 文档一致性
|
|
13
|
+
> 覆盖原 ① 审查文档 的全部检查项与原 ② 对齐 README 的全部检查项
|
|
13
14
|
|
|
14
15
|
- 本次改动涉及的行为/接口/配置/命令是否有对应文档(README、`docs/`、技能正文)描述
|
|
15
16
|
- 文档描述与实现一致:无过期信息、无声称未实现的功能、无遗留的旧接口描述
|
|
16
|
-
- 涉及技能/模板/配置改动时,检查正文引用的路径与实际一致(如相对路径、目录结构)
|
|
17
17
|
- 发现不一致 → 先修文档(或更新实现),再进入下一步
|
|
18
|
-
|
|
19
|
-
### ② 对齐 README
|
|
20
|
-
|
|
21
18
|
- 改动涉及项目结构、分发文件、技能/命令清单时,检查 README 中对应的结构说明、映射表、清单是否同步
|
|
22
19
|
- 改动涉及用法/CLI/配置/示例时,检查 README 对应描述与实际一致
|
|
23
20
|
- 存在模板镜像/分发副本时,确认源文件与副本同步(如有守护测试,跑一遍确认)
|
|
24
|
-
-
|
|
25
|
-
|
|
26
|
-
### ③ 保持目录卫生
|
|
21
|
+
- **特例**:`AGENTS.md` 的 `tdd-implement ↔ implement` 路由行 + 技能文件 + `.gitignore` 的 `.pi/` 忽略,且存在 `AGENTS.md.bak` 时,视为模板同步预期增量,不回滚
|
|
22
|
+
### ② 保持目录卫生
|
|
27
23
|
|
|
28
24
|
- `git status` 确认工作区只含预期改动:无残留未跟踪文件、无临时产物(调试脚本、日志、备份文件、`[DEBUG-...]` 残留)
|
|
29
|
-
-
|
|
25
|
+
- 无关文件(一次性脚本、转储、探针、调试日志)直接追加至 `.gitignore`,不执行删除;仅对本次产生的 `[DEBUG-...]` 临时产物做受控清理,禁止为达干净而执行 `git reset --hard`、`git checkout .`、`git clean -fd`、`git stash push --include-untracked`、`git push --force`、`git rebase -i` 等(需显式用户确认;`stash` 如需使用改用 `--keep-index` 并在 `pop` 后校验 `git merge-base --is-ancestor $BASE_HEAD HEAD`)。详见 `CONTEXT.md` Git History Preservation 与 `docs/agents/skill-design.md` Rule 4
|
|
30
26
|
- 若本次会话记录了 `BASE_HEAD`,commit 前校验 `git merge-base --is-ancestor $BASE_HEAD HEAD`,失败即经 `git reflog` 恢复后才提交
|
|
31
27
|
- 确认没有敏感信息进入改动(密钥、token、`.env`、私钥)——跑 `scripts/scan-sensitive.sh`,不用手写扫描
|
|
32
28
|
- 提交后工作区应为干净状态(`git status` 无输出)
|
|
33
29
|
|
|
34
|
-
###
|
|
30
|
+
### ③ 规范 commit message
|
|
35
31
|
|
|
36
32
|
- 格式遵循仓库约定(常见:`<type>(<scope>): <subject>`,type 用 feat/fix/docs/chore/refactor/test)
|
|
33
|
+
> 模板:`feat(<scope>): <subject>` / `fix(<scope>): <subject>` — 例 `feat(tdd): add seam login`,`fix(ci): gate publish on verify`
|
|
37
34
|
- subject 描述变更内容而非过程(不说"我做了什么",说"改成了什么")
|
|
38
35
|
- 需要时补充 body:动机、影响范围、验收证据(测试结果、同步确认)
|
|
39
36
|
- 一次 commit 只含一个逻辑变更;多主题拆多个 commit
|
|
@@ -42,24 +39,22 @@ description: "Run the pre-commit gate before any commit: verify docs match the i
|
|
|
42
39
|
|
|
43
40
|
- 不做全量 code review:审查语义以 [code-review](.agents/skills/code-review/SKILL.md) 为唯一事实源,本技能不重写
|
|
44
41
|
- 不替代实现流程的收尾:`tdd-implement` 阶段⑦已含文档对齐与目录卫生,本技能只管独立 commit 的门禁
|
|
45
|
-
- 不顺手重构:只检查与本次改动直接相关的内容,不扩权到无关文档/目录
|
|
46
42
|
- 不发明扫描规则:敏感信息检测跑 `scripts/scan-sensitive.sh`,不每次重写 grep 模式
|
|
47
43
|
|
|
48
44
|
## 执行顺序(回合内串行)
|
|
49
45
|
|
|
50
|
-
1. 跑 ①
|
|
46
|
+
1. 跑 ① 文档一致性 → ② 保持目录卫生 → ③ 写 commit message
|
|
51
47
|
2. 任一项发现问题:修复后重跑该项,全部通过才 commit
|
|
52
48
|
3. commit 后确认 `git status` 干净,工作结束
|
|
53
49
|
|
|
54
|
-
|
|
50
|
+
**回合连续性**:三项检查在一个回合内串行完成,不等用户"继续";发现问题立即修复并重查,直到三项全过或遇到外部阻塞(权限/授权缺失)。
|
|
55
51
|
|
|
56
52
|
## 出口条件
|
|
57
53
|
|
|
58
|
-
- [ ]
|
|
59
|
-
- [ ] README 对齐(涉及结构/分发改动时已同步)
|
|
54
|
+
- [ ] 文档一致性(文档与 README 均已对齐)
|
|
60
55
|
- [ ] 目录卫生(`git status` 干净,无临时产物/敏感信息)
|
|
61
56
|
- [ ] commit message 规范(遵循仓库格式)
|
|
62
|
-
-
|
|
57
|
+
- 三项全过 → commit
|
|
63
58
|
|
|
64
59
|
## 引用
|
|
65
60
|
|
|
@@ -34,7 +34,6 @@ description: "Complete diagnosis→fix→regression channel for bugs: diagnose,
|
|
|
34
34
|
|
|
35
35
|
- **无逃生舱**:不存在正确 seam 时,**本身即 finding**——向用户明确说明"架构阻止锁定该 bug",请求 seam 决策或记录为架构改进建议(可转交 `/improve-codebase-architecture`);**不得**绕过测试直接改代码。
|
|
36
36
|
- **轻量声明**:本技能不套用 tdd-implement 的重流程——不做逐 todo 的循环编排、不设 seams 确认步骤、无 typecheck/commit 前置门禁;单 seam 修复场景直走红-绿。
|
|
37
|
-
|
|
38
37
|
**出口条件**:回归测试先红 → 写最小修复 → 回归测试变绿。
|
|
39
38
|
|
|
40
39
|
## ③ 回归验证
|
|
@@ -57,7 +57,6 @@ disable-model-invocation: true
|
|
|
57
57
|
| 触发点 | 条件 | 动作 |
|
|
58
58
|
|--------|------|------|
|
|
59
59
|
| ② seam 确认 | 用户不同意 seams | → ① 补充 |
|
|
60
|
-
| ② 综合时 | 关键信息缺失 | → ① 补采 |
|
|
61
60
|
| ② 发布后 | spec 有问题 | → ① 重新循环 |
|
|
62
61
|
|
|
63
62
|
## 异常终止
|
|
@@ -72,8 +71,6 @@ disable-model-invocation: true
|
|
|
72
71
|
|
|
73
72
|
- ① 出口达成后方可进入 ②
|
|
74
73
|
- 全程不写代码、不动源码:唯一允许写入的文件是领域文档(`CONTEXT.md`/ADR)与 spec
|
|
75
|
-
- ② 探索代码只为确认 seams 与术语——只读不改
|
|
76
|
-
- 产出物格式细则(Glossary/ADR/Spec 守则)与反模式见 [references/rules.md](references/rules.md),不在本文件重写
|
|
77
74
|
|
|
78
75
|
## 引用
|
|
79
76
|
|
|
@@ -1,61 +1,70 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: instance-test
|
|
3
3
|
disable-model-invocation: true
|
|
4
|
-
description: "
|
|
4
|
+
description: "matt-skills 专属功能测试示范(由 scaffold-functional-test 从 spec 生成)— 验证 sync 合并 update 后的行为;仅显式调用"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# Instance Test
|
|
7
|
+
# Instance Test — matt-skills 专属示范
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
本 skill 是 **matt-skills 专属**的功能测试示范,由 `scaffold-functional-test` 从 `.scratch/sync-merge-update/spec.md` 生成(见 `references/instances.md` 头部 `spec hash` + `generatedAt`)。它是生成器产出形态的示例,不随 Template Snapshot 分发,仅保留于 Workspace。旧通用执行器文案已废弃。
|
|
10
|
+
|
|
11
|
+
兼容别名:`instance-test` 保留原名以兼容历史调用,实际为 `matt-functional-test` 的示范实现。
|
|
10
12
|
|
|
11
13
|
## Steps
|
|
12
14
|
|
|
13
15
|
### 1. Gather instances
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
实例集已由生成器按**受控扩展模型**落盘于 `references/instances.md`(头部含 `spec hash` + `generatedAt`,每实例含**溯源** `spec.md` 章节/行号,`<!-- manual -->` 段受保护)。
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
- Derived from `spec.md`/`README` acceptance criteria — extract each verifiable behavior as one instance, then confirm the list with the user before running.
|
|
19
|
+
执行前校验指纹:若当前 spec 的 `spec hash` 与 `references/instances.md` 头部不一致,提示「spec 已变更,建议重跑 scaffold-functional-test」但不自动覆盖,需用户显式确认才 regenerate(AI 先给 diff 建议)。
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
每实例声明:`prompt/command/expected files/content/expected stdout phrases/expected exit code` 必选,`setup/env/timeout/type/teardown` 可选,默认 `type: cli`。
|
|
21
22
|
|
|
22
|
-
|
|
23
|
+
完成:实例清单已固定(含溯源与指纹),`<!-- manual -->` 段未被覆盖。
|
|
23
24
|
|
|
24
25
|
### 2. Run instances
|
|
25
26
|
|
|
26
27
|
For each **instance** in order:
|
|
27
28
|
|
|
28
|
-
1. `mktemp -d`
|
|
29
|
-
2.
|
|
30
|
-
3.
|
|
29
|
+
1. `mktemp -d` 隔离目录(或项目支持的 `git worktree` / `--dest`),单线程串行,不并行。
|
|
30
|
+
2. 执行实例的 `command` 与可选 `setup`,捕获 stdout/stderr 与 exit code。
|
|
31
|
+
3. 快照 `expected` 声明的文件与副作用。
|
|
31
32
|
|
|
32
|
-
|
|
33
|
+
一个 **instance** 一次,失败不阻断后续,产物不碰撞。
|
|
33
34
|
|
|
34
|
-
|
|
35
|
+
完成:每实例均有独立 run dir 与捕获输出。
|
|
35
36
|
|
|
36
37
|
### 3. Evaluate
|
|
37
38
|
|
|
38
|
-
|
|
39
|
+
对比每实例的 actual vs expected:
|
|
39
40
|
|
|
40
|
-
-
|
|
41
|
-
- Stdout/stderr
|
|
42
|
-
- Exit code
|
|
41
|
+
- 文件存在性/内容(`test -f`/`grep -q`/`diff`)
|
|
42
|
+
- Stdout/stderr 含预期短语
|
|
43
|
+
- Exit code 一致
|
|
44
|
+
- 扩展字段(`env`/`timeout`/`type`)行为符合声明
|
|
43
45
|
|
|
44
|
-
|
|
46
|
+
标记 `PASS`/`FAIL`,附 `expected vs actual` diff 与 run dir 证据。
|
|
45
47
|
|
|
46
|
-
|
|
48
|
+
完成:每实例均有 `PASS` 或 `FAIL` 且含证据。
|
|
47
49
|
|
|
48
50
|
### 4. Report
|
|
49
51
|
|
|
50
|
-
|
|
52
|
+
对话内汇总:
|
|
53
|
+
|
|
54
|
+
- `PASS m/n` + per-instance evidence
|
|
55
|
+
- 失败项列出 gap(expected vs actual)与 run dir 复现路径
|
|
56
|
+
- 成功默认清理临时目录、失败默认保留;`--keep` 保留全部;`--report` 显式开启才落盘报告文件
|
|
57
|
+
|
|
58
|
+
不以文件刷屏——默认输出在对话,报告文件仅显式开启才写。
|
|
51
59
|
|
|
52
|
-
|
|
53
|
-
- Failures list the gap (expected vs actual) and the run dir for reproduction.
|
|
54
|
-
- Clean up temp dirs unless `--keep` is requested.
|
|
60
|
+
## 实例来源
|
|
55
61
|
|
|
56
|
-
|
|
62
|
+
- 源 spec:`.scratch/sync-merge-update/spec.md`(`spec hash` 见 `references/instances.md` 头部)
|
|
63
|
+
- 推导策略:混合推导(验收标准锚点 + 需求/接口/边界补充),每实例含溯源,无溯源视为幻觉
|
|
64
|
+
- 手工段:`<!-- manual -->` 保护
|
|
57
65
|
|
|
58
|
-
##
|
|
66
|
+
## 引用
|
|
59
67
|
|
|
60
|
-
-
|
|
61
|
-
-
|
|
68
|
+
- 生成器:`scaffold-functional-test`(读 spec 产出本 skill)
|
|
69
|
+
- 领域术语:`CONTEXT.md`
|
|
70
|
+
- 技能设计:`docs/agents/skill-design.md`
|
|
@@ -1,48 +1,75 @@
|
|
|
1
|
-
# Instances
|
|
1
|
+
# Instances for matt-skills — sync 行为功能测试(由 scaffold-functional-test 生成)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> 源 spec:`.scratch/sync-merge-update/spec.md`
|
|
4
|
+
> spec hash: `062a76fc872d` # .scratch/sync-merge-update/spec.md 的 sha256 前 12 位
|
|
5
|
+
> generatedAt: 2026-05-11
|
|
6
|
+
> 推导策略:混合推导(验收标准锚点 + 需求/行为补充),每实例含溯源,无溯源视为幻觉
|
|
4
7
|
|
|
5
|
-
|
|
8
|
+
本文件由 `scaffold-functional-test` 按**受控扩展模型**生成:必选 `prompt/command/expected files/content/expected stdout phrases/expected exit code`,可选 `setup/env/timeout/type/teardown`,默认 `type: cli`。执行语义:`mktemp -d` 隔离、单线程串行、`PASS m/n` 汇总、证据含 `expected vs actual` diff + `run dir`。
|
|
6
9
|
|
|
7
|
-
|
|
10
|
+
执行前校验:对比当前 `.scratch/sync-merge-update/spec.md` 的 hash 与本文件头部 `spec hash`,不一致时提示「spec 已变更,建议重跑 scaffold-functional-test」但不自动覆盖。
|
|
8
11
|
|
|
9
|
-
|
|
10
|
-
- Command: shell command to run in isolated dir
|
|
11
|
-
- Expected: files/content, stdout phrases, exit code
|
|
12
|
+
---
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
## 1. sync 默认 check(无参不写盘)
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
- Prompt: 验证 `matt-skills sync` 无参等价 check,打印表且不改 AGENTS.md
|
|
17
|
+
- 溯源: spec.md — 需求/行为「`matt-skills sync` 无参:等价 `check`」+ 验收标准「`sync` 无参在已定制的 `pi-switch` 仓库上不改 `AGENTS.md`」
|
|
18
|
+
- type: cli
|
|
19
|
+
- setup: `node bin/cli.js init --dest <tmp>` 后手工改 `AGENTS.md` 加入 `tdd-implement` 定制行
|
|
20
|
+
- Command: `node bin/cli.js sync --dest <tmp>`(无参)
|
|
21
|
+
- Expected:
|
|
22
|
+
- `git diff HEAD -- AGENTS.md` 为空(`AGENTS.md` 未被覆盖)
|
|
23
|
+
- stdout 含 `上游 HEAD` 与 `新增/更新/删除/一致` 表头
|
|
24
|
+
- stdout 含 `--json` 可解析提示或表格行
|
|
25
|
+
- exit 0 或 1(有差异时 exit 1,判 exit code 符合 check 语义)
|
|
26
|
+
- Expected files/content: `AGENTS.md` 保留定制行,无 `AGENTS.md.bak` 新增
|
|
27
|
+
- Expected stdout phrases: `上游 HEAD`, `一致`
|
|
28
|
+
- Expected exit code: 1(有差异时)/ 0(无差异时)— 按实现定义,测试以实际 check 语义为准
|
|
16
29
|
|
|
17
|
-
|
|
18
|
-
Prompt: verify fresh project initialization
|
|
19
|
-
Command: `node bin/cli.js init --dest <tmp>`
|
|
20
|
-
Expected: `AGENTS.md`, `.opencode/skills/tdd-implement/SKILL.md`, `.pi/skills/tdd-implement/SKILL.md`, `.agents/skills/tdd` (22 upstream) exist; stdout `模板:已复制` + `上游技能:已装 22`; no `.bak`; exit 0.
|
|
30
|
+
## 2. sync --apply 安全增量(AGENTS.md 跳过、上游强制覆盖不删)
|
|
21
31
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
32
|
+
- Prompt: 验证 `sync --apply` 为安全增量,`AGENTS.md` 定制跳过、上游技能被覆盖但 remove 列表不删
|
|
33
|
+
- 溯源: spec.md — 需求/行为「`sync --apply`:安全增量写盘。`AGENTS.md` 若含独有路由则跳过;上游技能 `rm+cp force` 覆盖,跳过 `PROPRIETARY`,不执行 `remove`」+ 验收标准「`sync --apply` 后上游技能被强制更新为上游 `HEAD`,`remove` 列表的技能仍保留」
|
|
34
|
+
- type: cli
|
|
35
|
+
- setup: 在 `<tmp>` 放置旧版上游技能 `test-skill` 过期文件,并手工改 `AGENTS.md`
|
|
36
|
+
- Command: `node bin/cli.js sync --apply --dest <tmp>`
|
|
37
|
+
- Expected:
|
|
38
|
+
- `AGENTS.md` 仍含定制行(未被模板覆盖)
|
|
39
|
+
- 上游技能文件已更新为上游 HEAD 内容(`diff` 无旧版残留)
|
|
40
|
+
- `remove` 列表中的技能目录仍存在(未被删除)
|
|
41
|
+
- Expected files/content: `AGENTS.md` 定制行存在;`test-skill` 被覆盖为新版;无 `AGENTS.md.bak`(安全档不备份)或按实现保留但不覆盖
|
|
42
|
+
- Expected stdout phrases: `已同步` 或 `已更新` 或 `同步`
|
|
43
|
+
- Expected exit code: 0
|
|
44
|
+
- timeout: 30000
|
|
26
45
|
|
|
27
|
-
|
|
28
|
-
Prompt: verify forced init directly overwrites
|
|
29
|
-
Command: `init --force --dest <tmp>` after local edit
|
|
30
|
-
Expected: stdout `已覆盖` + `已装 22`; `AGENTS.md.bak` exists with local edit; `AGENTS.md` restored from template; no `.agents/skills/*.bak`; no `.opencode.bak`/`.pi.bak`; exit 0.
|
|
46
|
+
## 3. sync --force 硬盖(AGENTS.md 备份后覆盖、全量 add/update/remove)
|
|
31
47
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
48
|
+
- Prompt: 验证 `sync --force` 硬盖,`AGENTS.md` 备份后被模板覆盖、技能与模板全量同步含删除
|
|
49
|
+
- 溯源: spec.md — 需求/行为「`sync --force`:硬盖。`AGENTS.md` 先 `backupIfExists → .bak` 再 `cp -r force`;技能与模板均 `add/update/remove` 全做」+ 验收标准「`sync --force` 后 `AGENTS.md` 变为模板且 `AGENTS.md.bak` 存在,`remove` 列表的技能被删除」
|
|
50
|
+
- type: cli
|
|
51
|
+
- setup: 在 `<tmp>` 放置 `AGENTS.md` 定制行 + 一个上游已删的本地技能 `obsolete-skill/`
|
|
52
|
+
- Command: `node bin/cli.js sync --force --dest <tmp>`
|
|
53
|
+
- Expected:
|
|
54
|
+
- `AGENTS.md` 已被模板覆盖(定制行消失,与 `template/AGENTS.md` 一致)
|
|
55
|
+
- `AGENTS.md.bak` 存在且含定制行备份
|
|
56
|
+
- `obsolete-skill/` 已被删除
|
|
57
|
+
- Expected files/content: `AGENTS.md` 内容等于 `template/AGENTS.md`;`AGENTS.md.bak` 存在
|
|
58
|
+
- Expected stdout phrases: `已覆盖` 或 `硬盖`
|
|
59
|
+
- Expected exit code: 0
|
|
39
60
|
|
|
40
|
-
|
|
41
|
-
Prompt: verify sync --force does not backup
|
|
42
|
-
Command: `sync --force --dest <tmp>`
|
|
43
|
-
Expected: stdout `已覆盖` without new `.bak`; exit 0.
|
|
61
|
+
## 4. update 已合并到 sync --apply(删除分支、提示已合并)
|
|
44
62
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
63
|
+
- Prompt: 验证 `matt-skills update` 已删除,执行后报错提示已合并到 `sync --apply`,且 `--help` 不再列 `update`
|
|
64
|
+
- 溯源: spec.md — 需求/行为「`matt-skills update`:删除该分支,`main` 中 `command === 'update'` 改为 `stderr: 'update 已合并到 sync --apply'` 且 `exit 1`,`--help` 不再列 `update`」+ 验收标准「`matt-skills update` 执行后报错提示已合并,`--help` 无 `update`」
|
|
65
|
+
- type: cli
|
|
66
|
+
- Command: `node bin/cli.js update 2>&1; echo "exit:$?"` 与 `node bin/cli.js --help`
|
|
67
|
+
- Expected:
|
|
68
|
+
- `update` 命令 stdout/stderr 含 `已合并到 sync --apply` 且 exit 1
|
|
69
|
+
- `--help` 输出不含独立的 `update` 子命令行(不匹配 `^\s*update`)
|
|
70
|
+
- Expected stdout phrases: `已合并到 sync --apply`
|
|
71
|
+
- Expected exit code: 1(`update` 分支)
|
|
72
|
+
- env: {}
|
|
73
|
+
|
|
74
|
+
<!-- manual -->
|
|
75
|
+
<!-- 以下为人工定制实例保护段:由开发者手写,scaffold-functional-test 重生成时不覆盖此段以上的内容。如需新增手工实例,请在此段后追加。 -->
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scaffold-functional-test
|
|
3
|
+
disable-model-invocation: false
|
|
4
|
+
description: "Scaffold a repo-specific functional-test skill from spec — use when the user wants to generate a customized functional-test suite/skill from a spec/README/help; not for running tests (use instance-test) nor for TDD (use tdd-implement)"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Scaffold Functional Test
|
|
8
|
+
|
|
9
|
+
从本仓库的 spec 自动脚手架出**仓库专属的功能测试 skill**。本技能为**非 Long-Horizon 轻量 skill**(一次性 scaffold,不做多 seam 红绿循环),一次性完成「读 spec → 推导实例 → 落盘 skill → 自验证」闭环。术语定义见 `CONTEXT.md`。
|
|
10
|
+
|
|
11
|
+
## 产出物
|
|
12
|
+
|
|
13
|
+
- 定制 skill 目录:`.agents/skills/<repo>-functional-test/`(含 `SKILL.md` + `references/instances.md` + 可选 `scripts/run.sh`)
|
|
14
|
+
- 指纹:`spec hash` + `generatedAt` 写入生成物头部,用于后续执行前校验
|
|
15
|
+
- 保护:`<!-- manual -->` 标记段不被覆盖
|
|
16
|
+
|
|
17
|
+
生成物纳入 git,可回归复用,不进入 `template/` 再分发(生成器本身才随 Template Snapshot 分发)。
|
|
18
|
+
|
|
19
|
+
## Steps
|
|
20
|
+
|
|
21
|
+
### ① 采集 Spec
|
|
22
|
+
|
|
23
|
+
解析用户传入的 spec 路径,默认 `.scratch/<feature>/spec.md`。
|
|
24
|
+
|
|
25
|
+
- 若 spec 存在:读取 `CONTEXT.md`/`docs/adr/` 相关术语与决策,提取待覆盖行为清单(以验收标准为锚点)。
|
|
26
|
+
- 若 spec 不存在:回退到 `README` + `--help` 输出倒推行为清单,但必须进入 Step ② 的清单确认关卡,不静默臆测。
|
|
27
|
+
|
|
28
|
+
完成:待覆盖行为清单已固定,无未澄清歧义。
|
|
29
|
+
|
|
30
|
+
### ② 推导实例
|
|
31
|
+
|
|
32
|
+
按混合推导策略生成实例草案:
|
|
33
|
+
|
|
34
|
+
- 以验收标准为锚点,需求/接口/边界为补充,可为 spec 未显式写的隐含行为(如 `--help` 文案、错误码、幂等性)补实例,但每条实例必须标注**溯源**(spec 章节/行号或 `README/--help` 来源),无溯源的实例视为幻觉需删除。
|
|
35
|
+
- 每实例声明**受控扩展模型**:必选 `prompt/command/expected files/content/expected stdout phrases/expected exit code`,可选 `setup/env/timeout/type/teardown`,默认 `type: cli`。
|
|
36
|
+
- **强制门禁**:实例清单必须与用户确认后才进入 Step ③;无确认不落盘。
|
|
37
|
+
|
|
38
|
+
完成:实例清单已获用户确认,每实例含溯源与完整四元组。
|
|
39
|
+
|
|
40
|
+
### ③ 脚手架落盘
|
|
41
|
+
|
|
42
|
+
按受控扩展模型写入定制 skill 目录:
|
|
43
|
+
|
|
44
|
+
- `SKILL.md`:执行语义(见下节「执行语义」)
|
|
45
|
+
- `references/instances.md`:实例集(含溯源、必选+可选字段、头部 `spec hash` + `generatedAt`)
|
|
46
|
+
- 不覆盖 `<!-- manual -->` 保护段;覆盖式更新需经用户确认;重生成时先给出 diff 建议,用户确认后才应用。
|
|
47
|
+
|
|
48
|
+
完成:定制 skill 目录已落盘,指纹正确,人工段受保护。
|
|
49
|
+
|
|
50
|
+
### ④ 自验证
|
|
51
|
+
|
|
52
|
+
落盘后立即按实例执行语义串行执行一轮实例集作自验证:
|
|
53
|
+
|
|
54
|
+
- `mktemp -d` 隔离(或项目支持的 `git worktree` / `--dest`),单线程串行,不并行。
|
|
55
|
+
- 每实例捕获 stdout/stderr 与 exit code,按 `test -f`/`grep -q`/`diff` 对比判定 `PASS`/`FAIL`,单 FAIL 不阻断后续。
|
|
56
|
+
- 对话内输出 `PASS m/n` + per-instance evidence(`expected vs actual diff` + `run dir`),失败不回滚生成物但给出 gap 供迭代 `regenerate`。
|
|
57
|
+
- 成功默认清理临时目录、失败默认保留(`--keep` 保留全部);`--report` 显式开启才落盘报告文件。
|
|
58
|
+
|
|
59
|
+
完成:自验证已执行,对话内汇总完成,证据可复现。
|
|
60
|
+
|
|
61
|
+
## 执行语义(生成物复用)
|
|
62
|
+
|
|
63
|
+
生成物本身的执行语义与 `instance-test` 一致:`mktemp -d` 串行、`PASS m/n` 汇总、证据含 `expected vs actual diff` + `run dir`。执行前校验 `spec hash` 指纹:若当前 spec 已变更,提示「spec 已变更,建议重跑 scaffold-functional-test」但不自动覆盖,需用户显式确认才 regenerate。
|
|
64
|
+
|
|
65
|
+
## 不做什么
|
|
66
|
+
|
|
67
|
+
- 不替代 `tdd`/`tdd-implement` 的红绿循环与 `commit-check` 门禁
|
|
68
|
+
- 不自动织入每次 `tdd-implement` 或 `commit-check`;仅 `tdd-implement --with-functional` 显式 opt-in
|
|
69
|
+
|
|
70
|
+
## 引用
|
|
71
|
+
|
|
72
|
+
- 领域术语:`CONTEXT.md`
|
|
73
|
+
- 技能设计规则:`docs/agents/skill-design.md`
|
|
74
|
+
- 示范产物:`.agents/skills/instance-test/`(本仓库专属,见其 SKILL.md)
|
|
75
|
+
- Issue tracker:`docs/agents/issue-tracker.md`
|
|
@@ -45,4 +45,3 @@ description: "TDD seam red-green loop: use when the user provides a spec/ticket
|
|
|
45
45
|
- Commit 门禁:[commit-check](.agents/skills/commit-check/SKILL.md)
|
|
46
46
|
- 单线详规:[stages.md](references/stages.md)
|
|
47
47
|
- 多 issue 编排:[orchestration.md](references/orchestration.md)
|
|
48
|
-
- Issue tracker 约定:[issue-tracker.md](../../docs/agents/issue-tracker.md)
|
|
@@ -46,7 +46,7 @@ for each 层 Li in L1..Ln:
|
|
|
46
46
|
并行派发:为 Li 中每个 issue 启动一个子代理(single 模式,禁止 parallel tasks 数组)
|
|
47
47
|
等待:阻塞直到 Li 全部子代理返回回执卡片
|
|
48
48
|
验收:编排器按 A3 验收清单逐 issue 验收(只认回执卡片的关键信息 + 抽检验证,不消费全量日志)
|
|
49
|
-
层收敛验证:验收全通过进入全量验证(完成条件 4 项,全部通过才进下一层,任一失败按 A5 回退):①该层全部 issue 验收通过
|
|
49
|
+
层收敛验证:验收全通过进入全量验证(完成条件 4 项,全部通过才进下一层,任一失败按 A5 回退):①该层全部 issue 验收通过 ②相关测试套件通过(全量仅在 A4) ③`git status` 卫生(仅删本次临时产物,正向;护栏:禁止 `git reset --hard`/`git checkout .`/`git clean -fd`/`git stash push --include-untracked`)④历史校验 `git merge-base --is-ancestor $BASE_HEAD HEAD` 通过;验收不通过或相关/卫生/历史任一失败按 A5 回退重派该 issue
|
|
50
50
|
全部层层收敛通过后进入 A4 全量收敛
|
|
51
51
|
```
|
|
52
52
|
|
|
@@ -108,7 +108,7 @@ for each 层 Li in L1..Ln:
|
|
|
108
108
|
|
|
109
109
|
全部层逐 issue 验收通过后,编排器执行:
|
|
110
110
|
|
|
111
|
-
1.
|
|
111
|
+
1. **全量测试套件**:跑仓库完整测试套件(所有 issue 执行完毕后的唯一全量,阶段④与 A2 已改为相关,仅此一次)
|
|
112
112
|
2. **历史校验**:执行 `git merge-base --is-ancestor $BASE_HEAD HEAD`,若为 false 说明编排过程中历史被改写,立即经 `git reflog` 恢复后重跑收敛。
|
|
113
113
|
3. **目录卫生**:`git status` 确认无 `[DEBUG-...]` 残留、无未跟踪临时文件;有残留则仅删本次临时产物后重检,禁止 `git reset --hard`/`git checkout .`/`git clean -fd`/`git stash push --include-untracked` 等。
|
|
114
114
|
4. **汇总总结**:在会话输出汇总各 issue 的回执卡片关键信息(提交 hash / seams / 验收 checkbox / 测试结果 / 文档对齐);不另写汇总文件,不透传子代理全量日志(各 issue 的 `## 实施总结` 已落盘,详查落盘文件)。
|
|
@@ -35,7 +35,6 @@
|
|
|
35
35
|
|
|
36
36
|
### 边界
|
|
37
37
|
|
|
38
|
-
- 本阶段只澄清需求——实现与测试设计在后续阶段进行
|
|
39
38
|
|
|
40
39
|
---
|
|
41
40
|
|
|
@@ -61,8 +60,6 @@
|
|
|
61
60
|
|
|
62
61
|
- 一个 seam 对应一个公共接口上的一个待测行为(输入 + 预期输出):一个 seam = 一个测试 + 一个最小实现 cycle;同一接口的多个行为拆分为多个 seam,而非内部函数
|
|
63
62
|
|
|
64
|
-
> Seams 定义参考:[tdd 技能](.agents/skills/tdd/SKILL.md#seams--where-tests-go)
|
|
65
|
-
|
|
66
63
|
---
|
|
67
64
|
|
|
68
65
|
## 阶段 ③:TDD 开发循环
|
|
@@ -132,8 +129,6 @@
|
|
|
132
129
|
- 全部 todo 为 done 才进入阶段④
|
|
133
130
|
- 测试质量规则(公共接口验证、独立断言、mock 边界、重构归属 review)见 tdd 技能,不在本阶段重写
|
|
134
131
|
|
|
135
|
-
> Mock 指南:[tdd/mocking.md](.agents/skills/tdd/mocking.md)
|
|
136
|
-
> 好测试标准:[tdd/tests.md](.agents/skills/tdd/tests.md)
|
|
137
132
|
|
|
138
133
|
---
|
|
139
134
|
|
|
@@ -145,7 +140,7 @@
|
|
|
145
140
|
|
|
146
141
|
### 操作
|
|
147
142
|
|
|
148
|
-
1.
|
|
143
|
+
1. 运行仓库的完整测试套件(单线模式的唯一全量;多 issue 子代理此步仅相关,全量由 A4 统一执行)
|
|
149
144
|
2. 检查所有测试是否通过
|
|
150
145
|
|
|
151
146
|
### 出口条件
|
|
@@ -251,7 +246,7 @@
|
|
|
251
246
|
|
|
252
247
|
## Todo 规定
|
|
253
248
|
|
|
254
|
-
|
|
249
|
+
本节复用 `tdd`/`implement` 的 Todo 规定,`tdd-implement` 仅做多 issue 编排与串联,不再重写层次细节。
|
|
255
250
|
|
|
256
251
|
### 拆分层级(大小任务层次)
|
|
257
252
|
|