@tea-agent/loop-agent 0.10.0 → 0.12.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 (207) hide show
  1. package/AGENTS.md +10 -2
  2. package/CHANGELOG.md +91 -24
  3. package/README.md +84 -12
  4. package/dist/application/dag/args.js +1 -12
  5. package/dist/application/dag/generate-task-dag.js +38 -2
  6. package/dist/application/dag/run-dag.js +11 -27
  7. package/dist/application/dag/validate-dag.js +13 -2
  8. package/dist/application/loop/run-action.js +0 -4
  9. package/dist/cli/command-definitions.js +44 -16
  10. package/dist/cli/program.js +40 -23
  11. package/dist/cli/update/notifier.js +117 -0
  12. package/dist/cli/update/npm-client.js +151 -0
  13. package/dist/cli/update/policy.js +58 -0
  14. package/dist/cli/update/state.js +68 -0
  15. package/dist/cli.js +33 -0
  16. package/dist/commands/cursor-prompt.js +42 -82
  17. package/dist/commands/dag-approve.js +36 -0
  18. package/dist/commands/delegate.js +75 -77
  19. package/dist/commands/doctor.js +0 -18
  20. package/dist/commands/init.js +547 -95
  21. package/dist/commands/instructions.js +7 -10
  22. package/dist/commands/loop.js +4 -20
  23. package/dist/commands/plan.js +50 -0
  24. package/dist/executors/config-core.js +0 -51
  25. package/dist/executors/dag-pi-executor.js +1 -1
  26. package/dist/executors/dag.js +0 -1
  27. package/dist/executors/index.js +0 -2
  28. package/dist/executors/model-routing.js +9 -9
  29. package/dist/executors/shell-executor.js +1 -1
  30. package/dist/governance/checks.js +6 -3
  31. package/dist/governance/exec-plans.js +545 -0
  32. package/dist/governance/manifest-types.js +24 -2
  33. package/dist/infrastructure/harness/loop-action-store.js +0 -3
  34. package/dist/records/harvest.js +2 -23
  35. package/dist/records/one-shot-runs.js +1 -1
  36. package/dist/shared/artifacts-core.js +24 -5
  37. package/dist/shared/output-truncation.js +37 -0
  38. package/dist/shared/package-metadata.js +488 -0
  39. package/dist/{executors/cursor-executor.js → sidecars/cursor-prompt/executor.js} +2 -42
  40. package/dist/sidecars/cursor-prompt/index.js +3 -0
  41. package/dist/sidecars/cursor-prompt/stream.js +121 -0
  42. package/dist/task/config-types.js +29 -12
  43. package/dist/task/delegate.js +9 -21
  44. package/dist/task/runtime.js +1 -2
  45. package/dist/worker/cli.js +32 -3
  46. package/dist/worker/delivery/final-verification.js +47 -11
  47. package/dist/worker/delivery/package.js +63 -10
  48. package/dist/worker/feature/run.js +60 -8
  49. package/dist/worker/loop-agent/loop-agent-client.js +329 -126
  50. package/dist/worker/observability/event-history.js +216 -0
  51. package/dist/worker/observability/read-model.js +338 -83
  52. package/dist/worker/observe/paths.js +17 -0
  53. package/dist/worker/observe/routes.js +165 -21
  54. package/dist/worker/observe/server.js +59 -1
  55. package/dist/worker/observe/static/api.js +27 -0
  56. package/dist/worker/observe/static/app.js +120 -2317
  57. package/dist/worker/observe/static/constants.js +148 -0
  58. package/dist/worker/observe/static/copy.js +67 -0
  59. package/dist/worker/observe/static/dag-helpers.js +172 -0
  60. package/dist/worker/observe/static/dag-model.js +72 -0
  61. package/dist/worker/observe/static/dom.js +61 -0
  62. package/dist/worker/observe/static/format-pool.js +67 -0
  63. package/dist/worker/observe/static/format.js +292 -0
  64. package/dist/worker/observe/static/index.html +300 -82
  65. package/dist/worker/observe/static/kpi.js +94 -0
  66. package/dist/worker/observe/static/relations.js +128 -0
  67. package/dist/worker/observe/static/router.js +85 -0
  68. package/dist/worker/observe/static/run-processing.js +148 -0
  69. package/dist/worker/observe/static/shell-chrome.js +68 -0
  70. package/dist/worker/observe/static/state.js +253 -0
  71. package/dist/worker/observe/static/styles.css +1720 -495
  72. package/dist/worker/observe/static/views/batch.js +226 -0
  73. package/dist/worker/observe/static/views/dag-graph.js +172 -0
  74. package/dist/worker/observe/static/views/dag-inspector.js +477 -0
  75. package/dist/worker/observe/static/views/dag.js +362 -0
  76. package/dist/worker/observe/static/views/dashboard.js +442 -0
  77. package/dist/worker/observe/static/views/failures.js +143 -0
  78. package/dist/worker/observe/static/views/feature.js +453 -0
  79. package/dist/worker/observe/static/views/pool.js +347 -0
  80. package/dist/worker/observe/static/views/run.js +453 -0
  81. package/dist/worker/observe/static/views/session-timeline.js +205 -0
  82. package/dist/worker/observe/static/views/shell.js +7 -0
  83. package/dist/worker/observe/static/views/task.js +260 -0
  84. package/dist/worker/observe/static/views/timeline.js +163 -0
  85. package/dist/worker/preflight.js +49 -1
  86. package/dist/worker/run-task/run-task.js +22 -12
  87. package/dist/worker/runner/run-ready.js +76 -12
  88. package/dist/worker/task-spec/schema.js +0 -1
  89. package/dist/workflows/dag/controller-identity.js +104 -0
  90. package/dist/workflows/dag/convergence/controller.js +1 -1
  91. package/dist/workflows/dag/executor-registry.js +0 -2
  92. package/dist/workflows/dag/init-hybrid.js +797 -27
  93. package/dist/workflows/dag/node-execution.js +183 -35
  94. package/dist/workflows/dag/repair-artifact.js +91 -0
  95. package/dist/workflows/dag/report.js +50 -0
  96. package/dist/workflows/dag/retry-policy.js +138 -0
  97. package/dist/workflows/dag/runner.js +77 -17
  98. package/dist/workflows/dag/runtime-contract.js +87 -0
  99. package/dist/workflows/dag/scheduler.js +7 -2
  100. package/dist/workflows/dag/sdd-embedded.js +128 -0
  101. package/dist/workflows/dag/skill-instructions.js +5 -4
  102. package/dist/workflows/dag/skill-snapshot.js +529 -0
  103. package/dist/workflows/dag/types.js +86 -10
  104. package/dist/workflows/dag/validate.js +73 -12
  105. package/dist/workflows/loop/actions/dag-action.js +0 -2
  106. package/dist/workflows/loop/actions/shared.js +1 -1
  107. package/dist/workflows/loop/actions.js +14 -31
  108. package/dist/workflows/loop/benchmark.js +1 -1
  109. package/dist/workflows/loop/index.js +1 -1
  110. package/dist/workflows/loop/policy/auto-policy.js +22 -14
  111. package/dist/workflows/loop/policy/path-patterns.js +13 -0
  112. package/docs/README.md +36 -33
  113. package/docs/agent-dag-recovery-playbook.md +1 -1
  114. package/docs/agent-dag-runner.md +28 -3
  115. package/docs/architecture/README.md +26 -0
  116. package/docs/architecture/dag-execution.md +140 -0
  117. package/docs/architecture/evolution.md +53 -0
  118. package/docs/architecture/facts-and-state.md +58 -0
  119. package/docs/architecture/runtime-boundaries.md +45 -17
  120. package/docs/architecture/system-overview.md +93 -0
  121. package/docs/architecture/worker-and-feature.md +81 -0
  122. package/docs/cursor-prompt-sidecar.md +36 -0
  123. package/docs/decisions/README.md +13 -1
  124. package/docs/design/README.md +43 -21
  125. package/docs/development-principles.md +2 -2
  126. package/docs/exec-plans/active/README.md +1 -3
  127. package/docs/exec-plans/completed/README.md +23 -0
  128. package/docs/feature-workflow.md +78 -4
  129. package/docs/harness-methodology-debugging.md +1 -1
  130. package/docs/harness-methodology-tdd.md +3 -3
  131. package/docs/init-surface.manifest.json +60 -25
  132. package/docs/loop-agent-harness.md +28 -4
  133. package/docs/progress/README.md +50 -1
  134. package/docs/reports/README.md +90 -18
  135. package/docs/skills/README.md +2 -1
  136. package/docs/skills/vetted-skill-registry.md +2 -1
  137. package/docs/templates/agent-dag-report.schema.json +23 -6
  138. package/docs/templates/agent-dag.base.json +0 -5
  139. package/docs/templates/agent-dag.final-verification.json +0 -5
  140. package/docs/templates/agent-dag.schema.json +70 -3
  141. package/docs/templates/agent-dag.supervised-implementation.json +9 -8
  142. package/docs/templates/backend-test-dag.generate-pytest.prompt.md +139 -0
  143. package/docs/templates/backend-test-dag.json +276 -0
  144. package/docs/templates/backend-test-dag.retrospect.prompt.md +125 -0
  145. package/docs/templates/backend-test-dag.review-cases.prompt.md +81 -0
  146. package/docs/templates/frontend-design-contract.md +33 -0
  147. package/docs/templates/frontend-task-constraints.md +25 -0
  148. package/docs/templates/frontend-task-requirement.md +61 -0
  149. package/docs/templates/harness.schema.json +10 -12
  150. package/docs/templates/hybrid-dag.json +1 -6
  151. package/docs/templates/interactive-ui-round2-experiment.md +1 -1
  152. package/docs/templates/product-line/task.yaml +0 -1
  153. package/docs/templates/project-start-checklist.md +2 -2
  154. package/docs/templates/worker-dogfood-evidence.md +28 -0
  155. package/docs/templates/worker-dogfood-setup.md +20 -0
  156. package/docs/verification-matrix.md +10 -0
  157. package/examples/decision-gate-agent-dag.json +87 -33
  158. package/examples/example-dag.json +0 -5
  159. package/examples/hybrid-loop-agent-dag.json +0 -5
  160. package/harness.json +7 -15
  161. package/package.json +22 -46
  162. package/scripts/check-product-line-docs.sh +10 -7
  163. package/skills/agent-worker/SKILL.md +37 -0
  164. package/skills/agent-worker/references/agent-worker-operator.md +43 -0
  165. package/skills/frontend-design-review/SKILL.md +59 -0
  166. package/skills/frontend-design-review/references/review-checklist.md +37 -0
  167. package/skills/frontend-implementation/SKILL.md +51 -0
  168. package/skills/frontend-implementation/references/code-standards.md +34 -0
  169. package/skills/frontend-implementation/references/design-spec.md +46 -0
  170. package/skills/frontend-implementation/references/node-contracts.md +32 -0
  171. package/skills/frontend-review/SKILL.md +53 -0
  172. package/skills/frontend-review/references/review-findings.md +42 -0
  173. package/skills/frontend-verification/SKILL.md +40 -0
  174. package/skills/frontend-verification/references/verification-checklist.md +56 -0
  175. package/skills/grill-me/SKILL.md +10 -0
  176. package/skills/grill-with-docs/SKILL.md +88 -0
  177. package/skills/grill-with-docs/adr-format.md +47 -0
  178. package/skills/grill-with-docs/context-format.md +60 -0
  179. package/skills/loop-agent/SKILL.md +11 -9
  180. package/skills/loop-agent/references/command-reference.md +14 -15
  181. package/skills/loop-agent/references/docs-converge.md +126 -0
  182. package/skills/loop-agent/references/harness-policy.md +7 -7
  183. package/skills/loop-agent/references/hybrid-dag.md +36 -20
  184. package/skills/loop-agent/references/long-running-loop.md +4 -6
  185. package/skills/loop-agent/references/multi-worktree.md +6 -6
  186. package/skills/loop-agent/references/orchestrator-and-interventions.md +3 -3
  187. package/skills/loop-agent/references/pi-subagent-assisted-mode.md +14 -11
  188. package/skills/loop-agent/references/task-workflow.md +1 -1
  189. package/skills/loop-agent/references/verification-and-failure-handling.md +6 -0
  190. package/skills/using-git-worktrees/SKILL.md +215 -0
  191. package/dist/commands/cursor-worker.js +0 -43
  192. package/dist/cursor-worker-entry.js +0 -8
  193. package/dist/executors/cursor-artifacts.js +0 -33
  194. package/dist/executors/cursor-execution-log.js +0 -81
  195. package/dist/executors/cursor-executor-artifacts.js +0 -134
  196. package/dist/executors/cursor-run.js +0 -115
  197. package/dist/executors/cursor-tool.js +0 -94
  198. package/dist/executors/cursor-worker-client.js +0 -223
  199. package/dist/executors/cursor-worker-protocol.js +0 -18
  200. package/dist/executors/cursor-worker-server.js +0 -54
  201. package/dist/executors/cursor-worker.js +0 -3
  202. package/dist/executors/cursor.js +0 -6
  203. package/dist/executors/dag-cursor-executor.js +0 -87
  204. package/dist/workflows/loop/actions/cursor-fix.js +0 -191
  205. package/dist/workflows/loop/policy/cursor-fix-policy.js +0 -31
  206. package/docs/cursor-executor-usage.md +0 -25
  207. package/docs/dynamic-workflow-dag-engine-roadmap.md +0 -1749
@@ -0,0 +1,60 @@
1
+ # CONTEXT.md Format
2
+
3
+ ## Structure
4
+
5
+ ```md
6
+ # {Context Name}
7
+
8
+ {One or two sentence description of what this context is and why it exists.}
9
+
10
+ ## Language
11
+
12
+ **Order**:
13
+ {A one or two sentence description of the term}
14
+ _Avoid_: Purchase, transaction
15
+
16
+ **Invoice**:
17
+ A request for payment sent to a customer after delivery.
18
+ _Avoid_: Bill, payment request
19
+
20
+ **Customer**:
21
+ A person or organization that places orders.
22
+ _Avoid_: Client, buyer, account
23
+ ```
24
+
25
+ ## Rules
26
+
27
+ - **Be opinionated.** When multiple words exist for the same concept, pick the best one and list the others under `_Avoid_`.
28
+ - **Keep definitions tight.** One or two sentences max. Define what it IS, not what it does.
29
+ - **Only include terms specific to this project's context.** General programming concepts (timeouts, error types, utility patterns) don't belong even if the project uses them extensively. Before adding a term, ask: is this a concept unique to this context, or a general programming concept? Only the former belongs.
30
+ - **Group terms under subheadings** when natural clusters emerge. If all terms belong to a single cohesive area, a flat list is fine.
31
+
32
+ ## Single vs multi-context repos
33
+
34
+ **Single context (most repos):** One `CONTEXT.md` at the repo root.
35
+
36
+ **Multiple contexts:** A `CONTEXT-MAP.md` at the repo root lists the contexts, where they live, and how they relate to each other:
37
+
38
+ ```md
39
+ # Context Map
40
+
41
+ ## Contexts
42
+
43
+ - `src/ordering/CONTEXT.md` — receives and tracks customer orders
44
+ - `src/billing/CONTEXT.md` — generates invoices and processes payments
45
+ - `src/fulfillment/CONTEXT.md` — manages warehouse picking and shipping
46
+
47
+ ## Relationships
48
+
49
+ - **Ordering → Fulfillment**: Ordering emits `OrderPlaced` events; Fulfillment consumes them to start picking
50
+ - **Fulfillment → Billing**: Fulfillment emits `ShipmentDispatched` events; Billing consumes them to generate invoices
51
+ - **Ordering ↔ Billing**: Shared types for `CustomerId` and `Money`
52
+ ```
53
+
54
+ The skill infers which structure applies:
55
+
56
+ - If `CONTEXT-MAP.md` exists, read it to find contexts
57
+ - If only a root `CONTEXT.md` exists, single context
58
+ - If neither exists, create a root `CONTEXT.md` lazily when the first term is resolved
59
+
60
+ When multiple contexts exist, infer which one the current topic relates to. If unclear, ask.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: loop-agent
3
3
  description: >-
4
- Use when implementing features, processing PRDs or requirements, running structured loop-agent workflows, creating harness tasks, using Agent DAG, run-dag, pi-prompt planning/review, or Cursor bounded implementation in loop-agent. Triggers: loop-agent, workflow, structured development, harness task, Agent DAG, 结构化开发, 工作流, 需求实现, PRD 实现.
4
+ Use when implementing features, processing PRDs or requirements, running structured loop-agent workflows, creating harness tasks, using Agent DAG, run-dag, pi-prompt planning/review, cursor-prompt one-shot sidecar intervention, or converging website/governance docs after user-visible changes in loop-agent. Triggers: loop-agent, workflow, structured development, harness task, Agent DAG, docs converge, Converge Docs, 文档收敛, 结构化开发, 工作流, 需求实现, PRD 实现.
5
5
  references:
6
6
  - path: references/harness-policy.md
7
7
  required: true
@@ -25,9 +25,9 @@ Shared loop-agent harness workflow 规则见 `references/harness-policy.md`。Re
25
25
 
26
26
  - 主入口是 **Agent DAG**。
27
27
  - 主会话负责编排、审 writeSet、复核验证与 handoff。
28
- - DAG `pi` executor 默认用于 read-only planning / review / diagnosis;当节点声明 `toolProfile: "write"` 时用于 bounded implementation / repair;Pi 模型矩阵保持 LOW=`gpt-5.3-codex-spark`、MED=`glm-5.2`、HIGH=`gpt-5.5`。
28
+ - DAG `pi` executor 是唯一受治理 Agent runtime:默认用于 read-only planning / review / diagnosis;当节点声明 `toolProfile: "write"` 时用于 bounded implementation / repair;Pi 模型矩阵保持 LOW=`gpt-5.3-codex-spark`、MED=`glm-5.2`、HIGH=`gpt-5.5`。
29
29
  - `pi-prompt` 与 `cursor-prompt` 都是一次性 full-capability helper;用作 sidecar 时必须在 prompt 和 tool/model 参数里显式收窄。
30
- - Cursor 是显式启用的可选 bounded write backend;默认 no-Cursor DAG 使用 `executor: "pi"` + `toolProfile: "write"`,必须给出 allowed / forbidden paths。
30
+ - Cursor 仅是显式、手工触发的 `cursor-prompt` one-shot sidecar,不是受治理 DAG/Loop writer;受治理写入固定为 `implement-pi` / `repair-pi`,必须给出 allowed / forbidden paths 与 writeSet
31
31
  - Shell verification 是事实源;任何完成声明都必须有本轮命令输出。
32
32
  - 长期结论写回 `docs/exec-plans/`、`docs/reports/`、`docs/progress/` 或 `./skill/`。
33
33
 
@@ -68,11 +68,11 @@ loop-agent run-dag --dag <temp-dir>/<task-id>-dag.json --cwd <repo-root>
68
68
 
69
69
  ## Bounded Write Execution
70
70
 
71
- 需要写代码时,默认使用 DAG `pi` executor 的 write tool profilePi writer 节点必须包含 task id、目标、allowed paths、forbidden paths、writeSet、硬约束和预期验证,并在执行后由主会话独立运行 shell verification。
71
+ 需要写代码时,默认使用 DAG `pi` executor 的 write tool profile(`implement-pi` / `repair-pi`)。Pi writer 节点必须包含 task id、目标、allowed paths、forbidden paths、writeSet、硬约束和预期验证,并在执行后由主会话独立运行 shell verification。
72
72
 
73
- Cursor 只作为显式启用的可选 bounded write backend。调用示例与细节见 `references/pi-prompt.md`、`references/harness-policy.md` 和 `references/verification-and-failure-handling.md`。
73
+ `cursor-prompt` 仅作人工 one-shot sidecar intervention,不进入 Loop auto-execute / Delegate auto-run / DAG writer 选择。细节见 `docs/cursor-prompt-sidecar.md`、`references/harness-policy.md` 和 `references/verification-and-failure-handling.md`。
74
74
 
75
- Pi writer prompt Cursor prompt 都必须包含:
75
+ Pi writer prompt(以及可选 sidecar prompt)都必须包含:
76
76
 
77
77
  - task id
78
78
  - exact objective
@@ -82,7 +82,7 @@ Pi writer prompt 与 Cursor prompt 都必须包含:
82
82
  - expected verification
83
83
  - instruction to preserve unrelated files
84
84
 
85
- bounded writer 完成后,主会话必须独立复核;命令清单见 `references/verification-and-failure-handling.md` 的 "Cursor bounded write 后的独立复核"。
85
+ bounded writer 完成后,主会话必须独立复核;命令清单见 `references/verification-and-failure-handling.md` 的独立复核章节。
86
86
 
87
87
  ## 进阶主题路由
88
88
 
@@ -94,7 +94,8 @@ bounded writer 完成后,主会话必须独立复核;命令清单见 `refere
94
94
  | Three-Pass Convergence、repair artifact、spine audit、knowledge curate、SePO-lite prompt evolution | `references/harness-policy.md` |
95
95
  | Operator commands(status/doctor/report/closeout/promote/inspect/spine/knowledge/docs/handoff) | `references/command-reference.md` |
96
96
  | 伴生 CLI `agent-worker`(TaskSpec / Task Pool / batch / morning report) | `references/command-reference.md` |
97
- | Post-Cursor 独立验证、verify knobs、failure handling、closeout | `references/verification-and-failure-handling.md` |
97
+ | Post-writer 独立验证、verify knobs、failure handling、closeout | `references/verification-and-failure-handling.md` |
98
+ | Docs Converge(用户可见变更后的站上/治理文档同步检查表) | `references/docs-converge.md` |
98
99
 
99
100
  ## Source Layout
100
101
 
@@ -121,7 +122,7 @@ bounded writer 完成后,主会话必须独立复核;命令清单见 `refere
121
122
  2. Source materials are mandatory: `source/需求.md` and `source/执行约束.md`. Prefer immutable originals under `source/references/` via `import-prd` or Worker `source_docs`; treat `需求.md` as a derived contract.
122
123
  3. Agent DAG is the implementation workflow. Review must three-way check references + derived source + implementation when originals exist.
123
124
  4. DAG `pi` executor stays read-only unless the node sets `toolProfile: "write"`; `pi-prompt` / `cursor-prompt` are full-capability one-shot helpers and must be bounded per call.
124
- 5. Pi writer nodes and optional Cursor write execution must be bounded by explicit allowed / forbidden paths.
125
+ 5. Pi writer nodes must be bounded by explicit allowed / forbidden paths and writeSet; Cursor remains `cursor-prompt` sidecar only.
125
126
  6. Completed DAG and one-shot run facts are read-only.
126
127
  7. Do not write root `artifacts/` from read-only DAG or sidecar steps.
127
128
  8. Do not keep hidden workflow state in chat only; write durable conclusions to repo artifacts.
@@ -147,3 +148,4 @@ Optional(按需加载):
147
148
  - `references/model-routing.md`
148
149
  - `references/multi-worktree.md`
149
150
  - `references/post-implementation-and-patterns.md`
151
+ - `references/docs-converge.md` — 用户可见变更后的文档收敛检查表;禁止每次重新规划整站大纲
@@ -60,7 +60,7 @@ loop-agent doctor
60
60
  ```
61
61
  3. **Escape hatch**,仅用于 worktree 隔离委派、executor 调试或 one-shot 诊断:
62
62
  ```bash
63
- loop-agent delegate <task-id> --executor cursor
63
+ loop-agent delegate <task-id> --auto-run
64
64
  loop-agent harvest <task-id>
65
65
  loop-agent cursor-prompt --cwd <repo-root> --file /tmp/bounded-task.md
66
66
  loop-agent pi-prompt "Reply with exactly OK."
@@ -122,7 +122,7 @@ loop-agent examples copy <name> --output examples/<name>
122
122
  loop-agent new-task <task-id> "Task Title"
123
123
  ```
124
124
 
125
- 创建 `.harness/tasks/<task-id>/`,含 `source/`、`artifacts/`、`logs/` 及初始 state
125
+ 创建 `.harness/tasks/<task-id>/`,含 `source/`、`artifacts/`、`logs/` 及初始 state。`artifacts/` 默认只预种 `修改记录.md` 与 `验证结果.md`(供后续 `promote-run` / `closeout` 使用);不再预种 L1 的 `分析报告.md`、`实现计划.md`、`复盘报告.md`。
126
126
 
127
127
  ### 导入原始 PRD(不可变事实源)
128
128
  ```bash
@@ -141,7 +141,7 @@ loop-agent instructions promotion --task <task-id> --json
141
141
  loop-agent instructions closeout --task <task-id> --json
142
142
  ```
143
143
 
144
- `status` 是 agent 行动上下文入口,返回 `artifactPaths`、`runRefs`、`actionContext` 与 `nextActions`。`instructions` 在写入 source、DAG draft、task artifacts、promotion 或 closeout 前返回目标路径、依赖、模板、写策略与完成标准;blocked artifact 会列出 `missingDependencies`。
144
+ `status` 是 agent 行动上下文入口,返回 `artifactPaths`、`runRefs`、`actionContext` 与 `nextActions`。`instructions` 在写入 source、DAG draft、task artifacts、promotion 或 closeout 前返回目标路径、依赖、模板、写策略与完成标准;blocked artifact 会列出 `missingDependencies`。`instructions task-artifacts` 只要求 promote 桥接的 `修改记录.md` / `验证结果.md`,不要求手写分析/计划/复盘三份 L1 报告。
145
145
 
146
146
  ### Promotion / closeout
147
147
  ```bash
@@ -228,9 +228,7 @@ loop-agent dag validate --dag <temp-dir>/hybrid-dag.json --strict-governance --s
228
228
  loop-agent dag validate --dag docs/templates/agent-dag.supervised-implementation.json --strict-models --strict-governance # role=supervisor + write-set-gate topology
229
229
  cp docs/templates/agent-dag.supervised-implementation.json <temp-dir>/supervised-dag.json
230
230
  (npx vitest run test/dag-supervised-template.test.ts test/dag-validate.test.ts test/dag-shell-executor.test.ts --reporter=dot) # supervised template + shell.verdictGate runtime
231
- loop-agent dag validate --dag <temp-dir>/hybrid-dag.json --forbid-executor cursor # 存在 cursor node 时失败
232
231
  loop-agent run-dag --dag <temp-dir>/hybrid-dag.json --cwd <repo-root> # 执行 Agent DAG
233
- loop-agent run-dag --dag <temp-dir>/hybrid-dag.json --cwd <repo-root> --no-cursor # 执行前若存在 cursor node 则失败
234
232
  loop-agent run-dag --dag <temp-dir>/hybrid-dag.json --init-only --canvas-path <temp-dir>/hybrid-dag.canvas.tsx # 可选 derived Canvas view
235
233
  loop-agent dag init-hybrid <task-id> # 生成可审阅的 DAG draft
236
234
  loop-agent dag run-task <task-id> # generate + validate(安全默认;无 dag-runs;standard-compatible)
@@ -278,6 +276,7 @@ loop-agent dag resume --run-id <run-id> # approve 后继续
278
276
  - Decision Gate prompt 可用 `buildDagDecisionGateEvidence()`(`src/workflows/dag/decision-evidence.ts`)做与 `dag report --json`、`docs/templates/agent-dag-report.schema.json` 对齐的只读摘要;不 mutate run state,不执行 retry/resume。
279
277
  - 仅当有意在 `.harness/dag-runs/active/` 下要 active run snapshot 时用 `run-dag --dry-run`。
280
278
  - task source 应从 `harness.json.workflowPolicy.dag.profileRouting` 与确定性 candidate `governanceProfile` 选 standard / review-gated / supervised template 时用 `dag run-task --profile auto`。无 `--profile` 仅用于旧 standard-compatible 输出;强制 template family 用 `--profile minimal|standard|reviewed|supervised`。
279
+ - 业务专用 DAG 通过 `task.json.taskKind` 选择,不扩充 governance profile:`frontend-implementation` 选择前端实现模板,`backend-test` 选择需求分析 → 功能用例 → 评审 → pytest 生成/执行 → 复盘的后端测试模板。
281
280
 
282
281
  ### Saved Dynamic Workflow operator UX
283
282
  ```bash
@@ -291,15 +290,9 @@ loop-agent workflow replay <run-id>
291
290
 
292
291
  `workflow` 是 Dynamic Workflow 的 saved/operator surface。它读取 `WorkflowSpec`,编译为 DAG,再进入同一套 `run-dag` runtime;不会新增 executor 能力或绕过 DAG governance。真实写入任务仍应检查 compiled DAG 的 executor、writeSet、shell gates 和 completed facts 边界。
293
292
 
294
- ### Cursor worker lifecycle
295
- ```bash
296
- loop-agent cursor-worker status # enabled/running/child/entry path
297
- loop-agent cursor-worker stop # SIGTERM worker 并清 parent state
298
- loop-agent cursor-worker ping # 启动 worker 并跑短 execute smoke(之后 stop worker)
299
- ```
293
+ ### Cursor sidecar
300
294
 
301
- - DAG / `executeCursorTask({ useWorker: true })` 保持长驻 Cursor SDK child,避免 CLI exit hang。
302
- - Parent RPC timeout(`timeoutMs + 5s`)返回 `details.timeoutKind=rpc`,终止 worker(`SIGTERM`),defer SDK cancel(`cancelDeferred=true`,`cancelAttempted=false`);下次 execute 启动新 worker。
295
+ `cursor-worker` 已删除。人工干预使用 `cursor-prompt` one-shot sidecar;见 `docs/cursor-prompt-sidecar.md`。
303
296
 
304
297
  ### 检查 task status
305
298
  ```bash
@@ -311,6 +304,9 @@ loop-agent status <task-id>
311
304
  loop-agent docs audit
312
305
  loop-agent docs archive docs/exec-plans/active/<plan>.md
313
306
  loop-agent plan list
307
+ loop-agent plan create <plan-id> "<title>"
308
+ loop-agent plan complete <plan-id> --summary "<summary>"
309
+ loop-agent plan check
314
310
  loop-agent handoff check [task-id]
315
311
  loop-agent handoff coverage <task-id> [--json|--markdown]
316
312
  ```
@@ -318,6 +314,9 @@ loop-agent handoff coverage <task-id> [--json|--markdown]
318
314
  - `docs audit`:扫描文档腐化风险,如 active/completed 漂移、失效链接、host-gap closeout
319
315
  - `docs archive`:将 active plan 迁入 completed,并自动重写常见 markdown 引用
320
316
  - `plan list`:列出当前 active plans 及其解析状态
317
+ - `plan create`:优先从目标项目模板创建 active exec-plan,不存在时回退发布包内置模板;同步 `active/README.md`,拒绝重复 id、不安全文件名,失败时回滚
318
+ - `plan complete`:将 active exec-plan 标记完成、迁入 completed、追加 `--summary` 并同步 active/completed 索引;失败时回滚所有已触碰文件
319
+ - `plan check`:确定性校验 exec-plan 目录与索引之间的 missing、stale、duplicate、status mismatch;发现问题时输出 JSON 并以非零状态失败
321
320
  - `handoff check`:检查任务 source / artifacts / auto-commit scope 是否满足交付闭环
322
321
  - `handoff coverage`:从 `source/需求.md` 抽取 checklist / numbered / `REQ-*` 项并输出 coverage audit;未覆盖项 exit 1;`explicitly_out_of_scope` 不计为缺口
323
322
 
@@ -434,12 +433,12 @@ loop-agent stats
434
433
  ### Worktree delegate / harvest(escape hatch)
435
434
 
436
435
  ```bash
437
- loop-agent delegate <task-id> [--executor pi|cursor] [--base <branch>] [--branch <name>] [--no-symlink] [--auto-run] [--no-auto-run]
436
+ loop-agent delegate <task-id> [--base <branch>] [--branch <name>] [--no-symlink] [--auto-run]
438
437
  loop-agent harvest <task-id> [--squash] [--no-archive] [--keep-worktree]
439
438
  loop-agent worktree create|list|remove ...
440
439
  ```
441
440
 
442
- 用于 worktree 隔离的 cursor-direct 执行与 merge 收口。常规 autonomous work 应优先 Agent DAG;详见 `multi-worktree.md` 与 `docs/cursor-executor-usage.md`。
441
+ 用于 worktree 隔离以及可选的 Pi-only DAG 执行与 merge 收口。常规 autonomous work 应优先 Agent DAG;详见 `multi-worktree.md` 与 `docs/cursor-prompt-sidecar.md`。
443
442
 
444
443
  ### One-shot Cursor sidecar(escape hatch)
445
444
  ```bash
@@ -0,0 +1,126 @@
1
+ # Docs Converge(文档收敛)
2
+
3
+ 本 reference 把会话协议中的 **Converge Docs** 落成可执行检查表。
4
+ 定位是**收敛 / 同步**,不是「每次重新 invent 文档大纲」。
5
+
6
+ 权威规划:`docs/exec-plans/completed/2026-07-14-website-docs-ia-and-converge.md`。
7
+ 站与治理双树边界:`website/README.md`。
8
+
9
+ ## 何时触发
10
+
11
+ 在以下任一情况**加载本文件并跑检查表**:
12
+
13
+ - 用户可见行为变更(CLI 输出、默认工作流、init 投影、Observe/Worker 主路径)。
14
+ - 新增 / 修改 / 删除 CLI 命令或关键 flags。
15
+ - runtime / 架构边界变更(`docs/architecture/*`、executor 角色、Worker 边界)。
16
+ - active plan 创建、blocked、完成或归档。
17
+ - 准备发布或写 `CHANGELOG.md` 版本条目。
18
+ - 用户明确要求「文档收敛」「docs converge」「同步 website docs」。
19
+ - handoff 前需要声明「本轮是否更新了站上文档」。
20
+
21
+ **不要**在无关的纯内部重构(无用户可见行为、无命令面变化)上强制大改站上正文;此时 handoff 写明豁免理由即可。
22
+
23
+ ## 受众矩阵
24
+
25
+ | 受众 | 主要入口 | 权威细节 |
26
+ | --- | --- | --- |
27
+ | 新贡献者 | `website/docs/intro.md` → `overview/architecture` → `overview/roadmap` → first-run | 根 `docs/architecture/*`、active plans |
28
+ | 使用者 | `overview/feature-map`、`quick-start/*`、`guides/*`、`reference/*` | CLI help、根 `CHANGELOG.md` |
29
+ | 维护者 / agent | 本检查表 + `AGENTS.md` Converge Docs | `docs/`、`skills/`、`scripts/check-*.sh` |
30
+
31
+ ## 页面清单(站上活文档)
32
+
33
+ | 页面 | 职责 |
34
+ | --- | --- |
35
+ | `website/docs/intro.md` | 概念地图 + 30 分钟路径;非能力堆砌 |
36
+ | `website/docs/overview/feature-map.md` | 功能导览 → guide/CLI |
37
+ | `website/docs/overview/architecture.md` | 架构导读;链到 `docs/architecture/` |
38
+ | `website/docs/overview/roadmap.md` | 当前有效规划短索引 |
39
+ | `website/docs/quick-start/*` | 安装 / init / first-run |
40
+ | `website/docs/guides/*` | 主路径操作说明 |
41
+ | `website/docs/reference/cli.md` | 用户向 CLI 参考 |
42
+ | `website/docs/reference/config.md` | 配置参考 |
43
+ | `website/docs/changelog.md` | 读者摘要;完整版本以根 `CHANGELOG.md` 为准 |
44
+
45
+ 治理全文、exec-plans、reports **不**搬进 Docusaurus。
46
+
47
+ ## 变更 → 文档检查表
48
+
49
+ 按本轮实际 diff 勾选(有则必须处理,无则跳过并记豁免):
50
+
51
+ | 若变更了… | 必须检查 / 更新 |
52
+ | --- | --- |
53
+ | 新/改 CLI 命令 | `website/docs/reference/cli.md` + `skills/loop-agent/references/command-reference.md`(及 agent-worker 相关 reference) |
54
+ | 用户可见行为 | 对应 `guides/*` 或 `quick-start/*`;根 `CHANGELOG.md`;必要时 `overview/feature-map.md` / `intro.md` |
55
+ | runtime / 边界 | 根 `docs/architecture/*`;站上 `overview/architecture.md` 导语与外链 |
56
+ | 默认工作流 | `intro.md` 流程图 + `guides/agent-dag.md` / `guides/harness-policy.md` |
57
+ | active plan 状态 | `overview/roadmap.md` 短索引 + `docs/exec-plans/active/README.md` |
58
+ | 发布 | 根 `CHANGELOG.md` 为版本事实源;`website/docs/changelog.md` 只写摘要与链接;roadmap 仅在规划状态变化时更新 |
59
+ | skill / init 投影 | `docs/init-surface.manifest.json`、相关测试、必要时 `docs/skills/*` |
60
+
61
+ 跨树链接规则:
62
+
63
+ - 站内页面用 Docusaurus 相对文档链接。
64
+ - 链到根目录 `docs/`、`AGENTS.md`、`CHANGELOG.md` 等时,使用
65
+ `https://github.com/tea-agent/loop-agent/blob/main/<repo-path>`,
66
+ 正文同时写出 repo-relative path;禁止伪造站内 `/docs/architecture/...` 作为根目录文档路由。
67
+
68
+ ## 执行步骤(最小闭环)
69
+
70
+ 1. **列出本轮用户可见 diff**(命令、行为、边界、计划状态)。
71
+ 2. **对照上表**产出缺口清单(页面路径 + 要改的一句话)。
72
+ 3. **最小补丁**:只改清单内页面;禁止顺手重写 practices 或迁移整个 `docs/`。
73
+ 4. **验证**(见下节)。
74
+ 5. **Handoff** 二选一:
75
+ - 已更新:列出改动页面与验证命令结果。
76
+ - 无需站上更新:写明「本轮无需站上更新,原因:…」。
77
+
78
+ ## 验证命令
79
+
80
+ 站上正文、侧栏或 `docusaurus.config.ts` 有改动时:
81
+
82
+ ```bash
83
+ npm run docs:build
84
+ ```
85
+
86
+ 涉及治理文档、脚本、skill、init surface 时再跑:
87
+
88
+ ```bash
89
+ bash scripts/check-repo.sh
90
+ # 或定向:
91
+ bash scripts/check-skill-entry.sh
92
+ bash scripts/check-command-registry-drift.sh
93
+ bash scripts/check-init-surface.sh
94
+ node bin/loop-agent.js docs audit --repo-root .
95
+ ```
96
+
97
+ skill / package 投影相关:
98
+
99
+ ```bash
100
+ npx vitest run test/init-command.test.ts test/package-surface.test.ts
101
+ ```
102
+
103
+ ## 禁止事项
104
+
105
+ - 每次会话从头撰写全新文档大纲或「重新规划整个 docs 树」。
106
+ - 把 `docs/design/`、exec-plans、reports 全文复制进 `website/docs/`。
107
+ - 在站上建立第二套与 `docs/architecture/*` 冲突的架构真源。
108
+ - 未读 `website/README.md` 与相关 exec-plan 就扩大 scope。
109
+ - 用删测试、降 `onBrokenMarkdownLinks` 或忽略 `docs:build` 失败制造「完成」。
110
+ - 新增独立公共 skill 目录承载本检查表(应留在 `skills/loop-agent/references/`)。
111
+
112
+ ## 与现有能力的关系
113
+
114
+ | 能力 | 关系 |
115
+ | --- | --- |
116
+ | `loop-agent docs audit` | L0 腐化检查(断链、计划状态等);**不**替代本表内容审计 |
117
+ | `npm run docs:build` | 站上改动硬门禁(含 Markdown 断链 fail-fast) |
118
+ | `grill-with-docs` | ADR / 术语;不替代本 reference |
119
+ | 历史 2026-07-05 docs governance dogfood | 仅经验输入;新 workflow 必须 Pi-only,不复用已退役原生 Cursor DAG |
120
+
121
+ ## 快速自检(handoff 前 30 秒)
122
+
123
+ - [ ] 用户可见变更是否对照检查表处理或已豁免?
124
+ - [ ] intro 是否仍是概念地图(而非能力 bullet 堆砌)?
125
+ - [ ] roadmap 是否只含当前有效 active 项?
126
+ - [ ] 需要时 `docs:build` / `check-repo` 是否有新鲜输出?
@@ -8,7 +8,7 @@
8
8
  - 历史顺序式 `run analyze|plan|spec|implement|verify|auto|loop|continue` workflow 已移除。不要将其作为 fallback path 呈现。
9
9
  - **Long-running `loop`** 是 Agent DAG 之上的 outer state/evidence layer。它记录 rounds、context compression、signals、canonical refs;不得替代 complex work 的 DAG writeSet review、Decision Gate 或 shell verification。
10
10
  - **Main session** 负责 orchestrate:选一个 work chunk、准备 source materials、review DAG/writeSet、monitor failures、跑 final verification、hand off。
11
- - **Executors** 实现 bounded work:Pi DAG nodes 做 read-only planning/review/diagnosis,并在节点声明 `toolProfile: "write"` 时做 bounded implementation/repair;Cursor 是显式启用的可选 bounded writer;shell 产出 deterministic verification facts。
11
+ - **Executors** 实现 bounded work:Pi 是唯一受治理 Agent runtime(read-only planning/review/diagnosis,以及 `toolProfile: "write"` bounded implementation/repair);shell 产出 deterministic verification facts;`cursor-prompt` 仅是 one-shot sidecar
12
12
  - **Shell verification 是 completion fact source**。LLM review 或 advisory output 不能替代 command exit codes 与 archived evidence。
13
13
 
14
14
  ## Command surface tiers
@@ -18,7 +18,7 @@
18
18
  | Primary | Normal autonomous implementation | `new-task` -> `dag run-task --profile auto` -> `dag validate --strict-models --strict-governance` -> `run-dag` |
19
19
  | Operator | Diagnose, recover, close out, inspect facts | `status`, `instructions`, `dag status`, `dag doctor`, `dag report`, `dag closeout-draft`, `dag reconcile-tasks`, `dag final-verification`, `inspect`, `doctor`, `spine audit`, `knowledge curate`, `docs audit`, `handoff check`, `loop-benchmark` |
20
20
  | Compatibility | Legacy task metadata and feature-study helpers | `goal`, `reference`, `study` |
21
- | Escape hatch | Isolated delegation, one-shot diagnosis or bounded repair | `delegate`, `worktree`, `harvest`, `pi-prompt`, `cursor-prompt`, `cursor-worker` |
21
+ | Escape hatch | Isolated delegation, one-shot diagnosis or bounded repair | `delegate`, `worktree`, `harvest`, `pi-prompt`, `cursor-prompt` |
22
22
  | Experimental | Long-running outer task state | `loop init|status|run|record-round|add-signal|closeout` |
23
23
 
24
24
  Prompt templates、README snippets、task instructions 应优先呈现 Primary + Operator。Compatibility 与 escape-hatch commands 仍可用,但须携带其 downgrade/fallback 含义。
@@ -130,7 +130,7 @@ loop-agent loop run <task-id> --action dag
130
130
  loop-agent loop run <task-id> --action dag --execute
131
131
  loop-agent loop run <task-id> --action shell-verify --command "<repo-check>"
132
132
  loop-agent loop run <task-id> --action pi-review
133
- loop-agent loop run <task-id> --auto --max-rounds 3 --allow-cursor-fix
133
+ loop-agent loop run <task-id> --auto --max-rounds 3
134
134
  loop-agent loop closeout <task-id>
135
135
  ```
136
136
 
@@ -138,11 +138,11 @@ Loop action rules:
138
138
 
139
139
  - `shell-verify` 是 deterministic;exit code 决定 verification record。
140
140
  - `pi-review` 是 read-only;tools 限于 `read,grep,find,ls`,output 为 structured advisory evidence。Structured JSON 须含 `findingSummary`、`failureCategory`、`nextHypothesis`、`recommendedAction`、`fixScope`、`rootCause`;`recommendedAction` exactly 为 `implement_fix|replan|pause|done`。
141
- - `cursor-fix` bounded write;须读 task `allowedPaths` / `forbiddenPaths`,reject empty `allowedPaths`、allowed/forbidden overlap,preserve unrelated files,且须 follow shell verification 或 review。
142
- - 对 `task.json.complexity = medium | large`,`cursor-fix` additionally 需要:
141
+ - 自动写入只能通过 Pi-only Agent DAG execute;须读 task `allowedPaths` / `forbiddenPaths`,审查 writer `writeSet`,并 follow shell verification 或 review。
142
+ - 对 `task.json.complexity = medium | large`,自动 DAG execute additionally 需要:
143
143
  - previous loop `dag` round,或
144
144
  - explicit `task.json.dagFallbackReason` 说明为何不能用 DAG。
145
- - `loop run --auto` 默认不 write。Auto `cursor-fix` 需要 `task.json.loopAutoWritePolicy="enabled"`,或 `loopAutoWritePolicy="approval-required"` 加 pending approval signal `--allow-cursor-fix`;write guards 仍 fail closed 并 pause。
145
+ - `loop run --auto` 默认不 write。Auto DAG execute 需要 `task.json.loopAutoExecutionPolicy="enabled"`,或 `loopAutoExecutionPolicy="approval-required"` 加 pending approval signal;旧 `loopAutoWritePolicy` fail-fast;write guards 仍 fail closed 并 pause。
146
146
  - `loop closeout` 须报告 workflow path:`dag`、`explicit-fallback`、`missing-dag-evidence` 或 `micro-or-small`。
147
147
  - 无 DAG evidence 且无 `dagFallbackReason` 的 medium/large closeout 须将其列为 remaining risk。
148
148
  - `record-round --decision complete` 仅是 loop-state candidate;completion 仍须 shell verification、review verdict、success-criteria coverage。
@@ -220,7 +220,7 @@ Sidecar output 为 advisory。若须成为 task evidence,通过 loop-agent run
220
220
  - `harness.json.models.<step>` 下 historical step models 是 legacy metadata,不是新 DAG work 的 routing。
221
221
  - `pi-prompt` / `cursor-prompt` models 来自 CLI flags 或 runtime defaults,须 per intervention 选择。
222
222
  - Pi DAG nodes 默认 read-only planning/review/diagnosis;声明 `toolProfile: "write"` 时是 bounded writers,须有 explicit write scope。
223
- - Cursor nodes 是显式启用的可选 bounded writers,须有 explicit write scope。
223
+ - 受治理 writer 固定为 `implement-pi` / `repair-pi`,须有 explicit write scope;`cursor-prompt` 不进入 DAG schema
224
224
  - Shell nodes 产出 deterministic verification facts 与 gates。
225
225
 
226
226
  ## Artifacts and facts boundary
@@ -1,28 +1,30 @@
1
1
  # Agent DAG Hybrid Workflow(`run-dag` / `dag init-hybrid`)
2
2
 
3
- 创建或执行 loop-agent 工作的首选 Agent DAG path 时使用本文:Level 2 Agent DAG orchestration、Pi read-only + Pi `toolProfile: "write"` bounded execution、optional Cursor backend、write policy、DAG template、task-to-DAG 生成,或基于 governance-profile 的 template 选择。
3
+ 创建或执行 loop-agent 工作的首选 Agent DAG path 时使用本文:Level 2 Agent DAG orchestration、Pi read-only + Pi `toolProfile: "write"` bounded execution、Pi-only writers、write policy、DAG template、task-to-DAG 生成,或基于 governance-profile 的 template 选择。
4
4
 
5
5
  ### DAG workflow 优先级
6
6
 
7
7
  `harness.json.workflowPolicy` 现声明 Agent DAG 为首选 implementation workflow:
8
8
 
9
9
  - `defaultImplementationWorkflow=agent-dag`
10
- - `dag.defaultEntry=dag run-task`
11
- - `dag.outputLanguage=zh-CN`;未配置时也默认中文,显式设为 `en` 可切换英文
12
- - `dag.profileRouting`:`minimal|standard -> standard-dag`,`reviewed -> review-gated-dag`,`supervised -> supervised-implementation`
10
+ - `dag.defaultEntry=dag run-task`
11
+ - `dag.outputLanguage=zh-CN`;未配置时也默认中文,显式设为 `en` 可切换英文
12
+ - `dag.profileRouting`:`minimal|standard -> standard-dag`,`reviewed -> review-gated-dag`,`supervised -> supervised-implementation`
13
13
  - `humanGatePolicy.defaultMode=record-only`;需求不清、架构/公共契约风险、凭据/费用/部署风险、重复 gate failure 或高风险决策时升级人工介入
14
14
 
15
- 此 policy 驱动 `dag run-task --profile auto`:CLI 仍要求显式 `dag run-task`、`dag validate`、`run-dag`,但 `--profile auto` 在确定性 candidate `governanceProfile` 推断后应用 `workflowPolicy.dag.profileRouting`。生成器还会把 `outputLanguage` 写入 DagSpec,runner 在每个 Pi/Cursor 节点 prompt 中注入语言规则;代码、命令、路径、JSON 字段与 gate token 保持原样。`humanGatePolicy` 是默认人机边界声明;真实暂停仍由 DAG 节点的 `decisionGate.mode: "pause-on-human"` 与 decision envelope 触发。无 profile 的 `dag run-task <task-id>` 仍为 standard-compatible,供 legacy/review workflow。
15
+ 此 policy 驱动 `dag run-task --profile auto`:CLI 仍要求显式 `dag run-task`、`dag validate`、`run-dag`,但 `--profile auto` 在确定性 candidate `governanceProfile` 推断后应用 `workflowPolicy.dag.profileRouting`。生成器还会把 `outputLanguage` 写入 DagSpec,runner 在每个 Pi/Cursor 节点 prompt 中注入语言规则;代码、命令、路径、JSON 字段与 gate token 保持原样。`humanGatePolicy` 是默认人机边界声明;真实暂停仍由 DAG 节点的 `decisionGate.mode: "pause-on-human"` 与 decision envelope 触发。无 profile 的 `dag run-task <task-id>` 仍为 standard-compatible,供 legacy/review workflow。
16
+
17
+ `task.json.taskKind` 负责选择业务专用模板,不扩充 governance profile:`frontend-implementation` 选择前端实现 DAG,`backend-test` 选择后端测试 DAG。后端测试链为 `analyze-inputs-pi → generate-backend-functional-cases-pi → review-backend-cases-pi → review-backend-cases-gate-shell → generate-backend-pytest-pi → execute-backend-pytest-shell → test-retrospect-pi`,治理等级仍由既有 `minimal|standard|reviewed|supervised` 规则推断。
16
18
 
17
19
  ### DAG workflow 层级
18
20
 
19
21
  | 优先级 | 入口 | 使用场景 |
20
22
  |-------|-------|----------|
21
23
  | **Primary / Level 3** | `dag run-task --profile auto` / `dag init-hybrid`(已实现) | 从 task `source/` 自动生成 hybrid DAG;`--profile auto` 路由 standard / review-gated / supervised template;无 profile `run-task` 默认为 standard-compatible generate+validate only |
22
- | **Primary / Level 2** | `run-dag --dag <path>` | 跨 Cursor + Pi + shell executor 执行 Agent DAG orchestration |
24
+ | **Primary / Level 2** | `run-dag --dag <path>` | 跨 Pi + shell + static executor 执行 Agent DAG orchestration |
23
25
  历史顺序式 `run analyze|plan|implement|verify|auto|loop|continue` 已移除。trivial one-line 修正时,记录的 main-session surgical patch 仍可能比建 DAG 更省,但它不是第二套 workflow runtime。
24
26
 
25
- **心智模型**:`run-dag` 是 `.` 内自编的 Agent DAG orchestration;Cursor SDK 仅是 `executor: "cursor"` node leaf executor。Cookbook 式 Cursor DAG 示例同样是基于 Cursor SDK local subagent 的 custom DAG runner,不是 Cursor 原生 DAG API。仅可选地借鉴其 observer/streaming/cancel 模式作为 derived feature;不要替换本 repo 的 hybrid schema、`executorModels`、Pi/shell/static executor 或 `.harness/dag-runs` facts。
27
+ **心智模型**:`run-dag` 是 loop-agent 内自编的 Agent DAG orchestration;受治理 Agent leaf executor 只有 Pi。`cursor-prompt` 是独立 sidecar,不是 DAG node executor。不要把 Cursor 重新引入 hybrid schema / `executorModels` / writer 选择。
26
28
 
27
29
  ### Level 2 Agent DAG hybrid(`run-dag`)
28
30
 
@@ -31,10 +33,8 @@ cp examples/hybrid-loop-agent-dag.json <temp-dir>/hybrid-dag.json
31
33
  loop-agent dag validate --dag <temp-dir>/hybrid-dag.json # 常规 validation + ranks;无 dag-runs 副作用
32
34
  loop-agent dag validate --dag <temp-dir>/hybrid-dag.json --strict-models # 非 canonical executorModels 时也失败
33
35
  loop-agent dag validate --dag <temp-dir>/hybrid-dag.json --strict-governance # governance warning(如 read-only artifact drift)时失败
34
- loop-agent dag validate --dag <temp-dir>/hybrid-dag.json --forbid-executor cursor # offline/CI/no-key 显式 no-Cursor;存在 cursor node 时失败
35
- loop-agent run-dag --dag <temp-dir>/hybrid-dag.json --cwd <repo-root> # 执行(若包含 cursor node 则需 CURSOR_API_KEY)
36
- loop-agent run-dag --dag <temp-dir>/hybrid-dag.json --cwd <repo-root> --no-cursor # 存在 cursor node 时执行前失败
37
- loop-agent run-dag --dag <temp-dir>/hybrid-dag.json --init-only --canvas-path <temp-dir>/hybrid-dag.canvas.tsx # 可选 derived Canvas(无需 CURSOR_API_KEY)
36
+ loop-agent run-dag --dag <temp-dir>/hybrid-dag.json --cwd <repo-root> # 执行 Pi/shell/static DAG
37
+ loop-agent run-dag --dag <temp-dir>/hybrid-dag.json --init-only --canvas-path <temp-dir>/hybrid-dag.canvas.tsx # 可选 derived Canvas
38
38
  ```
39
39
 
40
40
  `<temp-dir>` 表示平台原生临时目录;实际命令中 macOS 与 Windows 都使用本机路径。`/` 只作为 repo refs、JSON/Markdown evidence refs 和 glob 约定的稳定分隔符。
@@ -44,7 +44,7 @@ loop-agent run-dag --dag <temp-dir>/hybrid-dag.json --init-only --canvas-path <t
44
44
  **v2 字段**(均可选;缺失时行为同 v1):
45
45
 
46
46
  - 顶层:`objective`、`successCriteria`、`globalConstraints`、`defaults`、`skillsByRole`、`executorModels`
47
- - 每 node:`role`、`skills`、`writePolicy`、`writeSet`、`piStep`、`shell`、`outputContract`、`executor`(`cursor` | `pi` | `shell` | `static`);Pi 写入节点额外声明 `toolProfile: "write"`
47
+ - 每 node:`role`、`skills`、`writePolicy`、`writeSet`、`piStep`、`shell`、`outputContract`、`executor`(`pi` | `shell` | `static`);Pi 写入节点额外声明 `toolProfile: "write"`;安全只读 Pi 节点可选声明 `retryPolicy`(生成器自动注入默认值)
48
48
 
49
49
  **Model 生成 DAG 的 template 卫生**:
50
50
 
@@ -54,14 +54,14 @@ loop-agent run-dag --dag <temp-dir>/hybrid-dag.json --init-only --canvas-path <t
54
54
  - 输出独立时优先 same-rank parallel read-only scout(`scout-src`、`scout-tests` 等),而非 serial scout chain。
55
55
  - 仅当 child 真正需要 upstream output 时加 `depends_on`;review 时质疑 single-chain topology。
56
56
  - `exclusive` implementer node 需 narrow、disjoint 的 `writeSet` path;勿用 `**` 或 repo root。
57
- - 默认 no-Cursor DAG 使用 `pi` read-only scouts/reviewers 与 `toolProfile: "write"` exclusive implementer;Cursor 是显式启用的可选 scout / writer backend。
57
+ - 固定 Pi-only DAG:`pi` read-only scouts/reviewers 与 `toolProfile: "write"` exclusive implementer(`implement-pi` / `repair-pi`)。
58
58
  - model routing 用 `executorModels`;勿用 `defaults.model` 或 legacy 顶层 `models`。
59
59
 
60
60
  **运维 warning**:
61
61
 
62
- - **常规 validation**:`dag validate --dag <path>` 做 schema/topology/ranks。JSON 输出含 `governanceProfile`(确定性 `minimal|standard|reviewed|supervised` 推断,含 `process` / `delivery` / `codeChange` signal 与 `reasons`),及 model-matrix drift、governance lint(如 read-only artifact-boundary drift 或 DAG 内 `check-repo.sh` shell env drift)的 warnings。手写临时 DAG spec 执行前用 `dag validate --dag <path> --strict-models`;governance warning 应 fail fast 时加 `--strict-governance`。no-Cursor 环境用 `dag validate --dag <path> --forbid-executor cursor` `run-dag --no-cursor` 捕获显式 Cursor 节点;默认生成 DAG 应使用 `pi` read-only / Pi write profile / shell。仅当有意在 `.harness/dag-runs/active/` 要 active run snapshot 时用 `run-dag --dry-run`。
62
+ - **常规 validation**:`dag validate --dag <path>` 做 schema/topology/ranks。JSON 输出含 `governanceProfile`(确定性 `minimal|standard|reviewed|supervised` 推断,含 `process` / `delivery` / `codeChange` signal 与 `reasons`),及 model-matrix drift、governance lint(如 read-only artifact-boundary drift 或 DAG 内 `check-repo.sh` shell env drift)的 warnings。手写临时 DAG spec 执行前用 `dag validate --dag <path> --strict-models`;governance warning 应 fail fast 时加 `--strict-governance`。含 `executor: "cursor"` 的旧 DAG 会在 schema 校验失败;默认生成 DAG 使用 `pi` read-only / Pi write profile / shell。仅当有意在 `.harness/dag-runs/active/` 要 active run snapshot 时用 `run-dag --dry-run`。
63
63
  - **Governance profile 推断与 routing(code vs skill 分工)**:`./src/workflows/dag/governance-profile.ts` 从 DAG 结构与 write scope 做 **硬确定性推断**。JSON 输出 **报告** `process` / `delivery` / `codeChange` signal 与人类可读 `reasons`;`profile` tier(`minimal|standard|reviewed|supervised`)仅由该模块 code rule 选择(如多个 exclusive writer、repair node、review-gate topology、`loop-agent-runtime-paths`、`scripts-ci-harness-paths`、weak post-implementation shell verification、supervised topology)。baseline `forbiddenPaths`(`.harness/**`、`.harness/dag-runs/**`、`artifacts/**`)是默认 governance,**本身不是** process-risk signal。skill prompt 与本 reference **解释** tier 并摘要 profile 选择原因;不替代 code 推断。`dag run-task` 转发 embedded validate step 的同一 candidate `governanceProfile`。`dag run-task --profile auto` 先将 candidate profile 经 `harness.json.workflowPolicy.dag.profileRouting` 映射,再在 candidate delivery signal 含 `loop-agent-runtime-paths`、`scripts-ci-harness-paths` 或 `public-contract-paths` 时应用 M4 `supervised-quality-gate` promotion;`profileRouting.routingReasons` 记录确定性 reason。无 profile `dag run-task <task-id>` 仍为 standard-compatible;显式 `--profile minimal|standard|reviewed|supervised` 强制对应 template family(当前 policy 下 minimal/standard 路由到 `standard-dag`),高风险 task 应用 `--profile auto` 或显式 `--profile supervised`,而非显式 `--profile reviewed`。
64
- - **Executor model routing**:DAG spec 选 `executor` 与 `complexity`,可通过 `executorModels` 覆盖 `cursor` / `pi` 的 model 名;不选 provider。默认 routing:Cursor 各 complexity 用 `composer-2.5`;Pi read-only 与 Pi write profile 共用 LOW=`wizard-local/gpt-5.3-codex-spark`、MED=`wizard-local/glm-5.2`、HIGH=`wizard-local/gpt-5.5`。`shell` 不用 model,忽略 `executorModels`。
64
+ - **Executor model routing**:DAG spec 选 `executor` 与 `complexity`,可通过 `executorModels.pi` 覆盖 model 名;不选 provider。默认 routing:Pi LOW=`gpt-5.3-codex-spark`、MED=`glm-5.2`、HIGH=`gpt-5.5`。`shell` 不用 model,忽略 `executorModels`。
65
65
  - **Active visibility**:真实 `run-dag` execution 在 run/node 转换时写 active `state.json`,归档前 core runner 暴露 isolated `DagRunObserver` hook 供 derived view。`.harness/dag-runs/completed/<run-id>/` / `paused/<run-id>/` 仍是 source of truth;observer 输出非 canonical。
66
66
  - **可选 Canvas**:传 `--canvas-path <abs-path>` 或 `--canvas <name>` 输出 derived `.canvas.tsx` live view。省略 flag 行为不变。`--init-only` + Canvas 无需 `CURSOR_API_KEY`。
67
67
 
@@ -77,7 +77,7 @@ loop-agent run-dag --dag <temp-dir>/hybrid-dag.json --init-only --canvas-path <t
77
77
  - **Prompt source**:每个 task 仅用一种 prompt source。v1-compatible DAG 用 inline `subtask_prompt`;markdown-backed prompt 用 canonical `subtask_prompt_markdown`。同时提供两字段、皆不提供、或用连字符 alias `subtask_prompt-markdown` 均 fail fast。
78
78
  - **勿宣称 live smoke 已通过**,除非真实 `run-dag` execution 中 Pi read-only、Pi writer、显式 Cursor 或 shell node 均按 DAG 完成。
79
79
 
80
- 可复用 template:`docs/templates/agent-dag.base.json`(model 生成 DAG 的首选 base template)、`docs/templates/agent-dag.schema.json`(JSON Schema)、`docs/templates/agent-dag.supervised-implementation.json`(supervised implementation:writeSet audit、soft/hard verify、process supervisor、repair、review verdict gate)、`docs/templates/agent-dag-process-supervisor.prompt.md`、`docs/templates/agent-dag-review-verdict.prompt.md`、`docs/templates/agent-dag-authority-surface-audit.prompt.md`(可选 authority surface verifier;authority signal 或显式 enablement 匹配时由 `dag init-hybrid` 插入)、`examples/hybrid-loop-agent-dag.json`、`docs/templates/hybrid-dag.json`。
80
+ 可复用 template:`docs/templates/agent-dag.base.json`(model 生成 DAG 的首选 base template)、`docs/templates/agent-dag.schema.json`(JSON Schema)、`docs/templates/agent-dag.supervised-implementation.json`(supervised implementation:writeSet audit、soft/hard verify、process supervisor、repair、review verdict gate)、`docs/templates/backend-test-dag.json`(后端测试专用模板)、`docs/templates/agent-dag-process-supervisor.prompt.md`、`docs/templates/agent-dag-review-verdict.prompt.md`、`docs/templates/agent-dag-authority-surface-audit.prompt.md`(可选 authority surface verifier;authority signal 或显式 enablement 匹配时由 `dag init-hybrid` 插入)、`examples/hybrid-loop-agent-dag.json`、`docs/templates/hybrid-dag.json`。
81
81
 
82
82
  ### Supervised implementation flow(减少 main-session intervention)
83
83
 
@@ -102,16 +102,20 @@ contract-pi → scout-src ∥ scout-tests → plan-pi → write-set-audit-pi
102
102
  | `soft-verify-shell` | supervision 前归档 focused test exit code |
103
103
  | `process-supervisor-pi` | read-only audit coverage、boundary drift、verify gap、repair scope;应 prominently 输出 `VERDICT: pass` 或 `VERDICT: request-revision` |
104
104
  | `process-gate-shell` | supervisor node JSON 上 runtime `shell.verdictGate`(仅 `pass` 或 `request-revision`) |
105
- | `repair-pi` / optional `repair-cursor` | supervisor 请求 revision 时在 repair `writeSet` 内 bounded exclusive fix |
105
+ | `repair-pi` | supervisor 请求 revision 时在 repair `writeSet` 内 bounded exclusive fix |
106
106
  | `hard-verify-shell` | lint/typecheck + `HARNESS_ALLOW_ACTIVE_DAG_RUNS=1 check-repo.sh` fact |
107
107
  | `authority-surface-audit-pi` + `authority-surface-gate-shell` | 可选 permission/state/tool-exposure audit;仅 authority signal 或显式 `authority-surface-audit` marker 时插入;gate 仅接受 `VERDICT: pass` |
108
108
  | `review-pi` + `review-gate-shell` | Critical/Important → `request-revision`;node JSON 上 `shell.verdictGate` block,除非 extracted verdict 行为 `VERDICT: pass` |
109
109
 
110
110
  **Verdict gate contract(`shell.verdictGate`)**:声明 `fromNodeId`、`accept[]`、可选 `label`、可选 `lineMode`。runner 展开为一条 shell command,从 injected current run directory 读 `$HARNESS_DAG_RUN_DIR/<fromNodeId>.json`,对 extracted `assistantText ?? stdout` verdict line 与 `accept[]` exact-match。默认 `lineMode` 为 `first-non-empty` 以兼容;supervised gate 用 `first-verdict-line` 选 Pi 在 preamble 或常见整行 Markdown emphasis(如 `**VERDICT: pass**`)后第一条 normalized `VERDICT:` line。勿用 `result.summary.md`、grep VERDICT、latest-active-run discovery 或 multi-command stateful gate。`--strict-governance` 对 anti-pattern fail。supervisor 仍为 `executor: pi` 上的 `role: supervisor`。
111
111
 
112
+ **Repair artifact gate contract(`shell.repairArtifactGate`)**:声明 `fromNodeId`(supervisor artifact 节点)与 `repairNodeId`(承接修订的 Pi 修复节点)。runner **不再**按节点名(历史 `repair-cursor` / `repair-pi`)猜测 repair 节点:显式 `repairNodeId` 必须存在、直接 `depends_on` gate、且是受治理 Pi writer(`executor: pi`、`toolProfile: write`、`writePolicy: exclusive`、`allowedPaths`+`writeSet` 非空且 `writeSet` 不与 `forbiddenPaths` 冲突)。新生成的 supervised DAG 总是写入 `repairNodeId`;旧 DAG 缺失时只在能唯一、安全地推导出下游 Pi writer 时兼容,零个或多个候选、或候选不满足契约都在执行前 fail closed。validation 覆盖存在性、直接下游、writer 属性与路径边界。
113
+
114
+ **Runtime contract 与 controller identity**:新生成的 DagSpec 使用 `version: 3`,并必须携带 `runtimeContract`(`schemaVersion` / `agentRuntime: "pi-only"` / `repairWriterProtocol: "explicit-node-v1"` / 可选 `minimumControllerVersion`)。v3 是旧 controller 无法忽略的解析边界;capability 与最低版本是新 controller 的执行前兼容门。`init-hybrid` 不硬编码 `minimumControllerVersion`,手写 spec 可按需 pin。每个新 run 必须解析并冻结 controller identity(package version、binary SHA-256、portable fingerprint)到 `controller-identity.json`;解析失败不创建 run。`dag report` 展示 identity 与 runtime-contract compatibility,resume 对漂移、篡改或 legacy-unpinned run 全部 fail closed;legacy run 仍可只读报告或显式 reconcile。
115
+
112
116
  Prompt invariant:`docs/templates/agent-dag-process-supervisor.prompt.md`、`docs/templates/agent-dag-review-verdict.prompt.md`、`docs/templates/agent-dag-authority-surface-audit.prompt.md`(启用时)。测试:`npx vitest run test/dag-supervised-template.test.ts test/authority-surface.test.ts`。完整叙述:`docs/agent-dag-runner.md` §「Why main-session interventions happened」。
113
117
 
114
- **未实现**:`executor: supervisor`、automatic retry/resume、`executor: human`/`decision`、browser executor,或 read-only node 对 root `artifacts/**` 的 exemption
118
+ **未实现**:`executor: supervisor`、whole-run automatic retry/resume、`executor: human`/`decision`、browser executor,或 read-only node 对 root `artifacts/**` 的 exemption。注:有界只读 Pi 节点重试已实现(见下「只读 Pi 节点安全重试」)。
115
119
 
116
120
  ### Level 3 task-to-DAG(`dag init-hybrid` / `dag run-task`)
117
121
 
@@ -124,7 +128,6 @@ loop-agent dag run-task <task-id> --profile standard
124
128
  loop-agent dag run-task <task-id> --profile reviewed # 强制 review-gated DAG
125
129
  loop-agent dag run-task <task-id> --profile supervised # 强制 supervised implementation DAG
126
130
  loop-agent dag run-task <task-id> --strict-models # 非 canonical executorModels 时失败
127
- loop-agent dag run-task <task-id> --no-cursor # 显式 no-Cursor 校验;generated cursor node 时失败
128
131
  loop-agent dag run-task <task-id> --execute --cwd <repo-root> # 要求 narrowed implement writeSet
129
132
  loop-agent dag run-task <task-id> --dry-run --cwd <repo-root> # active snapshot 于 .harness/dag-runs/active/
130
133
  loop-agent dag run-task <task-id> --init-only --cwd <repo-root> # pending active snapshot,不执行 node
@@ -182,6 +185,19 @@ loop-agent dag resume --run-id <run-id> # approve 后继续
182
185
 
183
186
  **In-flight DAG run 期间的 governance**:live run 内 shell verify node 须用 `HARNESS_ALLOW_ACTIVE_DAG_RUNS=1 bash scripts/check-repo.sh`。run 归档到 `completed/` 后,在 DAG 外跑裸 `bash scripts/check-repo.sh`。
184
187
 
188
+ ### 只读 Pi 节点安全重试(read-only retry)
189
+
190
+ planner/scout/reviewer/verifier/closeout 角色的安全只读 Pi 节点可声明 `retryPolicy`,在同一 run 内有界重试模型连接中断、provider 限流、临时不可用或请求 timeout。生成模板自动注入默认策略(总尝试 3 次,手工配置最多 5 次,指数退避,单次等待上限 30s)。supervisor 与 implementer 明确不重试。
191
+
192
+ - 仅重试原始分类:`timeout`、`network`、`rate-limit`、`unavailable`。`quota` **不**是 rate limit,不重试;`auth`、`invalid-output`、`write-guard`、`decision-envelope` 与未知失败同样不重试。
193
+ - 资格由确定性 helper 判断,executor 内不硬编码循环;仅 `writePolicy=read-only|none`(或 Pi 默认只读)的上述角色可用。supervisor / implementer / writer / docs-only / dynamic / shell / static / decision-gate 节点声明 `retryPolicy` 会在 DAG validation 阶段失败。
194
+ - 每次 attempt 写入独立不可变证据 `<node-id>/attempt-<n>.json`(run-relative path),最终 node record `attempts` 字段引用完整历史;后一次成功不覆盖前一次失败证据。
195
+ - 重试复用同一 run、controller identity、skill snapshot、prompt、model 与上游输入;退避等待刷新 `lastActivityAt` 避免误判 node-quiet。
196
+ - 节点终态聚合全部 attempts 的耗时、Token 与事件数;当前 backoff 等待会占用该节点的并发槽。
197
+ - 未声明 `retryPolicy` 的历史 DAG 行为不变(单次执行,不新增 attempt artifact)。
198
+
199
+ 实现:`src/workflows/dag/retry-policy.ts`、`node-execution.ts`、`validate.ts`。测试:`npx vitest run test/dag-node-retry.test.ts test/dag-validate.test.ts test/dag-init-hybrid.test.ts`。
200
+
185
201
  ### Evidence summary guidance(practice convention — 非 runtime)
186
202
 
187
203
  review-heavy DAG 中长 shell stdout 可能掩盖 proof 时,用 **evidence-summary-shell** 作为 authoring pattern。**不是** runtime executor、schema field 或 parser。
@@ -212,6 +228,6 @@ review-heavy DAG 中长 shell stdout 可能掩盖 proof 时,用 **evidence-sum
212
228
  | 10 | writeSet planning | scout 应列出链接的 `./skill/references/**` 为 **writeSet expansion candidates**(P2:遗漏链接 skill ref 迫使 main-session patch) |
213
229
  | 11 | Evidence summary | `evidence-summary-shell` / leading `EVIDENCE:` 行是 **practice convention**,非 runtime executor、schema field 或 parser |
214
230
  | 12 | Featureization | 除非 repeated real-run failure 证明 checklist guidance 不够,勿加 runtime/schema/validator/CLI/executor feature |
215
- | 13 | writeSet / writer backend | `exclusive` node 用 narrow、disjoint path;无 `**`;默认用 Pi write profile,仅在显式启用且 task-fit 时用 Cursor |
231
+ | 13 | writeSet / writer backend | `exclusive` node 用 narrow、disjoint path;无 `**`;固定用 Pi write profile |
216
232
  | 14 | Placeholders | 执行前将 `REPLACE/WITH/...` 换为具体 path |
217
233
  | 15 | Governance | in-flight shell:`HARNESS_ALLOW_ACTIVE_DAG_RUNS=1 bash scripts/check-repo.sh`;archive 后:裸 `bash scripts/check-repo.sh` |
@@ -9,11 +9,10 @@ loop-agent loop init <task-id>
9
9
  loop-agent loop status <task-id>
10
10
  loop-agent loop run <task-id> --action shell-verify --command "bash scripts/check-repo.sh"
11
11
  loop-agent loop run <task-id> --action pi-review
12
- loop-agent loop run <task-id> --action cursor-fix --model composer-2.5
13
12
  loop-agent loop run <task-id> --action dag
14
13
  loop-agent loop run <task-id> --action dag --execute
15
14
  loop-agent loop run <task-id> --auto --max-rounds 3
16
- loop-agent loop run <task-id> --auto --max-rounds 3 --allow-cursor-fix
15
+ loop-agent loop run <task-id> --auto --max-rounds 3
17
16
  loop-agent loop add-signal <task-id> --type human_followup --message "review this boundary before closeout"
18
17
  loop-agent loop closeout <task-id>
19
18
  loop-agent loop record-round <task-id> \
@@ -36,15 +35,14 @@ loop-agent loop record-round <task-id> \
36
35
 
37
36
  - `loop run --action shell-verify` 是 deterministic action;命令 exit code 决定 verification result,输出摘要写入 `loop/verification/round-N.json`。
38
37
  - `loop run --action pi-review` 必须保持 read-only;工具 allowlist 固定为 `read,grep,find,ls`,输出必须包含 `findingSummary`、`failureCategory`、`nextHypothesis`、`recommendedAction`、`fixScope`、`rootCause`,其中 `recommendedAction` 只能是 `implement_fix|replan|pause|done`。
39
- - `loop run --action cursor-fix` 必须读取 task `allowedPaths` / `forbiddenPaths`,拒绝空 allowedPaths allowed/forbidden overlap;对 `complexity=medium|large` 的任务,还必须已有 loop `dag` round 证据,或在 `task.json.dagFallbackReason` 中写明 DAG runtime fallback 原因。调用现有 Cursor bounded executor,并把 one-shot evidence 归档到 `.harness/runs/completed|failed/`。
40
- - `cursor-fix` 只表示 bounded write round 已执行;它不会把 loop 标记 complete,下一步必须进入 `shell-verify` 或 review。
38
+ - 自动写入只能通过 `loop run --action dag --execute` / auto DAG execute;须读取 task `allowedPaths` / `forbiddenPaths` 并审查 writer writeSet。
41
39
  - `loop run --action dag` 默认是 review mode:调用 `dag run-task <task-id> --profile auto --strict-models` 生成 DAG,再用 `dag validate --strict-models --strict-governance` 校验,并记录 review packet。
42
40
  - `loop run --action dag --execute` 才会调用 `run-dag`,随后读取 `dag report --json` 作为 round result;paused DAG 会让 loop 进入 `paused`。
43
41
 
44
42
  ## Auto mode 与写入边界
45
43
 
46
- - `loop run --auto --max-rounds N` 使用 deterministic policy 选择下一轮 action;默认只会自动选择 shell-verify、pi-review、dag review 或 policy pause/block,不自动触发 Cursor 写入。
47
- - 自动 `cursor-fix` 必须显式 opt-in:`task.json.loopAutoWritePolicy="enabled"`,或 `loopAutoWritePolicy="approval-required"` 加 pending approval signal / `--allow-cursor-fix`。即使 opt-in,也必须通过 `allowedPaths`/`forbiddenPaths`/DAG evidence guard;guard 失败会 pause,不会绕过写入边界。
44
+ - `loop run --auto --max-rounds N` 使用 deterministic policy 选择下一轮 action;默认只会自动选择 shell-verify、pi-review、dag review 或 policy pause/block
45
+ - 自动 DAG execute 必须显式 opt-in:`task.json.loopAutoExecutionPolicy="enabled"`,或 `approval-required` 加 pending approval;旧 `loopAutoWritePolicy` fail-fast。
48
46
  - auto mode 遇到同类 failure streak 达阈值会 blocked,避免无限重试。
49
47
 
50
48
  ## Signals