@tea-agent/loop-agent 0.12.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 (284) hide show
  1. package/AGENTS.md +155 -153
  2. package/CHANGELOG.md +338 -265
  3. package/README.md +345 -298
  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 -28
  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 +27 -7
  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/knowledge.js +129 -31
  17. package/dist/commands/loop-benchmark.js +11 -11
  18. package/dist/commands/pi-reuse-benchmark.js +16 -16
  19. package/dist/executors/pi-sdk-executor.js +38 -24
  20. package/dist/executors/shell-executor.js +34 -2
  21. package/dist/executors/shell-presets.js +20 -0
  22. package/dist/executors/shell-verification.js +7 -0
  23. package/dist/governance/manifest-types.js +4 -0
  24. package/dist/infrastructure/evaluation/candidate-store.js +435 -0
  25. package/dist/infrastructure/evaluation/store.js +40 -0
  26. package/dist/sidecars/cursor-prompt/executor.js +1 -1
  27. package/dist/task/config-types.js +28 -1
  28. package/dist/task/runtime.js +27 -27
  29. package/dist/worker/cli.js +96 -1
  30. package/dist/worker/delivery/package.js +3 -3
  31. package/dist/worker/feature/decision-loader.js +37 -6
  32. package/dist/worker/feature/next-action.js +10 -2
  33. package/dist/worker/feature/ready-plan-projection.js +81 -0
  34. package/dist/worker/feature/reducer.js +2 -1
  35. package/dist/worker/feature/review.js +19 -2
  36. package/dist/worker/feature/run.js +27 -2
  37. package/dist/worker/follow-up/approve.js +5 -2
  38. package/dist/worker/follow-up/factory.js +1 -1
  39. package/dist/worker/observability/read-model.js +246 -41
  40. package/dist/worker/observe/routes.js +173 -15
  41. package/dist/worker/observe/spec-evidence.js +281 -0
  42. package/dist/worker/observe/static/api.js +46 -27
  43. package/dist/worker/observe/static/app.js +150 -150
  44. package/dist/worker/observe/static/constants.js +148 -148
  45. package/dist/worker/observe/static/copy.js +67 -67
  46. package/dist/worker/observe/static/dag-helpers.js +172 -172
  47. package/dist/worker/observe/static/dag-layout.d.ts +31 -31
  48. package/dist/worker/observe/static/dag-layout.js +83 -83
  49. package/dist/worker/observe/static/dag-model.js +72 -72
  50. package/dist/worker/observe/static/dom.js +61 -61
  51. package/dist/worker/observe/static/format-pool.js +67 -67
  52. package/dist/worker/observe/static/format.js +292 -292
  53. package/dist/worker/observe/static/index.html +308 -308
  54. package/dist/worker/observe/static/kpi.js +94 -94
  55. package/dist/worker/observe/static/relations.js +133 -128
  56. package/dist/worker/observe/static/router.js +93 -85
  57. package/dist/worker/observe/static/run-processing.js +148 -148
  58. package/dist/worker/observe/static/shell-chrome.js +68 -68
  59. package/dist/worker/observe/static/state.js +253 -253
  60. package/dist/worker/observe/static/styles.css +1902 -1890
  61. package/dist/worker/observe/static/views/batch.js +227 -226
  62. package/dist/worker/observe/static/views/dag-graph.js +172 -172
  63. package/dist/worker/observe/static/views/dag-inspector.js +607 -477
  64. package/dist/worker/observe/static/views/dag.js +362 -362
  65. package/dist/worker/observe/static/views/dashboard.js +445 -442
  66. package/dist/worker/observe/static/views/failures.js +143 -143
  67. package/dist/worker/observe/static/views/feature.js +492 -453
  68. package/dist/worker/observe/static/views/pool.js +350 -347
  69. package/dist/worker/observe/static/views/run.js +453 -453
  70. package/dist/worker/observe/static/views/session-timeline.js +205 -205
  71. package/dist/worker/observe/static/views/shell.js +7 -7
  72. package/dist/worker/observe/static/views/task.js +314 -260
  73. package/dist/worker/observe/static/views/timeline.js +163 -163
  74. package/dist/worker/pool/doctor.js +165 -0
  75. package/dist/worker/pool/migrate-state.js +303 -0
  76. package/dist/worker/pool/run-store.js +205 -17
  77. package/dist/worker/pool/types.js +17 -1
  78. package/dist/worker/pool/validation.js +100 -15
  79. package/dist/worker/report/morning-report.js +12 -2
  80. package/dist/worker/runner/run-ready.js +41 -26
  81. package/dist/worker/task-graph/ready-planner.js +136 -0
  82. package/dist/workflows/dag/backend-test-analysis-contract.js +120 -0
  83. package/dist/workflows/dag/canvas-observer.js +275 -275
  84. package/dist/workflows/dag/convergence/controller.js +16 -8
  85. package/dist/workflows/dag/dynamic-runtime/map.js +90 -2
  86. package/dist/workflows/dag/failure-routing.js +12 -1
  87. package/dist/workflows/dag/init-hybrid.js +2404 -360
  88. package/dist/workflows/dag/node-execution.js +9 -0
  89. package/dist/workflows/dag/prompt.js +9 -0
  90. package/dist/workflows/dag/report.js +35 -1
  91. package/dist/workflows/dag/runner.js +28 -2
  92. package/dist/workflows/dag/task-demand-routing.js +383 -0
  93. package/dist/workflows/dag/types.js +51 -13
  94. package/dist/workflows/dag/upstream-artifacts.js +1 -0
  95. package/dist/workflows/dag/validate.js +59 -1
  96. package/docs/README.md +106 -104
  97. package/docs/agent-dag-recovery-playbook.md +195 -184
  98. package/docs/agent-dag-runner.md +67 -67
  99. package/docs/architecture/README.md +26 -26
  100. package/docs/architecture/dag-execution.md +140 -140
  101. package/docs/architecture/evolution.md +54 -53
  102. package/docs/architecture/facts-and-state.md +71 -58
  103. package/docs/architecture/runtime-boundaries.md +191 -191
  104. package/docs/architecture/system-overview.md +93 -93
  105. package/docs/architecture/worker-and-feature.md +85 -81
  106. package/docs/cursor-prompt-sidecar.md +36 -36
  107. package/docs/decisions/README.md +18 -15
  108. package/docs/design/README.md +167 -77
  109. package/docs/development-principles.md +73 -73
  110. package/docs/exec-plans/README.md +6 -6
  111. package/docs/exec-plans/active/README.md +15 -9
  112. package/docs/exec-plans/completed/README.md +85 -73
  113. package/docs/feature-workflow.md +389 -261
  114. package/docs/harness-methodology-debugging.md +153 -153
  115. package/docs/harness-methodology-tdd.md +130 -130
  116. package/docs/harness-methodology-verification.md +27 -27
  117. package/docs/init-surface.manifest.json +289 -280
  118. package/docs/loop-agent-harness.md +142 -130
  119. package/docs/production-readiness.md +96 -96
  120. package/docs/progress/README.md +64 -54
  121. package/docs/reports/README.md +117 -94
  122. package/docs/skills/README.md +7 -7
  123. package/docs/skills/vetted-skill-registry.md +29 -27
  124. package/docs/templates/adr.md +60 -60
  125. package/docs/templates/agent-dag-authority-surface-audit.prompt.md +94 -94
  126. package/docs/templates/agent-dag-decision-envelope.schema.json +213 -213
  127. package/docs/templates/agent-dag-decision-gate-dogfood-report.md +117 -117
  128. package/docs/templates/agent-dag-decision-gate.prompt.md +246 -246
  129. package/docs/templates/agent-dag-process-supervisor.prompt.md +98 -98
  130. package/docs/templates/agent-dag-report.schema.json +473 -473
  131. package/docs/templates/agent-dag-review-verdict.prompt.md +68 -68
  132. package/docs/templates/agent-dag.base.json +190 -190
  133. package/docs/templates/agent-dag.final-verification.json +185 -185
  134. package/docs/templates/agent-dag.schema.json +411 -383
  135. package/docs/templates/agent-dag.supervised-implementation.json +501 -501
  136. package/docs/templates/backend-test-analysis.schema.json +44 -0
  137. package/docs/templates/backend-test-dag.generate-pytest.prompt.md +202 -139
  138. package/docs/templates/backend-test-dag.json +311 -276
  139. package/docs/templates/backend-test-dag.retrospect.prompt.md +125 -125
  140. package/docs/templates/backend-test-dag.review-cases.prompt.md +81 -81
  141. package/docs/templates/exec-plan.md +64 -64
  142. package/docs/templates/feature-spec.md +53 -53
  143. package/docs/templates/frontend-design-contract.md +42 -33
  144. package/docs/templates/frontend-task-constraints.md +35 -25
  145. package/docs/templates/frontend-task-requirement.md +70 -61
  146. package/docs/templates/frontend-test-dag.generate-cases.prompt.md +5 -0
  147. package/docs/templates/frontend-test-dag.json +23 -0
  148. package/docs/templates/frontend-test-dag.retrieve-context.prompt.md +3 -0
  149. package/docs/templates/frontend-test-dag.retrospect.prompt.md +3 -0
  150. package/docs/templates/frontend-test-dag.review-cases.prompt.md +3 -0
  151. package/docs/templates/frontend-test-dag.review-execution.prompt.md +3 -0
  152. package/docs/templates/harness.schema.json +221 -221
  153. package/docs/templates/hybrid-dag.json +188 -188
  154. package/docs/templates/init-evolution-review.md +35 -35
  155. package/docs/templates/interactive-ui-round2-experiment.md +66 -66
  156. package/docs/templates/knowledge-graph-bootstrap-dag.json +118 -0
  157. package/docs/templates/knowledge-sync-dag.json +178 -0
  158. package/docs/templates/knowledge-sync-draft.schema.json +71 -0
  159. package/docs/templates/product-line/AGENTS.md +8 -8
  160. package/docs/templates/product-line/README.md +9 -9
  161. package/docs/templates/product-line/acceptance.yaml +14 -14
  162. package/docs/templates/product-line/closeout.yaml +9 -9
  163. package/docs/templates/product-line/design.md +13 -13
  164. package/docs/templates/product-line/links.md +10 -10
  165. package/docs/templates/product-line/requirement.md +17 -17
  166. package/docs/templates/product-line/task-graph.yaml +15 -15
  167. package/docs/templates/product-line/task.yaml +64 -64
  168. package/docs/templates/product-line/test-plan.md +7 -7
  169. package/docs/templates/production-readiness-checklist.md +57 -57
  170. package/docs/templates/progress-log.md +17 -17
  171. package/docs/templates/project-start-checklist.md +9 -9
  172. package/docs/templates/qa-report.md +48 -48
  173. package/docs/templates/sprint-contract.md +29 -29
  174. package/docs/templates/worker-dogfood-evidence.md +80 -80
  175. package/docs/templates/worker-dogfood-setup.md +68 -68
  176. package/docs/verification-matrix.md +70 -66
  177. package/examples/decision-gate-agent-dag.json +177 -177
  178. package/examples/example-dag.json +46 -46
  179. package/examples/hybrid-loop-agent-dag.json +189 -189
  180. package/harness.json +66 -66
  181. package/package.json +88 -46
  182. package/scripts/check-product-line-docs.sh +29 -29
  183. package/scripts/check-task-pool-root.sh +32 -32
  184. package/scripts/kb-bootstrap-init-skeleton.sh +240 -0
  185. package/scripts/kb-graph-incremental-prepare.mjs +386 -0
  186. package/scripts/kb-graph-incremental-prepare.sh +5 -0
  187. package/scripts/kb-graph-materialize.mjs +105 -0
  188. package/scripts/kb-graph-materialize.sh +4 -0
  189. package/scripts/kb-graph-promote.mjs +164 -0
  190. package/scripts/kb-graph-promote.sh +4 -0
  191. package/scripts/kb-query.mjs +554 -0
  192. package/scripts/kb-query.sh +5 -0
  193. package/skills/agent-worker/SKILL.md +39 -37
  194. package/skills/agent-worker/references/agent-worker-operator.md +60 -43
  195. package/skills/ai-engineering-context/SKILL.md +48 -48
  196. package/skills/analyze-product-dependencies/SKILL.md +67 -0
  197. package/skills/analyze-product-dependencies/agents/openai.yaml +4 -0
  198. package/skills/analyze-product-dependencies/references/api-documentation-schema.md +30 -0
  199. package/skills/analyze-product-dependencies/references/dependency-analysis-schema.md +28 -0
  200. package/skills/analyze-product-dependencies/references/example.md +76 -0
  201. package/skills/analyze-product-dependencies/references/forward-test-cases.md +35 -0
  202. package/skills/analyze-product-dependencies/references/input-contract.md +11 -0
  203. package/skills/analyze-product-dependencies/references/scouting-rules.md +61 -0
  204. package/skills/analyze-product-dependencies/scripts/test-validators.mjs +267 -0
  205. package/skills/analyze-product-dependencies/scripts/validate-api-documentation.mjs +101 -0
  206. package/skills/analyze-product-dependencies/scripts/validate-dependency-analysis.mjs +142 -0
  207. package/skills/analyze-product-dependencies/scripts/validate-product-requirement-input.mjs +76 -0
  208. package/skills/analyze-product-dependencies/scripts/validation-helpers.mjs +146 -0
  209. package/skills/analyze-product-requirements/SKILL.md +90 -0
  210. package/skills/analyze-product-requirements/agents/openai.yaml +4 -0
  211. package/skills/analyze-product-requirements/references/acceptance-criteria.md +91 -0
  212. package/skills/analyze-product-requirements/references/clarification-and-knowledge.md +56 -0
  213. package/skills/analyze-product-requirements/references/example.md +86 -0
  214. package/skills/analyze-product-requirements/references/forward-test-cases.md +66 -0
  215. package/skills/analyze-product-requirements/references/product-analysis-schema.md +32 -0
  216. package/skills/analyze-product-requirements/references/product-requirement-schema.md +33 -0
  217. package/skills/analyze-product-requirements/references/requirement-clarification-schema.md +35 -0
  218. package/skills/analyze-product-requirements/scripts/test-validators.mjs +193 -0
  219. package/skills/analyze-product-requirements/scripts/validate-product-analysis.mjs +69 -0
  220. package/skills/analyze-product-requirements/scripts/validate-product-requirement.mjs +97 -0
  221. package/skills/analyze-product-requirements/scripts/validate-requirement-clarification.mjs +98 -0
  222. package/skills/analyze-product-requirements/scripts/validation-helpers.mjs +156 -0
  223. package/skills/code-review-core/SKILL.md +20 -20
  224. package/skills/codebase-scout/SKILL.md +19 -19
  225. package/skills/frontend-design-review/SKILL.md +66 -59
  226. package/skills/frontend-design-review/references/review-checklist.md +58 -37
  227. package/skills/frontend-implementation/SKILL.md +47 -51
  228. package/skills/frontend-implementation/references/code-standards.md +32 -34
  229. package/skills/frontend-implementation/references/design-spec.md +46 -46
  230. package/skills/frontend-implementation/references/node-contracts.md +76 -32
  231. package/skills/frontend-review/SKILL.md +59 -53
  232. package/skills/frontend-review/references/review-findings.md +47 -42
  233. package/skills/frontend-verification/SKILL.md +53 -40
  234. package/skills/frontend-verification/references/verification-checklist.md +68 -56
  235. package/skills/grill-me/SKILL.md +10 -10
  236. package/skills/grill-with-docs/SKILL.md +88 -88
  237. package/skills/grill-with-docs/adr-format.md +47 -47
  238. package/skills/grill-with-docs/context-format.md +60 -60
  239. package/skills/init-capability-evolution/SKILL.md +70 -70
  240. package/skills/loop-agent/SKILL.md +151 -151
  241. package/skills/loop-agent/references/README.md +67 -67
  242. package/skills/loop-agent/references/command-reference.md +505 -452
  243. package/skills/loop-agent/references/docs-converge.md +126 -126
  244. package/skills/loop-agent/references/harness-policy.md +263 -263
  245. package/skills/loop-agent/references/hybrid-dag.md +238 -233
  246. package/skills/loop-agent/references/learned/README.md +21 -21
  247. package/skills/loop-agent/references/long-running-loop.md +57 -57
  248. package/skills/loop-agent/references/model-routing.md +36 -36
  249. package/skills/loop-agent/references/multi-worktree.md +54 -54
  250. package/skills/loop-agent/references/one-shot-runs.md +85 -85
  251. package/skills/loop-agent/references/orchestrator-and-interventions.md +169 -169
  252. package/skills/loop-agent/references/pi-prompt.md +23 -23
  253. package/skills/loop-agent/references/pi-subagent-assisted-mode.md +84 -84
  254. package/skills/loop-agent/references/post-implementation-and-patterns.md +44 -44
  255. package/skills/loop-agent/references/task-workflow.md +89 -89
  256. package/skills/loop-agent/references/verification-and-failure-handling.md +139 -139
  257. package/skills/playwright-cli/SKILL.md +420 -0
  258. package/skills/playwright-cli/references/element-attributes.md +23 -0
  259. package/skills/playwright-cli/references/playwright-tests.md +39 -0
  260. package/skills/playwright-cli/references/request-mocking.md +87 -0
  261. package/skills/playwright-cli/references/running-code.md +241 -0
  262. package/skills/playwright-cli/references/session-management.md +225 -0
  263. package/skills/playwright-cli/references/storage-state.md +275 -0
  264. package/skills/playwright-cli/references/test-generation.md +433 -0
  265. package/skills/playwright-cli/references/tracing.md +139 -0
  266. package/skills/playwright-cli/references/video-recording.md +143 -0
  267. package/skills/playwright-cli-case-generator/SKILL.md +74 -0
  268. package/skills/requesting-code-review/SKILL.md +101 -101
  269. package/skills/requesting-code-review/code-reviewer.md +168 -168
  270. package/skills/systematic-debugging/CREATION-LOG.md +119 -119
  271. package/skills/systematic-debugging/SKILL.md +296 -296
  272. package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -158
  273. package/skills/systematic-debugging/condition-based-waiting.md +115 -115
  274. package/skills/systematic-debugging/defense-in-depth.md +122 -122
  275. package/skills/systematic-debugging/find-polluter.sh +63 -63
  276. package/skills/systematic-debugging/root-cause-tracing.md +169 -169
  277. package/skills/systematic-debugging/test-academic.md +14 -14
  278. package/skills/systematic-debugging/test-pressure-1.md +58 -58
  279. package/skills/systematic-debugging/test-pressure-2.md +68 -68
  280. package/skills/systematic-debugging/test-pressure-3.md +69 -69
  281. package/skills/test-driven-development/SKILL.md +20 -20
  282. package/skills/using-git-worktrees/SKILL.md +215 -215
  283. package/skills/verification-before-completion/SKILL.md +154 -154
  284. package/skills/webapp-testing/SKILL.md +19 -19
@@ -1,276 +1,311 @@
1
- {
2
- "$schema": "./agent-dag.schema.json",
3
- "version": 3,
4
- "title": "Backend test DAG template",
5
- "runtimeContract": {
6
- "schemaVersion": 1,
7
- "agentRuntime": "pi-only",
8
- "repairWriterProtocol": "explicit-node-v1"
9
- },
10
- "objective": "End-to-end backend functional testing pipeline: analyze requirements → generate functional test cases → review cases → generate pytest automation → execute pytest → retrospective with maturity rating. Covers the full chain from requirement analysis to test maturity assessment.",
11
- "successCriteria": [
12
- "analyze-inputs-pi returns a read-only test analysis contract covering scope, risks, and strategy",
13
- "generate-backend-functional-cases-pi produces structured test cases with BE-<MODULE>-<NNN> IDs under testcase/md/",
14
- "review-backend-cases-pi returns VERDICT: pass or request-revision with coverage assessment",
15
- "review-backend-cases-gate-shell blocks pytest generation unless the review verdict is VERDICT: pass",
16
- "generate-backend-pytest-pi converts reviewed cases into pytest code with 1:1 traceability under testcase/",
17
- "execute-backend-pytest-shell runs pytest and produces HTML report under reports/",
18
- "test-retrospect-pi generates retrospective report with A/B/C/D maturity rating under docs/test-reports/",
19
- "Full traceability from acceptance criteria functional test case ID → pytest function name"
20
- ],
21
- "globalConstraints": [
22
- "Replace every REPLACE/WITH/... placeholder with concrete repo paths before execution; do not leave template placeholders in production DAG JSON.",
23
- "Do not commit runtime traces under .harness/dag-runs/.",
24
- "Use only existing executors: pi, shell. Pi writer nodes must set toolProfile=write.",
25
- "Read-only nodes must not write repository files, including root artifacts/**.",
26
- "Exclusive writer nodes must stay within declared writeSet.",
27
- "Every task must explicitly declare executor; defaults.executor is schema-only and not a runtime fallback.",
28
- "Functional test case IDs must use BE-<MODULE>-<NNN> format.",
29
- "pytest execution must produce HTML reports under reports/.",
30
- "Backend-test-dag nodes must maintain traceability from requirements to functional cases to pytest automation.",
31
- "pytest automation scripts must use test_ filename prefix for pytest discovery.",
32
- "generate-backend-pytest-pi must only create new test files under testcase/; modifying existing framework files (conftest.py, pytest.ini, pyproject.toml) is forbidden.",
33
- "review-backend-cases-gate-shell must block pytest generation unless the review verdict is exactly VERDICT: pass.",
34
- "If a target test filename already exists under testcase/, add a numeric suffix (_01, _02, ...); never overwrite or append to existing files.",
35
- "execute-backend-pytest-shell must not modify test assertions or production code to make tests pass; test failures indicate potential implementation issues and must be reported honestly.",
36
- "Prompt templates must not ask main session to write artifacts; node output is the artifact and runner archives it under .harness/dag-runs/.",
37
- "Actual file operation paths must be macOS/Windows compatible; use / only for stable repo refs, JSON/Markdown evidence refs, and glob conventions.",
38
- "Same-rank exclusive writeSet entries must be disjoint."
39
- ],
40
- "defaults": {
41
- "executor": "pi",
42
- "contextProfile": "slim",
43
- "skills": [
44
- "ai-engineering-context"
45
- ],
46
- "writePolicy": "read-only"
47
- },
48
- "skillsByRole": {
49
- "planner": [
50
- "loop-agent"
51
- ],
52
- "scout": [],
53
- "implementer": [
54
- "test-driven-development",
55
- "verification-before-completion"
56
- ],
57
- "reviewer": [
58
- "requesting-code-review",
59
- "code-review-core"
60
- ],
61
- "verifier": [
62
- "verification-before-completion",
63
- "systematic-debugging"
64
- ],
65
- "closeout": [
66
- "loop-agent",
67
- "verification-before-completion"
68
- ]
69
- },
70
- "executorModels": {
71
- "pi": {
72
- "LOW": "gpt-5.3-codex-spark",
73
- "MED": "glm-5.2",
74
- "HIGH": "gpt-5.5"
75
- }
76
- },
77
- "tasks": [
78
- {
79
- "id": "analyze-inputs-pi",
80
- "depends_on": [],
81
- "complexity": "MED",
82
- "executor": "pi",
83
- "role": "planner",
84
- "writePolicy": "read-only",
85
- "allowedPaths": [
86
- "REPLACE/WITH/SOURCE/PATH/**"
87
- ],
88
- "forbiddenPaths": [
89
- ".harness/**",
90
- "artifacts/**"
91
- ],
92
- "outputContract": "Structured Markdown extracting core content from source documents. No file writes.",
93
- "retryPolicy": {
94
- "maxAttempts": 3,
95
- "backoff": "exponential",
96
- "initialDelayMs": 2000,
97
- "maxDelayMs": 30000,
98
- "retryCategories": [
99
- "timeout",
100
- "network",
101
- "rate-limit",
102
- "unavailable"
103
- ]
104
- },
105
- "subtask_prompt": "Read the task source materials and extract the following structured content for downstream test generation.\n\n## Required Output Sections:\n\n### 1. API Endpoints\nList all API endpoints: Method, Path, Description, Request params, Response format.\n\n### 2. Data Model\nFor each table/collection: fields, types, constraints, descriptions.\n\n### 3. Business Logic\nCore business rules, validation rules, calculation formulas.\n\n### 4. State Transitions\nState machines (e.g. order status: pending → paid → shipped → completed).\n\n### 5. Error Scenarios & Error Codes\nAll error codes, error messages, and when they occur.\n\n### 6. External Dependencies\nThird-party services, databases, message queues. Include timeout settings if documented.\n\n### 7. Acceptance Criteria\nExtract ALL acceptance criteria from 需求.md. Number them AC-001, AC-002, etc. If not explicitly listed, derive from functional requirements.\n\n### 8. Risk Areas\nHigh-risk areas requiring extra test coverage.\n\n## Conditional Sections (include ONLY if mentioned in requirements):\n- Authentication & Authorization: include ONLY if requirements mention auth mechanism (JWT, OAuth2, API Key, etc.)\n- Timeout Handling: include ONLY if requirements mention timeout configuration or degradation strategy\n- Concurrency & Idempotency: include ONLY if requirements mention concurrency, idempotency rules, or locking mechanisms\n- State Transitions: include ONLY if requirements mention business state machines\n- If not mentioned in requirements, do NOT include these sections\n\nThis output will be used directly by downstream nodes. Be thorough and structured.\nRead-only: do not modify code, docs, artifacts, or repository files."
106
- },
107
- {
108
- "id": "generate-backend-functional-cases-pi",
109
- "depends_on": [
110
- "analyze-inputs-pi"
111
- ],
112
- "complexity": "MED",
113
- "executor": "pi",
114
- "role": "implementer",
115
- "toolProfile": "write",
116
- "writePolicy": "exclusive",
117
- "writeSet": [
118
- "testcase/md/**"
119
- ],
120
- "allowedPaths": [
121
- "testcase/md/**"
122
- ],
123
- "forbiddenPaths": [
124
- ".harness/**",
125
- "artifacts/**"
126
- ],
127
- "outputContract": "Structured backend functional test cases in Markdown under testcase/md/. Each case uses BE-<MODULE>-<NNN> ID format.",
128
- "subtask_prompt": "Based on the upstream analyze-inputs-pi output, generate structured backend functional test cases.\n\n## Output Steps (do in order):\n1. First, output a brief summary: how many modules, how many cases planned per module\n2. Then write each test case file under testcase/md/\n\n## Format Rules:\n- Each test case ID: BE-<MODULE>-<NNN> (e.g. BE-ORDER-001)\n- Each file covers one module\n- Case structure: ID, Title, Precondition, Steps, Expected Result\n- Map each case to acceptance criteria (AC-xxx)\n\n## Coverage Requirements:\n- Positive paths: happy path for each acceptance criterion\n- Negative paths: error scenarios (invalid input, not found, state violations)\n- Boundary conditions: empty input, max length, edge values\n\n## Conditional Coverage (include ONLY if mentioned in upstream analysis):\n- State transitions: include ONLY if upstream analyze-inputs-pi mentions state machine\n- Authentication scenarios: include ONLY if upstream analyze-inputs-pi mentions auth mechanism\n- Timeout scenarios: include ONLY if upstream analyze-inputs-pi mentions timeout handling\n- Concurrency scenarios: include ONLY if upstream analyze-inputs-pi mentions concurrency/idempotency rules\n- If not mentioned, do NOT generate these test cases\n\n## Constraints:\n- Stay within writeSet: testcase/md/**\n- Do NOT re-read source documents — use the upstream analyze-inputs-pi output only\n- Do not write root artifacts/**"
129
- },
130
- {
131
- "id": "review-backend-cases-pi",
132
- "depends_on": [
133
- "generate-backend-functional-cases-pi"
134
- ],
135
- "complexity": "HIGH",
136
- "executor": "pi",
137
- "role": "reviewer",
138
- "writePolicy": "read-only",
139
- "allowedPaths": [
140
- "**"
141
- ],
142
- "forbiddenPaths": [
143
- ".harness/**",
144
- "artifacts/**"
145
- ],
146
- "outputContract": "Plain Markdown whose first non-empty line is VERDICT: pass or VERDICT: request-revision; followed by Findings and Coverage Assessment. No file writes.",
147
- "retryPolicy": {
148
- "maxAttempts": 3,
149
- "backoff": "exponential",
150
- "initialDelayMs": 2000,
151
- "maxDelayMs": 30000,
152
- "retryCategories": [
153
- "timeout",
154
- "network",
155
- "rate-limit",
156
- "unavailable"
157
- ]
158
- },
159
- "subtask_prompt_markdown": "./backend-test-dag.review-cases.prompt.md"
160
- },
161
- {
162
- "id": "review-backend-cases-gate-shell",
163
- "depends_on": [
164
- "review-backend-cases-pi"
165
- ],
166
- "complexity": "LOW",
167
- "executor": "shell",
168
- "role": "verifier",
169
- "writePolicy": "read-only",
170
- "allowedPaths": [
171
- "**"
172
- ],
173
- "forbiddenPaths": [
174
- ".harness/**",
175
- "artifacts/**"
176
- ],
177
- "outputContract": "Deterministic backend case review gate: exit 0 only when review-backend-cases-pi emits VERDICT: pass.",
178
- "subtask_prompt": "Deterministic gate: block pytest generation unless backend case review emitted VERDICT: pass.",
179
- "shell": {
180
- "commands": [],
181
- "verdictGate": {
182
- "fromNodeId": "review-backend-cases-pi",
183
- "accept": [
184
- "VERDICT: pass"
185
- ],
186
- "label": "backend case review",
187
- "lineMode": "first-verdict-line"
188
- },
189
- "cwd": ".",
190
- "timeoutMs": 60000
191
- }
192
- },
193
- {
194
- "id": "generate-backend-pytest-pi",
195
- "depends_on": [
196
- "review-backend-cases-gate-shell"
197
- ],
198
- "complexity": "HIGH",
199
- "executor": "pi",
200
- "role": "implementer",
201
- "toolProfile": "write",
202
- "writePolicy": "exclusive",
203
- "writeSet": [
204
- "testcase/**/test_*.py"
205
- ],
206
- "allowedPaths": [
207
- "testcase/**/test_*.py"
208
- ],
209
- "forbiddenPaths": [
210
- ".harness/**",
211
- "artifacts/**"
212
- ],
213
- "outputContract": "Pytest test files under testcase/ with 1:1 mapping to functional test case IDs. Summary lists generated files, test function count, and any skipped cases with reasons.",
214
- "subtask_prompt_markdown": "./backend-test-dag.generate-pytest.prompt.md"
215
- },
216
- {
217
- "id": "execute-backend-pytest-shell",
218
- "depends_on": [
219
- "generate-backend-pytest-pi"
220
- ],
221
- "complexity": "LOW",
222
- "executor": "shell",
223
- "role": "verifier",
224
- "writePolicy": "read-only",
225
- "allowedPaths": [
226
- "**"
227
- ],
228
- "forbiddenPaths": [
229
- ".harness/**",
230
- "artifacts/**"
231
- ],
232
- "outputContract": "Archived pytest stdout/stderr with exit codes and HTML report path; no source or test file modifications.",
233
- "subtask_prompt": "Run pytest for the backend test suite and capture results.",
234
- "shell": {
235
- "commands": [
236
- "python -m pytest testcase/ --html=reports/backend-test-report.html -v"
237
- ],
238
- "verifyEvidence": {
239
- "phase": "final",
240
- "quota": "full",
241
- "commandSource": "inline",
242
- "commandCount": 1,
243
- "commandLabels": [
244
- "backend pytest execution"
245
- ],
246
- "finalFullRequired": true
247
- },
248
- "cwd": ".",
249
- "timeoutMs": 300000
250
- }
251
- },
252
- {
253
- "id": "test-retrospect-pi",
254
- "depends_on": [
255
- "execute-backend-pytest-shell"
256
- ],
257
- "complexity": "MED",
258
- "executor": "pi",
259
- "role": "closeout",
260
- "toolProfile": "write",
261
- "writePolicy": "exclusive",
262
- "writeSet": [
263
- "docs/test-reports/**"
264
- ],
265
- "allowedPaths": [
266
- "docs/test-reports/**"
267
- ],
268
- "forbiddenPaths": [
269
- ".harness/**",
270
- "artifacts/**"
271
- ],
272
- "outputContract": "Markdown retrospective report under docs/test-reports/ with coverage summary, review findings, pytest results, and maturity rating (A/B/C/D).",
273
- "subtask_prompt_markdown": "./backend-test-dag.retrospect.prompt.md"
274
- }
275
- ]
276
- }
1
+ {
2
+ "$schema": "./agent-dag.schema.json",
3
+ "version": 3,
4
+ "title": "Backend test DAG template",
5
+ "runtimeContract": {
6
+ "schemaVersion": 1,
7
+ "agentRuntime": "pi-only",
8
+ "repairWriterProtocol": "explicit-node-v1"
9
+ },
10
+ "objective": "End-to-end backend functional testing pipeline: analyze requirements as Backend Test Analysis v1 JSON validate analysis contract → generate functional test cases → review cases → generate pytest automation → execute pytest → retrospective with maturity rating. Covers the full chain from requirement analysis to test maturity assessment.",
11
+ "successCriteria": [
12
+ "analyze-inputs-pi returns pure Backend Test Analysis v1 JSON (schema docs/templates/backend-test-analysis.schema.json) with no Markdown prose",
13
+ "backend-test-analysis-contract-shell validates schemaId backend-test-analysis-v1 and materializes run-owned contracts/backend-test-analysis.json",
14
+ "generate-backend-functional-cases-pi consumes the validated analysis artifact and produces structured test cases with BE-<MODULE>-<NNN> IDs under testcase/md/",
15
+ "review-backend-cases-pi returns VERDICT: pass or request-revision with coverage assessment",
16
+ "review-backend-cases-gate-shell blocks pytest generation unless the review verdict is VERDICT: pass",
17
+ "generate-backend-pytest-pi converts reviewed cases into pytest code with 1:1 traceability under testcase/",
18
+ "execute-backend-pytest-shell runs pytest with a read-only worktree and writes JUnit XML under the current HARNESS_DAG_RUN_DIR/reports/** only",
19
+ "test-retrospect-pi generates retrospective report with A/B/C/D maturity rating under docs/test-reports/",
20
+ "Full traceability from acceptance criteria → functional test case ID → pytest function name"
21
+ ],
22
+ "globalConstraints": [
23
+ "Replace every REPLACE/WITH/... placeholder with concrete repo paths before execution; do not leave template placeholders in production DAG JSON.",
24
+ "Do not commit runtime traces under .harness/dag-runs/.",
25
+ "Use only existing executors: pi, shell. Pi writer nodes must set toolProfile=write.",
26
+ "Read-only nodes must not write repository files, including root artifacts/**.",
27
+ "Exclusive writer nodes must stay within declared writeSet.",
28
+ "Every task must explicitly declare executor; defaults.executor is schema-only and not a runtime fallback.",
29
+ "Functional test case IDs must use BE-<MODULE>-<NNN> format.",
30
+ "pytest execution must keep the target worktree read-only and write machine-readable results only under the current HARNESS_DAG_RUN_DIR/reports/** (e.g. JUnit XML).",
31
+ "Backend-test-dag nodes must maintain traceability from requirements to functional cases to pytest automation.",
32
+ "pytest automation scripts must use test_ filename prefix for pytest discovery.",
33
+ "generate-backend-pytest-pi may create only new files under testcase/**/test_*.py, testcase/**/helpers/**, and testcase/**/factories/**; modifying conftest.py, pytest.ini, pyproject.toml, or production code is forbidden.",
34
+ "review-backend-cases-gate-shell must block pytest generation unless the review verdict is exactly VERDICT: pass.",
35
+ "If a target test filename already exists under testcase/, add a numeric suffix (_01, _02, ...); never overwrite or append to existing files.",
36
+ "execute-backend-pytest-shell must not modify test assertions or production code to make tests pass; test failures indicate potential implementation issues and must be reported honestly.",
37
+ "Prompt templates must not ask main session to write artifacts; node output is the artifact and runner archives it under .harness/dag-runs/.",
38
+ "Actual file operation paths must be macOS/Windows compatible; use / only for stable repo refs, JSON/Markdown evidence refs, and glob conventions.",
39
+ "Same-rank exclusive writeSet entries must be disjoint."
40
+ ],
41
+ "defaults": {
42
+ "executor": "pi",
43
+ "contextProfile": "slim",
44
+ "skills": [
45
+ "ai-engineering-context"
46
+ ],
47
+ "writePolicy": "read-only"
48
+ },
49
+ "skillsByRole": {
50
+ "planner": [
51
+ "loop-agent"
52
+ ],
53
+ "scout": [],
54
+ "implementer": [
55
+ "test-driven-development",
56
+ "verification-before-completion"
57
+ ],
58
+ "reviewer": [
59
+ "requesting-code-review",
60
+ "code-review-core"
61
+ ],
62
+ "verifier": [
63
+ "verification-before-completion",
64
+ "systematic-debugging"
65
+ ],
66
+ "closeout": [
67
+ "loop-agent",
68
+ "verification-before-completion"
69
+ ]
70
+ },
71
+ "executorModels": {
72
+ "pi": {
73
+ "LOW": "gpt-5.3-codex-spark",
74
+ "MED": "glm-5.2",
75
+ "HIGH": "gpt-5.5"
76
+ }
77
+ },
78
+ "tasks": [
79
+ {
80
+ "id": "analyze-inputs-pi",
81
+ "depends_on": [],
82
+ "complexity": "MED",
83
+ "executor": "pi",
84
+ "role": "planner",
85
+ "writePolicy": "read-only",
86
+ "allowedPaths": [
87
+ "REPLACE/WITH/SOURCE/PATH/**"
88
+ ],
89
+ "forbiddenPaths": [
90
+ ".harness/**",
91
+ "artifacts/**"
92
+ ],
93
+ "outputContract": "Pure Backend Test Analysis v1 JSON object matching docs/templates/backend-test-analysis.schema.json. No Markdown prose and no file writes.",
94
+ "retryPolicy": {
95
+ "maxAttempts": 3,
96
+ "backoff": "exponential",
97
+ "initialDelayMs": 2000,
98
+ "maxDelayMs": 30000,
99
+ "retryCategories": [
100
+ "timeout",
101
+ "network",
102
+ "rate-limit",
103
+ "unavailable"
104
+ ]
105
+ },
106
+ "subtask_prompt": "Read the task source materials and return exactly one JSON object matching Backend Test Analysis v1.\n\nDo not wrap it in explanatory prose. A single fenced json block is tolerated, but pure JSON is preferred.\n\nCopy taskId, requirementPath, requirementSha256, referencePaths, and requirementIds exactly from the DAG source binding shown below.\n\nPreserve existing AC IDs. Do not invent endpoint methods, paths, fields, errors, boundaries, or business rules; record unknowns in evidenceGaps.\n\nUse empty arrays for categories not documented. Never include credentials, tokens, private keys, or secret values.\n\nRequired top-level keys: schemaVersion, sourceBinding, acceptanceCriteria, endpoints, dataModels, businessRules, stateTransitions, boundaryConstraints, externalDependencies, risks, evidenceGaps.\n\nRead-only: do not modify code, docs, artifacts, or repository files."
107
+ },
108
+ {
109
+ "id": "backend-test-analysis-contract-shell",
110
+ "depends_on": [
111
+ "analyze-inputs-pi"
112
+ ],
113
+ "complexity": "LOW",
114
+ "executor": "shell",
115
+ "role": "verifier",
116
+ "writePolicy": "read-only",
117
+ "allowedPaths": [
118
+ "REPLACE/WITH/SOURCE/PATH/**"
119
+ ],
120
+ "forbiddenPaths": [
121
+ ".harness/**",
122
+ "artifacts/**"
123
+ ],
124
+ "outputContract": "Validated run-owned Backend Test Analysis v1 artifact pointer, schema ID, and SHA-256.",
125
+ "subtask_prompt": "Materialize and validate the backend-test analysis contract under the current DAG run.",
126
+ "shell": {
127
+ "commands": [],
128
+ "jsonArtifactGate": {
129
+ "fromNodeId": "analyze-inputs-pi",
130
+ "schemaId": "backend-test-analysis-v1",
131
+ "artifactName": "backend-test-analysis.json",
132
+ "outputDir": "contracts"
133
+ },
134
+ "cwd": ".",
135
+ "timeoutMs": 60000
136
+ }
137
+ },
138
+ {
139
+ "id": "generate-backend-functional-cases-pi",
140
+ "depends_on": [
141
+ "backend-test-analysis-contract-shell"
142
+ ],
143
+ "complexity": "MED",
144
+ "executor": "pi",
145
+ "role": "implementer",
146
+ "toolProfile": "write",
147
+ "writePolicy": "exclusive",
148
+ "writeSet": [
149
+ "testcase/md/**"
150
+ ],
151
+ "allowedPaths": [
152
+ "testcase/md/**"
153
+ ],
154
+ "forbiddenPaths": [
155
+ ".harness/**",
156
+ "artifacts/**"
157
+ ],
158
+ "outputContract": "Structured backend functional test cases in Markdown under testcase/md/. Each case uses BE-<MODULE>-<NNN> ID format.",
159
+ "subtask_prompt": "Read the validated structured artifact pointer from backend-test-analysis-contract-shell and generate cases only from that JSON contract.\n\n## Output Steps (do in order):\n1. First, output a brief summary: how many modules, how many cases planned per module\n2. Then write each test case file under testcase/md/\n\n## Format Rules:\n- Each test case ID: BE-<MODULE>-<NNN> (e.g. BE-ORDER-001)\n- Each file covers one module\n- Case structure: ID, Title, Precondition, Steps, Expected Result\n- Map each case to acceptance criteria (AC-xxx)\n\n## Coverage Requirements:\n- Positive paths: happy path for each acceptance criterion\n- Negative paths: error scenarios (invalid input, not found, state violations)\n\n## Conditional Coverage (include ONLY if mentioned in upstream analysis):\n- Boundary conditions: include ONLY if upstream analyze-inputs-pi mentions value ranges, length limits, numeric bounds, or format constraints\n- State transitions: include ONLY if upstream analyze-inputs-pi mentions state machine\n- Authentication scenarios: include ONLY if upstream analyze-inputs-pi mentions auth mechanism\n- Timeout scenarios: include ONLY if upstream analyze-inputs-pi mentions timeout handling\n- Concurrency scenarios: include ONLY if upstream analyze-inputs-pi mentions concurrency/idempotency rules\n- If not mentioned, do NOT generate these test cases\n\n## Constraints:\n- Stay within writeSet: testcase/md/**\n- Do NOT re-read source documents or fall back to free-form analysis — use the validated structured artifact only\n- Do not write root artifacts/**"
160
+ },
161
+ {
162
+ "id": "review-backend-cases-pi",
163
+ "depends_on": [
164
+ "generate-backend-functional-cases-pi",
165
+ "backend-test-analysis-contract-shell"
166
+ ],
167
+ "complexity": "HIGH",
168
+ "executor": "pi",
169
+ "role": "reviewer",
170
+ "writePolicy": "read-only",
171
+ "allowedPaths": [
172
+ "**"
173
+ ],
174
+ "forbiddenPaths": [
175
+ ".harness/**",
176
+ "artifacts/**"
177
+ ],
178
+ "outputContract": "Plain Markdown whose first non-empty line is VERDICT: pass or VERDICT: request-revision; followed by Findings and Coverage Assessment. No file writes.",
179
+ "retryPolicy": {
180
+ "maxAttempts": 3,
181
+ "backoff": "exponential",
182
+ "initialDelayMs": 2000,
183
+ "maxDelayMs": 30000,
184
+ "retryCategories": [
185
+ "timeout",
186
+ "network",
187
+ "rate-limit",
188
+ "unavailable"
189
+ ]
190
+ },
191
+ "subtask_prompt_markdown": "./backend-test-dag.review-cases.prompt.md"
192
+ },
193
+ {
194
+ "id": "review-backend-cases-gate-shell",
195
+ "depends_on": [
196
+ "review-backend-cases-pi"
197
+ ],
198
+ "complexity": "LOW",
199
+ "executor": "shell",
200
+ "role": "verifier",
201
+ "writePolicy": "read-only",
202
+ "allowedPaths": [
203
+ "**"
204
+ ],
205
+ "forbiddenPaths": [
206
+ ".harness/**",
207
+ "artifacts/**"
208
+ ],
209
+ "outputContract": "Deterministic backend case review gate: exit 0 only when review-backend-cases-pi emits VERDICT: pass.",
210
+ "subtask_prompt": "Deterministic gate: block pytest generation unless backend case review emitted VERDICT: pass.",
211
+ "shell": {
212
+ "commands": [],
213
+ "verdictGate": {
214
+ "fromNodeId": "review-backend-cases-pi",
215
+ "accept": [
216
+ "VERDICT: pass"
217
+ ],
218
+ "label": "backend case review",
219
+ "lineMode": "first-verdict-line"
220
+ },
221
+ "cwd": ".",
222
+ "timeoutMs": 60000
223
+ }
224
+ },
225
+ {
226
+ "id": "generate-backend-pytest-pi",
227
+ "depends_on": [
228
+ "review-backend-cases-gate-shell"
229
+ ],
230
+ "complexity": "HIGH",
231
+ "executor": "pi",
232
+ "role": "implementer",
233
+ "toolProfile": "write",
234
+ "writePolicy": "exclusive",
235
+ "writeSet": [
236
+ "testcase/**/test_*.py",
237
+ "testcase/**/helpers/**",
238
+ "testcase/**/factories/**"
239
+ ],
240
+ "allowedPaths": [
241
+ "testcase/**",
242
+ "**"
243
+ ],
244
+ "forbiddenPaths": [
245
+ ".harness/**",
246
+ "artifacts/**"
247
+ ],
248
+ "outputContract": "Pytest test files under testcase/ with 1:1 mapping to functional test case IDs; optional helpers/factories under testcase/**/helpers|factories. Summary lists generated files, test function count, and any skipped cases with reasons.",
249
+ "subtask_prompt_markdown": "./backend-test-dag.generate-pytest.prompt.md"
250
+ },
251
+ {
252
+ "id": "execute-backend-pytest-shell",
253
+ "depends_on": [
254
+ "generate-backend-pytest-pi"
255
+ ],
256
+ "complexity": "LOW",
257
+ "executor": "shell",
258
+ "role": "verifier",
259
+ "writePolicy": "read-only",
260
+ "allowedPaths": [
261
+ "**"
262
+ ],
263
+ "forbiddenPaths": [
264
+ ".harness/**",
265
+ "artifacts/**"
266
+ ],
267
+ "outputContract": "Archived pytest stdout/stderr with exit codes; JUnit XML is runner-owned evidence at $HARNESS_DAG_RUN_DIR/reports/backend-test-junit.xml. Must not modify worktree files, testcase sources, production code, or assertions.",
268
+ "subtask_prompt": "Run pytest for the backend test suite; write JUnit evidence only under the current HARNESS_DAG_RUN_DIR/reports/.",
269
+ "shell": {
270
+ "commands": [
271
+ "test -n \"${HARNESS_DAG_RUN_DIR:-}\" || { echo \"missing HARNESS_DAG_RUN_DIR for backend pytest report\" >&2; exit 2; }; REPORT=\"${HARNESS_DAG_RUN_DIR}/reports/backend-test-junit.xml\"; mkdir -p \"$(dirname \"${REPORT}\")\"; PYTHONDONTWRITEBYTECODE=1 python -m pytest testcase/ -v -p no:cacheprovider --junitxml=\"${REPORT}\"; STATUS=$?; printf \"JUnit report: %s\\n\" \"${REPORT}\"; exit \"${STATUS}\""
272
+ ],
273
+ "verifyEvidence": {
274
+ "phase": "final",
275
+ "quota": "full",
276
+ "commandSource": "inline",
277
+ "commandCount": 1,
278
+ "commandLabels": [
279
+ "backend pytest execution"
280
+ ],
281
+ "finalFullRequired": true
282
+ },
283
+ "cwd": ".",
284
+ "timeoutMs": 300000
285
+ }
286
+ },
287
+ {
288
+ "id": "test-retrospect-pi",
289
+ "depends_on": [
290
+ "execute-backend-pytest-shell"
291
+ ],
292
+ "complexity": "MED",
293
+ "executor": "pi",
294
+ "role": "closeout",
295
+ "toolProfile": "write",
296
+ "writePolicy": "exclusive",
297
+ "writeSet": [
298
+ "docs/test-reports/**"
299
+ ],
300
+ "allowedPaths": [
301
+ "docs/test-reports/**"
302
+ ],
303
+ "forbiddenPaths": [
304
+ ".harness/**",
305
+ "artifacts/**"
306
+ ],
307
+ "outputContract": "Markdown retrospective report under docs/test-reports/ with coverage summary, review findings, pytest results, and maturity rating (A/B/C/D).",
308
+ "subtask_prompt_markdown": "./backend-test-dag.retrospect.prompt.md"
309
+ }
310
+ ]
311
+ }