@tea-agent/loop-agent 0.13.0-beta.0 → 0.13.0

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 (282) hide show
  1. package/AGENTS.md +157 -155
  2. package/CHANGELOG.md +301 -322
  3. package/README.md +335 -345
  4. package/bin/agent-worker.js +22 -22
  5. package/bin/loop-agent.js +21 -21
  6. package/dist/commands/cursor-prompt.js +6 -6
  7. package/dist/commands/init.js +597 -528
  8. package/dist/commands/loop-benchmark.js +11 -11
  9. package/dist/commands/pi-reuse-benchmark.js +16 -16
  10. package/dist/executors/shell-executor.js +200 -21
  11. package/dist/infrastructure/evaluation/candidate-store.js +5 -1
  12. package/dist/sidecars/cursor-prompt/executor.js +1 -1
  13. package/dist/task/runtime.js +27 -27
  14. package/dist/worker/observe/static/api.js +46 -46
  15. package/dist/worker/observe/static/app.js +150 -150
  16. package/dist/worker/observe/static/constants.js +148 -148
  17. package/dist/worker/observe/static/copy.js +67 -67
  18. package/dist/worker/observe/static/dag-helpers.js +172 -172
  19. package/dist/worker/observe/static/dag-layout.d.ts +31 -31
  20. package/dist/worker/observe/static/dag-layout.js +83 -83
  21. package/dist/worker/observe/static/dag-model.js +72 -72
  22. package/dist/worker/observe/static/dom.js +212 -53
  23. package/dist/worker/observe/static/format-pool.js +67 -67
  24. package/dist/worker/observe/static/format.js +292 -292
  25. package/dist/worker/observe/static/index.html +308 -308
  26. package/dist/worker/observe/static/kpi.js +94 -94
  27. package/dist/worker/observe/static/relations.js +133 -133
  28. package/dist/worker/observe/static/router.js +93 -93
  29. package/dist/worker/observe/static/run-processing.js +148 -148
  30. package/dist/worker/observe/static/shell-chrome.js +68 -68
  31. package/dist/worker/observe/static/state.js +267 -253
  32. package/dist/worker/observe/static/styles.css +1902 -1902
  33. package/dist/worker/observe/static/views/batch.js +227 -227
  34. package/dist/worker/observe/static/views/dag-graph.js +172 -172
  35. package/dist/worker/observe/static/views/dag-inspector.js +627 -607
  36. package/dist/worker/observe/static/views/dag.js +371 -362
  37. package/dist/worker/observe/static/views/dashboard.js +509 -252
  38. package/dist/worker/observe/static/views/failures.js +143 -143
  39. package/dist/worker/observe/static/views/feature.js +492 -492
  40. package/dist/worker/observe/static/views/pool.js +350 -350
  41. package/dist/worker/observe/static/views/run.js +453 -453
  42. package/dist/worker/observe/static/views/session-timeline.js +219 -205
  43. package/dist/worker/observe/static/views/shell.js +7 -7
  44. package/dist/worker/observe/static/views/task.js +314 -314
  45. package/dist/worker/observe/static/views/timeline.js +163 -163
  46. package/dist/workflows/dag/backend-test-case-manifest.js +503 -0
  47. package/dist/workflows/dag/backend-test-execution-contract.js +353 -0
  48. package/dist/workflows/dag/backend-test-result-contract.js +568 -0
  49. package/dist/workflows/dag/canvas-observer.js +275 -275
  50. package/dist/workflows/dag/decision-envelope.js +57 -2
  51. package/dist/workflows/dag/frontend-implementation-contract.js +240 -0
  52. package/dist/workflows/dag/frontend-project-capability.js +309 -0
  53. package/dist/workflows/dag/frontend-repair.js +341 -0
  54. package/dist/workflows/dag/frontend-risk.js +161 -0
  55. package/dist/workflows/dag/frontend-verification-trace.js +190 -0
  56. package/dist/workflows/dag/init-hybrid.js +1020 -125
  57. package/dist/workflows/dag/repair-artifact.js +43 -3
  58. package/dist/workflows/dag/skill-instructions.js +4 -2
  59. package/dist/workflows/dag/types.js +29 -8
  60. package/docs/README.md +105 -104
  61. package/docs/agent-dag-recovery-playbook.md +195 -195
  62. package/docs/agent-dag-runner.md +67 -67
  63. package/docs/architecture/README.md +26 -26
  64. package/docs/architecture/dag-execution.md +140 -140
  65. package/docs/architecture/evolution.md +54 -54
  66. package/docs/architecture/facts-and-state.md +71 -71
  67. package/docs/architecture/runtime-boundaries.md +191 -191
  68. package/docs/architecture/system-overview.md +93 -93
  69. package/docs/architecture/worker-and-feature.md +85 -85
  70. package/docs/cursor-prompt-sidecar.md +36 -36
  71. package/docs/decisions/README.md +18 -18
  72. package/docs/design/README.md +167 -167
  73. package/docs/development-principles.md +73 -73
  74. package/docs/exec-plans/README.md +6 -6
  75. package/docs/exec-plans/active/README.md +1 -4
  76. package/docs/exec-plans/completed/README.md +106 -84
  77. package/docs/feature-workflow.md +414 -389
  78. package/docs/harness-methodology-debugging.md +153 -153
  79. package/docs/harness-methodology-tdd.md +130 -130
  80. package/docs/harness-methodology-verification.md +27 -27
  81. package/docs/init-surface.manifest.json +307 -289
  82. package/docs/loop-agent-harness.md +142 -142
  83. package/docs/production-readiness.md +96 -96
  84. package/docs/progress/README.md +76 -60
  85. package/docs/reports/README.md +150 -108
  86. package/docs/skills/README.md +7 -7
  87. package/docs/skills/vetted-skill-registry.md +29 -29
  88. package/docs/templates/adr.md +60 -60
  89. package/docs/templates/agent-dag-authority-surface-audit.prompt.md +94 -94
  90. package/docs/templates/agent-dag-decision-envelope.schema.json +213 -213
  91. package/docs/templates/agent-dag-decision-gate-dogfood-report.md +117 -117
  92. package/docs/templates/agent-dag-decision-gate.prompt.md +246 -246
  93. package/docs/templates/agent-dag-process-supervisor.prompt.md +98 -98
  94. package/docs/templates/agent-dag-report.schema.json +473 -473
  95. package/docs/templates/agent-dag-review-verdict.prompt.md +68 -68
  96. package/docs/templates/agent-dag.base.json +190 -190
  97. package/docs/templates/agent-dag.final-verification.json +185 -185
  98. package/docs/templates/agent-dag.schema.json +411 -411
  99. package/docs/templates/agent-dag.supervised-implementation.json +620 -501
  100. package/docs/templates/backend-test-analysis.schema.json +44 -44
  101. package/docs/templates/backend-test-case-manifest.schema.json +190 -0
  102. package/docs/templates/backend-test-dag.classify.prompt.md +75 -0
  103. package/docs/templates/backend-test-dag.generate-pytest.prompt.md +204 -202
  104. package/docs/templates/backend-test-dag.json +559 -311
  105. package/docs/templates/backend-test-dag.retrospect.prompt.md +139 -125
  106. package/docs/templates/backend-test-dag.review-cases.prompt.md +83 -81
  107. package/docs/templates/backend-test-execution.schema.json +133 -0
  108. package/docs/templates/backend-test-result.schema.json +99 -0
  109. package/docs/templates/branch-merge-report.md +93 -0
  110. package/docs/templates/exec-plan.md +64 -64
  111. package/docs/templates/feature-spec.md +53 -53
  112. package/docs/templates/frontend-design-contract.md +42 -42
  113. package/docs/templates/frontend-eval/fixtures/failures/01-type-build-error.md +17 -0
  114. package/docs/templates/frontend-eval/fixtures/failures/02-unit-component-test-fail.md +16 -0
  115. package/docs/templates/frontend-eval/fixtures/failures/03-fixture-schema-drift.md +16 -0
  116. package/docs/templates/frontend-eval/fixtures/failures/04-missing-loading-empty-error-state.md +16 -0
  117. package/docs/templates/frontend-eval/fixtures/failures/05-forbidden-write-writeset-expansion.md +16 -0
  118. package/docs/templates/frontend-eval/fixtures/failures/06-unapproved-dependency-add.md +16 -0
  119. package/docs/templates/frontend-eval/fixtures/failures/07-mock-production-on.md +21 -0
  120. package/docs/templates/frontend-eval/fixtures/functional/01-simple-component-style.md +29 -0
  121. package/docs/templates/frontend-eval/fixtures/functional/02-form-validation.md +28 -0
  122. package/docs/templates/frontend-eval/fixtures/functional/03-list-detail-page.md +28 -0
  123. package/docs/templates/frontend-eval/fixtures/functional/04-api-mock.md +29 -0
  124. package/docs/templates/frontend-eval/fixtures/functional/05-permission-auth-gated-ui.md +27 -0
  125. package/docs/templates/frontend-eval/fixtures/functional/06-ssr-server-client-boundary.md +28 -0
  126. package/docs/templates/frontend-eval/fixtures/functional/07-shared-public-component-api.md +28 -0
  127. package/docs/templates/frontend-eval/fixtures/functional/08-pure-local-no-remote.md +27 -0
  128. package/docs/templates/frontend-eval/metrics.md +138 -0
  129. package/docs/templates/frontend-eval/smoke-targets.md +53 -0
  130. package/docs/templates/frontend-implementation-contract.schema.json +27 -0
  131. package/docs/templates/frontend-task-constraints.md +35 -35
  132. package/docs/templates/frontend-task-requirement.md +70 -70
  133. package/docs/templates/frontend-test-dag.generate-cases.prompt.md +5 -5
  134. package/docs/templates/frontend-test-dag.json +23 -23
  135. package/docs/templates/frontend-test-dag.retrieve-context.prompt.md +3 -3
  136. package/docs/templates/frontend-test-dag.retrospect.prompt.md +3 -3
  137. package/docs/templates/frontend-test-dag.review-cases.prompt.md +3 -3
  138. package/docs/templates/frontend-test-dag.review-execution.prompt.md +3 -3
  139. package/docs/templates/harness.schema.json +221 -221
  140. package/docs/templates/hybrid-dag.json +188 -188
  141. package/docs/templates/init-evolution-review.md +35 -35
  142. package/docs/templates/interactive-ui-round2-experiment.md +66 -66
  143. package/docs/templates/knowledge-graph-bootstrap-dag.json +118 -118
  144. package/docs/templates/knowledge-sync-dag.json +178 -178
  145. package/docs/templates/knowledge-sync-draft.schema.json +71 -71
  146. package/docs/templates/product-line/AGENTS.md +8 -8
  147. package/docs/templates/product-line/README.md +9 -9
  148. package/docs/templates/product-line/acceptance.yaml +14 -14
  149. package/docs/templates/product-line/closeout.yaml +9 -9
  150. package/docs/templates/product-line/design.md +13 -13
  151. package/docs/templates/product-line/links.md +10 -10
  152. package/docs/templates/product-line/requirement.md +17 -17
  153. package/docs/templates/product-line/task-graph.yaml +15 -15
  154. package/docs/templates/product-line/task.yaml +64 -64
  155. package/docs/templates/product-line/test-plan.md +7 -7
  156. package/docs/templates/production-readiness-checklist.md +57 -57
  157. package/docs/templates/progress-log.md +17 -17
  158. package/docs/templates/project-start-checklist.md +9 -9
  159. package/docs/templates/qa-report.md +48 -48
  160. package/docs/templates/sprint-contract.md +29 -29
  161. package/docs/templates/worker-dogfood-evidence.md +80 -80
  162. package/docs/templates/worker-dogfood-setup.md +68 -68
  163. package/docs/verification-matrix.md +70 -70
  164. package/examples/decision-gate-agent-dag.json +177 -177
  165. package/examples/example-dag.json +46 -46
  166. package/examples/hybrid-loop-agent-dag.json +189 -189
  167. package/harness.json +66 -66
  168. package/package.json +52 -88
  169. package/scripts/check-product-line-docs.sh +29 -29
  170. package/scripts/check-task-pool-root.sh +32 -32
  171. package/scripts/kb-bootstrap-init-skeleton.sh +240 -240
  172. package/scripts/kb-graph-incremental-prepare.mjs +386 -386
  173. package/scripts/kb-graph-incremental-prepare.sh +5 -5
  174. package/scripts/kb-graph-materialize.mjs +105 -105
  175. package/scripts/kb-graph-materialize.sh +4 -4
  176. package/scripts/kb-graph-promote.mjs +164 -164
  177. package/scripts/kb-graph-promote.sh +4 -4
  178. package/scripts/kb-query.mjs +554 -554
  179. package/scripts/kb-query.sh +5 -5
  180. package/skills/agent-worker/SKILL.md +39 -39
  181. package/skills/agent-worker/references/agent-worker-operator.md +60 -60
  182. package/skills/ai-engineering-context/SKILL.md +48 -48
  183. package/skills/analyze-product-dependencies/SKILL.md +67 -67
  184. package/skills/analyze-product-dependencies/agents/openai.yaml +4 -4
  185. package/skills/analyze-product-dependencies/references/api-documentation-schema.md +30 -30
  186. package/skills/analyze-product-dependencies/references/dependency-analysis-schema.md +28 -28
  187. package/skills/analyze-product-dependencies/references/example.md +76 -76
  188. package/skills/analyze-product-dependencies/references/forward-test-cases.md +35 -35
  189. package/skills/analyze-product-dependencies/references/input-contract.md +11 -11
  190. package/skills/analyze-product-dependencies/references/scouting-rules.md +61 -61
  191. package/skills/analyze-product-dependencies/scripts/test-validators.mjs +267 -267
  192. package/skills/analyze-product-dependencies/scripts/validate-api-documentation.mjs +101 -101
  193. package/skills/analyze-product-dependencies/scripts/validate-dependency-analysis.mjs +142 -142
  194. package/skills/analyze-product-dependencies/scripts/validate-product-requirement-input.mjs +76 -76
  195. package/skills/analyze-product-dependencies/scripts/validation-helpers.mjs +146 -146
  196. package/skills/analyze-product-requirements/SKILL.md +90 -90
  197. package/skills/analyze-product-requirements/agents/openai.yaml +4 -4
  198. package/skills/analyze-product-requirements/references/acceptance-criteria.md +91 -91
  199. package/skills/analyze-product-requirements/references/clarification-and-knowledge.md +56 -56
  200. package/skills/analyze-product-requirements/references/example.md +86 -86
  201. package/skills/analyze-product-requirements/references/forward-test-cases.md +66 -66
  202. package/skills/analyze-product-requirements/references/product-analysis-schema.md +32 -32
  203. package/skills/analyze-product-requirements/references/product-requirement-schema.md +33 -33
  204. package/skills/analyze-product-requirements/references/requirement-clarification-schema.md +35 -35
  205. package/skills/analyze-product-requirements/scripts/test-validators.mjs +193 -193
  206. package/skills/analyze-product-requirements/scripts/validate-product-analysis.mjs +69 -69
  207. package/skills/analyze-product-requirements/scripts/validate-product-requirement.mjs +97 -97
  208. package/skills/analyze-product-requirements/scripts/validate-requirement-clarification.mjs +98 -98
  209. package/skills/analyze-product-requirements/scripts/validation-helpers.mjs +156 -156
  210. package/skills/browser-tools/SKILL.md +196 -0
  211. package/skills/browser-tools/browser-content.js +103 -0
  212. package/skills/browser-tools/browser-cookies.js +35 -0
  213. package/skills/browser-tools/browser-eval.js +53 -0
  214. package/skills/browser-tools/browser-hn-scraper.js +108 -0
  215. package/skills/browser-tools/browser-nav.js +44 -0
  216. package/skills/browser-tools/browser-pick.js +162 -0
  217. package/skills/browser-tools/browser-screenshot.js +34 -0
  218. package/skills/browser-tools/browser-start.js +86 -0
  219. package/skills/browser-tools/package-lock.json +2556 -0
  220. package/skills/browser-tools/package.json +19 -0
  221. package/skills/code-review-core/SKILL.md +20 -20
  222. package/skills/codebase-scout/SKILL.md +19 -19
  223. package/skills/frontend-design-review/SKILL.md +66 -66
  224. package/skills/frontend-design-review/references/review-checklist.md +58 -58
  225. package/skills/frontend-implementation/SKILL.md +49 -47
  226. package/skills/frontend-implementation/references/code-standards.md +32 -32
  227. package/skills/frontend-implementation/references/design-spec.md +46 -46
  228. package/skills/frontend-implementation/references/node-contracts.md +27 -76
  229. package/skills/frontend-review/SKILL.md +59 -59
  230. package/skills/frontend-review/references/review-findings.md +47 -47
  231. package/skills/frontend-verification/SKILL.md +53 -53
  232. package/skills/frontend-verification/references/verification-checklist.md +68 -68
  233. package/skills/grill-me/SKILL.md +10 -10
  234. package/skills/grill-with-docs/SKILL.md +88 -88
  235. package/skills/grill-with-docs/adr-format.md +47 -47
  236. package/skills/grill-with-docs/context-format.md +60 -60
  237. package/skills/init-capability-evolution/SKILL.md +70 -70
  238. package/skills/loop-agent/SKILL.md +151 -151
  239. package/skills/loop-agent/references/README.md +67 -67
  240. package/skills/loop-agent/references/command-reference.md +527 -505
  241. package/skills/loop-agent/references/docs-converge.md +126 -126
  242. package/skills/loop-agent/references/harness-policy.md +263 -263
  243. package/skills/loop-agent/references/hybrid-dag.md +243 -238
  244. package/skills/loop-agent/references/learned/README.md +21 -21
  245. package/skills/loop-agent/references/long-running-loop.md +57 -57
  246. package/skills/loop-agent/references/model-routing.md +36 -36
  247. package/skills/loop-agent/references/multi-worktree.md +54 -54
  248. package/skills/loop-agent/references/one-shot-runs.md +85 -85
  249. package/skills/loop-agent/references/orchestrator-and-interventions.md +169 -169
  250. package/skills/loop-agent/references/pi-prompt.md +23 -23
  251. package/skills/loop-agent/references/pi-subagent-assisted-mode.md +84 -84
  252. package/skills/loop-agent/references/post-implementation-and-patterns.md +44 -44
  253. package/skills/loop-agent/references/task-workflow.md +89 -89
  254. package/skills/loop-agent/references/verification-and-failure-handling.md +141 -139
  255. package/skills/playwright-cli/SKILL.md +420 -420
  256. package/skills/playwright-cli/references/element-attributes.md +23 -23
  257. package/skills/playwright-cli/references/playwright-tests.md +39 -39
  258. package/skills/playwright-cli/references/request-mocking.md +87 -87
  259. package/skills/playwright-cli/references/running-code.md +241 -241
  260. package/skills/playwright-cli/references/session-management.md +225 -225
  261. package/skills/playwright-cli/references/storage-state.md +275 -275
  262. package/skills/playwright-cli/references/test-generation.md +433 -433
  263. package/skills/playwright-cli/references/tracing.md +139 -139
  264. package/skills/playwright-cli/references/video-recording.md +143 -143
  265. package/skills/playwright-cli-case-generator/SKILL.md +74 -74
  266. package/skills/requesting-code-review/SKILL.md +101 -101
  267. package/skills/requesting-code-review/code-reviewer.md +168 -168
  268. package/skills/systematic-debugging/CREATION-LOG.md +119 -119
  269. package/skills/systematic-debugging/SKILL.md +296 -296
  270. package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -158
  271. package/skills/systematic-debugging/condition-based-waiting.md +115 -115
  272. package/skills/systematic-debugging/defense-in-depth.md +122 -122
  273. package/skills/systematic-debugging/find-polluter.sh +63 -63
  274. package/skills/systematic-debugging/root-cause-tracing.md +169 -169
  275. package/skills/systematic-debugging/test-academic.md +14 -14
  276. package/skills/systematic-debugging/test-pressure-1.md +58 -58
  277. package/skills/systematic-debugging/test-pressure-2.md +68 -68
  278. package/skills/systematic-debugging/test-pressure-3.md +69 -69
  279. package/skills/test-driven-development/SKILL.md +20 -20
  280. package/skills/using-git-worktrees/SKILL.md +215 -215
  281. package/skills/verification-before-completion/SKILL.md +154 -154
  282. package/skills/webapp-testing/SKILL.md +19 -19
@@ -1,389 +1,414 @@
1
- # 功能工作流
2
-
3
- 本文档区分两层:
4
-
5
- - **Session governance**:监督方(人/agent)如何组织一次工作会话
6
- - **Runtime workflows**:`src/workflows/` 下代码实际执行的内容
7
-
8
- ## 默认会话协议
9
-
10
- 1. **Orient**:读 `README.md`、`harness.json` 与本 docs 索引
11
- 2. **Select**:选一个有限边界的工作块
12
- 3. **Contract**:写明交付物、非目标、完成标准、验证命令、失败条件
13
- 4. **Implement**:做最小连贯变更,同步更新必要文档、脚本与测试
14
- 5. **Verify**:按 `verification-matrix.md` 跑命令;完成声明用新鲜输出
15
- 6. **Handoff**:在 `docs/progress/`、`docs/reports/`、exec plan 或 ADR 中记录证据
16
-
17
- ## Orient
18
-
19
- 先理解当前系统,不要默认「没有」:
20
-
21
- - 读 `harness.json` 列出的仓库入口
22
- - 查 `git status --short --branch` 与最近提交
23
- - 新增结构前搜索现有源码、测试、脚本、文档与模板
24
- - 任务依赖健康基线时跑最小基线检查
25
- - 涉及 TDD、完成声明或调试时读方法论文档
26
-
27
- 基线已坏时,记录失败命令,并决定当前块是修基线还是在明确范围内接受已知失败。
28
-
29
- ## Select
30
-
31
- 工作块要窄到可验证。避免无关重构、功能与文档迁移混在一起。
32
-
33
- 选中的块应有:
34
-
35
- - 单一用户可见或维护者可见结果
36
- - 委托写工作时显式 allowed paths
37
- - 已知非目标
38
- - 能证明结果的验证命令
39
-
40
- ## Contract
41
-
42
- 非平凡工作应在实现前写或更新 execution plan、sprint contract、progress log 或 issue 级笔记。Contract 应包含:
43
-
44
- - 交付物
45
- - 非目标
46
- - 验收标准
47
- - 验证命令
48
- - 失败条件
49
- - 预期更新的 artifacts
50
-
51
- Bug 修复的 contract 应含复现路径,以及证明修复的回归测试或 smoke check。
52
-
53
- ## Implement
54
-
55
- 做满足 contract 的最小连贯变更。
56
-
57
- - 优先现有 helper 与目录边界
58
- - 行为变更更新测试
59
- - 工作流或命令变更更新文档与示例
60
- - 治理变更更新 `harness.json`、检查脚本或模板
61
- - 不把占位实现当作已完成
62
- - 重复约束出现时固化为持久产物
63
-
64
- ## Verify
65
-
66
- 验证是完成权威。
67
-
68
- - 用 `docs/verification-matrix.md` 选最窄的证明命令
69
- - 完整重跑命令
70
- - 读 exit code 与输出
71
- - 修失败或报告确切失败状态
72
- - 不用陈旧输出或部分检查声明完成
73
-
74
- ## Agent DAG First
75
-
76
- 复杂实现优先 DAG 工作流:
77
-
78
- ```bash
79
- loop-agent new-task <task-id> "Task title"
80
- loop-agent dag run-task <task-id> --profile auto --strict-models --output <temp-dir>/<task-id>-dag.json
81
- loop-agent dag validate --dag <temp-dir>/<task-id>-dag.json --strict-models --strict-governance
82
- loop-agent run-dag --dag <temp-dir>/<task-id>-dag.json --cwd .
83
- ```
84
-
85
- `<temp-dir>` 为平台原生临时目录。macOS/Windows 上实际文件操作用原生路径;`/` 仅用于稳定 repo 引用、JSON/Markdown 证据引用和 glob 约定。
86
-
87
- ## 业务模板(taskKind)与治理 Profile
88
-
89
- 这两层要分开:
90
-
91
- | 层 | 入口 | 作用 | 合法取值 |
92
- |----|------|------|----------|
93
- | 业务模板 | `task.json.taskKind` | 选专用 DAG 节点链 | `standard` / `frontend-implementation` / `frontend-test` / `backend-test` / `knowledge-sync` / `knowledge-graph-bootstrap` 等 |
94
- | 治理 profile | `dag run-task --profile` | 风险与流程强度 | **仅** `auto` / `minimal` / `standard` / `reviewed` / `supervised` |
95
-
96
- 专用业务流水线**不要**写成 `--profile frontend-test` / `--profile backend-test` / `--profile knowledge-sync` / `--profile knowledge-graph-bootstrap`:CLI 会拒绝这些值。正确做法是写 `task.json.taskKind`(`knowledge-sync` 还须 `featureId`)。
97
-
98
- | 用户描述关键词 | 正确入口 | 模板 |
99
- |--------------|----------|------|
100
- | 后端测试、接口测试、pytest 自动化 | `taskKind: "backend-test"` | backend-test-dag |
101
- | 前端功能测试、浏览器测试、Playwright CLI | `taskKind: "frontend-test"` | frontend-test-dag |
102
- | 前端实现、UI/组件开发 | `taskKind: "frontend-implementation"`(或 standard 下高置信自动分类) | frontend-implementation |
103
- | 测试知识回写 / 知识同步 | `taskKind: "knowledge-sync"` + `featureId` | knowledge-sync-dag |
104
- | 业务知识图谱开荒 / 增量 | `taskKind: "knowledge-graph-bootstrap"` | knowledge-graph-bootstrap-dag |
105
- | 普通实现、修复、功能 | `taskKind: "standard"` + `--profile auto`(默认) | 由 governance / 任务源分类推断 |
106
-
107
- **后端测试示例:**
108
-
109
- ```bash
110
- loop-agent new-task <task-id> "后端测试任务"
111
- # 将需求文档放入 .harness/tasks/<task-id>/source/需求.md
112
- # 将参考文档放入 .harness/tasks/<task-id>/source/references/
113
- # 在 .harness/tasks/<task-id>/task.json 设置:
114
- # { "taskKind": "backend-test", ... }
115
- loop-agent dag run-task <task-id> --execute --cwd .
116
- # 需要收紧治理时再叠加合法 profile,例如:
117
- # loop-agent dag run-task <task-id> --profile supervised --execute --cwd .
118
- ```
119
-
120
- 这不是线性 OS-CIVH runtime 状态机。代码里 DAG 有三个命令阶段:
121
-
122
- 1. `dag run-task` 加载 `.harness/tasks/<task-id>/source/需求.md`、可选 `执行约束.md`、`task.json` 与 adapter 验证命令,写出 DAG spec
123
- 2. `dag validate` 校验 schema、依赖、governance profile、写边界、model routing、shell 验证元数据
124
- 3. `run-dag` 加载 DAG、按拓扑排序为 ranks、有界并发执行可运行节点、持久化到 `.harness/dag-runs/<lifecycle>/<run-id>/`,并转入 `completed` 或 `paused`
125
-
126
- 标准生成的 hybrid DAG 固定为 Pi-only writer:
127
-
128
- ```text
129
- contract-pi
130
- -> scout-src + scout-tests
131
- -> plan-pi
132
- -> implement-pi
133
- -> verify-shell
134
- -> verify-pi
135
- -> closeout-pi
136
- ```
137
-
138
- `implement-pi` / `repair-pi` 使用 `executor: "pi"` 与 `toolProfile: "write"`。受治理 runtime 不再生成或接受 `implement-cursor` / `repair-cursor`;旧 Cursor DAG 会在 schema 校验阶段失败,需要重新生成。
139
-
140
- 专用模板选择与 governance profile 是两层独立路由。显式声明的专用 `taskKind` 始终优先;对于默认 `standard` 任务,生成器会根据任务标题、`source/需求.md` 和结构化 `allowedPaths` 做保守、确定性的需求分类。只有高置信的前端实现需求才自动选择 `frontend-implementation` 模板;由显式 profile、`workflowPolicy` 或 supervised quality gate 选中的 supervised 模板不会被自动分类降级。后端、前后端混合、明确排除前端或无法可靠判断的需求继续使用 governance profile 选出的通用模板,绝不会自动进入 `backend-test-dag`。已有 `taskKind: "frontend-implementation"` 继续作为兼容入口和有意覆盖:
141
-
142
- ```text
143
- frontend-contract-pi
144
- -> frontend-scout-pi
145
- -> frontend-mock-assess-pi
146
- -> frontend-mock-contract-gate-shell
147
- -> frontend-plan-pi
148
- -> frontend-design-gate-pi
149
- -> frontend-first-design-gate-shell
150
- -> frontend-plan-revision-pi
151
- -> [frontend-requirement-coverage-shell]
152
- -> frontend-final-design-review-pi
153
- -> frontend-final-design-gate-shell
154
- -> frontend-implement-pi
155
- -> [frontend-mock-verify-shell]
156
- -> frontend-static-verify-shell
157
- -> frontend-behavior-verify-shell
158
- -> frontend-review-pi
159
- -> frontend-review-gate-shell
160
- -> frontend-closeout-pi
161
- ```
162
-
163
- `frontend-mock-assess-pi` 是 contract/scout 之后、plan 之前的只读策略节点。它先确认接口契约与后端就绪度,再按项目能力选择已有原生 Mock、浏览器拦截、请求适配层或 `not-needed`。static/behavior shell 命令在 DAG 生成时已固化,策略只能选择能由这些入口验证的方案;缺少契约、无法保证生产默认关闭、所选策略没有可执行验证或只能靠注释真实请求时输出 `MOCK_STRATEGY: blocked`。`not-needed` 仍需真实或无远程接口的行为证据。Mock 代码由唯一 writer `frontend-implement-pi` 按已批准计划实现,不增加第二个 writer。
164
-
165
- 前端链在计划前显示 Mock/API/schema 读取、生成期能力 seed、五态策略和 contract gate。可在 `task.json.frontendMock` 设置 `policy: auto|required|disabled`、安全的 `serviceRoot` 和生成时固化的专项 `verifyCommands`。已有原生服务时优先复用;没有原生能力时可使用现有浏览器拦截或可逆 request adapter。不安全或不完整的显式 required 合同只生成无 writer 的评估 DAG;有可信专项命令时实现后先运行 `frontend-mock-verify-shell`,再进入静态和行为验证。规范读取证据继续显示在 Observe 节点详情中。
166
-
167
- 新生成 DAG 还会冻结 `sourceBinding`(任务源路径、SHA-256 与显式 `REQ/BR/AC` 编号)。前端任务存在显式编号时,`frontend-requirement-coverage-shell` 只检查 `frontend-plan-revision-pi` 输出的当前生效计划证据,缺少任一编号就阻断最终 design review 和 writer;即使首轮 design review 直接通过,revision 节点也必须复述完整 Requirement Coverage,避免从已被取代的原计划借用编号。DAG 中断后应修复 task source 并重新生成完整 DAG;不要用聊天摘要拼接 impl-only 后半段。严格治理会拒绝没有 `sourceBinding`、也没有只读 planner 上游的 v3 孤立 writer。
168
-
169
- 这条链在实现前加入两阶段 design gate:首轮 design review 同时接受 `VERDICT: pass` 和 `VERDICT: request-revision`,request-revision 时由只读 `frontend-plan-revision-pi` 消费原计划与 design findings 完成修订,再经 `frontend-final-design-review-pi` 和 `frontend-final-design-gate-shell` 最终门禁;只有最终 `VERDICT: pass` 才授权写入。`MOCK_STRATEGY: blocked`、真实请求被注释、生产默认启用 Mock Mock 与接口契约不一致都不得通过。design gate 失败路由为 `ContractMismatch` / `frontend-plan-revision-and-rerun`,不路由为 `ProductBug` / `dev-fix`。
170
-
171
- 这条链还将前端静态验证与行为验证分开建模;Mock-backed 行为验证只证明页面状态和交互,不证明真实后端已就绪或接口已联通。后端未被实际调用时,closeout 必须写明 `Frontend status: mock-validated`、`Real integration: pending`,并列出 `<task-id>-real-api-integration-verify`。该 follow-up 不会自动创建或运行;后端就绪后需要显式创建/执行新的复验任务。当前 MVP 不包含独立 a11y、视觉回归或浏览器自动化 executor。
172
-
173
- 后端测试任务只有在显式声明 `task.json.taskKind = "backend-test"` 时才选择专用模板;它面向测试工程,不是普通后端实现模式,也不新增 governance profile:
174
-
175
- ```text
176
- analyze-inputs-pi
177
- -> generate-backend-functional-cases-pi
178
- -> review-backend-cases-pi
179
- -> review-backend-cases-gate-shell
180
- -> generate-backend-pytest-pi
181
- -> execute-backend-pytest-shell
182
- -> test-retrospect-pi
183
- ```
184
-
185
- 这条链覆盖后端功能测试从需求分析到复盘评级的全链路流程:
186
-
187
- - `analyze-inputs-pi`:只读输出严格的 Backend Test Analysis v1 JSON;`backend-test-analysis-contract-shell` 确定性校验 source binding、AC IDs、schema 与敏感值,并把规范化结果写入当前 run 的 `contracts/backend-test-analysis.json`。gate 节点记录 artifact path / SHA-256 / schema ID,随 lifecycle 目录整体迁移;非法或来源不一致时 fail-closed,后续 case/pytest writers 不执行。
188
- - `generate-backend-functional-cases-pi`:只消费已验证 analysis artifact,按契约字段生成结构化后端功能测试用例(Markdown),用例 ID 带 `BE-` 前缀(如 `BE-ORDER-001`),写入 `testcase/md/`
189
- 3. **review-backend-cases-pi**:评审后端功能测试用例,输出审查报告 + `VERDICT: pass` / `VERDICT: request-revision`
190
- 4. **review-backend-cases-gate-shell**:只有评审首条 verdict 为 `VERDICT: pass` 时才允许继续生成 pytest;`request-revision` 或其它结果 **fail-closed 即停**,**不会**自动回到 generate 节点修订(本模板不启用 convergence;修好用例或约束后重新 `dag run-task`)
191
- 5. **generate-backend-pytest-pi**:将后端功能用例转化为 pytest 自动化代码;可写 `testcase/**/test_*.py` 与可选 `testcase/**/helpers/**`、`testcase/**/factories/**`,禁止改 conftest/配置与生产代码;数据构造 API 优先,DB 直写仅限已有安全测试库 fixture
192
- 6. **execute-backend-pytest-shell**:执行 `pytest testcase/`;目标工作区保持 `writePolicy: read-only`,内置 `--junitxml` 将报告写入当前 `$HARNESS_DAG_RUN_DIR/reports/backend-test-junit.xml`(不依赖 `pytest-html`),报告随 run 从 active 归档到 completed/paused,禁止改测试源码或生产代码
193
- 7. **test-retrospect-pi**:读取上游审查报告和测试报告,生成复盘报告 + 成熟度评级(A/B/C/D)
194
-
195
- 最终验证后的知识库回写可通过 `task.json.taskKind = "knowledge-sync"` 选择专用模板(与 `backend-test` 一样走 taskKind 路由,不占用 governance `--profile`)。
196
-
197
- **必须绑定 `featureId`**(fail-closed)。解析顺序:`task.json.featureId` → `hardConstraints` 中 `featureId=F-…` → 需求正文中的 `F-YYYY-NNN` → 若 `taskId` 本身是 `F-*`。生成器会把 writeSet 收窄到 `features/<featureId>/…`,validate 只检查该 Feature 下的 draft。
198
-
199
- ```json
200
- {
201
- "taskKind": "knowledge-sync",
202
- "featureId": "F-2026-004"
203
- }
204
- ```
205
-
206
- ```text
207
- knowledge-sync-collect-pi
208
- -> knowledge-sync-draft-pi
209
- -> knowledge-sync-validate-shell
210
- -> knowledge-sync-review-qa-pi
211
- -> knowledge-sync-review-domain-pi # parallel with qa/evidence
212
- -> knowledge-sync-review-evidence-pi
213
- -> knowledge-sync-multi-review-gate-shell # all VERDICT: pass
214
- -> knowledge-sync-apply-pi
215
- -> knowledge-sync-pointer-pi
216
- ```
217
-
218
- 这条链在 shell 最终验证证据之后,把稳定事实写入 Feature 测试知识库(L1),而不是把 `.harness` 大日志搬进 docs:
219
-
220
- 1. **knowledge-sync-collect-pi**:只读汇总 final verification / AC / 用例 / 缺陷 / 需求 delta 候选
221
- 2. **knowledge-sync-draft-pi**:写入 `features/<featureId>/testing/sync/pending/knowledge-sync-draft.json`
222
- 3. **knowledge-sync-validate-shell**:校验该路径 draft 的 schema、`featureId` 一致、operations 目标路径、finalVerification 门禁
223
- 4. **多视角审查(并行)**:QA/验收、领域/产品、证据/审计 三个只读 reviewer;聚合门禁要求全部 `VERDICT: pass`
224
- 5. **knowledge-sync-apply-pi**:仅在 `features/<featureId>/testing/**`(及该 Feature 的 `requirement-delta.md`、`docs/test-reports/**`)受控回写
225
- 6. **knowledge-sync-pointer-pi**:写 `features/<featureId>/testing/runs/latest.md` 与 `sync/applied/KS-*.json`
226
-
227
- 设计说明见 `docs/design/full-chain-test-knowledge-base.md` §11;JSON 示例见 `docs/templates/knowledge-sync-dag.json`。
228
-
229
- 业务知识图谱**初始化**可通过 `task.json.taskKind = "knowledge-graph-bootstrap"` 选择专用模板。跑前先落 B1 骨架:
230
-
231
- ```bash
232
- bash scripts/kb-bootstrap-init-skeleton.sh --root .
233
- # 编辑 knowledge/bootstrap/scope.yaml 后再 run-task
234
- ```
235
-
236
- (需有 `knowledge/bootstrap/scope.yaml` `status.yaml`;脚本幂等,默认不覆盖已有 scope/status,可用 `--force`。)
237
-
238
- 图谱索引与 Phase A 查询(脚本,非 RAG):
239
-
240
- ```bash
241
- bash scripts/kb-graph-materialize.sh --root .
242
- bash scripts/kb-query.sh --mode by_feature --feature F-2026-004 --json
243
- bash scripts/kb-query.sh --mode by_id --id SVC-order --json
244
- bash scripts/kb-query.sh --mode search --text "预占" --json
245
- ```
246
-
247
- **增量更新(非全量开荒)**:缩小 scope 后复用同一 `knowledge-graph-bootstrap` DAG(propose 仅针对 seeds/includes;promote 仍默认不覆盖已有正式文件):
248
-
249
- ```bash
250
- bash scripts/kb-graph-incremental-prepare.sh --root . \
251
- --feature F-2026-004 --service order [--reset-staging]
252
- # 审阅 knowledge/bootstrap/scope.yaml(update_mode: incremental)
253
- # task.json.taskKind = "knowledge-graph-bootstrap"
254
- loop-agent dag run-task <id>
255
- bash scripts/kb-graph-materialize.sh --root .
256
- ```
257
-
258
- 测试知识日常写回仍用 `knowledge-sync`(`featureId` 必填),与图谱增量入口分离。
259
-
260
- ```text
261
- kg-bootstrap-preflight-shell
262
- -> kg-bootstrap-inventory-shell
263
- -> kg-bootstrap-propose-pi
264
- -> kg-bootstrap-validate-shell
265
- -> kg-bootstrap-review-structure-pi
266
- -> kg-bootstrap-review-evidence-pi # parallel with structure/safety
267
- -> kg-bootstrap-review-safety-pi
268
- -> kg-bootstrap-multi-review-gate-shell # all VERDICT: pass
269
- -> kg-bootstrap-promote-shell
270
- -> kg-bootstrap-materialize-shell
271
- ```
272
-
273
- AI 只写 `knowledge/bootstrap/staging/**`;禁止 self-`asserted`;**结构 / 证据 / 边界安全** 三视角审查全部通过后才 promote(默认不覆盖已有正式文件);materialize 写 `knowledge/graph/` 索引。设计见 `docs/design/knowledge-graph-ai-bootstrap.md`,示意 JSON 见 `docs/templates/knowledge-graph-bootstrap-dag.json`。
274
-
275
- 前端测试模板(`frontend-test-dag`)后续沿用对称命名即可接入。
276
- 前端 shell 验证优先使用任务源 `需求.md` / `执行约束.md` 中声明的前端验证命令,例如 `npm run typecheck`、`npm run build`、`npm test`;解析不到时再使用 adapter 验证命令和模板 fallback。
277
-
278
- `verify-shell` 使用 adapter 根据 task verify preset/quota 解析出的最终验证命令,并把新鲜 exit code/stdout/stderr 交给后续只读 verifier。review-gated 模板继续插入:
279
-
280
- ```text
281
- verify-shell -> verify-pi -> review-pi -> review-gate-shell -> closeout-pi
282
- ```
283
-
284
- supervised 模板在实现路径上增加 write-set audit、soft/hard shell 验证、process supervision、有界 repair、decision gates 与可选 convergence retry。
285
-
286
- ### 只读 Pi 节点安全重试
287
-
288
- 所有生成模板都会为安全的只读 Pi 节点(planner/scout/reviewer/verifier/closeout,且 `writePolicy=read-only|none`、非 writer、非 dynamic、非 decision-gate)自动声明默认 `retryPolicy`(总尝试 3 次,手工配置最多 5 次,指数退避,单次等待上限 30s)。supervisor 与 implementer 明确不在资格范围。仅重试 `timeout`、`network`、`rate-limit`、`unavailable`;`quota`、`auth`、`invalid-output`、`write-guard` 与未知失败不重试。每次 attempt 保留独立证据,详见 [docs/agent-dag-runner.md](./agent-dag-runner.md#retry-read-only-pi-nodes)。
289
-
290
- ### 可选 repo-local SDD skill 增强
291
-
292
- `dag run-task` 会在目标项目的 `.agents/skills/` 中探测三个可选 skill:
293
-
294
- - `SDD-requirement-analysis` → `contract-pi`
295
- - `SDD-design-analysis` → `plan-pi`
296
- - `SDD-implementation-test-review` → `implement-pi`、`repair-pi`、`verify-pi`、`review-pi`
297
-
298
- 命中时,skill 通过节点 `skills` 进入现有 resolved instruction run-owned snapshot 链路,并在节点任务中收到 embedded-mode 约束:只为当前 DAG 阶段提供知识、规范与方法,不得更新 `working_requirements_status.md`、推进 SDD 状态、触发 SDD 用户确认或执行归档。节点的读写边界、当前阶段与输出契约优先;writer 仍只允许写入显式 `writeSet`。`SDD-code-spec-init` `SDD-project-how-to-spec-init` 不会在普通功能 DAG 中自动运行。
299
-
300
- 探测不到这些 repo-local skills 时,DAG 不追加节点 skill 或约束块,保持当前默认流程。用户级或 npm 包内同名 skill 也不会作为自动启用信号。
301
-
302
- 源码参考:
303
-
304
- - `src/commands/dag-run-task.ts`
305
- - `src/commands/dag-validate.ts`
306
- - `src/commands/run-dag.ts`
307
- - `src/workflows/dag/init-hybrid.ts`
308
- - `src/workflows/dag/sdd-embedded.ts`
309
- - `src/workflows/dag/runner.ts`
310
-
311
- 监督 agent 仍负责:
312
-
313
- - contract
314
- - 限定 allowed/forbidden paths
315
- - 审查 DAG/writeSet 范围
316
- - 选择验证命令
317
- - 记录 handoff 证据
318
-
319
- 声称 Production Readiness v0.1 的低/中风险单仓库任务,另须遵循 `docs/production-readiness.md` `docs/templates/production-readiness-checklist.md`。该标准冻结支持范围、非目标、必需 DAG 证据、failure routing 字段与最终验证门禁。
320
-
321
- ## Exec-plan 生命周期
322
-
323
- exec-plan 不是手工文档;它有确定性 CLI 生命周期,并与 `dag run-task` 共享同一索引校验源。
324
-
325
- ```bash
326
- loop-agent plan create <plan-id> "<title>"
327
- loop-agent plan complete <plan-id> --summary "<summary>"
328
- loop-agent plan check
329
- ```
330
-
331
- - `new-task` 不自动绑定 exec-plan;微小任务仍可不创建计划。
332
- - `plan create` 优先读取目标项目 `<governanceRoot>/templates/exec-plan.md`,不存在时回退到发布包内置模板;create/complete 同步 active/completed 索引,拒绝重复 id、路径穿越与不安全文件名,多文件操作均具备回滚保护。
333
- - `dag run-task` 在生成 DAG 草稿前运行 `plan check` 同源校验,索引漂移立即失败;空仓库与索引一致的仓库不受影响。
334
- - `plan list`(只读)与 `docs archive`(兼容入口)保留;`scripts/check-exec-plan-index-sync.sh` 仍作为独立最终防线。
335
-
336
- ## 已移除的顺序工作流
337
-
338
- 历史 Level 1 顺序 command surface 已从公开工作流移除。新工作不要用 `loop-agent run analyze|plan|spec|implement|verify|retrospective|auto|loop|continue|study`。
339
-
340
- 改用 DAG 路径:
341
-
342
- ```bash
343
- loop-agent new-task <task-id> "Task title"
344
- loop-agent dag run-task <task-id> --profile auto --strict-models --output <temp-dir>/<task-id>-dag.json
345
- loop-agent dag validate --dag <temp-dir>/<task-id>-dag.json --strict-models --strict-governance
346
- loop-agent run-dag --dag <temp-dir>/<task-id>-dag.json --cwd .
347
- ```
348
-
349
- 遗留 `.harness/tasks/<task-id>/.workflow_state.json` 在 task status 完全迁移到 DAG 导向读模型前仍可读,但不是新任务完成的权威。
350
-
351
- ## Outer Loop Runtime
352
-
353
- `loop` 命令是长跑任务控制层,与会话治理协议不是一回事。它记录 rounds 与 signals,可跑 shell 验证、Pi review 或 DAG action(review/execute),并选择下一自动 action。自动写入只能通过受治理 Pi-only Agent DAG execute;`loopAutoExecutionPolicy` 控制是否允许自动执行,旧 `loopAutoWritePolicy` 会 fail-fast。
354
-
355
- 支持的 loop actions:
356
-
357
- - `shell-verify`
358
- - `pi-review`
359
- - `dag`
360
- - `record-round`
361
- - `add-signal`
362
- - `closeout`
363
-
364
- 源码参考:
365
-
366
- - `src/commands/loop.ts`
367
- - `src/workflows/loop/actions.ts`
368
- - `src/workflows/loop/state.ts`
369
- - `src/workflows/loop/rounds.ts`
370
-
371
- ## 调试与 TDD
372
-
373
- 任务需要时使用方法论文档:
374
-
375
- - 行为变更与 bug 修复:`docs/harness-methodology-tdd.md`
376
- - 完成或 handoff 声明:`docs/harness-methodology-verification.md`
377
- - 失败与意外行为:`docs/harness-methodology-debugging.md`
378
-
379
- ## Handoff
380
-
381
- Handoff 应说明:
382
-
383
- - 改了什么
384
- - 有意未做什么
385
- - 跑了哪些验证命令
386
- - 是否影响契约、文档、测试或脚本
387
- - 剩余风险或后续工作
388
-
389
- 较大工作应更新 `docs/progress/`、`docs/reports/`、active exec plan 或 `docs/decisions/`,以便下一会话不依赖聊天历史。
1
+ # 功能工作流
2
+
3
+ 本文档区分两层:
4
+
5
+ - **Session governance**:监督方(人/agent)如何组织一次工作会话
6
+ - **Runtime workflows**:`src/workflows/` 下代码实际执行的内容
7
+
8
+ ## 默认会话协议
9
+
10
+ 1. **Orient**:读 `README.md`、`harness.json` 与本 docs 索引
11
+ 2. **Select**:选一个有限边界的工作块
12
+ 3. **Contract**:写明交付物、非目标、完成标准、验证命令、失败条件
13
+ 4. **Implement**:做最小连贯变更,同步更新必要文档、脚本与测试
14
+ 5. **Verify**:按 `verification-matrix.md` 跑命令;完成声明用新鲜输出
15
+ 6. **Handoff**:在 `ai_workspace/loop-agent/progress/`、`ai_workspace/loop-agent/reports/`、exec plan 或 ADR 中记录证据
16
+
17
+ ## Orient
18
+
19
+ 先理解当前系统,不要默认「没有」:
20
+
21
+ - 读 `harness.json` 列出的仓库入口
22
+ - 查 `git status --short --branch` 与最近提交
23
+ - 新增结构前搜索现有源码、测试、脚本、文档与模板
24
+ - 任务依赖健康基线时跑最小基线检查
25
+ - 涉及 TDD、完成声明或调试时读方法论文档
26
+
27
+ 基线已坏时,记录失败命令,并决定当前块是修基线还是在明确范围内接受已知失败。
28
+
29
+ ## Select
30
+
31
+ 工作块要窄到可验证。避免无关重构、功能与文档迁移混在一起。
32
+
33
+ 选中的块应有:
34
+
35
+ - 单一用户可见或维护者可见结果
36
+ - 委托写工作时显式 allowed paths
37
+ - 已知非目标
38
+ - 能证明结果的验证命令
39
+
40
+ ## Contract
41
+
42
+ 非平凡工作应在实现前写或更新 execution plan、sprint contract、progress log 或 issue 级笔记。Contract 应包含:
43
+
44
+ - 交付物
45
+ - 非目标
46
+ - 验收标准
47
+ - 验证命令
48
+ - 失败条件
49
+ - 预期更新的 artifacts
50
+
51
+ Bug 修复的 contract 应含复现路径,以及证明修复的回归测试或 smoke check。
52
+
53
+ ## Implement
54
+
55
+ 做满足 contract 的最小连贯变更。
56
+
57
+ - 优先现有 helper 与目录边界
58
+ - 行为变更更新测试
59
+ - 工作流或命令变更更新文档与示例
60
+ - 治理变更更新 `harness.json`、检查脚本或模板
61
+ - 不把占位实现当作已完成
62
+ - 重复约束出现时固化为持久产物
63
+
64
+ ## Verify
65
+
66
+ 验证是完成权威。
67
+
68
+ - 用 `ai_workspace/loop-agent/verification-matrix.md` 选最窄的证明命令
69
+ - 完整重跑命令
70
+ - 读 exit code 与输出
71
+ - 修失败或报告确切失败状态
72
+ - 不用陈旧输出或部分检查声明完成
73
+
74
+ ## Agent DAG First
75
+
76
+ 复杂实现优先 DAG 工作流:
77
+
78
+ ```bash
79
+ loop-agent new-task <task-id> "Task title"
80
+ loop-agent dag run-task <task-id> --profile auto --strict-models --output <temp-dir>/<task-id>-dag.json
81
+ loop-agent dag validate --dag <temp-dir>/<task-id>-dag.json --strict-models --strict-governance
82
+ loop-agent run-dag --dag <temp-dir>/<task-id>-dag.json --cwd .
83
+ ```
84
+
85
+ `<temp-dir>` 为平台原生临时目录。macOS/Windows 上实际文件操作用原生路径;`/` 仅用于稳定 repo 引用、JSON/Markdown 证据引用和 glob 约定。
86
+
87
+ ## 业务模板(taskKind)与治理 Profile
88
+
89
+ 这两层要分开:
90
+
91
+ | 层 | 入口 | 作用 | 合法取值 |
92
+ |----|------|------|----------|
93
+ | 业务模板 | `task.json.taskKind` | 选专用 DAG 节点链 | `standard` / `frontend-implementation` / `frontend-test` / `backend-test` / `knowledge-sync` / `knowledge-graph-bootstrap` 等 |
94
+ | 治理 profile | `dag run-task --profile` | 风险与流程强度 | **仅** `auto` / `minimal` / `standard` / `reviewed` / `supervised` |
95
+
96
+ 专用业务流水线**不要**写成 `--profile frontend-test` / `--profile backend-test` / `--profile knowledge-sync` / `--profile knowledge-graph-bootstrap`:CLI 会拒绝这些值。正确做法是写 `task.json.taskKind`(`knowledge-sync` 还须 `featureId`)。
97
+
98
+ | 用户描述关键词 | 正确入口 | 模板 |
99
+ |--------------|----------|------|
100
+ | 后端测试、接口测试、pytest 自动化 | `taskKind: "backend-test"` | backend-test-dag |
101
+ | 前端功能测试、浏览器测试、Playwright CLI | `taskKind: "frontend-test"` | frontend-test-dag |
102
+ | 前端实现、UI/组件开发 | `taskKind: "frontend-implementation"`(或 standard 下高置信自动分类) | frontend-implementation |
103
+ | 测试知识回写 / 知识同步 | `taskKind: "knowledge-sync"` + `featureId` | knowledge-sync-dag |
104
+ | 业务知识图谱开荒 / 增量 | `taskKind: "knowledge-graph-bootstrap"` | knowledge-graph-bootstrap-dag |
105
+ | 普通实现、修复、功能 | `taskKind: "standard"` + `--profile auto`(默认) | 由 governance / 任务源分类推断 |
106
+
107
+ **后端测试示例:**
108
+
109
+ ```bash
110
+ loop-agent new-task <task-id> "后端测试任务"
111
+ # 将需求文档放入 .harness/tasks/<task-id>/source/需求.md
112
+ # 将参考文档放入 .harness/tasks/<task-id>/source/references/
113
+ # 在 .harness/tasks/<task-id>/task.json 设置:
114
+ # { "taskKind": "backend-test", ... }
115
+ loop-agent dag run-task <task-id> --execute --cwd .
116
+ # 需要收紧治理时再叠加合法 profile,例如:
117
+ # loop-agent dag run-task <task-id> --profile supervised --execute --cwd .
118
+ ```
119
+
120
+ 这不是线性 OS-CIVH runtime 状态机。代码里 DAG 有三个命令阶段:
121
+
122
+ 1. `dag run-task` 加载 `.harness/tasks/<task-id>/source/需求.md`、可选 `执行约束.md`、`task.json` 与 adapter 验证命令,写出 DAG spec
123
+ 2. `dag validate` 校验 schema、依赖、governance profile、写边界、model routing、shell 验证元数据
124
+ 3. `run-dag` 加载 DAG、按拓扑排序为 ranks、有界并发执行可运行节点、持久化到 `.harness/dag-runs/<lifecycle>/<run-id>/`,并转入 `completed` 或 `paused`
125
+
126
+ 标准生成的 hybrid DAG 固定为 Pi-only writer:
127
+
128
+ ```text
129
+ contract-pi
130
+ -> scout-src + scout-tests
131
+ -> plan-pi
132
+ -> implement-pi
133
+ -> verify-shell
134
+ -> verify-pi
135
+ -> closeout-pi
136
+ ```
137
+
138
+ `implement-pi` / `repair-pi` 使用 `executor: "pi"` 与 `toolProfile: "write"`。受治理 runtime 不再生成或接受 `implement-cursor` / `repair-cursor`;旧 Cursor DAG 会在 schema 校验阶段失败,需要重新生成。
139
+
140
+ 专用模板选择与 governance profile 是两层独立路由。显式声明的专用 `taskKind` 始终优先;对于默认 `standard` 任务,生成器会根据任务标题、`source/需求.md` 和结构化 `allowedPaths` 做保守、确定性的需求分类。只有高置信的前端实现需求才自动选择 `frontend-implementation` 模板;由显式 profile、`workflowPolicy` 或 supervised quality gate 选中的 supervised 模板不会被自动分类降级。后端、前后端混合、明确排除前端或无法可靠判断的需求继续使用 governance profile 选出的通用模板,绝不会自动进入 `backend-test-dag`。已有 `taskKind: "frontend-implementation"` 继续作为兼容入口和有意覆盖:
141
+
142
+ ```text
143
+ frontend-contract-pi
144
+ -> frontend-scout-pi
145
+ -> frontend-mock-assess-pi
146
+ -> frontend-mock-contract-gate-shell
147
+ -> frontend-plan-pi
148
+ -> [frontend-design-gate-pi -> frontend-first-design-gate-shell -> frontend-plan-revision-pi] # small risk 可裁剪
149
+ -> [frontend-requirement-coverage-shell]
150
+ -> frontend-implementation-contract-shell
151
+ -> frontend-final-design-review-pi
152
+ -> frontend-final-design-gate-shell
153
+ -> frontend-implement-pi
154
+ -> [frontend-mock-verify-shell]
155
+ -> frontend-static-verify-shell
156
+ -> frontend-behavior-verify-shell
157
+ -> frontend-verification-trace-shell
158
+ -> frontend-failure-assess-shell
159
+ -> frontend-repair-contract-shell
160
+ -> frontend-repair-pi
161
+ -> frontend-static-reverify-shell
162
+ -> frontend-behavior-reverify-shell
163
+ -> frontend-verification-retrace-shell
164
+ -> frontend-review-pi
165
+ -> frontend-review-gate-shell
166
+ -> frontend-closeout-pi
167
+ ```
168
+
169
+ `frontend-mock-assess-pi` contract/scout 之后、plan 之前的只读策略节点。它先确认接口契约与后端就绪度,再按项目能力选择已有原生 Mock、浏览器拦截、请求适配层或 `not-needed`。static/behavior shell 命令在 DAG 生成时已固化,策略只能选择能由这些入口验证的方案;缺少契约、无法保证生产默认关闭、所选策略没有可执行验证或只能靠注释真实请求时输出 `MOCK_STRATEGY: blocked`。`not-needed` 仍需真实或无远程接口的行为证据。Mock 代码由唯一 writer `frontend-implement-pi` 按已批准计划实现,不增加第二个 writer。
170
+
171
+ 前端链在计划前显示 Mock/API/schema 读取、生成期能力 seed、五态策略和 contract gate。可在 `task.json.frontendMock` 设置 `policy: auto|required|disabled`、安全的 `serviceRoot` 和生成时固化的专项 `verifyCommands`。已有原生服务时优先复用;没有原生能力时可使用现有浏览器拦截或可逆 request adapter。不安全或不完整的显式 required 合同只生成无 writer 的评估 DAG;有可信专项命令时实现后先运行 `frontend-mock-verify-shell`,再进入静态和行为验证。规范读取证据继续显示在 Observe 节点详情中。
172
+
173
+ 新生成 DAG 还会冻结 `sourceBinding`(任务源路径、SHA-256 与显式 `REQ/BR/AC` 编号)。前端任务存在显式编号时,`frontend-requirement-coverage-shell` 只检查 `frontend-plan-revision-pi` 输出的当前生效计划证据,缺少任一编号就阻断最终 design review 和 writer;即使首轮 design review 直接通过,revision 节点也必须复述完整 Requirement Coverage,避免从已被取代的原计划借用编号。DAG 中断后应修复 task source 并重新生成完整 DAG;不要用聊天摘要拼接 impl-only 后半段。严格治理会拒绝没有 `sourceBinding`、也没有只读 planner 上游的 v3 孤立 writer。
174
+
175
+ 这条链在实现前加入两阶段 design gate:首轮 design review 同时接受 `VERDICT: pass` 和 `VERDICT: request-revision`,request-revision 时由只读 `frontend-plan-revision-pi` 消费原计划与 design findings 完成修订,再经 `frontend-final-design-review-pi` 和 `frontend-final-design-gate-shell` 最终门禁;只有最终 `VERDICT: pass` 才授权写入。`MOCK_STRATEGY: blocked`、真实请求被注释、生产默认启用 Mock 或 Mock 与接口契约不一致都不得通过。design gate 失败路由为 `ContractMismatch` / `frontend-plan-revision-and-rerun`,不路由为 `ProductBug` / `dev-fix`。
176
+
177
+ 这条链还将前端静态验证与行为验证分开建模,并在 verify 后增加 verification-trace 与单轮 bounded repair(失败可评估/修复/复验;contract/path/依赖/凭据等不可自动修)。Mock-backed 行为验证只证明页面状态和交互,不证明真实后端已就绪或接口已联通。后端未被实际调用时,closeout 必须写明 `Frontend status: mock-validated`、`Real integration: pending`,并列出 `<task-id>-real-api-integration-verify`。该 follow-up 不会自动创建或运行;后端就绪后需要显式创建/执行新的复验任务。生成期会注入确定性风险分级与 React/Next/Vue 等强证据 capability;a11y 仅在项目已有 lint/axe 类工具时声明 static/component 级证据。当前仍不包含浏览器自动化、视觉回归或 browser-level a11y executor。
178
+
179
+ 后端测试任务只有在显式声明 `task.json.taskKind = "backend-test"` 时才选择专用模板;它面向测试工程,不是普通后端实现模式,也不新增 governance profile:
180
+
181
+ ```text
182
+ analyze-inputs-pi
183
+ -> backend-test-analysis-contract-shell
184
+ -> backend-test-environment-scout-pi
185
+ -> backend-test-execution-contract-shell
186
+ -> generate-backend-functional-cases-pi
187
+ -> emit-backend-case-manifest-pi
188
+ -> backend-test-case-manifest-shell
189
+ -> review-backend-cases-pi
190
+ -> review-backend-cases-gate-shell
191
+ -> generate-backend-pytest-pi
192
+ -> backend-test-traceability-gate-shell
193
+ -> execute-backend-pytest-shell
194
+ -> parse-backend-test-result-shell
195
+ -> classify-backend-test-result-pi
196
+ -> test-retrospect-pi
197
+ -> backend-test-outcome-gate-shell
198
+ ```
199
+
200
+ 这条链覆盖后端功能测试从需求分析到复盘评级的全链路流程:
201
+
202
+ - `analyze-inputs-pi`:只读输出严格的 Backend Test Analysis v1 JSON;`backend-test-analysis-contract-shell` 确定性校验 source binding、AC IDs、schema 与敏感值,并把规范化结果写入当前 run 的 `contracts/backend-test-analysis.json`。gate 节点记录 artifact path / SHA-256 / schema ID,随 lifecycle 目录整体迁移;非法或来源不一致时 fail-closed,后续 case/pytest writers 不执行。
203
+ - `backend-test-environment-scout-pi`(read-only):发现 pytest 配置、test roots、已有 fixture/client、文档化命令与 env *名称*(禁止全仓搜 secrets);输出 Backend Test Execution Contract v1 纯 JSON。
204
+ - `backend-test-execution-contract-shell`:`jsonArtifactGate.schemaId=backend-test-execution-v1`,校验并 materialize 当前 run 的 `contracts/backend-test-execution.json`;unknown schemaId / path traversal / secret 值 fail-closed。
205
+ - `emit-backend-case-manifest-pi`(read-only):从 `testcase/md/**` + 已验证 analysis 产出 Backend Test Case Manifest v1 纯 JSON(模型不写 `.harness/**`)。
206
+ - `backend-test-case-manifest-shell`:`jsonArtifactGate.schemaId=backend-test-case-manifest-v1` → `contracts/backend-test-case-manifest.json`;caseId 唯一/格式、显式 AC 覆盖或 evidenceGaps、未知 AC、skipped 无 gapReason fail-closed;`coverageSummary` 由 gate 确定性计算/核对。
207
+ - `backend-test-traceability-gate-shell`:pytest 生成后、execute 前校验 `generated` 的 file/symbol 存在;skipped/unsupported 必须有 gapReason。
208
+ - `generate-backend-functional-cases-pi`:在 execution gate 之后,只消费已验证 analysis/execution 证据,按契约字段生成结构化后端功能测试用例(Markdown),用例 ID 带 `BE-` 前缀(如 `BE-ORDER-001`),写入 `testcase/md/`
209
+ - `review-backend-cases-pi`:评审后端功能测试用例,输出审查报告 + `VERDICT: pass` / `VERDICT: request-revision`
210
+ - `review-backend-cases-gate-shell`:只有评审首条 verdict 为 `VERDICT: pass` 时才允许继续生成 pytest;`request-revision` 或其它结果 **fail-closed 即停**,**不会**自动回到 generate 节点修订(本模板不启用 convergence;修好用例或约束后重新 `dag run-task`)
211
+ - `generate-backend-pytest-pi`:依赖 review gate **与** execution contract,将功能用例转化为 pytest;可写 `testcase/**/test_*.py` 与可选 `helpers/**`/`factories/**`;只使用已验证 fixture/env name/`testRoot`/API 字段;禁止改 conftest/配置与生产代码
212
+ - `execute-backend-pytest-shell`:先对 `contracts/backend-test-execution.json` 做确定性 preflight(framework、`testRoot` 存在且与生成期冻结的 Adapter 路径一致、required env、external base URL env;`managed-command` 无 sourceRef 证据 fail-closed),再执行 `pytest testcase/`;JUnit 写入 `$HARNESS_DAG_RUN_DIR/reports/backend-test-junit.xml`,原始 `pytestExitCode` 写入 `reports/backend-test-pytest-exit.txt`。当 JUnit 非空且 exit 为 0/1 时节点 FINISHED(断言失败不跳过下游);禁止改测试源码或生产代码
213
+ - `parse-backend-test-result-shell`:确定性 materialize Backend Test Result v1 → `contracts/backend-test-result.json`(损坏/缺失 JUnit fail-closed)
214
+ - `classify-backend-test-result-pi`:read-only 结构化分类(ProductBug|TestBug|EnvFailure|ContractMismatch|FlakyTest|Unknown);单次失败不得 FlakyTest;collection/command/report-error 不得 ProductBug
215
+ - `test-retrospect-pi`:在 pass 与 assertion-fail 路径均运行;通过率与失败列表只来自 Result v1;不得把失败改写成通过
216
+ - `backend-test-outcome-gate-shell`:仅以 Result v1 `outcome`/counts 收口;全绿 exit 0,否则非零;忽略 retrospective Markdown
217
+
218
+ 最终验证后的知识库回写可通过 `task.json.taskKind = "knowledge-sync"` 选择专用模板(与 `backend-test` 一样走 taskKind 路由,不占用 governance `--profile`)。
219
+
220
+ **必须绑定 `featureId`**(fail-closed)。解析顺序:`task.json.featureId` → `hardConstraints` 中 `featureId=F-…` → 需求正文中的 `F-YYYY-NNN` `taskId` 本身是 `F-*`。生成器会把 writeSet 收窄到 `features/<featureId>/…`,validate 只检查该 Feature 下的 draft。
221
+
222
+ ```json
223
+ {
224
+ "taskKind": "knowledge-sync",
225
+ "featureId": "F-2026-004"
226
+ }
227
+ ```
228
+
229
+ ```text
230
+ knowledge-sync-collect-pi
231
+ -> knowledge-sync-draft-pi
232
+ -> knowledge-sync-validate-shell
233
+ -> knowledge-sync-review-qa-pi
234
+ -> knowledge-sync-review-domain-pi # parallel with qa/evidence
235
+ -> knowledge-sync-review-evidence-pi
236
+ -> knowledge-sync-multi-review-gate-shell # all VERDICT: pass
237
+ -> knowledge-sync-apply-pi
238
+ -> knowledge-sync-pointer-pi
239
+ ```
240
+
241
+ 这条链在 shell 最终验证证据之后,把稳定事实写入 Feature 测试知识库(L1),而不是把 `.harness` 大日志搬进 docs:
242
+
243
+ 1. **knowledge-sync-collect-pi**:只读汇总 final verification / AC / 用例 / 缺陷 / 需求 delta 候选
244
+ 2. **knowledge-sync-draft-pi**:写入 `features/<featureId>/testing/sync/pending/knowledge-sync-draft.json`
245
+ 3. **knowledge-sync-validate-shell**:校验该路径 draft 的 schema、`featureId` 一致、operations 目标路径、finalVerification 门禁
246
+ 4. **多视角审查(并行)**:QA/验收、领域/产品、证据/审计 三个只读 reviewer;聚合门禁要求全部 `VERDICT: pass`
247
+ 5. **knowledge-sync-apply-pi**:仅在 `features/<featureId>/testing/**`(及该 Feature `requirement-delta.md`、`ai_workspace/loop-agent/test-reports/**`)受控回写
248
+ 6. **knowledge-sync-pointer-pi**:写 `features/<featureId>/testing/runs/latest.md` 与 `sync/applied/KS-*.json`
249
+
250
+ 设计说明见 `ai_workspace/loop-agent/design/full-chain-test-knowledge-base.md` §11;JSON 示例见 `ai_workspace/loop-agent/templates/knowledge-sync-dag.json`。
251
+
252
+ 业务知识图谱**初始化**可通过 `task.json.taskKind = "knowledge-graph-bootstrap"` 选择专用模板。跑前先落 B1 骨架:
253
+
254
+ ```bash
255
+ loop-agent knowledge graph-init --product-name <name>
256
+ # 编辑 knowledge/bootstrap/scope.yaml 后再 run-task
257
+ ```
258
+
259
+ (需有 `knowledge/bootstrap/scope.yaml` 与 `status.yaml`;`graph-init` 幂等,默认不覆盖已有 scope/status,可用 `--force`。)
260
+
261
+ 图谱索引与 Phase A 查询(package-backed CLI,非 RAG):
262
+
263
+ ```bash
264
+ loop-agent knowledge graph-materialize
265
+ loop-agent knowledge query --mode by_feature --feature F-2026-004 --json
266
+ loop-agent knowledge query --mode by_id --id SVC-order --json
267
+ loop-agent knowledge query --mode search --text "预占" --json
268
+ ```
269
+
270
+ **增量更新(非全量开荒)**:缩小 scope 后复用同一 `knowledge-graph-bootstrap` DAG(propose 仅针对 seeds/includes;promote 仍默认不覆盖已有正式文件):
271
+
272
+ ```bash
273
+ loop-agent knowledge graph-incremental-prepare --feature F-2026-004 --service order
274
+ # 可选:--reset-staging
275
+ # 审阅 knowledge/bootstrap/scope.yaml(update_mode: incremental)
276
+ # task.json.taskKind = "knowledge-graph-bootstrap"
277
+ loop-agent dag run-task <id>
278
+ # 如需手工晋升已审阅的 staging,再按顺序执行:
279
+ loop-agent knowledge graph-promote
280
+ loop-agent knowledge graph-materialize
281
+ ```
282
+
283
+ 测试知识日常写回仍用 `knowledge-sync`(`featureId` 必填),与图谱增量入口分离。
284
+
285
+ ```text
286
+ kg-bootstrap-preflight-shell
287
+ -> kg-bootstrap-inventory-shell
288
+ -> kg-bootstrap-propose-pi
289
+ -> kg-bootstrap-validate-shell
290
+ -> kg-bootstrap-review-structure-pi
291
+ -> kg-bootstrap-review-evidence-pi # parallel with structure/safety
292
+ -> kg-bootstrap-review-safety-pi
293
+ -> kg-bootstrap-multi-review-gate-shell # all VERDICT: pass
294
+ -> kg-bootstrap-promote-shell
295
+ -> kg-bootstrap-materialize-shell
296
+ ```
297
+
298
+ AI 只写 `knowledge/bootstrap/staging/**`;禁止 self-`asserted`;**结构 / 证据 / 边界安全** 三视角审查全部通过后才 promote(默认不覆盖已有正式文件);materialize `knowledge/graph/` 索引。设计见 `ai_workspace/loop-agent/design/knowledge-graph-ai-bootstrap.md`,示意 JSON `ai_workspace/loop-agent/templates/knowledge-graph-bootstrap-dag.json`。
299
+
300
+ 前端测试模板(`frontend-test-dag`)后续沿用对称命名即可接入。
301
+ 前端 shell 验证优先使用任务源 `需求.md` / `执行约束.md` 中声明的前端验证命令,例如 `npm run typecheck`、`npm run build`、`npm test`;解析不到时再使用 adapter 验证命令和模板 fallback。
302
+
303
+ `verify-shell` 使用 adapter 根据 task verify preset/quota 解析出的最终验证命令,并把新鲜 exit code/stdout/stderr 交给后续只读 verifier。review-gated 模板继续插入:
304
+
305
+ ```text
306
+ verify-shell -> verify-pi -> review-pi -> review-gate-shell -> closeout-pi
307
+ ```
308
+
309
+ supervised 模板在实现路径上增加 write-set audit、有界计划修订、只读 verdict 格式恢复、soft/hard shell 验证、process supervision、有界 repair、decision gates 与可选 convergence retry。初审 `request-revision` 不再直接终止:只读 `plan-revision-pi` 最多修订一轮,再由终审和 pass-only gate 决定是否授权 writer。初审与终审遗漏 `VERDICT:` 时各允许一个只读格式修复节点;格式结论不明确时必须转为 `request-revision`,shell gate 不会从正文猜测 pass。
310
+
311
+ ### 只读 Pi 节点安全重试
312
+
313
+ 所有生成模板都会为安全的只读 Pi 节点(planner/scout/reviewer/verifier/closeout,且 `writePolicy=read-only|none`、非 writer、非 dynamic、非 decision-gate)自动声明默认 `retryPolicy`(总尝试 3 次,手工配置最多 5 次,指数退避,单次等待上限 30s)。supervisor 与 implementer 明确不在资格范围。仅重试 `timeout`、`network`、`rate-limit`、`unavailable`;`quota`、`auth`、`invalid-output`、`write-guard` 与未知失败不重试。每次 attempt 保留独立证据,详见 [ai_workspace/loop-agent/agent-dag-runner.md](./agent-dag-runner.md#retry-read-only-pi-nodes)。
314
+
315
+ ### 可选 repo-local SDD skill 增强
316
+
317
+ `dag run-task` 会在目标项目的 `.agents/skills/` 中探测三个可选 skill:
318
+
319
+ - `SDD-requirement-analysis` `contract-pi`
320
+ - `SDD-design-analysis` → `plan-pi`
321
+ - `SDD-implementation-test-review` → `implement-pi`、`repair-pi`、`verify-pi`、`review-pi`
322
+
323
+ 命中时,skill 通过节点 `skills` 进入现有 resolved instruction 和 run-owned snapshot 链路,并在节点任务中收到 embedded-mode 约束:只为当前 DAG 阶段提供知识、规范与方法,不得更新 `working_requirements_status.md`、推进 SDD 状态、触发 SDD 用户确认或执行归档。节点的读写边界、当前阶段与输出契约优先;writer 仍只允许写入显式 `writeSet`。`SDD-code-spec-init` 与 `SDD-project-how-to-spec-init` 不会在普通功能 DAG 中自动运行。
324
+
325
+ 探测不到这些 repo-local skills 时,DAG 不追加节点 skill 或约束块,保持当前默认流程。用户级或 npm 包内同名 skill 也不会作为自动启用信号。
326
+
327
+ 源码参考:
328
+
329
+ - `src/commands/dag-run-task.ts`
330
+ - `src/commands/dag-validate.ts`
331
+ - `src/commands/run-dag.ts`
332
+ - `src/workflows/dag/init-hybrid.ts`
333
+ - `src/workflows/dag/sdd-embedded.ts`
334
+ - `src/workflows/dag/runner.ts`
335
+
336
+ 监督 agent 仍负责:
337
+
338
+ - contract
339
+ - 限定 allowed/forbidden paths
340
+ - 审查 DAG/writeSet 范围
341
+ - 选择验证命令
342
+ - 记录 handoff 证据
343
+
344
+ 声称 Production Readiness v0.1 的低/中风险单仓库任务,另须遵循 `ai_workspace/loop-agent/production-readiness.md` `ai_workspace/loop-agent/templates/production-readiness-checklist.md`。该标准冻结支持范围、非目标、必需 DAG 证据、failure routing 字段与最终验证门禁。
345
+
346
+ ## Exec-plan 生命周期
347
+
348
+ exec-plan 不是手工文档;它有确定性 CLI 生命周期,并与 `dag run-task` 共享同一索引校验源。
349
+
350
+ ```bash
351
+ loop-agent plan create <plan-id> "<title>"
352
+ loop-agent plan complete <plan-id> --summary "<summary>"
353
+ loop-agent plan check
354
+ ```
355
+
356
+ - `new-task` 不自动绑定 exec-plan;微小任务仍可不创建计划。
357
+ - `plan create` 优先读取目标项目 `<governanceRoot>/templates/exec-plan.md`,不存在时回退到发布包内置模板;create/complete 同步 active/completed 索引,拒绝重复 id、路径穿越与不安全文件名,多文件操作均具备回滚保护。
358
+ - `dag run-task` 在生成 DAG 草稿前运行 `plan check` 同源校验,索引漂移立即失败;空仓库与索引一致的仓库不受影响。
359
+ - `plan list`(只读)与 `docs archive`(兼容入口)保留;`scripts/check-exec-plan-index-sync.sh` 仍作为独立最终防线。
360
+
361
+ ## 已移除的顺序工作流
362
+
363
+ 历史 Level 1 顺序 command surface 已从公开工作流移除。新工作不要用 `loop-agent run analyze|plan|spec|implement|verify|retrospective|auto|loop|continue|study`。
364
+
365
+ 改用 DAG 路径:
366
+
367
+ ```bash
368
+ loop-agent new-task <task-id> "Task title"
369
+ loop-agent dag run-task <task-id> --profile auto --strict-models --output <temp-dir>/<task-id>-dag.json
370
+ loop-agent dag validate --dag <temp-dir>/<task-id>-dag.json --strict-models --strict-governance
371
+ loop-agent run-dag --dag <temp-dir>/<task-id>-dag.json --cwd .
372
+ ```
373
+
374
+ 遗留 `.harness/tasks/<task-id>/.workflow_state.json` 在 task status 完全迁移到 DAG 导向读模型前仍可读,但不是新任务完成的权威。
375
+
376
+ ## Outer Loop Runtime
377
+
378
+ `loop` 命令是长跑任务控制层,与会话治理协议不是一回事。它记录 rounds 与 signals,可跑 shell 验证、Pi review 或 DAG action(review/execute),并选择下一自动 action。自动写入只能通过受治理 Pi-only Agent DAG execute;`loopAutoExecutionPolicy` 控制是否允许自动执行,旧 `loopAutoWritePolicy` 会 fail-fast。
379
+
380
+ 支持的 loop actions:
381
+
382
+ - `shell-verify`
383
+ - `pi-review`
384
+ - `dag`
385
+ - `record-round`
386
+ - `add-signal`
387
+ - `closeout`
388
+
389
+ 源码参考:
390
+
391
+ - `src/commands/loop.ts`
392
+ - `src/workflows/loop/actions.ts`
393
+ - `src/workflows/loop/state.ts`
394
+ - `src/workflows/loop/rounds.ts`
395
+
396
+ ## 调试与 TDD
397
+
398
+ 任务需要时使用方法论文档:
399
+
400
+ - 行为变更与 bug 修复:`ai_workspace/loop-agent/harness-methodology-tdd.md`
401
+ - 完成或 handoff 声明:`ai_workspace/loop-agent/harness-methodology-verification.md`
402
+ - 失败与意外行为:`ai_workspace/loop-agent/harness-methodology-debugging.md`
403
+
404
+ ## Handoff
405
+
406
+ Handoff 应说明:
407
+
408
+ - 改了什么
409
+ - 有意未做什么
410
+ - 跑了哪些验证命令
411
+ - 是否影响契约、文档、测试或脚本
412
+ - 剩余风险或后续工作
413
+
414
+ 较大工作应更新 `ai_workspace/loop-agent/progress/`、`ai_workspace/loop-agent/reports/`、active exec plan 或 `ai_workspace/loop-agent/decisions/`,以便下一会话不依赖聊天历史。