@tea-agent/loop-agent 0.13.0-alpha.0 → 0.13.0-beta.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 (262) hide show
  1. package/AGENTS.md +155 -153
  2. package/CHANGELOG.md +326 -301
  3. package/README.md +345 -326
  4. package/bin/agent-worker.js +22 -22
  5. package/bin/loop-agent.js +21 -21
  6. package/dist/application/dag/generate-task-dag.js +28 -58
  7. package/dist/application/evaluation/candidate-hash.js +75 -0
  8. package/dist/application/evaluation/candidate.js +52 -0
  9. package/dist/application/evaluation/replay.js +289 -0
  10. package/dist/application/evaluation/types.js +130 -0
  11. package/dist/cli/command-definitions.js +17 -4
  12. package/dist/cli/program.js +8 -4
  13. package/dist/commands/cursor-prompt.js +6 -6
  14. package/dist/commands/eval.js +235 -0
  15. package/dist/commands/init.js +544 -506
  16. package/dist/commands/loop-benchmark.js +11 -11
  17. package/dist/commands/pi-reuse-benchmark.js +16 -16
  18. package/dist/executors/pi-sdk-executor.js +38 -24
  19. package/dist/executors/shell-executor.js +34 -2
  20. package/dist/executors/shell-presets.js +20 -0
  21. package/dist/executors/shell-verification.js +7 -0
  22. package/dist/governance/manifest-types.js +1 -0
  23. package/dist/infrastructure/evaluation/candidate-store.js +435 -0
  24. package/dist/infrastructure/evaluation/store.js +40 -0
  25. package/dist/sidecars/cursor-prompt/executor.js +1 -1
  26. package/dist/task/config-types.js +23 -0
  27. package/dist/task/runtime.js +27 -27
  28. package/dist/worker/observe/routes.js +18 -3
  29. package/dist/worker/observe/spec-evidence.js +1 -1
  30. package/dist/worker/observe/static/api.js +46 -46
  31. package/dist/worker/observe/static/app.js +150 -150
  32. package/dist/worker/observe/static/constants.js +148 -148
  33. package/dist/worker/observe/static/copy.js +67 -67
  34. package/dist/worker/observe/static/dag-helpers.js +172 -172
  35. package/dist/worker/observe/static/dag-layout.d.ts +31 -31
  36. package/dist/worker/observe/static/dag-layout.js +83 -83
  37. package/dist/worker/observe/static/dag-model.js +72 -72
  38. package/dist/worker/observe/static/dom.js +61 -61
  39. package/dist/worker/observe/static/format-pool.js +67 -67
  40. package/dist/worker/observe/static/format.js +292 -292
  41. package/dist/worker/observe/static/index.html +308 -308
  42. package/dist/worker/observe/static/kpi.js +94 -94
  43. package/dist/worker/observe/static/relations.js +133 -133
  44. package/dist/worker/observe/static/router.js +93 -93
  45. package/dist/worker/observe/static/run-processing.js +148 -148
  46. package/dist/worker/observe/static/shell-chrome.js +68 -68
  47. package/dist/worker/observe/static/state.js +253 -253
  48. package/dist/worker/observe/static/styles.css +1902 -1902
  49. package/dist/worker/observe/static/views/batch.js +227 -227
  50. package/dist/worker/observe/static/views/dag-graph.js +172 -172
  51. package/dist/worker/observe/static/views/dag-inspector.js +607 -596
  52. package/dist/worker/observe/static/views/dag.js +362 -362
  53. package/dist/worker/observe/static/views/dashboard.js +445 -445
  54. package/dist/worker/observe/static/views/failures.js +143 -143
  55. package/dist/worker/observe/static/views/feature.js +492 -492
  56. package/dist/worker/observe/static/views/pool.js +350 -350
  57. package/dist/worker/observe/static/views/run.js +453 -453
  58. package/dist/worker/observe/static/views/session-timeline.js +205 -205
  59. package/dist/worker/observe/static/views/shell.js +7 -7
  60. package/dist/worker/observe/static/views/task.js +314 -314
  61. package/dist/worker/observe/static/views/timeline.js +163 -163
  62. package/dist/workflows/dag/backend-test-analysis-contract.js +120 -0
  63. package/dist/workflows/dag/canvas-observer.js +275 -275
  64. package/dist/workflows/dag/dynamic-runtime/map.js +90 -2
  65. package/dist/workflows/dag/init-hybrid.js +1415 -200
  66. package/dist/workflows/dag/node-execution.js +9 -0
  67. package/dist/workflows/dag/prompt.js +9 -0
  68. package/dist/workflows/dag/report.js +35 -1
  69. package/dist/workflows/dag/runner.js +28 -2
  70. package/dist/workflows/dag/task-demand-routing.js +383 -0
  71. package/dist/workflows/dag/types.js +50 -13
  72. package/dist/workflows/dag/upstream-artifacts.js +1 -0
  73. package/dist/workflows/dag/validate.js +59 -1
  74. package/docs/README.md +106 -104
  75. package/docs/agent-dag-recovery-playbook.md +195 -193
  76. package/docs/agent-dag-runner.md +67 -67
  77. package/docs/architecture/README.md +26 -26
  78. package/docs/architecture/dag-execution.md +140 -140
  79. package/docs/architecture/evolution.md +54 -54
  80. package/docs/architecture/facts-and-state.md +71 -71
  81. package/docs/architecture/runtime-boundaries.md +191 -191
  82. package/docs/architecture/system-overview.md +93 -93
  83. package/docs/architecture/worker-and-feature.md +85 -85
  84. package/docs/cursor-prompt-sidecar.md +36 -36
  85. package/docs/decisions/README.md +18 -18
  86. package/docs/design/README.md +167 -85
  87. package/docs/development-principles.md +73 -73
  88. package/docs/exec-plans/README.md +6 -6
  89. package/docs/exec-plans/active/README.md +15 -11
  90. package/docs/exec-plans/completed/README.md +85 -74
  91. package/docs/feature-workflow.md +389 -339
  92. package/docs/harness-methodology-debugging.md +153 -153
  93. package/docs/harness-methodology-tdd.md +130 -130
  94. package/docs/harness-methodology-verification.md +27 -27
  95. package/docs/init-surface.manifest.json +289 -280
  96. package/docs/loop-agent-harness.md +142 -141
  97. package/docs/production-readiness.md +96 -96
  98. package/docs/progress/README.md +64 -58
  99. package/docs/reports/README.md +117 -100
  100. package/docs/skills/README.md +7 -7
  101. package/docs/skills/vetted-skill-registry.md +29 -27
  102. package/docs/templates/adr.md +60 -60
  103. package/docs/templates/agent-dag-authority-surface-audit.prompt.md +94 -94
  104. package/docs/templates/agent-dag-decision-envelope.schema.json +213 -213
  105. package/docs/templates/agent-dag-decision-gate-dogfood-report.md +117 -117
  106. package/docs/templates/agent-dag-decision-gate.prompt.md +246 -246
  107. package/docs/templates/agent-dag-process-supervisor.prompt.md +98 -98
  108. package/docs/templates/agent-dag-report.schema.json +473 -473
  109. package/docs/templates/agent-dag-review-verdict.prompt.md +68 -68
  110. package/docs/templates/agent-dag.base.json +190 -190
  111. package/docs/templates/agent-dag.final-verification.json +185 -185
  112. package/docs/templates/agent-dag.schema.json +411 -383
  113. package/docs/templates/agent-dag.supervised-implementation.json +501 -501
  114. package/docs/templates/backend-test-analysis.schema.json +44 -0
  115. package/docs/templates/backend-test-dag.generate-pytest.prompt.md +202 -139
  116. package/docs/templates/backend-test-dag.json +311 -288
  117. package/docs/templates/backend-test-dag.retrospect.prompt.md +125 -125
  118. package/docs/templates/backend-test-dag.review-cases.prompt.md +81 -81
  119. package/docs/templates/exec-plan.md +64 -64
  120. package/docs/templates/feature-spec.md +53 -53
  121. package/docs/templates/frontend-design-contract.md +42 -33
  122. package/docs/templates/frontend-task-constraints.md +35 -25
  123. package/docs/templates/frontend-task-requirement.md +70 -61
  124. package/docs/templates/frontend-test-dag.generate-cases.prompt.md +5 -0
  125. package/docs/templates/frontend-test-dag.json +23 -0
  126. package/docs/templates/frontend-test-dag.retrieve-context.prompt.md +3 -0
  127. package/docs/templates/frontend-test-dag.retrospect.prompt.md +3 -0
  128. package/docs/templates/frontend-test-dag.review-cases.prompt.md +3 -0
  129. package/docs/templates/frontend-test-dag.review-execution.prompt.md +3 -0
  130. package/docs/templates/harness.schema.json +221 -221
  131. package/docs/templates/hybrid-dag.json +188 -188
  132. package/docs/templates/init-evolution-review.md +35 -35
  133. package/docs/templates/interactive-ui-round2-experiment.md +66 -66
  134. package/docs/templates/knowledge-graph-bootstrap-dag.json +118 -118
  135. package/docs/templates/knowledge-sync-dag.json +178 -177
  136. package/docs/templates/knowledge-sync-draft.schema.json +71 -71
  137. package/docs/templates/product-line/AGENTS.md +8 -8
  138. package/docs/templates/product-line/README.md +9 -9
  139. package/docs/templates/product-line/acceptance.yaml +14 -14
  140. package/docs/templates/product-line/closeout.yaml +9 -9
  141. package/docs/templates/product-line/design.md +13 -13
  142. package/docs/templates/product-line/links.md +10 -10
  143. package/docs/templates/product-line/requirement.md +17 -17
  144. package/docs/templates/product-line/task-graph.yaml +15 -15
  145. package/docs/templates/product-line/task.yaml +64 -64
  146. package/docs/templates/product-line/test-plan.md +7 -7
  147. package/docs/templates/production-readiness-checklist.md +57 -57
  148. package/docs/templates/progress-log.md +17 -17
  149. package/docs/templates/project-start-checklist.md +9 -9
  150. package/docs/templates/qa-report.md +48 -48
  151. package/docs/templates/sprint-contract.md +29 -29
  152. package/docs/templates/worker-dogfood-evidence.md +80 -80
  153. package/docs/templates/worker-dogfood-setup.md +68 -68
  154. package/docs/verification-matrix.md +70 -67
  155. package/examples/decision-gate-agent-dag.json +177 -177
  156. package/examples/example-dag.json +46 -46
  157. package/examples/hybrid-loop-agent-dag.json +189 -189
  158. package/harness.json +66 -66
  159. package/package.json +88 -52
  160. package/scripts/check-product-line-docs.sh +29 -29
  161. package/scripts/check-task-pool-root.sh +32 -32
  162. package/scripts/kb-bootstrap-init-skeleton.sh +240 -239
  163. package/scripts/kb-graph-incremental-prepare.mjs +386 -372
  164. package/scripts/kb-graph-incremental-prepare.sh +5 -5
  165. package/scripts/kb-graph-materialize.mjs +105 -105
  166. package/scripts/kb-graph-materialize.sh +4 -4
  167. package/scripts/kb-graph-promote.mjs +164 -153
  168. package/scripts/kb-graph-promote.sh +4 -4
  169. package/scripts/kb-query.mjs +554 -554
  170. package/scripts/kb-query.sh +5 -5
  171. package/skills/agent-worker/SKILL.md +39 -39
  172. package/skills/agent-worker/references/agent-worker-operator.md +60 -60
  173. package/skills/ai-engineering-context/SKILL.md +48 -48
  174. package/skills/analyze-product-dependencies/SKILL.md +67 -0
  175. package/skills/analyze-product-dependencies/agents/openai.yaml +4 -0
  176. package/skills/analyze-product-dependencies/references/api-documentation-schema.md +30 -0
  177. package/skills/analyze-product-dependencies/references/dependency-analysis-schema.md +28 -0
  178. package/skills/analyze-product-dependencies/references/example.md +76 -0
  179. package/skills/analyze-product-dependencies/references/forward-test-cases.md +35 -0
  180. package/skills/analyze-product-dependencies/references/input-contract.md +11 -0
  181. package/skills/analyze-product-dependencies/references/scouting-rules.md +61 -0
  182. package/skills/analyze-product-dependencies/scripts/test-validators.mjs +267 -0
  183. package/skills/analyze-product-dependencies/scripts/validate-api-documentation.mjs +101 -0
  184. package/skills/analyze-product-dependencies/scripts/validate-dependency-analysis.mjs +142 -0
  185. package/skills/analyze-product-dependencies/scripts/validate-product-requirement-input.mjs +76 -0
  186. package/skills/analyze-product-dependencies/scripts/validation-helpers.mjs +146 -0
  187. package/skills/analyze-product-requirements/SKILL.md +90 -0
  188. package/skills/analyze-product-requirements/agents/openai.yaml +4 -0
  189. package/skills/analyze-product-requirements/references/acceptance-criteria.md +91 -0
  190. package/skills/analyze-product-requirements/references/clarification-and-knowledge.md +56 -0
  191. package/skills/analyze-product-requirements/references/example.md +86 -0
  192. package/skills/analyze-product-requirements/references/forward-test-cases.md +66 -0
  193. package/skills/analyze-product-requirements/references/product-analysis-schema.md +32 -0
  194. package/skills/analyze-product-requirements/references/product-requirement-schema.md +33 -0
  195. package/skills/analyze-product-requirements/references/requirement-clarification-schema.md +35 -0
  196. package/skills/analyze-product-requirements/scripts/test-validators.mjs +193 -0
  197. package/skills/analyze-product-requirements/scripts/validate-product-analysis.mjs +69 -0
  198. package/skills/analyze-product-requirements/scripts/validate-product-requirement.mjs +97 -0
  199. package/skills/analyze-product-requirements/scripts/validate-requirement-clarification.mjs +98 -0
  200. package/skills/analyze-product-requirements/scripts/validation-helpers.mjs +156 -0
  201. package/skills/code-review-core/SKILL.md +20 -20
  202. package/skills/codebase-scout/SKILL.md +19 -19
  203. package/skills/frontend-design-review/SKILL.md +66 -61
  204. package/skills/frontend-design-review/references/review-checklist.md +58 -37
  205. package/skills/frontend-implementation/SKILL.md +45 -52
  206. package/skills/frontend-implementation/references/code-standards.md +32 -34
  207. package/skills/frontend-implementation/references/design-spec.md +46 -46
  208. package/skills/frontend-implementation/references/node-contracts.md +76 -63
  209. package/skills/frontend-review/SKILL.md +59 -53
  210. package/skills/frontend-review/references/review-findings.md +47 -42
  211. package/skills/frontend-verification/SKILL.md +53 -40
  212. package/skills/frontend-verification/references/verification-checklist.md +68 -56
  213. package/skills/grill-me/SKILL.md +10 -10
  214. package/skills/grill-with-docs/SKILL.md +88 -88
  215. package/skills/grill-with-docs/adr-format.md +47 -47
  216. package/skills/grill-with-docs/context-format.md +60 -60
  217. package/skills/init-capability-evolution/SKILL.md +70 -70
  218. package/skills/loop-agent/SKILL.md +151 -151
  219. package/skills/loop-agent/references/README.md +67 -67
  220. package/skills/loop-agent/references/command-reference.md +505 -453
  221. package/skills/loop-agent/references/docs-converge.md +126 -126
  222. package/skills/loop-agent/references/harness-policy.md +263 -263
  223. package/skills/loop-agent/references/hybrid-dag.md +238 -233
  224. package/skills/loop-agent/references/learned/README.md +21 -21
  225. package/skills/loop-agent/references/long-running-loop.md +57 -57
  226. package/skills/loop-agent/references/model-routing.md +36 -36
  227. package/skills/loop-agent/references/multi-worktree.md +54 -54
  228. package/skills/loop-agent/references/one-shot-runs.md +85 -85
  229. package/skills/loop-agent/references/orchestrator-and-interventions.md +169 -169
  230. package/skills/loop-agent/references/pi-prompt.md +23 -23
  231. package/skills/loop-agent/references/pi-subagent-assisted-mode.md +84 -84
  232. package/skills/loop-agent/references/post-implementation-and-patterns.md +44 -44
  233. package/skills/loop-agent/references/task-workflow.md +89 -89
  234. package/skills/loop-agent/references/verification-and-failure-handling.md +139 -139
  235. package/skills/playwright-cli/SKILL.md +420 -0
  236. package/skills/playwright-cli/references/element-attributes.md +23 -0
  237. package/skills/playwright-cli/references/playwright-tests.md +39 -0
  238. package/skills/playwright-cli/references/request-mocking.md +87 -0
  239. package/skills/playwright-cli/references/running-code.md +241 -0
  240. package/skills/playwright-cli/references/session-management.md +225 -0
  241. package/skills/playwright-cli/references/storage-state.md +275 -0
  242. package/skills/playwright-cli/references/test-generation.md +433 -0
  243. package/skills/playwright-cli/references/tracing.md +139 -0
  244. package/skills/playwright-cli/references/video-recording.md +143 -0
  245. package/skills/playwright-cli-case-generator/SKILL.md +74 -0
  246. package/skills/requesting-code-review/SKILL.md +101 -101
  247. package/skills/requesting-code-review/code-reviewer.md +168 -168
  248. package/skills/systematic-debugging/CREATION-LOG.md +119 -119
  249. package/skills/systematic-debugging/SKILL.md +296 -296
  250. package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -158
  251. package/skills/systematic-debugging/condition-based-waiting.md +115 -115
  252. package/skills/systematic-debugging/defense-in-depth.md +122 -122
  253. package/skills/systematic-debugging/find-polluter.sh +63 -63
  254. package/skills/systematic-debugging/root-cause-tracing.md +169 -169
  255. package/skills/systematic-debugging/test-academic.md +14 -14
  256. package/skills/systematic-debugging/test-pressure-1.md +58 -58
  257. package/skills/systematic-debugging/test-pressure-2.md +68 -68
  258. package/skills/systematic-debugging/test-pressure-3.md +69 -69
  259. package/skills/test-driven-development/SKILL.md +20 -20
  260. package/skills/using-git-worktrees/SKILL.md +215 -215
  261. package/skills/verification-before-completion/SKILL.md +154 -154
  262. package/skills/webapp-testing/SKILL.md +19 -19
@@ -1,501 +1,501 @@
1
- {
2
- "$schema": "./agent-dag.schema.json",
3
- "version": 3,
4
- "title": "Agent DAG supervised implementation template",
5
- "runtimeContract": {
6
- "schemaVersion": 1,
7
- "agentRuntime": "pi-only",
8
- "repairWriterProtocol": "explicit-node-v1"
9
- },
10
- "objective": "Demonstrate a reusable supervised implementation DAG: contract → parallel scouts → plan → write-set audit → write-set gate → implement → soft verify → process supervisor → repair → hard verify → review verdict → review gate → decision gate → closeout. Write-set, process, and review verdict nodes emit first-line VERDICT for deterministic gates, reducing main-session intervention.",
11
- "successCriteria": [
12
- "contract-pi returns a read-only implementation contract with narrow write boundaries",
13
- "scout-src and scout-tests run in parallel without write conflicts",
14
- "plan-pi produces a writeSet coverage matrix with explicit exclusive owners",
15
- "write-set-audit-pi validates coverage and returns VERDICT pass or request-revision",
16
- "write-set-gate-shell blocks implement-pi unless write-set-audit-pi first-line VERDICT is pass",
17
- "implement-pi and repair-pi write only inside declared writeSet",
18
- "soft-verify-shell archives focused test exit codes before process supervision",
19
- "process-supervisor-pi returns first-line VERDICT pass or request-revision",
20
- "process-gate-shell deterministically accepts valid supervisor verdicts",
21
- "hard-verify-shell archives lint/typecheck/focused tests with active-DAG governance when check-repo runs",
22
- "review-pi returns first-line VERDICT using review verdict prompt invariants",
23
- "review-gate-shell blocks downstream nodes unless review VERDICT is pass",
24
- "decision-pi returns DECISION_ENVELOPE_JSON without pausing runtime by default",
25
- "closeout-pi summarizes evidence without writing files"
26
- ],
27
- "globalConstraints": [
28
- "Replace every REPLACE/WITH/... placeholder with concrete repo paths before execution; do not leave template placeholders in production DAG JSON.",
29
- "Do not commit from DAG nodes; main session inspects and commits after Decision Gate approval.",
30
- "Use only existing executors: pi, shell, static. Cursor is available only through the explicit cursor-prompt sidecar, never as a DAG executor. Pi writer nodes must set toolProfile=write.",
31
- "Read-only nodes must not write repository files, including root artifacts/**.",
32
- "Exclusive writer nodes must stay within declared writeSet.",
33
- "Do not implement automatic retry/resume or mutate historical completed facts.",
34
- "Do not create executor: supervisor; supervisor is a role on executor=pi.",
35
- "Do not create executor: human, executor: decision, or browser executor.",
36
- "Shell governance inside active DAG must use HARNESS_ALLOW_ACTIVE_DAG_RUNS=1 bash scripts/check-repo.sh.",
37
- "On Windows, Bash script commands must run through Git Bash or a configured compatible Bash; do not require WSL or POSIX filesystem paths.",
38
- "Actual file operation paths must be macOS/Windows compatible; use / only for stable repo refs, JSON/Markdown evidence refs, and glob conventions.",
39
- "Prompt templates must not ask main session to write artifacts; node output is the artifact and runner archives it under .harness/dag-runs/.",
40
- "Every task must explicitly declare executor; defaults.executor is schema-only and not a runtime fallback.",
41
- "Prefer same-rank parallel read-only scouts over serial chains when outputs are independent.",
42
- "Same-rank exclusive writeSet entries must be disjoint.",
43
- "Use executorModels for model routing; do not add defaults.model or legacy top-level models."
44
- ],
45
- "defaults": {
46
- "executor": "pi",
47
- "contextProfile": "slim",
48
- "skills": [
49
- "ai-engineering-context"
50
- ],
51
- "writePolicy": "read-only"
52
- },
53
- "skillsByRole": {
54
- "planner": [
55
- "loop-agent"
56
- ],
57
- "scout": [
58
- "ai-engineering-context"
59
- ],
60
- "implementer": [
61
- "verification-before-completion"
62
- ],
63
- "reviewer": [
64
- "requesting-code-review",
65
- "verification-before-completion"
66
- ],
67
- "supervisor": [
68
- "verification-before-completion",
69
- "loop-agent"
70
- ],
71
- "verifier": [
72
- "verification-before-completion",
73
- "systematic-debugging"
74
- ],
75
- "closeout": [
76
- "loop-agent",
77
- "verification-before-completion"
78
- ]
79
- },
80
- "executorModels": {
81
- "pi": {
82
- "LOW": "gpt-5.3-codex-spark",
83
- "MED": "glm-5.2",
84
- "HIGH": "gpt-5.5"
85
- }
86
- },
87
- "verifyStrategy": {
88
- "intermediateQuota": "1",
89
- "finalQuota": "full",
90
- "focusedCommandSource": "adapter"
91
- },
92
- "tasks": [
93
- {
94
- "id": "contract-pi",
95
- "depends_on": [],
96
- "complexity": "MED",
97
- "executor": "pi",
98
- "role": "planner",
99
- "writePolicy": "read-only",
100
- "allowedPaths": [
101
- "**"
102
- ],
103
- "forbiddenPaths": [
104
- ".harness/**",
105
- "artifacts/**"
106
- ],
107
- "outputContract": "Plain Markdown implementation contract: scope, risks, parallel scout opportunities, verification expectations. No file writes.",
108
- "subtask_prompt": "Read the DAG objective and success criteria. Return a concise implementation contract covering scope, narrow write boundaries, risks, and verification expectations. Do not edit files or write root artifacts/**."
109
- },
110
- {
111
- "id": "scout-src",
112
- "depends_on": [
113
- "contract-pi"
114
- ],
115
- "complexity": "LOW",
116
- "executor": "pi",
117
- "role": "scout",
118
- "writePolicy": "read-only",
119
- "allowedPaths": [
120
- "REPLACE/WITH/SOURCE/PATH/**"
121
- ],
122
- "forbiddenPaths": [
123
- ".harness/**",
124
- "artifacts/**"
125
- ],
126
- "outputContract": "Plain Markdown source reconnaissance summary; no file writes.",
127
- "subtask_prompt": "Perform read-only source reconnaissance under allowedPaths. List relevant files, patterns, and risks. Do not edit files."
128
- },
129
- {
130
- "id": "scout-tests",
131
- "depends_on": [
132
- "contract-pi"
133
- ],
134
- "complexity": "LOW",
135
- "executor": "pi",
136
- "role": "scout",
137
- "writePolicy": "read-only",
138
- "allowedPaths": [
139
- "REPLACE/WITH/TEST/PATH/**"
140
- ],
141
- "forbiddenPaths": [
142
- ".harness/**",
143
- "artifacts/**"
144
- ],
145
- "outputContract": "Plain Markdown test coverage reconnaissance summary; no file writes.",
146
- "subtask_prompt": "Perform read-only test reconnaissance under allowedPaths. List relevant tests, coverage gaps, and focused verification commands. Do not edit files."
147
- },
148
- {
149
- "id": "plan-pi",
150
- "depends_on": [
151
- "scout-src",
152
- "scout-tests"
153
- ],
154
- "complexity": "MED",
155
- "executor": "pi",
156
- "role": "planner",
157
- "writePolicy": "read-only",
158
- "allowedPaths": [
159
- "**"
160
- ],
161
- "forbiddenPaths": [
162
- ".harness/**",
163
- "artifacts/**"
164
- ],
165
- "outputContract": "Plain Markdown plan with WriteSet Coverage Matrix (file → owning exclusive node id). No file writes.",
166
- "subtask_prompt": "Synthesize upstream scouts into an implementation plan. Include a WriteSet Coverage Matrix table mapping each file that must change to exactly one future exclusive implementer/repair node id. Flag parallel work and verification commands. Do not edit files."
167
- },
168
- {
169
- "id": "write-set-audit-pi",
170
- "depends_on": [
171
- "plan-pi"
172
- ],
173
- "complexity": "MED",
174
- "executor": "pi",
175
- "role": "reviewer",
176
- "writePolicy": "read-only",
177
- "allowedPaths": [
178
- "**"
179
- ],
180
- "forbiddenPaths": [
181
- ".harness/**",
182
- "artifacts/**"
183
- ],
184
- "outputContract": "Plain Markdown whose first non-empty line is VERDICT: pass or VERDICT: request-revision; includes writeSet coverage findings. No file writes.",
185
- "subtask_prompt": "Audit plan-pi WriteSet Coverage Matrix against the contract. First non-empty line must be exactly VERDICT: pass or VERDICT: request-revision. List Critical/Important gaps when any required file lacks a single exclusive owner or overlaps forbidden paths. Do not edit files or write root artifacts/**."
186
- },
187
- {
188
- "id": "write-set-gate-shell",
189
- "depends_on": [
190
- "write-set-audit-pi"
191
- ],
192
- "complexity": "LOW",
193
- "executor": "shell",
194
- "role": "verifier",
195
- "writePolicy": "read-only",
196
- "allowedPaths": [
197
- "**"
198
- ],
199
- "forbiddenPaths": [
200
- ".harness/**",
201
- "artifacts/**"
202
- ],
203
- "outputContract": "Deterministic write-set audit verdict gate: exit 0 only when write-set-audit-pi first non-empty assistant output line is pass.",
204
- "subtask_prompt": "Deterministic gate: block implement-pi unless write-set-audit-pi emitted VERDICT: pass.",
205
- "shell": {
206
- "verdictGate": {
207
- "fromNodeId": "write-set-audit-pi",
208
- "accept": [
209
- "VERDICT: pass"
210
- ],
211
- "label": "write-set audit",
212
- "lineMode": "first-verdict-line"
213
- },
214
- "cwd": ".",
215
- "timeoutMs": 60000
216
- }
217
- },
218
- {
219
- "id": "implement-pi",
220
- "depends_on": [
221
- "write-set-gate-shell"
222
- ],
223
- "complexity": "HIGH",
224
- "executor": "pi",
225
- "role": "implementer",
226
- "writePolicy": "exclusive",
227
- "writeSet": [
228
- "REPLACE/WITH/IMPLEMENT/WRITESET/**"
229
- ],
230
- "allowedPaths": [
231
- "REPLACE/WITH/IMPLEMENT/**"
232
- ],
233
- "forbiddenPaths": [
234
- ".harness/**",
235
- "artifacts/**"
236
- ],
237
- "outputContract": "Implementation summary with changed files, focused tests run, and risks. Must not ask main session to write artifacts.",
238
- "subtask_prompt": "Implement the approved change within writeSet only after write-set-gate-shell passed (upstream VERDICT: pass). If write-set gate blocked, output blocked reason without editing files. Keep changes minimal and run focused tests inside allowedPaths when implementing.",
239
- "toolProfile": "write"
240
- },
241
- {
242
- "id": "soft-verify-shell",
243
- "depends_on": [
244
- "implement-pi"
245
- ],
246
- "complexity": "LOW",
247
- "executor": "shell",
248
- "role": "verifier",
249
- "writePolicy": "read-only",
250
- "allowedPaths": [
251
- "REPLACE/WITH/IMPLEMENT/**",
252
- "./**"
253
- ],
254
- "forbiddenPaths": [
255
- ".harness/**",
256
- "artifacts/**"
257
- ],
258
- "outputContract": "Archived shell stdout/stderr with exit codes for focused verification; no worktree writes.",
259
- "subtask_prompt": "Run focused soft verification before process supervision.",
260
- "shell": {
261
- "commands": [
262
- "npx vitest run REPLACE/WITH/FOCUSED/TEST/GLOB.test.ts --reporter=dot"
263
- ],
264
- "verifyEvidence": {
265
- "phase": "intermediate",
266
- "quota": "1",
267
- "commandSource": "inline",
268
- "commandCount": 1,
269
- "commandLabels": [
270
- "focused template verification"
271
- ]
272
- },
273
- "cwd": ".",
274
- "timeoutMs": 300000
275
- }
276
- },
277
- {
278
- "id": "process-supervisor-pi",
279
- "depends_on": [
280
- "soft-verify-shell",
281
- "implement-pi"
282
- ],
283
- "complexity": "HIGH",
284
- "executor": "pi",
285
- "role": "supervisor",
286
- "writePolicy": "read-only",
287
- "allowedPaths": [
288
- "**"
289
- ],
290
- "forbiddenPaths": [
291
- ".harness/**",
292
- "artifacts/**"
293
- ],
294
- "outputContract": "Plain Markdown whose first non-empty line is VERDICT: pass or VERDICT: request-revision, followed by a REPAIR_ARTIFACT_JSON fenced block. Audit writeSet coverage, boundary drift, verification gaps, repair scope. No file writes.",
295
- "subtask_prompt_markdown": "./agent-dag-process-supervisor.prompt.md"
296
- },
297
- {
298
- "id": "process-gate-shell",
299
- "depends_on": [
300
- "process-supervisor-pi"
301
- ],
302
- "complexity": "LOW",
303
- "executor": "shell",
304
- "role": "verifier",
305
- "writePolicy": "read-only",
306
- "allowedPaths": [
307
- "**"
308
- ],
309
- "forbiddenPaths": [
310
- ".harness/**",
311
- "artifacts/**"
312
- ],
313
- "outputContract": "Deterministic process supervisor verdict gate: exit 0 when first non-empty assistant output line is pass or request-revision; exit non-zero otherwise.",
314
- "subtask_prompt": "Deterministic gate: validate process-supervisor-pi first-line VERDICT before repair/hard-verify.",
315
- "shell": {
316
- "verdictGate": {
317
- "fromNodeId": "process-supervisor-pi",
318
- "accept": [
319
- "VERDICT: pass",
320
- "VERDICT: request-revision"
321
- ],
322
- "label": "process",
323
- "lineMode": "first-verdict-line"
324
- },
325
- "repairArtifactGate": {
326
- "fromNodeId": "process-supervisor-pi",
327
- "repairNodeId": "repair-pi"
328
- },
329
- "cwd": ".",
330
- "timeoutMs": 60000
331
- }
332
- },
333
- {
334
- "id": "repair-pi",
335
- "depends_on": [
336
- "process-gate-shell",
337
- "process-supervisor-pi"
338
- ],
339
- "complexity": "HIGH",
340
- "executor": "pi",
341
- "role": "implementer",
342
- "writePolicy": "exclusive",
343
- "writeSet": [
344
- "REPLACE/WITH/REPAIR/WRITESET/**",
345
- "docs/templates/agent-dag.supervised-implementation.json",
346
- "docs/templates/agent-dag-process-supervisor.prompt.md",
347
- "docs/templates/agent-dag-review-verdict.prompt.md",
348
- "docs/templates/agent-dag.schema.json",
349
- "./src/workflows/dag/types.ts",
350
- "./src/workflows/dag/skills.ts",
351
- "./src/executors/dag-pi-executor.ts"
352
- ],
353
- "allowedPaths": [
354
- "REPLACE/WITH/REPAIR/**",
355
- "docs/templates/**",
356
- "./src/workflows/dag/**",
357
- "./src/executors/**"
358
- ],
359
- "forbiddenPaths": [
360
- ".harness/**",
361
- "artifacts/**"
362
- ],
363
- "outputContract": "Repair summary or explicit no-op when process supervisor passed; changed files and tests when revised. Must not ask main session to write artifacts.",
364
- "subtask_prompt": "If process-supervisor-pi returned VERDICT: request-revision, apply bounded fixes within writeSet addressing REPAIR_ARTIFACT_JSON.fixScope and preserving REPAIR_ARTIFACT_JSON.invariant. Use REPAIR_ARTIFACT_JSON.failureClass and rootCause before raw logs; raw log is fallback evidence only when rawLogFallbackAllowed is true. If VERDICT: pass, return no-op with evidence. Re-run focused tests when you change code.",
365
- "toolProfile": "write"
366
- },
367
- {
368
- "id": "hard-verify-shell",
369
- "depends_on": [
370
- "repair-pi"
371
- ],
372
- "complexity": "LOW",
373
- "executor": "shell",
374
- "role": "verifier",
375
- "writePolicy": "read-only",
376
- "allowedPaths": [
377
- "./**",
378
- "docs/**",
379
- "scripts/**"
380
- ],
381
- "forbiddenPaths": [
382
- ".harness/**",
383
- "artifacts/**"
384
- ],
385
- "outputContract": "Archived hard verification stdout/stderr with exit codes; no worktree writes.",
386
- "subtask_prompt": "Run hard verification after repair round.",
387
- "shell": {
388
- "preset": "loop-agent-standard-verify",
389
- "commands": [
390
- "HARNESS_ALLOW_ACTIVE_DAG_RUNS=1 bash scripts/check-repo.sh"
391
- ],
392
- "verifyEvidence": {
393
- "phase": "final",
394
- "quota": "full",
395
- "commandSource": "inline",
396
- "commandCount": 1,
397
- "commandLabels": [
398
- "active DAG repo governance checks"
399
- ],
400
- "finalFullRequired": true
401
- },
402
- "cwd": ".",
403
- "timeoutMs": 300000
404
- }
405
- },
406
- {
407
- "id": "review-pi",
408
- "depends_on": [
409
- "hard-verify-shell"
410
- ],
411
- "complexity": "HIGH",
412
- "executor": "pi",
413
- "role": "reviewer",
414
- "writePolicy": "read-only",
415
- "allowedPaths": [
416
- "**"
417
- ],
418
- "forbiddenPaths": [
419
- ".harness/**",
420
- "artifacts/**"
421
- ],
422
- "outputContract": "Plain Markdown whose first non-empty line is VERDICT: pass or VERDICT: request-revision; Critical/Important findings force request-revision. No file writes.",
423
- "subtask_prompt_markdown": "./agent-dag-review-verdict.prompt.md"
424
- },
425
- {
426
- "id": "review-gate-shell",
427
- "depends_on": [
428
- "review-pi"
429
- ],
430
- "complexity": "LOW",
431
- "executor": "shell",
432
- "role": "verifier",
433
- "writePolicy": "read-only",
434
- "allowedPaths": [
435
- "**"
436
- ],
437
- "forbiddenPaths": [
438
- ".harness/**",
439
- "artifacts/**"
440
- ],
441
- "outputContract": "Deterministic review verdict gate: exit 0 only when review-pi first non-empty assistant output line is pass.",
442
- "subtask_prompt": "Deterministic gate: block decision gate unless review-pi emitted VERDICT: pass.",
443
- "shell": {
444
- "verdictGate": {
445
- "fromNodeId": "review-pi",
446
- "accept": [
447
- "VERDICT: pass"
448
- ],
449
- "label": "review",
450
- "lineMode": "first-verdict-line"
451
- },
452
- "cwd": ".",
453
- "timeoutMs": 60000
454
- }
455
- },
456
- {
457
- "id": "decision-pi",
458
- "depends_on": [
459
- "review-gate-shell",
460
- "hard-verify-shell"
461
- ],
462
- "complexity": "HIGH",
463
- "executor": "pi",
464
- "role": "reviewer",
465
- "writePolicy": "read-only",
466
- "allowedPaths": [
467
- "**"
468
- ],
469
- "forbiddenPaths": [
470
- ".harness/**",
471
- "artifacts/**"
472
- ],
473
- "outputContract": "Markdown with exactly one DECISION_ENVELOPE_JSON fenced block plus evidence summary. No file writes.",
474
- "subtask_prompt_markdown": "./agent-dag-decision-gate.prompt.md",
475
- "decisionGate": {
476
- "enabled": true,
477
- "schemaVersion": 1,
478
- "mode": "record-only"
479
- }
480
- },
481
- {
482
- "id": "closeout-pi",
483
- "depends_on": [
484
- "decision-pi"
485
- ],
486
- "complexity": "MED",
487
- "executor": "pi",
488
- "role": "closeout",
489
- "writePolicy": "read-only",
490
- "allowedPaths": [
491
- "**"
492
- ],
493
- "forbiddenPaths": [
494
- ".harness/**",
495
- "artifacts/**"
496
- ],
497
- "outputContract": "Plain Markdown closeout referencing verification, supervisor/review verdicts, and decision envelope. No file writes.",
498
- "subtask_prompt": "Summarize the supervised DAG outcome: contract, write-set audit, implement/repair, soft/hard verify, process supervisor and review verdicts, decision-pi envelope, and recommended main-session next step. Do not edit files or write root artifacts/**."
499
- }
500
- ]
501
- }
1
+ {
2
+ "$schema": "./agent-dag.schema.json",
3
+ "version": 3,
4
+ "title": "Agent DAG supervised implementation template",
5
+ "runtimeContract": {
6
+ "schemaVersion": 1,
7
+ "agentRuntime": "pi-only",
8
+ "repairWriterProtocol": "explicit-node-v1"
9
+ },
10
+ "objective": "Demonstrate a reusable supervised implementation DAG: contract → parallel scouts → plan → write-set audit → write-set gate → implement → soft verify → process supervisor → repair → hard verify → review verdict → review gate → decision gate → closeout. Write-set, process, and review verdict nodes emit first-line VERDICT for deterministic gates, reducing main-session intervention.",
11
+ "successCriteria": [
12
+ "contract-pi returns a read-only implementation contract with narrow write boundaries",
13
+ "scout-src and scout-tests run in parallel without write conflicts",
14
+ "plan-pi produces a writeSet coverage matrix with explicit exclusive owners",
15
+ "write-set-audit-pi validates coverage and returns VERDICT pass or request-revision",
16
+ "write-set-gate-shell blocks implement-pi unless write-set-audit-pi first-line VERDICT is pass",
17
+ "implement-pi and repair-pi write only inside declared writeSet",
18
+ "soft-verify-shell archives focused test exit codes before process supervision",
19
+ "process-supervisor-pi returns first-line VERDICT pass or request-revision",
20
+ "process-gate-shell deterministically accepts valid supervisor verdicts",
21
+ "hard-verify-shell archives lint/typecheck/focused tests with active-DAG governance when check-repo runs",
22
+ "review-pi returns first-line VERDICT using review verdict prompt invariants",
23
+ "review-gate-shell blocks downstream nodes unless review VERDICT is pass",
24
+ "decision-pi returns DECISION_ENVELOPE_JSON without pausing runtime by default",
25
+ "closeout-pi summarizes evidence without writing files"
26
+ ],
27
+ "globalConstraints": [
28
+ "Replace every REPLACE/WITH/... placeholder with concrete repo paths before execution; do not leave template placeholders in production DAG JSON.",
29
+ "Do not commit from DAG nodes; main session inspects and commits after Decision Gate approval.",
30
+ "Use only existing executors: pi, shell, static. Cursor is available only through the explicit cursor-prompt sidecar, never as a DAG executor. Pi writer nodes must set toolProfile=write.",
31
+ "Read-only nodes must not write repository files, including root artifacts/**.",
32
+ "Exclusive writer nodes must stay within declared writeSet.",
33
+ "Do not implement automatic retry/resume or mutate historical completed facts.",
34
+ "Do not create executor: supervisor; supervisor is a role on executor=pi.",
35
+ "Do not create executor: human, executor: decision, or browser executor.",
36
+ "Shell governance inside active DAG must use HARNESS_ALLOW_ACTIVE_DAG_RUNS=1 bash scripts/check-repo.sh.",
37
+ "On Windows, Bash script commands must run through Git Bash or a configured compatible Bash; do not require WSL or POSIX filesystem paths.",
38
+ "Actual file operation paths must be macOS/Windows compatible; use / only for stable repo refs, JSON/Markdown evidence refs, and glob conventions.",
39
+ "Prompt templates must not ask main session to write artifacts; node output is the artifact and runner archives it under .harness/dag-runs/.",
40
+ "Every task must explicitly declare executor; defaults.executor is schema-only and not a runtime fallback.",
41
+ "Prefer same-rank parallel read-only scouts over serial chains when outputs are independent.",
42
+ "Same-rank exclusive writeSet entries must be disjoint.",
43
+ "Use executorModels for model routing; do not add defaults.model or legacy top-level models."
44
+ ],
45
+ "defaults": {
46
+ "executor": "pi",
47
+ "contextProfile": "slim",
48
+ "skills": [
49
+ "ai-engineering-context"
50
+ ],
51
+ "writePolicy": "read-only"
52
+ },
53
+ "skillsByRole": {
54
+ "planner": [
55
+ "loop-agent"
56
+ ],
57
+ "scout": [
58
+ "ai-engineering-context"
59
+ ],
60
+ "implementer": [
61
+ "verification-before-completion"
62
+ ],
63
+ "reviewer": [
64
+ "requesting-code-review",
65
+ "verification-before-completion"
66
+ ],
67
+ "supervisor": [
68
+ "verification-before-completion",
69
+ "loop-agent"
70
+ ],
71
+ "verifier": [
72
+ "verification-before-completion",
73
+ "systematic-debugging"
74
+ ],
75
+ "closeout": [
76
+ "loop-agent",
77
+ "verification-before-completion"
78
+ ]
79
+ },
80
+ "executorModels": {
81
+ "pi": {
82
+ "LOW": "gpt-5.3-codex-spark",
83
+ "MED": "glm-5.2",
84
+ "HIGH": "gpt-5.5"
85
+ }
86
+ },
87
+ "verifyStrategy": {
88
+ "intermediateQuota": "1",
89
+ "finalQuota": "full",
90
+ "focusedCommandSource": "adapter"
91
+ },
92
+ "tasks": [
93
+ {
94
+ "id": "contract-pi",
95
+ "depends_on": [],
96
+ "complexity": "MED",
97
+ "executor": "pi",
98
+ "role": "planner",
99
+ "writePolicy": "read-only",
100
+ "allowedPaths": [
101
+ "**"
102
+ ],
103
+ "forbiddenPaths": [
104
+ ".harness/**",
105
+ "artifacts/**"
106
+ ],
107
+ "outputContract": "Plain Markdown implementation contract: scope, risks, parallel scout opportunities, verification expectations. No file writes.",
108
+ "subtask_prompt": "Read the DAG objective and success criteria. Return a concise implementation contract covering scope, narrow write boundaries, risks, and verification expectations. Do not edit files or write root artifacts/**."
109
+ },
110
+ {
111
+ "id": "scout-src",
112
+ "depends_on": [
113
+ "contract-pi"
114
+ ],
115
+ "complexity": "LOW",
116
+ "executor": "pi",
117
+ "role": "scout",
118
+ "writePolicy": "read-only",
119
+ "allowedPaths": [
120
+ "REPLACE/WITH/SOURCE/PATH/**"
121
+ ],
122
+ "forbiddenPaths": [
123
+ ".harness/**",
124
+ "artifacts/**"
125
+ ],
126
+ "outputContract": "Plain Markdown source reconnaissance summary; no file writes.",
127
+ "subtask_prompt": "Perform read-only source reconnaissance under allowedPaths. List relevant files, patterns, and risks. Do not edit files."
128
+ },
129
+ {
130
+ "id": "scout-tests",
131
+ "depends_on": [
132
+ "contract-pi"
133
+ ],
134
+ "complexity": "LOW",
135
+ "executor": "pi",
136
+ "role": "scout",
137
+ "writePolicy": "read-only",
138
+ "allowedPaths": [
139
+ "REPLACE/WITH/TEST/PATH/**"
140
+ ],
141
+ "forbiddenPaths": [
142
+ ".harness/**",
143
+ "artifacts/**"
144
+ ],
145
+ "outputContract": "Plain Markdown test coverage reconnaissance summary; no file writes.",
146
+ "subtask_prompt": "Perform read-only test reconnaissance under allowedPaths. List relevant tests, coverage gaps, and focused verification commands. Do not edit files."
147
+ },
148
+ {
149
+ "id": "plan-pi",
150
+ "depends_on": [
151
+ "scout-src",
152
+ "scout-tests"
153
+ ],
154
+ "complexity": "MED",
155
+ "executor": "pi",
156
+ "role": "planner",
157
+ "writePolicy": "read-only",
158
+ "allowedPaths": [
159
+ "**"
160
+ ],
161
+ "forbiddenPaths": [
162
+ ".harness/**",
163
+ "artifacts/**"
164
+ ],
165
+ "outputContract": "Plain Markdown plan with WriteSet Coverage Matrix (file → owning exclusive node id). No file writes.",
166
+ "subtask_prompt": "Synthesize upstream scouts into an implementation plan. Include a WriteSet Coverage Matrix table mapping each file that must change to exactly one future exclusive implementer/repair node id. Flag parallel work and verification commands. Do not edit files."
167
+ },
168
+ {
169
+ "id": "write-set-audit-pi",
170
+ "depends_on": [
171
+ "plan-pi"
172
+ ],
173
+ "complexity": "MED",
174
+ "executor": "pi",
175
+ "role": "reviewer",
176
+ "writePolicy": "read-only",
177
+ "allowedPaths": [
178
+ "**"
179
+ ],
180
+ "forbiddenPaths": [
181
+ ".harness/**",
182
+ "artifacts/**"
183
+ ],
184
+ "outputContract": "Plain Markdown whose first non-empty line is VERDICT: pass or VERDICT: request-revision; includes writeSet coverage findings. No file writes.",
185
+ "subtask_prompt": "Audit plan-pi WriteSet Coverage Matrix against the contract. First non-empty line must be exactly VERDICT: pass or VERDICT: request-revision. List Critical/Important gaps when any required file lacks a single exclusive owner or overlaps forbidden paths. Do not edit files or write root artifacts/**."
186
+ },
187
+ {
188
+ "id": "write-set-gate-shell",
189
+ "depends_on": [
190
+ "write-set-audit-pi"
191
+ ],
192
+ "complexity": "LOW",
193
+ "executor": "shell",
194
+ "role": "verifier",
195
+ "writePolicy": "read-only",
196
+ "allowedPaths": [
197
+ "**"
198
+ ],
199
+ "forbiddenPaths": [
200
+ ".harness/**",
201
+ "artifacts/**"
202
+ ],
203
+ "outputContract": "Deterministic write-set audit verdict gate: exit 0 only when write-set-audit-pi first non-empty assistant output line is pass.",
204
+ "subtask_prompt": "Deterministic gate: block implement-pi unless write-set-audit-pi emitted VERDICT: pass.",
205
+ "shell": {
206
+ "verdictGate": {
207
+ "fromNodeId": "write-set-audit-pi",
208
+ "accept": [
209
+ "VERDICT: pass"
210
+ ],
211
+ "label": "write-set audit",
212
+ "lineMode": "first-verdict-line"
213
+ },
214
+ "cwd": ".",
215
+ "timeoutMs": 60000
216
+ }
217
+ },
218
+ {
219
+ "id": "implement-pi",
220
+ "depends_on": [
221
+ "write-set-gate-shell"
222
+ ],
223
+ "complexity": "HIGH",
224
+ "executor": "pi",
225
+ "role": "implementer",
226
+ "writePolicy": "exclusive",
227
+ "writeSet": [
228
+ "REPLACE/WITH/IMPLEMENT/WRITESET/**"
229
+ ],
230
+ "allowedPaths": [
231
+ "REPLACE/WITH/IMPLEMENT/**"
232
+ ],
233
+ "forbiddenPaths": [
234
+ ".harness/**",
235
+ "artifacts/**"
236
+ ],
237
+ "outputContract": "Implementation summary with changed files, focused tests run, and risks. Must not ask main session to write artifacts.",
238
+ "subtask_prompt": "Implement the approved change within writeSet only after write-set-gate-shell passed (upstream VERDICT: pass). If write-set gate blocked, output blocked reason without editing files. Keep changes minimal and run focused tests inside allowedPaths when implementing.",
239
+ "toolProfile": "write"
240
+ },
241
+ {
242
+ "id": "soft-verify-shell",
243
+ "depends_on": [
244
+ "implement-pi"
245
+ ],
246
+ "complexity": "LOW",
247
+ "executor": "shell",
248
+ "role": "verifier",
249
+ "writePolicy": "read-only",
250
+ "allowedPaths": [
251
+ "REPLACE/WITH/IMPLEMENT/**",
252
+ "./**"
253
+ ],
254
+ "forbiddenPaths": [
255
+ ".harness/**",
256
+ "artifacts/**"
257
+ ],
258
+ "outputContract": "Archived shell stdout/stderr with exit codes for focused verification; no worktree writes.",
259
+ "subtask_prompt": "Run focused soft verification before process supervision.",
260
+ "shell": {
261
+ "commands": [
262
+ "npx vitest run REPLACE/WITH/FOCUSED/TEST/GLOB.test.ts --reporter=dot"
263
+ ],
264
+ "verifyEvidence": {
265
+ "phase": "intermediate",
266
+ "quota": "1",
267
+ "commandSource": "inline",
268
+ "commandCount": 1,
269
+ "commandLabels": [
270
+ "focused template verification"
271
+ ]
272
+ },
273
+ "cwd": ".",
274
+ "timeoutMs": 300000
275
+ }
276
+ },
277
+ {
278
+ "id": "process-supervisor-pi",
279
+ "depends_on": [
280
+ "soft-verify-shell",
281
+ "implement-pi"
282
+ ],
283
+ "complexity": "HIGH",
284
+ "executor": "pi",
285
+ "role": "supervisor",
286
+ "writePolicy": "read-only",
287
+ "allowedPaths": [
288
+ "**"
289
+ ],
290
+ "forbiddenPaths": [
291
+ ".harness/**",
292
+ "artifacts/**"
293
+ ],
294
+ "outputContract": "Plain Markdown whose first non-empty line is VERDICT: pass or VERDICT: request-revision, followed by a REPAIR_ARTIFACT_JSON fenced block. Audit writeSet coverage, boundary drift, verification gaps, repair scope. No file writes.",
295
+ "subtask_prompt_markdown": "./agent-dag-process-supervisor.prompt.md"
296
+ },
297
+ {
298
+ "id": "process-gate-shell",
299
+ "depends_on": [
300
+ "process-supervisor-pi"
301
+ ],
302
+ "complexity": "LOW",
303
+ "executor": "shell",
304
+ "role": "verifier",
305
+ "writePolicy": "read-only",
306
+ "allowedPaths": [
307
+ "**"
308
+ ],
309
+ "forbiddenPaths": [
310
+ ".harness/**",
311
+ "artifacts/**"
312
+ ],
313
+ "outputContract": "Deterministic process supervisor verdict gate: exit 0 when first non-empty assistant output line is pass or request-revision; exit non-zero otherwise.",
314
+ "subtask_prompt": "Deterministic gate: validate process-supervisor-pi first-line VERDICT before repair/hard-verify.",
315
+ "shell": {
316
+ "verdictGate": {
317
+ "fromNodeId": "process-supervisor-pi",
318
+ "accept": [
319
+ "VERDICT: pass",
320
+ "VERDICT: request-revision"
321
+ ],
322
+ "label": "process",
323
+ "lineMode": "first-verdict-line"
324
+ },
325
+ "repairArtifactGate": {
326
+ "fromNodeId": "process-supervisor-pi",
327
+ "repairNodeId": "repair-pi"
328
+ },
329
+ "cwd": ".",
330
+ "timeoutMs": 60000
331
+ }
332
+ },
333
+ {
334
+ "id": "repair-pi",
335
+ "depends_on": [
336
+ "process-gate-shell",
337
+ "process-supervisor-pi"
338
+ ],
339
+ "complexity": "HIGH",
340
+ "executor": "pi",
341
+ "role": "implementer",
342
+ "writePolicy": "exclusive",
343
+ "writeSet": [
344
+ "REPLACE/WITH/REPAIR/WRITESET/**",
345
+ "docs/templates/agent-dag.supervised-implementation.json",
346
+ "docs/templates/agent-dag-process-supervisor.prompt.md",
347
+ "docs/templates/agent-dag-review-verdict.prompt.md",
348
+ "docs/templates/agent-dag.schema.json",
349
+ "./src/workflows/dag/types.ts",
350
+ "./src/workflows/dag/skills.ts",
351
+ "./src/executors/dag-pi-executor.ts"
352
+ ],
353
+ "allowedPaths": [
354
+ "REPLACE/WITH/REPAIR/**",
355
+ "docs/templates/**",
356
+ "./src/workflows/dag/**",
357
+ "./src/executors/**"
358
+ ],
359
+ "forbiddenPaths": [
360
+ ".harness/**",
361
+ "artifacts/**"
362
+ ],
363
+ "outputContract": "Repair summary or explicit no-op when process supervisor passed; changed files and tests when revised. Must not ask main session to write artifacts.",
364
+ "subtask_prompt": "If process-supervisor-pi returned VERDICT: request-revision, apply bounded fixes within writeSet addressing REPAIR_ARTIFACT_JSON.fixScope and preserving REPAIR_ARTIFACT_JSON.invariant. Use REPAIR_ARTIFACT_JSON.failureClass and rootCause before raw logs; raw log is fallback evidence only when rawLogFallbackAllowed is true. If VERDICT: pass, return no-op with evidence. Re-run focused tests when you change code.",
365
+ "toolProfile": "write"
366
+ },
367
+ {
368
+ "id": "hard-verify-shell",
369
+ "depends_on": [
370
+ "repair-pi"
371
+ ],
372
+ "complexity": "LOW",
373
+ "executor": "shell",
374
+ "role": "verifier",
375
+ "writePolicy": "read-only",
376
+ "allowedPaths": [
377
+ "./**",
378
+ "docs/**",
379
+ "scripts/**"
380
+ ],
381
+ "forbiddenPaths": [
382
+ ".harness/**",
383
+ "artifacts/**"
384
+ ],
385
+ "outputContract": "Archived hard verification stdout/stderr with exit codes; no worktree writes.",
386
+ "subtask_prompt": "Run hard verification after repair round.",
387
+ "shell": {
388
+ "preset": "loop-agent-standard-verify",
389
+ "commands": [
390
+ "HARNESS_ALLOW_ACTIVE_DAG_RUNS=1 bash scripts/check-repo.sh"
391
+ ],
392
+ "verifyEvidence": {
393
+ "phase": "final",
394
+ "quota": "full",
395
+ "commandSource": "inline",
396
+ "commandCount": 1,
397
+ "commandLabels": [
398
+ "active DAG repo governance checks"
399
+ ],
400
+ "finalFullRequired": true
401
+ },
402
+ "cwd": ".",
403
+ "timeoutMs": 300000
404
+ }
405
+ },
406
+ {
407
+ "id": "review-pi",
408
+ "depends_on": [
409
+ "hard-verify-shell"
410
+ ],
411
+ "complexity": "HIGH",
412
+ "executor": "pi",
413
+ "role": "reviewer",
414
+ "writePolicy": "read-only",
415
+ "allowedPaths": [
416
+ "**"
417
+ ],
418
+ "forbiddenPaths": [
419
+ ".harness/**",
420
+ "artifacts/**"
421
+ ],
422
+ "outputContract": "Plain Markdown whose first non-empty line is VERDICT: pass or VERDICT: request-revision; Critical/Important findings force request-revision. No file writes.",
423
+ "subtask_prompt_markdown": "./agent-dag-review-verdict.prompt.md"
424
+ },
425
+ {
426
+ "id": "review-gate-shell",
427
+ "depends_on": [
428
+ "review-pi"
429
+ ],
430
+ "complexity": "LOW",
431
+ "executor": "shell",
432
+ "role": "verifier",
433
+ "writePolicy": "read-only",
434
+ "allowedPaths": [
435
+ "**"
436
+ ],
437
+ "forbiddenPaths": [
438
+ ".harness/**",
439
+ "artifacts/**"
440
+ ],
441
+ "outputContract": "Deterministic review verdict gate: exit 0 only when review-pi first non-empty assistant output line is pass.",
442
+ "subtask_prompt": "Deterministic gate: block decision gate unless review-pi emitted VERDICT: pass.",
443
+ "shell": {
444
+ "verdictGate": {
445
+ "fromNodeId": "review-pi",
446
+ "accept": [
447
+ "VERDICT: pass"
448
+ ],
449
+ "label": "review",
450
+ "lineMode": "first-verdict-line"
451
+ },
452
+ "cwd": ".",
453
+ "timeoutMs": 60000
454
+ }
455
+ },
456
+ {
457
+ "id": "decision-pi",
458
+ "depends_on": [
459
+ "review-gate-shell",
460
+ "hard-verify-shell"
461
+ ],
462
+ "complexity": "HIGH",
463
+ "executor": "pi",
464
+ "role": "reviewer",
465
+ "writePolicy": "read-only",
466
+ "allowedPaths": [
467
+ "**"
468
+ ],
469
+ "forbiddenPaths": [
470
+ ".harness/**",
471
+ "artifacts/**"
472
+ ],
473
+ "outputContract": "Markdown with exactly one DECISION_ENVELOPE_JSON fenced block plus evidence summary. No file writes.",
474
+ "subtask_prompt_markdown": "./agent-dag-decision-gate.prompt.md",
475
+ "decisionGate": {
476
+ "enabled": true,
477
+ "schemaVersion": 1,
478
+ "mode": "record-only"
479
+ }
480
+ },
481
+ {
482
+ "id": "closeout-pi",
483
+ "depends_on": [
484
+ "decision-pi"
485
+ ],
486
+ "complexity": "MED",
487
+ "executor": "pi",
488
+ "role": "closeout",
489
+ "writePolicy": "read-only",
490
+ "allowedPaths": [
491
+ "**"
492
+ ],
493
+ "forbiddenPaths": [
494
+ ".harness/**",
495
+ "artifacts/**"
496
+ ],
497
+ "outputContract": "Plain Markdown closeout referencing verification, supervisor/review verdicts, and decision envelope. No file writes.",
498
+ "subtask_prompt": "Summarize the supervised DAG outcome: contract, write-set audit, implement/repair, soft/hard verify, process supervisor and review verdicts, decision-pi envelope, and recommended main-session next step. Do not edit files or write root artifacts/**."
499
+ }
500
+ ]
501
+ }