@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.
Files changed (139) hide show
  1. package/.agents/skills/ci-guard/SKILL.md +94 -0
  2. package/.agents/skills/ci-guard/agents/openai.yaml +5 -0
  3. package/.agents/skills/commit-check/SKILL.md +13 -18
  4. package/.agents/skills/diagnose-fix/SKILL.md +0 -1
  5. package/.agents/skills/grill-to-spec/SKILL.md +0 -3
  6. package/.agents/skills/instance-test/SKILL.md +36 -27
  7. package/.agents/skills/instance-test/agents/openai.yaml +1 -1
  8. package/.agents/skills/instance-test/references/instances.md +63 -36
  9. package/.agents/skills/scaffold-functional-test/SKILL.md +75 -0
  10. package/.agents/skills/scaffold-functional-test/agents/openai.yaml +5 -0
  11. package/.agents/skills/tdd-implement/SKILL.md +0 -1
  12. package/.agents/skills/tdd-implement/references/orchestration.md +2 -2
  13. package/.agents/skills/tdd-implement/references/stages.md +2 -7
  14. package/README.md +55 -54
  15. package/bin/cli.js +216 -64
  16. package/config/engineering.json +20 -0
  17. package/config/proprietary.json +8 -1
  18. package/package.json +2 -1
  19. package/scripts/sync-upstream.js +69 -43
  20. package/template/.agents/skills/ask-matt/PHASE-BOUNDARIES.md +55 -0
  21. package/template/.agents/skills/ask-matt/SKILL.md +90 -0
  22. package/template/.agents/skills/ask-matt/agents/openai.yaml +5 -0
  23. package/template/.agents/skills/ci-guard/SKILL.md +94 -0
  24. package/template/.agents/skills/ci-guard/agents/openai.yaml +5 -0
  25. package/template/.agents/skills/code-review/SKILL.md +87 -0
  26. package/template/.agents/skills/code-review/agents/openai.yaml +3 -0
  27. package/template/.agents/skills/codebase-design/DEEPENING.md +37 -0
  28. package/template/.agents/skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
  29. package/template/.agents/skills/codebase-design/SKILL.md +114 -0
  30. package/template/.agents/skills/codebase-design/agents/openai.yaml +3 -0
  31. package/template/{.opencode → .agents}/skills/commit-check/SKILL.md +13 -18
  32. package/template/{.pi → .agents}/skills/diagnose-fix/SKILL.md +0 -1
  33. package/template/.agents/skills/diagnosing-bugs/SKILL.md +138 -0
  34. package/template/.agents/skills/diagnosing-bugs/agents/openai.yaml +3 -0
  35. package/template/.agents/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +44 -0
  36. package/template/.agents/skills/domain-modeling/ADR-FORMAT.md +47 -0
  37. package/template/.agents/skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
  38. package/template/.agents/skills/domain-modeling/SKILL.md +74 -0
  39. package/template/.agents/skills/domain-modeling/agents/openai.yaml +3 -0
  40. package/template/.agents/skills/grill-me/SKILL.md +7 -0
  41. package/template/.agents/skills/grill-me/agents/openai.yaml +5 -0
  42. package/template/{.pi → .agents}/skills/grill-to-spec/SKILL.md +0 -3
  43. package/template/.agents/skills/grill-with-docs/SKILL.md +7 -0
  44. package/template/.agents/skills/grill-with-docs/agents/openai.yaml +5 -0
  45. package/template/.agents/skills/grilling/SKILL.md +28 -0
  46. package/template/.agents/skills/grilling/agents/openai.yaml +3 -0
  47. package/template/.agents/skills/handoff/SKILL.md +16 -0
  48. package/template/.agents/skills/handoff/agents/openai.yaml +5 -0
  49. package/template/.agents/skills/implement/SKILL.md +15 -0
  50. package/template/.agents/skills/implement/agents/openai.yaml +5 -0
  51. package/template/.agents/skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
  52. package/template/.agents/skills/improve-codebase-architecture/SKILL.md +71 -0
  53. package/template/.agents/skills/improve-codebase-architecture/agents/openai.yaml +5 -0
  54. package/template/.agents/skills/instance-test/SKILL.md +70 -0
  55. package/template/.agents/skills/instance-test/agents/openai.yaml +5 -0
  56. package/template/.agents/skills/instance-test/references/instances.md +75 -0
  57. package/template/.agents/skills/prototype/LOGIC.md +67 -0
  58. package/template/.agents/skills/prototype/SKILL.md +26 -0
  59. package/template/.agents/skills/prototype/UI.md +112 -0
  60. package/template/.agents/skills/prototype/agents/openai.yaml +3 -0
  61. package/template/.agents/skills/research/SKILL.md +12 -0
  62. package/template/.agents/skills/research/agents/openai.yaml +3 -0
  63. package/template/.agents/skills/resolving-merge-conflicts/SKILL.md +14 -0
  64. package/template/.agents/skills/resolving-merge-conflicts/agents/openai.yaml +3 -0
  65. package/template/.agents/skills/scaffold-functional-test/SKILL.md +75 -0
  66. package/template/.agents/skills/scaffold-functional-test/agents/openai.yaml +5 -0
  67. package/template/.agents/skills/setup-matt-pocock-skills/SKILL.md +116 -0
  68. package/template/.agents/skills/setup-matt-pocock-skills/agents/openai.yaml +5 -0
  69. package/template/.agents/skills/setup-matt-pocock-skills/domain.md +51 -0
  70. package/template/.agents/skills/setup-matt-pocock-skills/issue-tracker-github.md +45 -0
  71. package/template/.agents/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +46 -0
  72. package/template/.agents/skills/setup-matt-pocock-skills/issue-tracker-local.md +30 -0
  73. package/template/.agents/skills/setup-matt-pocock-skills/triage-labels.md +15 -0
  74. package/template/.agents/skills/tdd/SKILL.md +38 -0
  75. package/template/.agents/skills/tdd/agents/openai.yaml +3 -0
  76. package/template/.agents/skills/tdd/mocking.md +59 -0
  77. package/template/.agents/skills/tdd/tests.md +77 -0
  78. package/template/{.opencode → .agents}/skills/tdd-implement/SKILL.md +0 -1
  79. package/template/{.pi → .agents}/skills/tdd-implement/references/orchestration.md +2 -2
  80. package/template/{.opencode → .agents}/skills/tdd-implement/references/stages.md +2 -7
  81. package/template/.agents/skills/teach/GLOSSARY-FORMAT.md +35 -0
  82. package/template/.agents/skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
  83. package/template/.agents/skills/teach/MISSION-FORMAT.md +31 -0
  84. package/template/.agents/skills/teach/RESOURCES-FORMAT.md +32 -0
  85. package/template/.agents/skills/teach/SKILL.md +140 -0
  86. package/template/.agents/skills/teach/agents/openai.yaml +5 -0
  87. package/template/.agents/skills/to-questionnaire/SKILL.md +54 -0
  88. package/template/.agents/skills/to-questionnaire/agents/openai.yaml +5 -0
  89. package/template/.agents/skills/to-spec/SKILL.md +75 -0
  90. package/template/.agents/skills/to-spec/agents/openai.yaml +5 -0
  91. package/template/.agents/skills/to-tickets/SKILL.md +105 -0
  92. package/template/.agents/skills/to-tickets/agents/openai.yaml +5 -0
  93. package/template/.agents/skills/triage/AGENT-BRIEF.md +207 -0
  94. package/template/.agents/skills/triage/OUT-OF-SCOPE.md +105 -0
  95. package/template/.agents/skills/triage/SKILL.md +112 -0
  96. package/template/.agents/skills/triage/agents/openai.yaml +5 -0
  97. package/template/.agents/skills/wait-what/SKILL.md +7 -0
  98. package/template/.agents/skills/wait-what/agents/openai.yaml +5 -0
  99. package/template/.agents/skills/wayfinder/SKILL.md +128 -0
  100. package/template/.agents/skills/wayfinder/agents/openai.yaml +5 -0
  101. package/template/.agents/skills/wizard/SKILL.md +44 -0
  102. package/template/.agents/skills/wizard/agents/openai.yaml +3 -0
  103. package/template/.agents/skills/wizard/template.sh +204 -0
  104. package/template/.agents/skills/writing-for-agents/SKILL-MECHANICS.md +22 -0
  105. package/template/.agents/skills/writing-for-agents/SKILL.md +81 -0
  106. package/template/.agents/skills/writing-for-agents/agents/openai.yaml +3 -0
  107. package/template/.opencode/CONTEXT.md +8 -8
  108. package/template/.opencode/skills/.gitkeep +0 -0
  109. package/template/.opencode/skills/README.md +4 -0
  110. package/template/.pi/CONTEXT.md +8 -8
  111. package/template/.pi/skills/.gitkeep +0 -0
  112. package/template/.pi/skills/README.md +4 -0
  113. package/template/AGENTS.md +5 -8
  114. package/template/.opencode/skills/diagnose-fix/SKILL.md +0 -66
  115. package/template/.opencode/skills/grill-to-spec/SKILL.md +0 -83
  116. package/template/.opencode/skills/instance-test/SKILL.md +0 -61
  117. package/template/.opencode/skills/instance-test/agents/openai.yaml +0 -5
  118. package/template/.opencode/skills/instance-test/references/instances.md +0 -48
  119. package/template/.opencode/skills/tdd-implement/references/orchestration.md +0 -136
  120. package/template/.pi/skills/commit-check/SKILL.md +0 -67
  121. package/template/.pi/skills/commit-check/agents/openai.yaml +0 -5
  122. package/template/.pi/skills/commit-check/scripts/scan-sensitive.sh +0 -36
  123. package/template/.pi/skills/diagnose-fix/agents/openai.yaml +0 -5
  124. package/template/.pi/skills/diagnose-fix/references/anti-patterns.md +0 -20
  125. package/template/.pi/skills/grill-to-spec/agents/openai.yaml +0 -5
  126. package/template/.pi/skills/grill-to-spec/references/rules.md +0 -33
  127. package/template/.pi/skills/instance-test/SKILL.md +0 -61
  128. package/template/.pi/skills/instance-test/agents/openai.yaml +0 -5
  129. package/template/.pi/skills/instance-test/references/instances.md +0 -48
  130. package/template/.pi/skills/tdd-implement/SKILL.md +0 -48
  131. package/template/.pi/skills/tdd-implement/agents/openai.yaml +0 -5
  132. package/template/.pi/skills/tdd-implement/references/stages.md +0 -316
  133. /package/template/{.opencode → .agents}/skills/commit-check/agents/openai.yaml +0 -0
  134. /package/template/{.opencode → .agents}/skills/commit-check/scripts/scan-sensitive.sh +0 -0
  135. /package/template/{.opencode → .agents}/skills/diagnose-fix/agents/openai.yaml +0 -0
  136. /package/template/{.opencode → .agents}/skills/diagnose-fix/references/anti-patterns.md +0 -0
  137. /package/template/{.opencode → .agents}/skills/grill-to-spec/agents/openai.yaml +0 -0
  138. /package/template/{.opencode → .agents}/skills/grill-to-spec/references/rules.md +0 -0
  139. /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
+
@@ -0,0 +1,5 @@
1
+ interface:
2
+ display_name: "CI Guard"
3
+ short_description: "Guard release pipeline: orchestrate flows, enforce verify gate, self-correct after publish"
4
+ policy:
5
+ allow_implicit_invocation: false
@@ -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
- 提交前的**门禁检查**:审查文档对齐 README → 保持目录卫生 → 规范 commit message,四项全过才允许 commit。本技能是轻量检查清单,不重写 code-review 的审查语义([code-review](.agents/skills/code-review/SKILL.md) 是唯一事实源),也不替代任何完整实现流程——它是任何 commit 前的通用门禁,无论改动来自哪个流程。
8
+ 提交前的**门禁检查**:文档一致性 → 保持目录卫生 → 规范 commit message,三项全过才允许 commit。本技能是轻量检查清单,不重写 code-review 的审查语义([code-review](.agents/skills/code-review/SKILL.md) 是唯一事实源),也不替代任何完整实现流程——它是任何 commit 前的通用门禁,无论改动来自哪个流程。
9
9
 
10
- ## 四项检查(全部通过才 commit)
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
- - **特例:skill 与 AGENTS.md 的模板同步增量**:若 `git diff HEAD` 仅涉及 `AGENTS.md` 的 `tdd-implement ↔ implement` 路由行 + `.agents/skills/`/`.pi/skills/`/`.opencode/skills/` 的技能文件 + `.gitignore` 的 `.pi/` 忽略,且同目录存在 `AGENTS.md.bak`(模板同步 `sync`/`init --force` 的备份),视为模板同步的预期增量,禁止自动 `checkout -- AGENTS.md` 回滚;存在性按文件系统判(`ls .agents/skills/<name> .pi/skills/<name> .opencode/skills/<name>` 任一存在即算存在,不以 `git ls-files` 为准);缺技能则正向补齐而非回滚文档
25
-
26
- ### ③ 保持目录卫生
21
+ - **特例**:`AGENTS.md` 的 `tdd-implement ↔ implement` 路由行 + 技能文件 + `.gitignore` 的 `.pi/` 忽略,且存在 `AGENTS.md.bak` 时,视为模板同步预期增量,不回滚
22
+ ### ② 保持目录卫生
27
23
 
28
24
  - `git status` 确认工作区只含预期改动:无残留未跟踪文件、无临时产物(调试脚本、日志、备份文件、`[DEBUG-...]` 残留)
29
- - 清理本次改动产生的临时文件(一次性脚本、转储、探针)——仅删本次产生的未跟踪临时产物,禁止为达干净而执行 `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
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
- ### 规范 commit message
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. 跑 ① 审查文档 → ② 对齐 README → ③ 保持目录卫生 → ④ 写 commit message
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
- - 四项全过 → commit
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: "Verify project meets expected goals by running prompt instances in isolated temp dirs"
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
- Run **instance** prompts to verify project meets expected goals via actual functional tests. Each **instance** is a prompt + expected outcome, executed in an isolated temp dir — no mocks, no stubs.
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
- Collect the **instance** set to run:
17
+ 实例集已由生成器按**受控扩展模型**落盘于 `references/instances.md`(头部含 `spec hash` + `generatedAt`,每实例含**溯源** `spec.md` 章节/行号,`<!-- manual -->` 段受保护)。
16
18
 
17
- - User-provided instances (prompt, command, expected files/stdout/exit code), or
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
- Each **instance** must declare: command to run, expected files/content, expected stdout phrases, expected exit code.
21
+ 每实例声明:`prompt/command/expected files/content/expected stdout phrases/expected exit code` 必选,`setup/env/timeout/type/teardown` 可选,默认 `type: cli`。
21
22
 
22
- Completion: instance list is fixed (prompt, expected outcome, verification command) — no instance is added mid-run.
23
+ 完成:实例清单已固定(含溯源与指纹),`<!-- manual -->` 段未被覆盖。
23
24
 
24
25
  ### 2. Run instances
25
26
 
26
27
  For each **instance** in order:
27
28
 
28
- 1. `mktemp -d` isolated dir (or `git worktree` / `--dest` if the project supports it).
29
- 2. Execute the instance's command capture stdout/stderr and exit code.
30
- 3. Snapshot result files and side effects declared in expected.
29
+ 1. `mktemp -d` 隔离目录(或项目支持的 `git worktree` / `--dest`),单线程串行,不并行。
30
+ 2. 执行实例的 `command` 与可选 `setup`,捕获 stdout/stderr exit code
31
+ 3. 快照 `expected` 声明的文件与副作用。
31
32
 
32
- Do not run instances in parallel — one **instance** at a time, so failures are isolated and artifacts do not collide.
33
+ 一个 **instance** 一次,失败不阻断后续,产物不碰撞。
33
34
 
34
- Completion: every **instance** has a run dir with captured output and file snapshot.
35
+ 完成:每实例均有独立 run dir 与捕获输出。
35
36
 
36
37
  ### 3. Evaluate
37
38
 
38
- Compare each **instance**'s actual vs expected:
39
+ 对比每实例的 actual vs expected
39
40
 
40
- - File existence/content (`test -f`, `grep -q`, `diff`).
41
- - Stdout/stderr contains expected phrases.
42
- - Exit code matches expected.
41
+ - 文件存在性/内容(`test -f`/`grep -q`/`diff`)
42
+ - Stdout/stderr 含预期短语
43
+ - Exit code 一致
44
+ - 扩展字段(`env`/`timeout`/`type`)行为符合声明
43
45
 
44
- Mark `PASS`/`FAIL` per **instance** with evidence (file path, stdout line, or diff).
46
+ 标记 `PASS`/`FAIL`,附 `expected vs actual` diff run dir 证据。
45
47
 
46
- Completion: every **instance** has a `PASS` or `FAIL` with evidence — no unevaluated instance.
48
+ 完成:每实例均有 `PASS` `FAIL` 且含证据。
47
49
 
48
50
  ### 4. Report
49
51
 
50
- Summarize in conversation:
52
+ 对话内汇总:
53
+
54
+ - `PASS m/n` + per-instance evidence
55
+ - 失败项列出 gap(expected vs actual)与 run dir 复现路径
56
+ - 成功默认清理临时目录、失败默认保留;`--keep` 保留全部;`--report` 显式开启才落盘报告文件
57
+
58
+ 不以文件刷屏——默认输出在对话,报告文件仅显式开启才写。
51
59
 
52
- - `PASS m/n` with per-instance evidence.
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
- Do not write a report file (`report-*.md`) — output stays in conversation. Keep temp dirs only on failure for debugging.
62
+ - spec:`.scratch/sync-merge-update/spec.md`(`spec hash` `references/instances.md` 头部)
63
+ - 推导策略:混合推导(验收标准锚点 + 需求/接口/边界补充),每实例含溯源,无溯源视为幻觉
64
+ - 手工段:`<!-- manual -->` 保护
57
65
 
58
- ## References
66
+ ## 引用
59
67
 
60
- - Instance definitions (if any): `references/instances.md` — example set, auto-loaded only when present, not required.
61
- - Project expected behavior: `spec.md`/`README`/`--help` — the source of truth for what to verify.
68
+ - 生成器:`scaffold-functional-test`(读 spec 产出本 skill)
69
+ - 领域术语:`CONTEXT.md`
70
+ - 技能设计:`docs/agents/skill-design.md`
@@ -1,5 +1,5 @@
1
1
  interface:
2
2
  display_name: "Instance Test"
3
- short_description: "Verify project via prompt instances in isolated temp projects"
3
+ short_description: "matt-skills 专属功能测试示范 验证 sync 合并 update 后行为"
4
4
  policy:
5
5
  allow_implicit_invocation: false
@@ -1,48 +1,75 @@
1
- # Instances template
1
+ # Instances for matt-skills — sync 行为功能测试(由 scaffold-functional-test 生成)
2
2
 
3
- Generic template for **instance** functional tests. Each **instance** is a prompt + command + expected outcome. Copy and adapt for your project; the example below is for `matt-skills`.
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
- ## Format
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
- Each instance declares:
10
+ 执行前校验:对比当前 `.scratch/sync-merge-update/spec.md` 的 hash 与本文件头部 `spec hash`,不一致时提示「spec 已变更,建议重跑 scaffold-functional-test」但不自动覆盖。
8
11
 
9
- - Prompt: human intent (what to verify)
10
- - Command: shell command to run in isolated dir
11
- - Expected: files/content, stdout phrases, exit code
12
+ ---
12
13
 
13
- Verification commands are in `SKILL.md` steps.
14
+ ## 1. sync 默认 check(无参不写盘)
14
15
 
15
- ## Example: matt-skills functional behavior
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
- ### 1. Fresh init
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
- ### 2. Init skip on existing
23
- Prompt: verify idempotent init without --force
24
- Command: `init` twice without `--force`, second with local edit to `AGENTS.md`
25
- Expected: second stdout `模板已存在.*跳过`, `上游技能:已装 0、跳过 22`; local edit preserved; exit 0.
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
- ### 3. Init --force with direct overwrite
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
- ### 4. Sync on existing
33
- Prompt: verify sync directly updates existing project
34
- Command: `sync --dest <tmp>` after local edit
35
- Expected: stdout `同步` + `已同步`/`已更新`; `AGENTS.md.bak` exists; `.agents/skills/tdd` updated; exit 0.
36
- Prompt: verify sync backs up existing project
37
- Command: `sync --dest <tmp>` after local edit
38
- Expected: stdout `同步` + `已备份`; `AGENTS.md.bak` exists; exit 0.
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
- ### 5. Sync --force without backup
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
- ### 6. List
46
- Prompt: verify skill listing
47
- Command: `list` and `list --json`
48
- Expected: 27 skills, includes `tdd` with correct description; `--json` is valid JSON array; exit 0.
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`
@@ -0,0 +1,5 @@
1
+ interface:
2
+ display_name: "Scaffold Functional Test"
3
+ short_description: "Scaffold a repo-specific functional-test skill from spec — not for running tests nor TDD"
4
+ policy:
5
+ allow_implicit_invocation: true
@@ -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 验收通过 ②全量测试套件通过 ③`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
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. **全量测试套件**:跑仓库完整测试套件(阶段④口径),失败则按 A5 回退。
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