sdd-agent-platform 0.4.2 → 0.5.1

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 (834) hide show
  1. package/README.md +34 -41
  2. package/node_modules/@sdd-agent-platform/core/dist/ai-tools.js +56 -73
  3. package/node_modules/@sdd-agent-platform/core/dist/ai-tools.js.map +1 -1
  4. package/node_modules/@sdd-agent-platform/core/dist/artifacts/ingestion.js +9 -64
  5. package/node_modules/@sdd-agent-platform/core/dist/artifacts/ingestion.js.map +1 -1
  6. package/node_modules/@sdd-agent-platform/core/dist/artifacts/sdd-evidence.js +1 -1
  7. package/node_modules/@sdd-agent-platform/core/dist/artifacts/sdd-evidence.js.map +1 -1
  8. package/node_modules/@sdd-agent-platform/core/dist/artifacts/sdd-result.js +17 -26
  9. package/node_modules/@sdd-agent-platform/core/dist/artifacts/sdd-result.js.map +1 -1
  10. package/node_modules/@sdd-agent-platform/core/dist/config/init-project.d.ts +8 -7
  11. package/node_modules/@sdd-agent-platform/core/dist/config/init-project.js +8 -12
  12. package/node_modules/@sdd-agent-platform/core/dist/config/init-project.js.map +1 -1
  13. package/node_modules/@sdd-agent-platform/core/dist/config/project-config.d.ts +1 -1
  14. package/node_modules/@sdd-agent-platform/core/dist/config/project-config.js +1 -1
  15. package/node_modules/@sdd-agent-platform/core/dist/config/project-config.js.map +1 -1
  16. package/node_modules/@sdd-agent-platform/core/dist/config/starter-documents.d.ts +3 -4
  17. package/node_modules/@sdd-agent-platform/core/dist/config/starter-documents.js +377 -411
  18. package/node_modules/@sdd-agent-platform/core/dist/config/starter-documents.js.map +1 -1
  19. package/node_modules/@sdd-agent-platform/core/dist/context/build-package.d.ts +1 -1
  20. package/node_modules/@sdd-agent-platform/core/dist/context/build-package.js +18 -25
  21. package/node_modules/@sdd-agent-platform/core/dist/context/build-package.js.map +1 -1
  22. package/node_modules/@sdd-agent-platform/core/dist/context/evidence-summary.js +8 -26
  23. package/node_modules/@sdd-agent-platform/core/dist/context/evidence-summary.js.map +1 -1
  24. package/node_modules/@sdd-agent-platform/core/dist/context/log-worker.js +2 -2
  25. package/node_modules/@sdd-agent-platform/core/dist/context/log-worker.js.map +1 -1
  26. package/node_modules/@sdd-agent-platform/core/dist/context-offload/contracts.d.ts +1 -1
  27. package/node_modules/@sdd-agent-platform/core/dist/contracts.d.ts +6 -1
  28. package/node_modules/@sdd-agent-platform/core/dist/contracts.js +5 -0
  29. package/node_modules/@sdd-agent-platform/core/dist/contracts.js.map +1 -1
  30. package/node_modules/@sdd-agent-platform/core/dist/delegation/model.d.ts +0 -3
  31. package/node_modules/@sdd-agent-platform/core/dist/delegation/validation.d.ts +0 -3
  32. package/node_modules/@sdd-agent-platform/core/dist/delegation/validation.js +4 -7
  33. package/node_modules/@sdd-agent-platform/core/dist/delegation/validation.js.map +1 -1
  34. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/document-chain.js +3 -13
  35. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/document-chain.js.map +1 -1
  36. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/local-run-index.js +1 -9
  37. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/local-run-index.js.map +1 -1
  38. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/project.js +9 -9
  39. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/project.js.map +1 -1
  40. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/registries.js +1 -0
  41. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/registries.js.map +1 -1
  42. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/run-evidence.js +4 -4
  43. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/run-evidence.js.map +1 -1
  44. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/run-trust.js +24 -0
  45. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/run-trust.js.map +1 -1
  46. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/runtime-contracts.js +2 -2
  47. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/runtime-contracts.js.map +1 -1
  48. package/node_modules/@sdd-agent-platform/core/dist/doctor/doctor.js +43 -180
  49. package/node_modules/@sdd-agent-platform/core/dist/doctor/doctor.js.map +1 -1
  50. package/node_modules/@sdd-agent-platform/core/dist/evidence/lookup.d.ts +1 -1
  51. package/node_modules/@sdd-agent-platform/core/dist/evidence/lookup.js +7 -14
  52. package/node_modules/@sdd-agent-platform/core/dist/evidence/lookup.js.map +1 -1
  53. package/node_modules/@sdd-agent-platform/core/dist/evidence-runtime/coordination.js +110 -0
  54. package/node_modules/@sdd-agent-platform/core/dist/evidence-runtime/coordination.js.map +1 -0
  55. package/node_modules/@sdd-agent-platform/core/dist/execution/background-executor.js +4 -4
  56. package/node_modules/@sdd-agent-platform/core/dist/execution/background-executor.js.map +1 -1
  57. package/node_modules/@sdd-agent-platform/core/dist/execution/foreground-subagents.js +3 -3
  58. package/node_modules/@sdd-agent-platform/core/dist/execution/foreground-subagents.js.map +1 -1
  59. package/node_modules/@sdd-agent-platform/core/dist/execution/host-invocation.js +85 -86
  60. package/node_modules/@sdd-agent-platform/core/dist/execution/host-invocation.js.map +1 -1
  61. package/node_modules/@sdd-agent-platform/core/dist/execution/resident-worker.js +2 -3
  62. package/node_modules/@sdd-agent-platform/core/dist/execution/resident-worker.js.map +1 -1
  63. package/node_modules/@sdd-agent-platform/core/dist/execution/stage-team-runtime.js +2 -2
  64. package/node_modules/@sdd-agent-platform/core/dist/execution/stage-team-runtime.js.map +1 -1
  65. package/node_modules/@sdd-agent-platform/core/dist/governance/policy.d.ts +1 -1
  66. package/node_modules/@sdd-agent-platform/core/dist/governance/policy.js +1 -1
  67. package/node_modules/@sdd-agent-platform/core/dist/governance/policy.js.map +1 -1
  68. package/node_modules/@sdd-agent-platform/core/dist/instructions.d.ts +1 -1
  69. package/node_modules/@sdd-agent-platform/core/dist/instructions.js +31 -67
  70. package/node_modules/@sdd-agent-platform/core/dist/instructions.js.map +1 -1
  71. package/node_modules/@sdd-agent-platform/core/dist/lifecycle/decision-gate.js +1 -1
  72. package/node_modules/@sdd-agent-platform/core/dist/lifecycle/decision-gate.js.map +1 -1
  73. package/node_modules/@sdd-agent-platform/core/dist/lifecycle/ship.d.ts +0 -1
  74. package/node_modules/@sdd-agent-platform/core/dist/lifecycle/ship.js +59 -85
  75. package/node_modules/@sdd-agent-platform/core/dist/lifecycle/ship.js.map +1 -1
  76. package/node_modules/@sdd-agent-platform/core/dist/lifecycle-graph/contracts.d.ts +159 -0
  77. package/node_modules/@sdd-agent-platform/core/dist/lifecycle-graph/contracts.js +7 -0
  78. package/node_modules/@sdd-agent-platform/core/dist/lifecycle-graph/contracts.js.map +1 -0
  79. package/node_modules/@sdd-agent-platform/core/dist/lifecycle-graph/kernel.d.ts +16 -0
  80. package/node_modules/@sdd-agent-platform/core/dist/lifecycle-graph/kernel.js +461 -0
  81. package/node_modules/@sdd-agent-platform/core/dist/lifecycle-graph/kernel.js.map +1 -0
  82. package/node_modules/@sdd-agent-platform/core/dist/lifecycle-graph.d.ts +2 -0
  83. package/node_modules/@sdd-agent-platform/core/dist/lifecycle-graph.js +3 -0
  84. package/node_modules/@sdd-agent-platform/core/dist/lifecycle-graph.js.map +1 -0
  85. package/node_modules/@sdd-agent-platform/core/dist/orchestration/contracts.d.ts +1 -1
  86. package/node_modules/@sdd-agent-platform/core/dist/orchestration/runtime.d.ts +2 -12
  87. package/node_modules/@sdd-agent-platform/core/dist/orchestration/runtime.js +32 -80
  88. package/node_modules/@sdd-agent-platform/core/dist/orchestration/runtime.js.map +1 -1
  89. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-capability-catalog.d.ts +2 -5
  90. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-capability-catalog.js +27 -69
  91. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-capability-catalog.js.map +1 -1
  92. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-registry.js +118 -34
  93. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-registry.js.map +1 -1
  94. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-runtime-static.js +1 -1
  95. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-runtime-static.js.map +1 -1
  96. package/node_modules/@sdd-agent-platform/core/dist/registries/capability-sources.js +1 -1
  97. package/node_modules/@sdd-agent-platform/core/dist/registries/command-team-runtime.d.ts +1 -1
  98. package/node_modules/@sdd-agent-platform/core/dist/registries/command-team-runtime.js +8 -15
  99. package/node_modules/@sdd-agent-platform/core/dist/registries/command-team-runtime.js.map +1 -1
  100. package/node_modules/@sdd-agent-platform/core/dist/registries/eval-learning-context.js +4 -4
  101. package/node_modules/@sdd-agent-platform/core/dist/registries/eval-learning-context.js.map +1 -1
  102. package/node_modules/@sdd-agent-platform/core/dist/registries/plan-scout-domains.d.ts +13 -0
  103. package/node_modules/@sdd-agent-platform/core/dist/registries/plan-scout-domains.js +76 -0
  104. package/node_modules/@sdd-agent-platform/core/dist/registries/plan-scout-domains.js.map +1 -0
  105. package/node_modules/@sdd-agent-platform/core/dist/registries/query-status.js +2 -2
  106. package/node_modules/@sdd-agent-platform/core/dist/registries/query-status.js.map +1 -1
  107. package/node_modules/@sdd-agent-platform/core/dist/registries/skill-capabilities.js +7 -7
  108. package/node_modules/@sdd-agent-platform/core/dist/registries/skill-capabilities.js.map +1 -1
  109. package/node_modules/@sdd-agent-platform/core/dist/registries/tool-capabilities.js +4 -4
  110. package/node_modules/@sdd-agent-platform/core/dist/registries/tool-capabilities.js.map +1 -1
  111. package/node_modules/@sdd-agent-platform/core/dist/registries/tool-plugins.js +2 -2
  112. package/node_modules/@sdd-agent-platform/core/dist/registries/tool-plugins.js.map +1 -1
  113. package/node_modules/@sdd-agent-platform/core/dist/registries/worker-adapters.js +11 -11
  114. package/node_modules/@sdd-agent-platform/core/dist/registries/worker-adapters.js.map +1 -1
  115. package/node_modules/@sdd-agent-platform/core/dist/registries/workflow-gates.d.ts +1 -1
  116. package/node_modules/@sdd-agent-platform/core/dist/registries/workflow-gates.js +21 -21
  117. package/node_modules/@sdd-agent-platform/core/dist/registries/workflow-gates.js.map +1 -1
  118. package/node_modules/@sdd-agent-platform/core/dist/risk/consumer-diagnostics.js +2 -1
  119. package/node_modules/@sdd-agent-platform/core/dist/risk/consumer-diagnostics.js.map +1 -1
  120. package/node_modules/@sdd-agent-platform/core/dist/risk/kernel.js +6 -6
  121. package/node_modules/@sdd-agent-platform/core/dist/risk/kernel.js.map +1 -1
  122. package/node_modules/@sdd-agent-platform/core/dist/risk/legacy-adapters.js +11 -23
  123. package/node_modules/@sdd-agent-platform/core/dist/risk/legacy-adapters.js.map +1 -1
  124. package/node_modules/@sdd-agent-platform/core/dist/risk/workflow-gates.d.ts +2 -2
  125. package/node_modules/@sdd-agent-platform/core/dist/risk/workflow-gates.js +18 -20
  126. package/node_modules/@sdd-agent-platform/core/dist/risk/workflow-gates.js.map +1 -1
  127. package/node_modules/@sdd-agent-platform/core/dist/router/agent-runtime.d.ts +0 -2
  128. package/node_modules/@sdd-agent-platform/core/dist/router/route-projection.js +1 -1
  129. package/node_modules/@sdd-agent-platform/core/dist/router/route-projection.js.map +1 -1
  130. package/node_modules/@sdd-agent-platform/core/dist/router/routing.js +16 -48
  131. package/node_modules/@sdd-agent-platform/core/dist/router/routing.js.map +1 -1
  132. package/node_modules/@sdd-agent-platform/core/dist/router/runtime-import.js +11 -1
  133. package/node_modules/@sdd-agent-platform/core/dist/router/runtime-import.js.map +1 -1
  134. package/node_modules/@sdd-agent-platform/core/dist/router/runtime-validation.js +2 -2
  135. package/node_modules/@sdd-agent-platform/core/dist/router/runtime-validation.js.map +1 -1
  136. package/node_modules/@sdd-agent-platform/core/dist/router/stage-route-binding.d.ts +2 -2
  137. package/node_modules/@sdd-agent-platform/core/dist/router/stage-route-binding.js +20 -28
  138. package/node_modules/@sdd-agent-platform/core/dist/router/stage-route-binding.js.map +1 -1
  139. package/node_modules/@sdd-agent-platform/core/dist/router.d.ts +0 -1
  140. package/node_modules/@sdd-agent-platform/core/dist/router.js +0 -1
  141. package/node_modules/@sdd-agent-platform/core/dist/router.js.map +1 -1
  142. package/node_modules/@sdd-agent-platform/core/dist/run-state/artifacts.d.ts +6 -6
  143. package/node_modules/@sdd-agent-platform/core/dist/run-state/artifacts.js +13 -124
  144. package/node_modules/@sdd-agent-platform/core/dist/run-state/artifacts.js.map +1 -1
  145. package/node_modules/@sdd-agent-platform/core/dist/run-state/inspect-run.d.ts +2 -0
  146. package/node_modules/@sdd-agent-platform/core/dist/run-state/inspect-run.js +5 -7
  147. package/node_modules/@sdd-agent-platform/core/dist/run-state/inspect-run.js.map +1 -1
  148. package/node_modules/@sdd-agent-platform/core/dist/run-state/model.d.ts +28 -28
  149. package/node_modules/@sdd-agent-platform/core/dist/run-state/run-index.d.ts +3 -2
  150. package/node_modules/@sdd-agent-platform/core/dist/run-state/run-index.js +15 -66
  151. package/node_modules/@sdd-agent-platform/core/dist/run-state/run-index.js.map +1 -1
  152. package/node_modules/@sdd-agent-platform/core/dist/run-state/run-state.js +26 -36
  153. package/node_modules/@sdd-agent-platform/core/dist/run-state/run-state.js.map +1 -1
  154. package/node_modules/@sdd-agent-platform/core/dist/run-state/task-evidence.d.ts +0 -4
  155. package/node_modules/@sdd-agent-platform/core/dist/run-state/task-evidence.js +5 -51
  156. package/node_modules/@sdd-agent-platform/core/dist/run-state/task-evidence.js.map +1 -1
  157. package/node_modules/@sdd-agent-platform/core/dist/run-state.d.ts +0 -1
  158. package/node_modules/@sdd-agent-platform/core/dist/run-state.js +0 -1
  159. package/node_modules/@sdd-agent-platform/core/dist/run-state.js.map +1 -1
  160. package/node_modules/@sdd-agent-platform/core/dist/runtime-analysis/build.js +1 -1
  161. package/node_modules/@sdd-agent-platform/core/dist/runtime-analysis/build.js.map +1 -1
  162. package/node_modules/@sdd-agent-platform/core/dist/runtime-analysis/findings.js +7 -16
  163. package/node_modules/@sdd-agent-platform/core/dist/runtime-analysis/findings.js.map +1 -1
  164. package/node_modules/@sdd-agent-platform/core/dist/runtime-analysis/model.d.ts +1 -2
  165. package/node_modules/@sdd-agent-platform/core/dist/runtime-paths.d.ts +0 -1
  166. package/node_modules/@sdd-agent-platform/core/dist/runtime-paths.js +1 -4
  167. package/node_modules/@sdd-agent-platform/core/dist/runtime-paths.js.map +1 -1
  168. package/node_modules/@sdd-agent-platform/core/dist/runtime-projection-p0.d.ts +2 -2
  169. package/node_modules/@sdd-agent-platform/core/dist/runtime-projection-p0.js +11 -0
  170. package/node_modules/@sdd-agent-platform/core/dist/runtime-projection-p0.js.map +1 -1
  171. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/artifact-depth.d.ts +14 -0
  172. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/artifact-depth.js +179 -0
  173. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/artifact-depth.js.map +1 -0
  174. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/document-hashes.d.ts +0 -2
  175. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/document-hashes.js +10 -97
  176. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/document-hashes.js.map +1 -1
  177. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/run-binding.d.ts +1 -1
  178. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/run-binding.js +6 -8
  179. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/run-binding.js.map +1 -1
  180. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/task-parser.d.ts +5 -2
  181. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/task-parser.js +85 -68
  182. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/task-parser.js.map +1 -1
  183. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/task-rendering.js +2 -2
  184. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/task-rendering.js.map +1 -1
  185. package/node_modules/@sdd-agent-platform/core/dist/spec-entry.js +40 -0
  186. package/node_modules/@sdd-agent-platform/core/dist/spec-entry.js.map +1 -0
  187. package/node_modules/@sdd-agent-platform/core/dist/spec-manager-contracts.d.ts +12 -0
  188. package/node_modules/@sdd-agent-platform/core/dist/spec-manager-contracts.js +2 -0
  189. package/node_modules/@sdd-agent-platform/core/dist/spec-manager-contracts.js.map +1 -0
  190. package/node_modules/@sdd-agent-platform/core/dist/stage-artifacts.d.ts +2 -2
  191. package/node_modules/@sdd-agent-platform/core/dist/stage-artifacts.js +19 -26
  192. package/node_modules/@sdd-agent-platform/core/dist/stage-artifacts.js.map +1 -1
  193. package/node_modules/@sdd-agent-platform/core/dist/stage-collaboration-contracts.d.ts +1 -1
  194. package/node_modules/@sdd-agent-platform/core/dist/stage-collaboration-contracts.js +3 -6
  195. package/node_modules/@sdd-agent-platform/core/dist/stage-collaboration-contracts.js.map +1 -1
  196. package/node_modules/@sdd-agent-platform/core/dist/stage-collaboration.d.ts +111 -263
  197. package/node_modules/@sdd-agent-platform/core/dist/stage-collaboration.js +1272 -1124
  198. package/node_modules/@sdd-agent-platform/core/dist/stage-collaboration.js.map +1 -1
  199. package/node_modules/@sdd-agent-platform/core/dist/stage-runtime/runtime.js +5 -5
  200. package/node_modules/@sdd-agent-platform/core/dist/stage-runtime/runtime.js.map +1 -1
  201. package/node_modules/@sdd-agent-platform/core/dist/status/project-status.d.ts +1 -44
  202. package/node_modules/@sdd-agent-platform/core/dist/status/project-status.js +47 -170
  203. package/node_modules/@sdd-agent-platform/core/dist/status/project-status.js.map +1 -1
  204. package/node_modules/@sdd-agent-platform/core/dist/storage/runtime-store.js +73 -73
  205. package/node_modules/@sdd-agent-platform/core/dist/subagents/contracts.d.ts +1 -1
  206. package/node_modules/@sdd-agent-platform/core/dist/subagents/runtime.js +7 -7
  207. package/node_modules/@sdd-agent-platform/core/dist/subagents/runtime.js.map +1 -1
  208. package/node_modules/@sdd-agent-platform/core/dist/sync-back/apply.d.ts +1 -0
  209. package/node_modules/@sdd-agent-platform/core/dist/sync-back/apply.js +2 -0
  210. package/node_modules/@sdd-agent-platform/core/dist/sync-back/apply.js.map +1 -0
  211. package/node_modules/@sdd-agent-platform/core/dist/sync-back/inspect.d.ts +1 -0
  212. package/node_modules/@sdd-agent-platform/core/dist/sync-back/inspect.js +2 -0
  213. package/node_modules/@sdd-agent-platform/core/dist/sync-back/inspect.js.map +1 -0
  214. package/node_modules/@sdd-agent-platform/core/dist/sync-back.d.ts +1 -0
  215. package/node_modules/@sdd-agent-platform/core/dist/sync-back.js +2 -0
  216. package/node_modules/@sdd-agent-platform/core/dist/sync-back.js.map +1 -0
  217. package/node_modules/@sdd-agent-platform/core/dist/task-execution-contract.d.ts +167 -0
  218. package/node_modules/@sdd-agent-platform/core/dist/task-execution-contract.js +377 -0
  219. package/node_modules/@sdd-agent-platform/core/dist/task-execution-contract.js.map +1 -0
  220. package/node_modules/@sdd-agent-platform/core/dist/test-support/fixtures.js +329 -314
  221. package/node_modules/@sdd-agent-platform/core/dist/test-support/fixtures.js.map +1 -1
  222. package/node_modules/@sdd-agent-platform/core/dist/test-support/run-state.d.ts +1 -0
  223. package/node_modules/@sdd-agent-platform/core/dist/test-support/run-state.js +53 -7
  224. package/node_modules/@sdd-agent-platform/core/dist/test-support/run-state.js.map +1 -1
  225. package/node_modules/@sdd-agent-platform/core/dist/truth-reconciliation.js +9 -12
  226. package/node_modules/@sdd-agent-platform/core/dist/truth-reconciliation.js.map +1 -1
  227. package/node_modules/@sdd-agent-platform/core/dist/tsconfig.tsbuildinfo +1 -1
  228. package/node_modules/@sdd-agent-platform/core/dist/verification/goal-verify.d.ts +0 -48
  229. package/node_modules/@sdd-agent-platform/core/dist/verification/goal-verify.js +1 -520
  230. package/node_modules/@sdd-agent-platform/core/dist/verification/goal-verify.js.map +1 -1
  231. package/node_modules/@sdd-agent-platform/core/dist/verification/rendering.d.ts +5 -5
  232. package/node_modules/@sdd-agent-platform/core/dist/verification/rendering.js +14 -14
  233. package/node_modules/@sdd-agent-platform/core/dist/verification/rendering.js.map +1 -1
  234. package/node_modules/@sdd-agent-platform/core/dist/verification/single-task-loop.d.ts +1 -0
  235. package/node_modules/@sdd-agent-platform/core/dist/verification/single-task-loop.js +111 -159
  236. package/node_modules/@sdd-agent-platform/core/dist/verification/single-task-loop.js.map +1 -1
  237. package/node_modules/@sdd-agent-platform/core/dist/verification/task-evidence-judgment.d.ts +49 -0
  238. package/node_modules/@sdd-agent-platform/core/dist/verification/task-evidence-judgment.js +521 -0
  239. package/node_modules/@sdd-agent-platform/core/dist/verification/task-evidence-judgment.js.map +1 -0
  240. package/node_modules/@sdd-agent-platform/core/dist/verification/test-runtime.js +21 -21
  241. package/node_modules/@sdd-agent-platform/core/dist/verification/test-runtime.js.map +1 -1
  242. package/node_modules/@sdd-agent-platform/core/dist/verification/validation-wave.d.ts +0 -18
  243. package/node_modules/@sdd-agent-platform/core/dist/verification/validation-wave.js +5 -27
  244. package/node_modules/@sdd-agent-platform/core/dist/verification/validation-wave.js.map +1 -1
  245. package/node_modules/@sdd-agent-platform/core/dist/verification/verify-contract.js +45 -45
  246. package/node_modules/@sdd-agent-platform/core/dist/verification/verify-contract.js.map +1 -1
  247. package/node_modules/@sdd-agent-platform/core/dist/verification.d.ts +3 -3
  248. package/node_modules/@sdd-agent-platform/core/dist/verification.js +2 -2
  249. package/node_modules/@sdd-agent-platform/core/dist/verification.js.map +1 -1
  250. package/node_modules/@sdd-agent-platform/core/dist/work-units/contracts.d.ts +1 -1
  251. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/evidence-packet.js +9 -227
  252. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/evidence-packet.js.map +1 -1
  253. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/hard-checks.js +9 -50
  254. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/hard-checks.js.map +1 -1
  255. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/policy.js +4 -42
  256. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/policy.js.map +1 -1
  257. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/types.d.ts +2 -3
  258. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/affected-file-conflicts.d.ts +1 -0
  259. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/affected-file-conflicts.js +2 -1
  260. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/affected-file-conflicts.js.map +1 -1
  261. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/dependencies.js +1 -1
  262. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/latest-eligible-run.d.ts +1 -0
  263. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/latest-eligible-run.js +23 -63
  264. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/latest-eligible-run.js.map +1 -1
  265. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/resolve.d.ts +2 -2
  266. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/resolve.js +43 -65
  267. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/resolve.js.map +1 -1
  268. package/node_modules/@sdd-agent-platform/core/package.json +5 -2
  269. package/node_modules/@sdd-agent-platform/core/src/ai-tools.test.ts +238 -185
  270. package/node_modules/@sdd-agent-platform/core/src/ai-tools.ts +56 -73
  271. package/node_modules/@sdd-agent-platform/core/src/artifacts/ingestion.test.ts +189 -227
  272. package/node_modules/@sdd-agent-platform/core/src/artifacts/ingestion.ts +222 -278
  273. package/node_modules/@sdd-agent-platform/core/src/artifacts/sdd-evidence.test.ts +28 -28
  274. package/node_modules/@sdd-agent-platform/core/src/artifacts/sdd-evidence.ts +301 -301
  275. package/node_modules/@sdd-agent-platform/core/src/artifacts/sdd-result.test.ts +181 -181
  276. package/node_modules/@sdd-agent-platform/core/src/artifacts/sdd-result.ts +231 -240
  277. package/node_modules/@sdd-agent-platform/core/src/artifacts/templates.ts +99 -99
  278. package/node_modules/@sdd-agent-platform/core/src/artifacts.ts +4 -4
  279. package/node_modules/@sdd-agent-platform/core/src/coding-facts/contracts.ts +79 -79
  280. package/node_modules/@sdd-agent-platform/core/src/coding-facts.ts +1 -1
  281. package/node_modules/@sdd-agent-platform/core/src/config/init-project.test.ts +314 -318
  282. package/node_modules/@sdd-agent-platform/core/src/config/init-project.ts +128 -123
  283. package/node_modules/@sdd-agent-platform/core/src/config/project-config.ts +265 -265
  284. package/node_modules/@sdd-agent-platform/core/src/config/project-detection.ts +147 -147
  285. package/node_modules/@sdd-agent-platform/core/src/config/starter-documents.ts +400 -432
  286. package/node_modules/@sdd-agent-platform/core/src/context/budget.ts +30 -30
  287. package/node_modules/@sdd-agent-platform/core/src/context/build-package.ts +304 -311
  288. package/node_modules/@sdd-agent-platform/core/src/context/command-summary.ts +45 -45
  289. package/node_modules/@sdd-agent-platform/core/src/context/context-build.test.ts +188 -189
  290. package/node_modules/@sdd-agent-platform/core/src/context/evidence-summary.ts +144 -163
  291. package/node_modules/@sdd-agent-platform/core/src/context/log-worker.ts +48 -48
  292. package/node_modules/@sdd-agent-platform/core/src/context/source-refs.ts +41 -41
  293. package/node_modules/@sdd-agent-platform/core/src/context-offload/contracts.ts +47 -47
  294. package/node_modules/@sdd-agent-platform/core/src/context-offload/runtime.test.ts +71 -71
  295. package/node_modules/@sdd-agent-platform/core/src/context-offload/runtime.ts +178 -178
  296. package/node_modules/@sdd-agent-platform/core/src/context-offload.ts +2 -2
  297. package/node_modules/@sdd-agent-platform/core/src/context.ts +6 -6
  298. package/node_modules/@sdd-agent-platform/core/src/contracts/issues.ts +13 -13
  299. package/node_modules/@sdd-agent-platform/core/src/contracts.test.ts +9 -9
  300. package/node_modules/@sdd-agent-platform/core/src/contracts.ts +121 -116
  301. package/node_modules/@sdd-agent-platform/core/src/delegation/delegation.test.ts +183 -183
  302. package/node_modules/@sdd-agent-platform/core/src/delegation/model.ts +23 -26
  303. package/node_modules/@sdd-agent-platform/core/src/delegation/queue.ts +58 -58
  304. package/node_modules/@sdd-agent-platform/core/src/delegation/run-state.ts +14 -14
  305. package/node_modules/@sdd-agent-platform/core/src/delegation/state-machine.ts +90 -90
  306. package/node_modules/@sdd-agent-platform/core/src/delegation/validation.ts +124 -127
  307. package/node_modules/@sdd-agent-platform/core/src/delegation.ts +26 -26
  308. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/ai-entries.ts +28 -28
  309. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/document-chain.ts +104 -112
  310. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/local-run-index.ts +19 -27
  311. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/project.ts +84 -84
  312. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/registries.ts +252 -251
  313. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/run-evidence.ts +330 -330
  314. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/run-records.ts +79 -79
  315. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/run-trust.ts +128 -107
  316. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/runtime-contracts.ts +300 -300
  317. package/node_modules/@sdd-agent-platform/core/src/doctor/doctor.test.ts +628 -755
  318. package/node_modules/@sdd-agent-platform/core/src/doctor/doctor.ts +301 -453
  319. package/node_modules/@sdd-agent-platform/core/src/doctor/model.ts +13 -13
  320. package/node_modules/@sdd-agent-platform/core/src/doctor/summary.ts +11 -11
  321. package/node_modules/@sdd-agent-platform/core/src/doctor.ts +2 -2
  322. package/node_modules/@sdd-agent-platform/core/src/evidence/lookup.ts +80 -88
  323. package/node_modules/@sdd-agent-platform/core/src/evidence-runtime/contracts.ts +48 -48
  324. package/node_modules/@sdd-agent-platform/core/src/evidence-runtime.ts +1 -1
  325. package/node_modules/@sdd-agent-platform/core/src/execution/agent-execution-records.ts +195 -195
  326. package/node_modules/@sdd-agent-platform/core/src/execution/background-executor.test.ts +187 -235
  327. package/node_modules/@sdd-agent-platform/core/src/execution/background-executor.ts +305 -305
  328. package/node_modules/@sdd-agent-platform/core/src/execution/foreground-subagents.test.ts +97 -106
  329. package/node_modules/@sdd-agent-platform/core/src/execution/foreground-subagents.ts +453 -453
  330. package/node_modules/@sdd-agent-platform/core/src/execution/host-invocation.ts +225 -226
  331. package/node_modules/@sdd-agent-platform/core/src/execution/resident-worker.test.ts +132 -143
  332. package/node_modules/@sdd-agent-platform/core/src/execution/resident-worker.ts +436 -437
  333. package/node_modules/@sdd-agent-platform/core/src/execution/stage-team-runtime.test.ts +102 -102
  334. package/node_modules/@sdd-agent-platform/core/src/execution/stage-team-runtime.ts +271 -271
  335. package/node_modules/@sdd-agent-platform/core/src/execution/wave-executor.test.ts +111 -121
  336. package/node_modules/@sdd-agent-platform/core/src/execution/wave-executor.ts +231 -231
  337. package/node_modules/@sdd-agent-platform/core/src/execution.ts +5 -5
  338. package/node_modules/@sdd-agent-platform/core/src/governance/policy.test.ts +57 -65
  339. package/node_modules/@sdd-agent-platform/core/src/governance/policy.ts +175 -175
  340. package/node_modules/@sdd-agent-platform/core/src/governance.ts +1 -1
  341. package/node_modules/@sdd-agent-platform/core/src/instructions.test.ts +80 -64
  342. package/node_modules/@sdd-agent-platform/core/src/instructions.ts +32 -68
  343. package/node_modules/@sdd-agent-platform/core/src/lifecycle/decision-gate.test.ts +174 -174
  344. package/node_modules/@sdd-agent-platform/core/src/lifecycle/decision-gate.ts +373 -373
  345. package/node_modules/@sdd-agent-platform/core/src/lifecycle/rendering.ts +29 -29
  346. package/node_modules/@sdd-agent-platform/core/src/lifecycle/risk-signals.ts +146 -146
  347. package/node_modules/@sdd-agent-platform/core/src/lifecycle/ship.test.ts +47 -47
  348. package/node_modules/@sdd-agent-platform/core/src/lifecycle/ship.ts +255 -280
  349. package/node_modules/@sdd-agent-platform/core/src/lifecycle-graph/contracts.ts +179 -0
  350. package/node_modules/@sdd-agent-platform/core/src/lifecycle-graph/kernel.ts +522 -0
  351. package/node_modules/@sdd-agent-platform/core/src/lifecycle-graph.ts +2 -0
  352. package/node_modules/@sdd-agent-platform/core/src/lifecycle.ts +4 -4
  353. package/node_modules/@sdd-agent-platform/core/src/orchestration/contracts.ts +50 -50
  354. package/node_modules/@sdd-agent-platform/core/src/orchestration/index.ts +2 -2
  355. package/node_modules/@sdd-agent-platform/core/src/orchestration/runtime.ts +331 -394
  356. package/node_modules/@sdd-agent-platform/core/src/path-safety.test.ts +22 -22
  357. package/node_modules/@sdd-agent-platform/core/src/phase8-contracts.test.ts +243 -242
  358. package/node_modules/@sdd-agent-platform/core/src/phase8-projection-compat.test.ts +152 -153
  359. package/node_modules/@sdd-agent-platform/core/src/phase8-risk-kernel.test.ts +277 -277
  360. package/node_modules/@sdd-agent-platform/core/src/phase9-lifecycle-graph.test.ts +103 -0
  361. package/node_modules/@sdd-agent-platform/core/src/planning/task-graph.test.ts +88 -88
  362. package/node_modules/@sdd-agent-platform/core/src/planning/task-graph.ts +222 -222
  363. package/node_modules/@sdd-agent-platform/core/src/planning/wave-plan.test.ts +79 -79
  364. package/node_modules/@sdd-agent-platform/core/src/planning/wave-plan.ts +160 -160
  365. package/node_modules/@sdd-agent-platform/core/src/planning.ts +2 -2
  366. package/node_modules/@sdd-agent-platform/core/src/registries/agent-capability-catalog.ts +426 -473
  367. package/node_modules/@sdd-agent-platform/core/src/registries/agent-registry.ts +230 -146
  368. package/node_modules/@sdd-agent-platform/core/src/registries/agent-runtime-static.ts +142 -142
  369. package/node_modules/@sdd-agent-platform/core/src/registries/capability-sources.ts +253 -253
  370. package/node_modules/@sdd-agent-platform/core/src/registries/command-team-runtime.ts +302 -309
  371. package/node_modules/@sdd-agent-platform/core/src/registries/eval-learning-context.ts +246 -246
  372. package/node_modules/@sdd-agent-platform/core/src/registries/plan-scout-domains.ts +89 -0
  373. package/node_modules/@sdd-agent-platform/core/src/registries/query-status.ts +119 -119
  374. package/node_modules/@sdd-agent-platform/core/src/registries/registries.test.ts +454 -445
  375. package/node_modules/@sdd-agent-platform/core/src/registries/skill-capabilities.ts +37 -37
  376. package/node_modules/@sdd-agent-platform/core/src/registries/tool-capabilities.ts +135 -135
  377. package/node_modules/@sdd-agent-platform/core/src/registries/tool-plugins.ts +132 -132
  378. package/node_modules/@sdd-agent-platform/core/src/registries/worker-adapters.ts +144 -144
  379. package/node_modules/@sdd-agent-platform/core/src/registries/workflow-gates.ts +111 -111
  380. package/node_modules/@sdd-agent-platform/core/src/registries.ts +42 -42
  381. package/node_modules/@sdd-agent-platform/core/src/risk/consumer-diagnostics.ts +98 -97
  382. package/node_modules/@sdd-agent-platform/core/src/risk/contracts.ts +63 -63
  383. package/node_modules/@sdd-agent-platform/core/src/risk/kernel.ts +233 -233
  384. package/node_modules/@sdd-agent-platform/core/src/risk/legacy-adapters.ts +251 -263
  385. package/node_modules/@sdd-agent-platform/core/src/risk/workflow-gates.ts +203 -205
  386. package/node_modules/@sdd-agent-platform/core/src/risk.ts +5 -5
  387. package/node_modules/@sdd-agent-platform/core/src/router/agent-runtime-config.ts +327 -327
  388. package/node_modules/@sdd-agent-platform/core/src/router/agent-runtime.ts +388 -390
  389. package/node_modules/@sdd-agent-platform/core/src/router/profile-resolution.ts +154 -154
  390. package/node_modules/@sdd-agent-platform/core/src/router/risk-policy.ts +33 -33
  391. package/node_modules/@sdd-agent-platform/core/src/router/route-cache.ts +100 -100
  392. package/node_modules/@sdd-agent-platform/core/src/router/route-projection.ts +356 -356
  393. package/node_modules/@sdd-agent-platform/core/src/router/route-sdd-task.test.ts +428 -665
  394. package/node_modules/@sdd-agent-platform/core/src/router/route-sdd-task.ts +2 -2
  395. package/node_modules/@sdd-agent-platform/core/src/router/routing-rules.ts +73 -73
  396. package/node_modules/@sdd-agent-platform/core/src/router/routing.ts +189 -223
  397. package/node_modules/@sdd-agent-platform/core/src/router/runtime-import.ts +464 -453
  398. package/node_modules/@sdd-agent-platform/core/src/router/runtime-inspection.ts +124 -124
  399. package/node_modules/@sdd-agent-platform/core/src/router/runtime-registry.ts +123 -123
  400. package/node_modules/@sdd-agent-platform/core/src/router/runtime-validation.ts +277 -277
  401. package/node_modules/@sdd-agent-platform/core/src/router/stage-route-binding.ts +273 -279
  402. package/node_modules/@sdd-agent-platform/core/src/router/team-mode.ts +170 -170
  403. package/node_modules/@sdd-agent-platform/core/src/router.ts +5 -6
  404. package/node_modules/@sdd-agent-platform/core/src/run-state/artifacts.ts +126 -240
  405. package/node_modules/@sdd-agent-platform/core/src/run-state/events.ts +27 -27
  406. package/node_modules/@sdd-agent-platform/core/src/run-state/inspect-run.ts +172 -172
  407. package/node_modules/@sdd-agent-platform/core/src/run-state/invocation-ledger.ts +109 -109
  408. package/node_modules/@sdd-agent-platform/core/src/run-state/model.ts +252 -253
  409. package/node_modules/@sdd-agent-platform/core/src/run-state/run-index.test.ts +80 -52
  410. package/node_modules/@sdd-agent-platform/core/src/run-state/run-index.ts +301 -352
  411. package/node_modules/@sdd-agent-platform/core/src/run-state/run-state.test.ts +70 -118
  412. package/node_modules/@sdd-agent-platform/core/src/run-state/run-state.ts +406 -416
  413. package/node_modules/@sdd-agent-platform/core/src/run-state/task-evidence.ts +198 -252
  414. package/node_modules/@sdd-agent-platform/core/src/run-state/timing.ts +146 -146
  415. package/node_modules/@sdd-agent-platform/core/src/run-state.ts +8 -9
  416. package/node_modules/@sdd-agent-platform/core/src/runtime-analysis/build.ts +60 -60
  417. package/node_modules/@sdd-agent-platform/core/src/runtime-analysis/findings.ts +249 -256
  418. package/node_modules/@sdd-agent-platform/core/src/runtime-analysis/model.ts +139 -140
  419. package/node_modules/@sdd-agent-platform/core/src/runtime-analysis.test.ts +65 -66
  420. package/node_modules/@sdd-agent-platform/core/src/runtime-analysis.ts +2 -2
  421. package/node_modules/@sdd-agent-platform/core/src/runtime-paths.ts +249 -253
  422. package/node_modules/@sdd-agent-platform/core/src/runtime-projection-p0.test.ts +101 -96
  423. package/node_modules/@sdd-agent-platform/core/src/runtime-projection-p0.ts +314 -292
  424. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/artifact-depth.test.ts +380 -0
  425. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/artifact-depth.ts +207 -0
  426. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/context.ts +111 -111
  427. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/document-hashes.ts +207 -306
  428. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/run-binding.ts +95 -97
  429. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/task-inspection.ts +39 -39
  430. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/task-parser.test.ts +467 -523
  431. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/task-parser.ts +738 -709
  432. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/task-rendering.ts +81 -81
  433. package/node_modules/@sdd-agent-platform/core/src/sdd-docs.ts +5 -5
  434. package/node_modules/@sdd-agent-platform/core/src/spec-manager-contracts.ts +13 -0
  435. package/node_modules/@sdd-agent-platform/core/src/stage-artifacts.ts +435 -450
  436. package/node_modules/@sdd-agent-platform/core/src/stage-collaboration-contracts.ts +316 -322
  437. package/node_modules/@sdd-agent-platform/core/src/stage-collaboration.test.ts +2963 -2902
  438. package/node_modules/@sdd-agent-platform/core/src/stage-collaboration.ts +5856 -5831
  439. package/node_modules/@sdd-agent-platform/core/src/stage-runtime/contracts.ts +40 -40
  440. package/node_modules/@sdd-agent-platform/core/src/stage-runtime/runtime.test.ts +209 -209
  441. package/node_modules/@sdd-agent-platform/core/src/stage-runtime/runtime.ts +360 -360
  442. package/node_modules/@sdd-agent-platform/core/src/stage-runtime.ts +2 -2
  443. package/node_modules/@sdd-agent-platform/core/src/status/project-status.test.ts +288 -511
  444. package/node_modules/@sdd-agent-platform/core/src/status/project-status.ts +651 -851
  445. package/node_modules/@sdd-agent-platform/core/src/status.ts +2 -2
  446. package/node_modules/@sdd-agent-platform/core/src/storage/json-io.ts +10 -10
  447. package/node_modules/@sdd-agent-platform/core/src/storage/runtime-store.test.ts +489 -681
  448. package/node_modules/@sdd-agent-platform/core/src/storage/runtime-store.ts +1981 -1981
  449. package/node_modules/@sdd-agent-platform/core/src/subagents/contracts.ts +45 -45
  450. package/node_modules/@sdd-agent-platform/core/src/subagents/runtime.test.ts +232 -232
  451. package/node_modules/@sdd-agent-platform/core/src/subagents/runtime.ts +307 -307
  452. package/node_modules/@sdd-agent-platform/core/src/subagents.ts +2 -2
  453. package/node_modules/@sdd-agent-platform/core/src/task-execution-contract.test.ts +141 -0
  454. package/node_modules/@sdd-agent-platform/core/src/task-execution-contract.ts +566 -0
  455. package/node_modules/@sdd-agent-platform/core/src/task-risk-profile.ts +193 -193
  456. package/node_modules/@sdd-agent-platform/core/src/test-support/fixtures.ts +413 -398
  457. package/node_modules/@sdd-agent-platform/core/src/test-support/run-state.ts +102 -56
  458. package/node_modules/@sdd-agent-platform/core/src/test-support.ts +2 -2
  459. package/node_modules/@sdd-agent-platform/core/src/truth-reconciliation.test.ts +72 -72
  460. package/node_modules/@sdd-agent-platform/core/src/truth-reconciliation.ts +9 -12
  461. package/node_modules/@sdd-agent-platform/core/src/verification/rendering.ts +137 -137
  462. package/node_modules/@sdd-agent-platform/core/src/verification/review-gate.test.ts +77 -84
  463. package/node_modules/@sdd-agent-platform/core/src/verification/review-gate.ts +77 -77
  464. package/node_modules/@sdd-agent-platform/core/src/verification/single-task-loop.ts +455 -506
  465. package/node_modules/@sdd-agent-platform/core/src/verification/{goal-verify.test.ts → task-evidence-judgment.test.ts} +261 -261
  466. package/node_modules/@sdd-agent-platform/core/src/verification/{goal-verify.ts → task-evidence-judgment.ts} +619 -619
  467. package/node_modules/@sdd-agent-platform/core/src/verification/test-runtime.ts +1190 -1190
  468. package/node_modules/@sdd-agent-platform/core/src/verification/validation-cache.ts +106 -106
  469. package/node_modules/@sdd-agent-platform/core/src/verification/validation-wave.ts +513 -556
  470. package/node_modules/@sdd-agent-platform/core/src/verification/verify-contract.ts +334 -334
  471. package/node_modules/@sdd-agent-platform/core/src/verification.ts +8 -8
  472. package/node_modules/@sdd-agent-platform/core/src/work-units/contracts.ts +26 -26
  473. package/node_modules/@sdd-agent-platform/core/src/work-units/runtime.test.ts +88 -88
  474. package/node_modules/@sdd-agent-platform/core/src/work-units/runtime.ts +112 -112
  475. package/node_modules/@sdd-agent-platform/core/src/work-units.ts +2 -2
  476. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/evidence-packet.ts +190 -425
  477. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/hard-checks.test.ts +169 -507
  478. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/hard-checks.ts +136 -182
  479. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/policy.test.ts +135 -174
  480. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/policy.ts +153 -194
  481. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/types.ts +111 -115
  482. package/node_modules/@sdd-agent-platform/core/src/workflow-state/affected-file-conflicts.ts +95 -93
  483. package/node_modules/@sdd-agent-platform/core/src/workflow-state/dependencies.test.ts +32 -32
  484. package/node_modules/@sdd-agent-platform/core/src/workflow-state/dependencies.ts +114 -114
  485. package/node_modules/@sdd-agent-platform/core/src/workflow-state/latest-eligible-run.ts +184 -224
  486. package/node_modules/@sdd-agent-platform/core/src/workflow-state/migration-recovery.ts +158 -158
  487. package/node_modules/@sdd-agent-platform/core/src/workflow-state/repair-contract.ts +77 -77
  488. package/node_modules/@sdd-agent-platform/core/src/workflow-state/resolve-task-run.ts +114 -114
  489. package/node_modules/@sdd-agent-platform/core/src/workflow-state/resolve.test.ts +969 -956
  490. package/node_modules/@sdd-agent-platform/core/src/workflow-state/resolve.ts +967 -992
  491. package/node_modules/@sdd-agent-platform/core/src/workflow-state/runtime-projections.ts +712 -712
  492. package/node_modules/@sdd-agent-platform/core/src/workflow-state.ts +2 -2
  493. package/node_modules/@sdd-agent-platform/core/src/worktree/isolation.ts +130 -130
  494. package/node_modules/@sdd-agent-platform/core/src/worktree/lifecycle.ts +269 -269
  495. package/node_modules/@sdd-agent-platform/core/src/worktree/worktree.test.ts +150 -150
  496. package/node_modules/@sdd-agent-platform/core/src/worktree.ts +2 -2
  497. package/node_modules/@sdd-agent-platform/core/tsconfig.json +15 -15
  498. package/package.json +2 -2
  499. package/packages/cli/dist/args.js +2 -2
  500. package/packages/cli/dist/args.js.map +1 -1
  501. package/packages/cli/dist/commands/ai-tools.js +2 -13
  502. package/packages/cli/dist/commands/ai-tools.js.map +1 -1
  503. package/packages/cli/dist/commands/{verifies.d.ts → artifact.d.ts} +1 -1
  504. package/packages/cli/dist/commands/artifact.js +168 -0
  505. package/packages/cli/dist/commands/artifact.js.map +1 -0
  506. package/packages/cli/dist/commands/context.js +1 -1
  507. package/packages/cli/dist/commands/context.js.map +1 -1
  508. package/packages/cli/dist/commands/evidence.js.map +1 -0
  509. package/packages/cli/dist/commands/execution.js +127 -49
  510. package/packages/cli/dist/commands/execution.js.map +1 -1
  511. package/packages/cli/dist/commands/governance.js +1 -1
  512. package/packages/cli/dist/commands/governance.js.map +1 -1
  513. package/packages/cli/dist/commands/init.js +1 -6
  514. package/packages/cli/dist/commands/init.js.map +1 -1
  515. package/packages/cli/dist/commands/instructions.d.ts +1 -1
  516. package/packages/cli/dist/commands/instructions.js +15 -1
  517. package/packages/cli/dist/commands/instructions.js.map +1 -1
  518. package/packages/cli/dist/commands/registry/runtime.js +63 -40
  519. package/packages/cli/dist/commands/registry/runtime.js.map +1 -1
  520. package/packages/cli/dist/commands/run.js +13 -52
  521. package/packages/cli/dist/commands/run.js.map +1 -1
  522. package/packages/cli/dist/commands/stage-close.d.ts +60 -0
  523. package/packages/cli/dist/commands/stage-close.js +270 -41
  524. package/packages/cli/dist/commands/stage-close.js.map +1 -1
  525. package/packages/cli/dist/commands/status.js +9 -68
  526. package/packages/cli/dist/commands/status.js.map +1 -1
  527. package/packages/cli/dist/commands/tasks.js.map +1 -1
  528. package/packages/cli/dist/dispatch.js +6 -26
  529. package/packages/cli/dist/dispatch.js.map +1 -1
  530. package/packages/cli/dist/help.js +153 -159
  531. package/packages/cli/dist/help.js.map +1 -1
  532. package/packages/cli/dist/renderers/artifacts.d.ts +5 -0
  533. package/packages/cli/dist/renderers/artifacts.js +43 -0
  534. package/packages/cli/dist/renderers/artifacts.js.map +1 -0
  535. package/packages/cli/dist/renderers/doctor.js +1 -2
  536. package/packages/cli/dist/renderers/doctor.js.map +1 -1
  537. package/packages/cli/dist/renderers/execution.js +1 -1
  538. package/packages/cli/dist/renderers/execution.js.map +1 -1
  539. package/packages/cli/dist/renderers/json.d.ts +0 -1
  540. package/packages/cli/dist/renderers/json.js +0 -3
  541. package/packages/cli/dist/renderers/json.js.map +1 -1
  542. package/packages/cli/dist/renderers/registry-runtime.d.ts +1 -2
  543. package/packages/cli/dist/renderers/registry-runtime.js +0 -20
  544. package/packages/cli/dist/renderers/registry-runtime.js.map +1 -1
  545. package/packages/cli/dist/renderers/router.js +1 -1
  546. package/packages/cli/dist/renderers/router.js.map +1 -1
  547. package/packages/cli/dist/renderers/workflow.d.ts +53 -0
  548. package/packages/cli/dist/renderers/workflow.js +93 -34
  549. package/packages/cli/dist/renderers/workflow.js.map +1 -1
  550. package/packages/cli/dist/tsconfig.tsbuildinfo +1 -1
  551. package/packages/cli/package.json +2 -2
  552. package/packages/core/dist/ai-tools.js +56 -73
  553. package/packages/core/dist/ai-tools.js.map +1 -1
  554. package/packages/core/dist/artifacts/ingestion.js +9 -64
  555. package/packages/core/dist/artifacts/ingestion.js.map +1 -1
  556. package/packages/core/dist/artifacts/sdd-evidence.js +1 -1
  557. package/packages/core/dist/artifacts/sdd-evidence.js.map +1 -1
  558. package/packages/core/dist/artifacts/sdd-result.js +17 -26
  559. package/packages/core/dist/artifacts/sdd-result.js.map +1 -1
  560. package/packages/core/dist/config/init-project.d.ts +8 -7
  561. package/packages/core/dist/config/init-project.js +8 -12
  562. package/packages/core/dist/config/init-project.js.map +1 -1
  563. package/packages/core/dist/config/project-config.d.ts +1 -1
  564. package/packages/core/dist/config/project-config.js +1 -1
  565. package/packages/core/dist/config/project-config.js.map +1 -1
  566. package/packages/core/dist/config/starter-documents.d.ts +3 -4
  567. package/packages/core/dist/config/starter-documents.js +377 -411
  568. package/packages/core/dist/config/starter-documents.js.map +1 -1
  569. package/packages/core/dist/context/build-package.d.ts +1 -1
  570. package/packages/core/dist/context/build-package.js +18 -25
  571. package/packages/core/dist/context/build-package.js.map +1 -1
  572. package/packages/core/dist/context/evidence-summary.js +8 -26
  573. package/packages/core/dist/context/evidence-summary.js.map +1 -1
  574. package/packages/core/dist/context/log-worker.js +2 -2
  575. package/packages/core/dist/context/log-worker.js.map +1 -1
  576. package/packages/core/dist/context-offload/contracts.d.ts +1 -1
  577. package/packages/core/dist/contracts.d.ts +6 -1
  578. package/packages/core/dist/contracts.js +5 -0
  579. package/packages/core/dist/contracts.js.map +1 -1
  580. package/packages/core/dist/delegation/model.d.ts +0 -3
  581. package/packages/core/dist/delegation/validation.d.ts +0 -3
  582. package/packages/core/dist/delegation/validation.js +4 -7
  583. package/packages/core/dist/delegation/validation.js.map +1 -1
  584. package/packages/core/dist/doctor/checks/document-chain.js +3 -13
  585. package/packages/core/dist/doctor/checks/document-chain.js.map +1 -1
  586. package/packages/core/dist/doctor/checks/local-run-index.js +1 -9
  587. package/packages/core/dist/doctor/checks/local-run-index.js.map +1 -1
  588. package/packages/core/dist/doctor/checks/project.js +9 -9
  589. package/packages/core/dist/doctor/checks/project.js.map +1 -1
  590. package/packages/core/dist/doctor/checks/registries.js +1 -0
  591. package/packages/core/dist/doctor/checks/registries.js.map +1 -1
  592. package/packages/core/dist/doctor/checks/run-evidence.js +4 -4
  593. package/packages/core/dist/doctor/checks/run-evidence.js.map +1 -1
  594. package/packages/core/dist/doctor/checks/run-trust.js +24 -0
  595. package/packages/core/dist/doctor/checks/run-trust.js.map +1 -1
  596. package/packages/core/dist/doctor/checks/runtime-contracts.js +2 -2
  597. package/packages/core/dist/doctor/checks/runtime-contracts.js.map +1 -1
  598. package/packages/core/dist/doctor/doctor.js +43 -180
  599. package/packages/core/dist/doctor/doctor.js.map +1 -1
  600. package/packages/core/dist/evidence/lookup.d.ts +1 -1
  601. package/packages/core/dist/evidence/lookup.js +7 -14
  602. package/packages/core/dist/evidence/lookup.js.map +1 -1
  603. package/packages/core/dist/evidence-runtime/coordination.js +110 -0
  604. package/packages/core/dist/evidence-runtime/coordination.js.map +1 -0
  605. package/packages/core/dist/execution/background-executor.js +4 -4
  606. package/packages/core/dist/execution/background-executor.js.map +1 -1
  607. package/packages/core/dist/execution/foreground-subagents.js +3 -3
  608. package/packages/core/dist/execution/foreground-subagents.js.map +1 -1
  609. package/packages/core/dist/execution/host-invocation.js +85 -86
  610. package/packages/core/dist/execution/host-invocation.js.map +1 -1
  611. package/packages/core/dist/execution/resident-worker.js +2 -3
  612. package/packages/core/dist/execution/resident-worker.js.map +1 -1
  613. package/packages/core/dist/execution/stage-team-runtime.js +2 -2
  614. package/packages/core/dist/execution/stage-team-runtime.js.map +1 -1
  615. package/packages/core/dist/governance/policy.d.ts +1 -1
  616. package/packages/core/dist/governance/policy.js +1 -1
  617. package/packages/core/dist/governance/policy.js.map +1 -1
  618. package/packages/core/dist/instructions.d.ts +1 -1
  619. package/packages/core/dist/instructions.js +31 -67
  620. package/packages/core/dist/instructions.js.map +1 -1
  621. package/packages/core/dist/lifecycle/decision-gate.js +1 -1
  622. package/packages/core/dist/lifecycle/decision-gate.js.map +1 -1
  623. package/packages/core/dist/lifecycle/ship.d.ts +0 -1
  624. package/packages/core/dist/lifecycle/ship.js +59 -85
  625. package/packages/core/dist/lifecycle/ship.js.map +1 -1
  626. package/packages/core/dist/lifecycle-graph/contracts.d.ts +159 -0
  627. package/packages/core/dist/lifecycle-graph/contracts.js +7 -0
  628. package/packages/core/dist/lifecycle-graph/contracts.js.map +1 -0
  629. package/packages/core/dist/lifecycle-graph/kernel.d.ts +16 -0
  630. package/packages/core/dist/lifecycle-graph/kernel.js +461 -0
  631. package/packages/core/dist/lifecycle-graph/kernel.js.map +1 -0
  632. package/packages/core/dist/lifecycle-graph.d.ts +2 -0
  633. package/packages/core/dist/lifecycle-graph.js +3 -0
  634. package/packages/core/dist/lifecycle-graph.js.map +1 -0
  635. package/packages/core/dist/orchestration/contracts.d.ts +1 -1
  636. package/packages/core/dist/orchestration/runtime.d.ts +2 -12
  637. package/packages/core/dist/orchestration/runtime.js +32 -80
  638. package/packages/core/dist/orchestration/runtime.js.map +1 -1
  639. package/packages/core/dist/registries/agent-capability-catalog.d.ts +2 -5
  640. package/packages/core/dist/registries/agent-capability-catalog.js +27 -69
  641. package/packages/core/dist/registries/agent-capability-catalog.js.map +1 -1
  642. package/packages/core/dist/registries/agent-registry.js +118 -34
  643. package/packages/core/dist/registries/agent-registry.js.map +1 -1
  644. package/packages/core/dist/registries/agent-runtime-static.js +1 -1
  645. package/packages/core/dist/registries/agent-runtime-static.js.map +1 -1
  646. package/packages/core/dist/registries/capability-sources.js +1 -1
  647. package/packages/core/dist/registries/command-team-runtime.d.ts +1 -1
  648. package/packages/core/dist/registries/command-team-runtime.js +8 -15
  649. package/packages/core/dist/registries/command-team-runtime.js.map +1 -1
  650. package/packages/core/dist/registries/eval-learning-context.js +4 -4
  651. package/packages/core/dist/registries/eval-learning-context.js.map +1 -1
  652. package/packages/core/dist/registries/plan-scout-domains.d.ts +13 -0
  653. package/packages/core/dist/registries/plan-scout-domains.js +76 -0
  654. package/packages/core/dist/registries/plan-scout-domains.js.map +1 -0
  655. package/packages/core/dist/registries/query-status.js +2 -2
  656. package/packages/core/dist/registries/query-status.js.map +1 -1
  657. package/packages/core/dist/registries/skill-capabilities.js +7 -7
  658. package/packages/core/dist/registries/skill-capabilities.js.map +1 -1
  659. package/packages/core/dist/registries/tool-capabilities.js +4 -4
  660. package/packages/core/dist/registries/tool-capabilities.js.map +1 -1
  661. package/packages/core/dist/registries/tool-plugins.js +2 -2
  662. package/packages/core/dist/registries/tool-plugins.js.map +1 -1
  663. package/packages/core/dist/registries/worker-adapters.js +11 -11
  664. package/packages/core/dist/registries/worker-adapters.js.map +1 -1
  665. package/packages/core/dist/registries/workflow-gates.d.ts +1 -1
  666. package/packages/core/dist/registries/workflow-gates.js +21 -21
  667. package/packages/core/dist/registries/workflow-gates.js.map +1 -1
  668. package/packages/core/dist/risk/consumer-diagnostics.js +2 -1
  669. package/packages/core/dist/risk/consumer-diagnostics.js.map +1 -1
  670. package/packages/core/dist/risk/kernel.js +6 -6
  671. package/packages/core/dist/risk/kernel.js.map +1 -1
  672. package/packages/core/dist/risk/legacy-adapters.js +11 -23
  673. package/packages/core/dist/risk/legacy-adapters.js.map +1 -1
  674. package/packages/core/dist/risk/workflow-gates.d.ts +2 -2
  675. package/packages/core/dist/risk/workflow-gates.js +18 -20
  676. package/packages/core/dist/risk/workflow-gates.js.map +1 -1
  677. package/packages/core/dist/router/agent-runtime.d.ts +0 -2
  678. package/packages/core/dist/router/route-projection.js +1 -1
  679. package/packages/core/dist/router/route-projection.js.map +1 -1
  680. package/packages/core/dist/router/routing.js +16 -48
  681. package/packages/core/dist/router/routing.js.map +1 -1
  682. package/packages/core/dist/router/runtime-import.js +11 -1
  683. package/packages/core/dist/router/runtime-import.js.map +1 -1
  684. package/packages/core/dist/router/runtime-validation.js +2 -2
  685. package/packages/core/dist/router/runtime-validation.js.map +1 -1
  686. package/packages/core/dist/router/stage-route-binding.d.ts +2 -2
  687. package/packages/core/dist/router/stage-route-binding.js +20 -28
  688. package/packages/core/dist/router/stage-route-binding.js.map +1 -1
  689. package/packages/core/dist/router.d.ts +0 -1
  690. package/packages/core/dist/router.js +0 -1
  691. package/packages/core/dist/router.js.map +1 -1
  692. package/packages/core/dist/run-state/artifacts.d.ts +6 -6
  693. package/packages/core/dist/run-state/artifacts.js +13 -124
  694. package/packages/core/dist/run-state/artifacts.js.map +1 -1
  695. package/packages/core/dist/run-state/inspect-run.d.ts +2 -0
  696. package/packages/core/dist/run-state/inspect-run.js +5 -7
  697. package/packages/core/dist/run-state/inspect-run.js.map +1 -1
  698. package/packages/core/dist/run-state/model.d.ts +28 -28
  699. package/packages/core/dist/run-state/run-index.d.ts +3 -2
  700. package/packages/core/dist/run-state/run-index.js +15 -66
  701. package/packages/core/dist/run-state/run-index.js.map +1 -1
  702. package/packages/core/dist/run-state/run-state.js +26 -36
  703. package/packages/core/dist/run-state/run-state.js.map +1 -1
  704. package/packages/core/dist/run-state/task-evidence.d.ts +0 -4
  705. package/packages/core/dist/run-state/task-evidence.js +5 -51
  706. package/packages/core/dist/run-state/task-evidence.js.map +1 -1
  707. package/packages/core/dist/run-state.d.ts +0 -1
  708. package/packages/core/dist/run-state.js +0 -1
  709. package/packages/core/dist/run-state.js.map +1 -1
  710. package/packages/core/dist/runtime-analysis/build.js +1 -1
  711. package/packages/core/dist/runtime-analysis/build.js.map +1 -1
  712. package/packages/core/dist/runtime-analysis/findings.js +7 -16
  713. package/packages/core/dist/runtime-analysis/findings.js.map +1 -1
  714. package/packages/core/dist/runtime-analysis/model.d.ts +1 -2
  715. package/packages/core/dist/runtime-paths.d.ts +0 -1
  716. package/packages/core/dist/runtime-paths.js +1 -4
  717. package/packages/core/dist/runtime-paths.js.map +1 -1
  718. package/packages/core/dist/runtime-projection-p0.d.ts +2 -2
  719. package/packages/core/dist/runtime-projection-p0.js +11 -0
  720. package/packages/core/dist/runtime-projection-p0.js.map +1 -1
  721. package/packages/core/dist/sdd-docs/artifact-depth.d.ts +14 -0
  722. package/packages/core/dist/sdd-docs/artifact-depth.js +179 -0
  723. package/packages/core/dist/sdd-docs/artifact-depth.js.map +1 -0
  724. package/packages/core/dist/sdd-docs/document-hashes.d.ts +0 -2
  725. package/packages/core/dist/sdd-docs/document-hashes.js +10 -97
  726. package/packages/core/dist/sdd-docs/document-hashes.js.map +1 -1
  727. package/packages/core/dist/sdd-docs/run-binding.d.ts +1 -1
  728. package/packages/core/dist/sdd-docs/run-binding.js +6 -8
  729. package/packages/core/dist/sdd-docs/run-binding.js.map +1 -1
  730. package/packages/core/dist/sdd-docs/task-parser.d.ts +5 -2
  731. package/packages/core/dist/sdd-docs/task-parser.js +85 -68
  732. package/packages/core/dist/sdd-docs/task-parser.js.map +1 -1
  733. package/packages/core/dist/sdd-docs/task-rendering.js +2 -2
  734. package/packages/core/dist/sdd-docs/task-rendering.js.map +1 -1
  735. package/packages/core/dist/spec-entry.js +40 -0
  736. package/packages/core/dist/spec-entry.js.map +1 -0
  737. package/packages/core/dist/spec-manager-contracts.d.ts +12 -0
  738. package/packages/core/dist/spec-manager-contracts.js +2 -0
  739. package/packages/core/dist/spec-manager-contracts.js.map +1 -0
  740. package/packages/core/dist/stage-artifacts.d.ts +2 -2
  741. package/packages/core/dist/stage-artifacts.js +19 -26
  742. package/packages/core/dist/stage-artifacts.js.map +1 -1
  743. package/packages/core/dist/stage-collaboration-contracts.d.ts +1 -1
  744. package/packages/core/dist/stage-collaboration-contracts.js +3 -6
  745. package/packages/core/dist/stage-collaboration-contracts.js.map +1 -1
  746. package/packages/core/dist/stage-collaboration.d.ts +111 -263
  747. package/packages/core/dist/stage-collaboration.js +1272 -1124
  748. package/packages/core/dist/stage-collaboration.js.map +1 -1
  749. package/packages/core/dist/stage-runtime/runtime.js +5 -5
  750. package/packages/core/dist/stage-runtime/runtime.js.map +1 -1
  751. package/packages/core/dist/status/project-status.d.ts +1 -44
  752. package/packages/core/dist/status/project-status.js +47 -170
  753. package/packages/core/dist/status/project-status.js.map +1 -1
  754. package/packages/core/dist/storage/runtime-store.js +73 -73
  755. package/packages/core/dist/subagents/contracts.d.ts +1 -1
  756. package/packages/core/dist/subagents/runtime.js +7 -7
  757. package/packages/core/dist/subagents/runtime.js.map +1 -1
  758. package/packages/core/dist/sync-back/apply.d.ts +1 -0
  759. package/packages/core/dist/sync-back/apply.js +2 -0
  760. package/packages/core/dist/sync-back/apply.js.map +1 -0
  761. package/packages/core/dist/sync-back/inspect.d.ts +1 -0
  762. package/packages/core/dist/sync-back/inspect.js +2 -0
  763. package/packages/core/dist/sync-back/inspect.js.map +1 -0
  764. package/packages/core/dist/sync-back.d.ts +1 -0
  765. package/packages/core/dist/sync-back.js +2 -0
  766. package/packages/core/dist/sync-back.js.map +1 -0
  767. package/packages/core/dist/task-execution-contract.d.ts +167 -0
  768. package/packages/core/dist/task-execution-contract.js +377 -0
  769. package/packages/core/dist/task-execution-contract.js.map +1 -0
  770. package/packages/core/dist/test-support/fixtures.js +329 -314
  771. package/packages/core/dist/test-support/fixtures.js.map +1 -1
  772. package/packages/core/dist/test-support/run-state.d.ts +1 -0
  773. package/packages/core/dist/test-support/run-state.js +53 -7
  774. package/packages/core/dist/test-support/run-state.js.map +1 -1
  775. package/packages/core/dist/truth-reconciliation.js +9 -12
  776. package/packages/core/dist/truth-reconciliation.js.map +1 -1
  777. package/packages/core/dist/tsconfig.tsbuildinfo +1 -1
  778. package/packages/core/dist/verification/goal-verify.d.ts +0 -48
  779. package/packages/core/dist/verification/goal-verify.js +1 -520
  780. package/packages/core/dist/verification/goal-verify.js.map +1 -1
  781. package/packages/core/dist/verification/rendering.d.ts +5 -5
  782. package/packages/core/dist/verification/rendering.js +14 -14
  783. package/packages/core/dist/verification/rendering.js.map +1 -1
  784. package/packages/core/dist/verification/single-task-loop.d.ts +1 -0
  785. package/packages/core/dist/verification/single-task-loop.js +111 -159
  786. package/packages/core/dist/verification/single-task-loop.js.map +1 -1
  787. package/packages/core/dist/verification/task-evidence-judgment.d.ts +49 -0
  788. package/packages/core/dist/verification/task-evidence-judgment.js +521 -0
  789. package/packages/core/dist/verification/task-evidence-judgment.js.map +1 -0
  790. package/packages/core/dist/verification/test-runtime.js +21 -21
  791. package/packages/core/dist/verification/test-runtime.js.map +1 -1
  792. package/packages/core/dist/verification/validation-wave.d.ts +0 -18
  793. package/packages/core/dist/verification/validation-wave.js +5 -27
  794. package/packages/core/dist/verification/validation-wave.js.map +1 -1
  795. package/packages/core/dist/verification/verify-contract.js +45 -45
  796. package/packages/core/dist/verification/verify-contract.js.map +1 -1
  797. package/packages/core/dist/verification.d.ts +3 -3
  798. package/packages/core/dist/verification.js +2 -2
  799. package/packages/core/dist/verification.js.map +1 -1
  800. package/packages/core/dist/work-units/contracts.d.ts +1 -1
  801. package/packages/core/dist/workflow-gate/evidence-packet.js +9 -227
  802. package/packages/core/dist/workflow-gate/evidence-packet.js.map +1 -1
  803. package/packages/core/dist/workflow-gate/hard-checks.js +9 -50
  804. package/packages/core/dist/workflow-gate/hard-checks.js.map +1 -1
  805. package/packages/core/dist/workflow-gate/policy.js +4 -42
  806. package/packages/core/dist/workflow-gate/policy.js.map +1 -1
  807. package/packages/core/dist/workflow-gate/types.d.ts +2 -3
  808. package/packages/core/dist/workflow-state/affected-file-conflicts.d.ts +1 -0
  809. package/packages/core/dist/workflow-state/affected-file-conflicts.js +2 -1
  810. package/packages/core/dist/workflow-state/affected-file-conflicts.js.map +1 -1
  811. package/packages/core/dist/workflow-state/dependencies.js +1 -1
  812. package/packages/core/dist/workflow-state/latest-eligible-run.d.ts +1 -0
  813. package/packages/core/dist/workflow-state/latest-eligible-run.js +23 -63
  814. package/packages/core/dist/workflow-state/latest-eligible-run.js.map +1 -1
  815. package/packages/core/dist/workflow-state/resolve.d.ts +2 -2
  816. package/packages/core/dist/workflow-state/resolve.js +43 -65
  817. package/packages/core/dist/workflow-state/resolve.js.map +1 -1
  818. package/packages/core/package.json +5 -2
  819. package/tsconfig.build.json +6 -7
  820. package/node_modules/@sdd-agent-platform/core/src/verification/single-task-loop.test.ts +0 -269
  821. package/node_modules/@sdd-agent-platform/core/src/verification/test-runtime.test.ts +0 -492
  822. package/node_modules/@sdd-agent-platform/core/src/verification/validation-wave.test.ts +0 -383
  823. package/node_modules/@sdd-agent-platform/core/src/verification/verify-contract.test.ts +0 -188
  824. package/packages/cli/dist/commands/lifecycle.d.ts +0 -6
  825. package/packages/cli/dist/commands/lifecycle.js +0 -125
  826. package/packages/cli/dist/commands/lifecycle.js.map +0 -1
  827. package/packages/cli/dist/commands/test.d.ts +0 -6
  828. package/packages/cli/dist/commands/test.js +0 -373
  829. package/packages/cli/dist/commands/test.js.map +0 -1
  830. package/packages/cli/dist/commands/verifies.js +0 -87
  831. package/packages/cli/dist/commands/verifies.js.map +0 -1
  832. package/packages/cli/dist/commands/verify.d.ts +0 -6
  833. package/packages/cli/dist/commands/verify.js +0 -330
  834. package/packages/cli/dist/commands/verify.js.map +0 -1
@@ -1,523 +1,467 @@
1
- import test from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';
4
- import { tmpdir } from 'node:os';
5
- import path from 'node:path';
6
-
7
- import { validTaskMarkdown } from '../test-support/fixtures.js';
8
- import { hashNormalizedMarkdownContent, hashTasksContract, normalizeMarkdownContentV1 } from './document-hashes.js';
9
- import { inspectSddTask } from './task-inspection.js';
10
- import { parseSddBranch, parseSddTasksMarkdown } from './task-parser.js';
11
- import { renderTaskGapReport } from './task-rendering.js';
12
-
13
- test('parseSddTasksMarkdown extracts task metadata and companion sections', () => {
14
- const markdown = `# Tasks
15
-
16
- ### T1: Parser foundation
17
-
18
- \`\`\`sdd-task
19
- id: T1
20
- status: pending
21
- wave: 1
22
- depends_on: []
23
- affected_files:
24
- - packages/core/src/index.ts
25
- change_surface: backend_only
26
- implementation_wave: wave-1
27
- validation_batch: backend-unit-wave-1
28
- validation_timing: batch_end
29
- requires_verify_before_next: false
30
- validation:
31
- - npm test => AC-1, AC-2
32
- risk:
33
- - parser boundary
34
- \`\`\`
35
-
36
- #### Boundary
37
-
38
- Only parse Markdown metadata; do not execute tasks.
39
-
40
- #### Acceptance
41
-
42
- - Task metadata is structured.
43
- - Boundary is retained.
44
-
45
- #### Implementation Notes
46
-
47
- None yet.
48
- `;
49
- const model = parseSddTasksMarkdown(markdown, { tasksPath: 'specs/master/tasks.md' });
50
-
51
- assert.equal(model.gaps.length, 0);
52
- assert.equal(model.tasks.length, 1);
53
- assert.equal(model.tasks[0].id, 'T1');
54
- assert.equal(model.tasks[0].status, 'pending');
55
- assert.equal(model.tasks[0].wave, 1);
56
- assert.deepEqual(model.tasks[0].dependsOn, []);
57
- assert.deepEqual(model.tasks[0].affectedFiles, ['packages/core/src/index.ts']);
58
- assert.equal(model.tasks[0].changeSurface, 'backend_only');
59
- assert.equal(model.tasks[0].implementationWave, 'wave-1');
60
- assert.equal(model.tasks[0].validationBatch, 'backend-unit-wave-1');
61
- assert.equal(model.tasks[0].validationTiming, 'batch_end');
62
- assert.equal(model.tasks[0].requiresVerifyBeforeNext, false);
63
- assert.deepEqual(model.tasks[0].validation, ['npm test']);
64
- assert.deepEqual(model.tasks[0].validationCommands, [{ command: 'npm test', acceptanceRefs: ['AC-1', 'AC-2'], raw: 'npm test => AC-1, AC-2' }]);
65
- assert.deepEqual(model.tasks[0].risk, ['parser boundary']);
66
- assert.match(model.tasks[0].boundary ?? '', /Only parse Markdown metadata/);
67
- assert.deepEqual(model.tasks[0].acceptance, ['Task metadata is structured.', 'Boundary is retained.']);
68
- });
69
-
70
- test('parseSddTasksMarkdown stops companion sections at level-two task headings', () => {
71
- const markdown = `# Tasks
72
-
73
- ## T1: First task
74
-
75
- \`\`\`sdd-task
76
- id: T1
77
- status: pending
78
- wave: 1
79
- depends_on: []
80
- affected_files:
81
- - packages/app/login.ts
82
- change_surface: backend_only
83
- validation_timing: task_end
84
- requires_verify_before_next: true
85
- validation:
86
- - npm test
87
- risk: []
88
- \`\`\`
89
-
90
- #### Boundary
91
-
92
- Only T1.
93
-
94
- #### Acceptance
95
-
96
- - T1 passes.
97
-
98
- #### Implementation Notes
99
-
100
- Keep T1 narrow.
101
-
102
- ## T2: Second task
103
-
104
- T2 introduction must not be parsed as T1 notes.
105
-
106
- \`\`\`sdd-task
107
- id: T2
108
- status: pending
109
- wave: 1
110
- depends_on: [T1]
111
- affected_files:
112
- - packages/core/src/index.ts
113
- change_surface: backend_only
114
- validation_timing: task_end
115
- requires_verify_before_next: true
116
- validation:
117
- - npm test
118
- risk: []
119
- \`\`\`
120
-
121
- #### Boundary
122
-
123
- Only T2.
124
-
125
- #### Acceptance
126
-
127
- - T2 passes.
128
- `;
129
- const model = parseSddTasksMarkdown(markdown, { tasksPath: 'specs/master/tasks.md' });
130
-
131
- assert.equal(model.gaps.length, 0);
132
- assert.equal(model.tasks[0].source.heading, 'T1: First task');
133
- assert.equal(model.tasks[0].implementationNotes, 'Keep T1 narrow.');
134
- assert.equal(model.tasks[0].implementationNotes?.includes('T2 introduction'), false);
135
- });
136
-
137
- test('parseSddTasksMarkdown blocks backend build validation for frontend-only tasks', () => {
138
- const markdown = `# Tasks
139
-
140
- ### T23: JSP rendering copy update
141
-
142
- \`\`\`sdd-task
143
- id: T23
144
- status: pending
145
- wave: 1
146
- depends_on: []
147
- affected_files:
148
- - emp-upms/emp-upms-server/src/main/webapp/WEB-INF/views/demo.jsp
149
- - emp-upms/emp-upms-server/src/main/webapp/static/img/banner.svg
150
- validation:
151
- - mvn compile -Ptest -pl emp-upms/emp-upms-server -am
152
- risk: []
153
- \`\`\`
154
-
155
- #### Boundary
156
-
157
- Only JSP copy and static image rendering.
158
-
159
- #### Acceptance
160
-
161
- - JSP copy renders correctly.
162
- `;
163
- const model = parseSddTasksMarkdown(markdown, { tasksPath: 'specs/master/tasks.md' });
164
-
165
- assert.equal(model.gaps.some((gap) => gap.taskId === 'T23' && gap.field === 'validation' && /frontend-only/.test(gap.message)), true);
166
- assert.equal(model.gaps.some((gap) => /Maven\/Gradle/.test(gap.recommendation)), true);
167
- });
168
-
169
- test('parseSddTasksMarkdown validates Phase 8.19 batch contract fields', () => {
170
- const markdown = `# Tasks
171
-
172
- ### T24: Invalid batch contract
173
-
174
- \`\`\`sdd-task
175
- id: T24
176
- status: pending
177
- wave: 1
178
- depends_on: []
179
- affected_files:
180
- - packages/core/src/index.ts
181
- change_surface: api_only
182
- validation_timing: batch_end
183
- requires_verify_before_next: sometimes
184
- validation:
185
- - npm test
186
- risk: []
187
- \`\`\`
188
-
189
- #### Boundary
190
-
191
- Stay in parser scope.
192
-
193
- #### Acceptance
194
-
195
- - Parser blocks invalid batch contract.
196
- `;
197
- const model = parseSddTasksMarkdown(markdown, { tasksPath: 'specs/master/tasks.md' });
198
- const fields = model.gaps.map((gap) => gap.field);
199
-
200
- assert.equal(fields.includes('change_surface'), true);
201
- assert.equal(fields.includes('validation_batch'), true);
202
- assert.equal(fields.includes('requires_verify_before_next'), true);
203
- });
204
-
205
- test('hashTasksContract includes Phase 8.19 validation grouping fields', () => {
206
- const base = `# Tasks
207
-
208
- ### T1: Hash grouping
209
-
210
- \`\`\`sdd-task
211
- id: T1
212
- status: pending
213
- wave: 1
214
- depends_on: []
215
- affected_files:
216
- - packages/core/src/index.ts
217
- change_surface: backend_only
218
- implementation_wave: wave-1
219
- validation_batch: batch-a
220
- validation_timing: batch_end
221
- requires_verify_before_next: false
222
- validation:
223
- - npm test
224
- risk: []
225
- \`\`\`
226
-
227
- #### Boundary
228
-
229
- Stay in parser scope.
230
-
231
- #### Acceptance
232
-
233
- - Hash includes validation grouping.
234
- `;
235
- const changed = base.replace('validation_batch: batch-a', 'validation_batch: batch-b');
236
-
237
- assert.notEqual(hashTasksContract(base), hashTasksContract(changed));
238
- });
239
-
240
- test('normalizeMarkdownContentV1 applies conservative formatting normalization', () => {
241
- const base = `---
242
- contract: sdd-spec-doc-v1
243
- based_on_spec_hash: legacy
244
- created_at: 2026-01-01T00:00:00.000Z
245
- ---
246
-
247
- # Spec
248
-
249
- <!-- standalone comment -->
250
-
251
- - keep list order
252
- - keep indentation
253
-
254
- \`\`\`md
255
- <!-- keep fenced comment -->
256
- based_on_spec_hash: keep-in-code
257
- \`\`\`
258
- `;
259
- const equivalent = `---\r\ncontract: sdd-spec-doc-v1\r\nbased_on_spec_hash: changed\r\nupdated_at: 2026-01-02T00:00:00.000Z\r\n---\r\n\r\n# Spec\t\r\n\r\n\r\n<!-- standalone comment -->\r\n\r\n- keep list order\r\n - keep indentation\r\n\r\n\`\`\`md\r\n<!-- keep fenced comment --> \r\nbased_on_spec_hash: keep-in-code\r\n\`\`\`\r\n`;
260
-
261
- assert.equal(normalizeMarkdownContentV1(base), normalizeMarkdownContentV1(equivalent));
262
- assert.match(normalizeMarkdownContentV1(base), /<!-- keep fenced comment --> /);
263
- assert.doesNotMatch(normalizeMarkdownContentV1(base), /standalone comment/);
264
- });
265
-
266
- test('spec and plan contract hashes ignore runtime metadata and formatting noise only', async () => {
267
- const root = await mkdtemp(path.join(tmpdir(), 'sdd-normalized-contract-hash-'));
268
- try {
269
- const branchDir = path.join(root, 'specs', 'feature');
270
- await mkdir(branchDir, { recursive: true });
271
- const spec = '# Spec\n\nInitial requirement.\n';
272
- const plan = '# Plan\n\nInitial plan.\n';
273
- await writeFile(path.join(branchDir, 'spec.md'), spec, 'utf8');
274
- await writeFile(path.join(branchDir, 'plan.md'), plan, 'utf8');
275
- await writeFile(path.join(branchDir, 'tasks.md'), validTaskMarkdown('T1', []), 'utf8');
276
- const base = await parseSddBranch(root, 'feature');
277
-
278
- await writeFile(path.join(branchDir, 'spec.md'), `---\nbased_on_spec_hash: ignored\nupdated_at: now\n---\n\n# Spec \n\n\nInitial requirement.\n\n<!-- runtime note -->\n`, 'utf8');
279
- await writeFile(path.join(branchDir, 'plan.md'), `# Plan\n\nbased_on_plan_hash: ignored\n\nInitial plan.\n`, 'utf8');
280
- const normalizedOnly = await parseSddBranch(root, 'feature');
281
-
282
- await writeFile(path.join(branchDir, 'spec.md'), '# Spec\n\nChanged requirement.\n', 'utf8');
283
- const changed = await parseSddBranch(root, 'feature');
284
-
285
- assert.notEqual(normalizedOnly.documents.specHash, base.documents.specHash);
286
- assert.equal(normalizedOnly.documents.specContractHash, base.documents.specContractHash);
287
- assert.equal(normalizedOnly.documents.planContractHash, base.documents.planContractHash);
288
- assert.notEqual(changed.documents.specContractHash, base.documents.specContractHash);
289
- assert.notEqual(hashNormalizedMarkdownContent('# Spec\n\nChanged requirement.\n'), hashNormalizedMarkdownContent(spec));
290
- } finally {
291
- await rm(root, { recursive: true, force: true });
292
- }
293
- });
294
-
295
- test('parseSddBranch separates raw doc hash from semantic tasks contract hash', async () => {
296
- const root = await mkdtemp(path.join(tmpdir(), 'sdd-contract-hash-'));
297
- try {
298
- const branchDir = path.join(root, 'specs', 'feature');
299
- await mkdir(branchDir, { recursive: true });
300
- await writeFile(path.join(branchDir, 'spec.md'), '# Spec\n', 'utf8');
301
- await writeFile(path.join(branchDir, 'plan.md'), '# Plan\n', 'utf8');
302
- const original = validTaskMarkdown('T1', []);
303
- await writeFile(path.join(branchDir, 'tasks.md'), original, 'utf8');
304
- const base = await parseSddBranch(root, 'feature');
305
-
306
- await writeFile(path.join(branchDir, 'tasks.md'), `${original}\n\n<!-- formatting-only note -->\n`, 'utf8');
307
- const formattingOnly = await parseSddBranch(root, 'feature');
308
-
309
- await writeFile(path.join(branchDir, 'tasks.md'), original.replace('risk: []', 'risk:\n - security'), 'utf8');
310
- const semanticChange = await parseSddBranch(root, 'feature');
311
-
312
- assert.notEqual(formattingOnly.documents.tasksHash, base.documents.tasksHash);
313
- assert.equal(formattingOnly.documents.tasksContractHash, base.documents.tasksContractHash);
314
- assert.notEqual(semanticChange.documents.tasksContractHash, base.documents.tasksContractHash);
315
- } finally {
316
- await rm(root, { recursive: true, force: true });
317
- }
318
- });
319
-
320
- test('parseSddTasksMarkdown does not leak companion sections across indented task headings', () => {
321
- const markdown = `# Tasks
322
-
323
- ### ERP-SCRK-1: 固化入库同步状态机边界
324
-
325
- \`\`\`sdd-task
326
- id: ERP-SCRK-1
327
- status: pending
328
- wave: 1
329
- depends_on: []
330
- affected_files:
331
- - src/main/java/com/acme/erp/InboundSyncService.java
332
- validation:
333
- - mvn test -Dtest=InboundSyncServiceTest
334
- risk:
335
- - state-machine
336
- \`\`\`
337
-
338
- #### Boundary
339
-
340
- Only state-machine logic.
341
-
342
- #### Acceptance
343
-
344
- - Terminal states never roll back.
345
-
346
- ### ERP-SCRK-2: 移除 Mapper SQL 拼接
347
-
348
- \`\`\`sdd-task
349
- id: ERP-SCRK-2
350
- status: pending
351
- wave: 2
352
- depends_on:
353
- - ERP-SCRK-1
354
- affected_files:
355
- - src/main/java/com/acme/erp/InboundSyncMapper.java
356
- validation:
357
- - mvn test
358
- risk:
359
- - sql
360
- \`\`\`
361
-
362
- #### Boundary
363
-
364
- Only mapper SQL parameterization.
365
-
366
- #### Acceptance
367
-
368
- - Mapper has no SQL string concatenation.
369
- `;
370
- const model = parseSddTasksMarkdown(markdown, { tasksPath: 'specs/master/tasks.md' });
371
-
372
- assert.equal(model.gaps.length, 0);
373
- assert.equal(model.tasks.length, 2);
374
- assert.deepEqual(model.tasks[0].acceptance, ['Terminal states never roll back.']);
375
- assert.deepEqual(model.tasks[1].acceptance, ['Mapper has no SQL string concatenation.']);
376
- assert.doesNotMatch(model.tasks[0].boundary ?? '', /Mapper SQL/);
377
- });
378
-
379
- test('parseSddTasksMarkdown reports task metadata and dependency gaps', () => {
380
- const markdown = `# Tasks
381
-
382
- ### T2: Gap case
383
-
384
- \`\`\`sdd-task
385
- id: T2
386
- status: surprise
387
- depends_on:
388
- - T404
389
- affected_files: []
390
- validation: []
391
- risk: []
392
- \`\`\`
393
- `;
394
- const model = parseSddTasksMarkdown(markdown);
395
- const fields = model.gaps.map((gap) => gap.field);
396
-
397
- assert.equal(model.tasks.length, 1);
398
- assert.equal(model.gaps.every((gap) => gap.severity === 'blocking'), true);
399
- assert.equal(fields.includes('status'), true);
400
- assert.equal(fields.includes('wave'), true);
401
- assert.equal(fields.includes('affected_files'), true);
402
- assert.equal(fields.includes('validation'), true);
403
- assert.equal(fields.includes('Boundary'), true);
404
- assert.equal(fields.includes('Acceptance'), true);
405
- assert.equal(fields.includes('depends_on'), true);
406
- assert.match(renderTaskGapReport({
407
- branch: 'master',
408
- specPath: 'spec.md',
409
- planPath: 'plan.md',
410
- tasksPath: 'tasks.md',
411
- verifyPath: 'verify.md',
412
- documents: { specExists: true, planExists: true, tasksExists: true, verifyExists: true },
413
- tasks: model.tasks,
414
- gaps: model.gaps
415
- }), /BLOCKED/);
416
- });
417
-
418
- test('parseSddBranch reads branch docs and inspectSddTask filters gaps', async () => {
419
- const root = await mkdtemp(path.join(tmpdir(), 'sdd-parser-'));
420
- try {
421
- const branchDir = path.join(root, 'specs', 'feature');
422
- await mkdir(branchDir, { recursive: true });
423
- await writeFile(path.join(branchDir, 'spec.md'), '# Spec\n', 'utf8');
424
- await writeFile(path.join(branchDir, 'plan.md'), '# Plan\n', 'utf8');
425
- await writeFile(path.join(branchDir, 'tasks.md'), `# Tasks
426
-
427
- ### T1: Valid task
428
-
429
- \`\`\`sdd-task
430
- id: T1
431
- status: pending
432
- wave: 1
433
- depends_on: []
434
- affected_files:
435
- - a.ts
436
- validation:
437
- - npm test
438
- risk: []
439
- \`\`\`
440
-
441
- #### Boundary
442
-
443
- Stay in a.ts.
444
-
445
- #### Acceptance
446
-
447
- - a.ts behavior is covered.
448
- `, 'utf8');
449
-
450
- const model = await parseSddBranch(root, 'feature');
451
- const inspected = inspectSddTask(model, 'T1');
452
-
453
- assert.equal(model.documents.specExists, true);
454
- assert.equal(model.documents.planExists, true);
455
- assert.equal(model.documents.tasksExists, true);
456
- assert.equal(model.gaps.length, 0);
457
- assert.equal(inspected.task?.id, 'T1');
458
- assert.equal(inspected.gaps.length, 0);
459
- } finally {
460
- await rm(root, { recursive: true, force: true });
461
- }
462
- });
463
-
464
- test('retained phase fallback detects aggregate duplicate task ids and inspect ambiguity', async () => {
465
- const root = await mkdtemp(path.join(tmpdir(), 'sdd-duplicate-'));
466
- try {
467
- const branchDir = path.join(root, 'specs', 'feature');
468
- await mkdir(branchDir, { recursive: true });
469
- await writeFile(path.join(branchDir, 'spec.md'), '# Spec\n', 'utf8');
470
- await writeFile(path.join(branchDir, 'plan.md'), '# Plan\n', 'utf8');
471
- await writeFile(path.join(branchDir, 'tasks.md'), '# Tasks\nLegacy index only.\n', 'utf8');
472
- await writeFile(path.join(branchDir, 'phase1.0-tasks.md'), validTaskMarkdown('T1', []), 'utf8');
473
- await writeFile(path.join(branchDir, 'phase1.1-tasks.md'), validTaskMarkdown('T1', []), 'utf8');
474
-
475
- const model = await parseSddBranch(root, 'feature');
476
- const inspected = inspectSddTask(model, 'T1');
477
-
478
- assert.equal(model.tasks.length, 2);
479
- assert.equal(model.gaps.some((gap) => gap.field === 'id' && gap.taskId === 'T1' && /Duplicate task id T1 across parsed task files/.test(gap.message)), true);
480
- assert.equal(inspected.task, null);
481
- assert.equal(inspected.gaps.some((gap) => /ambiguous/.test(gap.message)), true);
482
- } finally {
483
- await rm(root, { recursive: true, force: true });
484
- }
485
- });
486
-
487
- test('retained phase fallback validates cross-file dependencies over aggregate tasks', async () => {
488
- const root = await mkdtemp(path.join(tmpdir(), 'sdd-cross-deps-'));
489
- try {
490
- const branchDir = path.join(root, 'specs', 'feature');
491
- await mkdir(branchDir, { recursive: true });
492
- await writeFile(path.join(branchDir, 'spec.md'), '# Spec\n', 'utf8');
493
- await writeFile(path.join(branchDir, 'plan.md'), '# Plan\n', 'utf8');
494
- await writeFile(path.join(branchDir, 'tasks.md'), '# Tasks\nLegacy index only.\n', 'utf8');
495
- await writeFile(path.join(branchDir, 'phase1.0-tasks.md'), validTaskMarkdown('P1.0-T1', []), 'utf8');
496
- await writeFile(path.join(branchDir, 'phase1.1-tasks.md'), validTaskMarkdown('P1.1-T1', ['P1.0-T1']), 'utf8');
497
-
498
- const model = await parseSddBranch(root, 'feature');
499
-
500
- assert.equal(model.tasks.length, 2);
501
- assert.equal(model.gaps.length, 0);
502
- } finally {
503
- await rm(root, { recursive: true, force: true });
504
- }
505
- });
506
-
507
- test('retained phase fallback still reports unknown dependencies', async () => {
508
- const root = await mkdtemp(path.join(tmpdir(), 'sdd-unknown-deps-'));
509
- try {
510
- const branchDir = path.join(root, 'specs', 'feature');
511
- await mkdir(branchDir, { recursive: true });
512
- await writeFile(path.join(branchDir, 'spec.md'), '# Spec\n', 'utf8');
513
- await writeFile(path.join(branchDir, 'plan.md'), '# Plan\n', 'utf8');
514
- await writeFile(path.join(branchDir, 'tasks.md'), '# Tasks\nLegacy index only.\n', 'utf8');
515
- await writeFile(path.join(branchDir, 'phase1.0-tasks.md'), validTaskMarkdown('P1.0-T1', ['P9.9-T404']), 'utf8');
516
-
517
- const model = await parseSddBranch(root, 'feature');
518
-
519
- assert.equal(model.gaps.some((gap) => gap.type === 'Dependency Gap' && gap.taskId === 'P1.0-T1' && /unknown task P9.9-T404/.test(gap.message)), true);
520
- } finally {
521
- await rm(root, { recursive: true, force: true });
522
- }
523
- });
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';
4
+ import { tmpdir } from 'node:os';
5
+ import path from 'node:path';
6
+
7
+ import { validTaskMarkdown } from '../test-support/fixtures.js';
8
+ import { hashTasksContract } from './document-hashes.js';
9
+ import { inspectSddTask } from './task-inspection.js';
10
+ import { parseSddBranch, parseSddTasksMarkdown } from './task-parser.js';
11
+ import { renderTaskGapReport } from './task-rendering.js';
12
+
13
+ test('parseSddTasksMarkdown extracts task metadata and companion sections', () => {
14
+ const markdown = `# Tasks
15
+
16
+ ### T1: Parser foundation
17
+
18
+ \`\`\`sdd-task
19
+ id: T1
20
+ status: pending
21
+ wave: 1
22
+ depends_on: []
23
+ affected_files:
24
+ - packages/core/src/index.ts
25
+ change_surface: backend_only
26
+ implementation_wave: wave-1
27
+ validation_batch: backend-unit-wave-1
28
+ validation_timing: batch_end
29
+ requires_verify_before_next: false
30
+ validation:
31
+ - npm test => AC-1, AC-2
32
+ risk:
33
+ - parser boundary
34
+ \`\`\`
35
+
36
+ #### Boundary
37
+
38
+ Only parse Markdown metadata; do not execute tasks.
39
+
40
+ #### Acceptance
41
+
42
+ - Task metadata is structured.
43
+ - Boundary is retained.
44
+
45
+ #### Implementation Notes
46
+
47
+ None yet.
48
+ `;
49
+ const model = parseSddTasksMarkdown(markdown, { tasksPath: 'specs/master/tasks.md' });
50
+
51
+ assert.equal(model.gaps.length, 0);
52
+ assert.equal(model.tasks.length, 1);
53
+ assert.equal(model.tasks[0].id, 'T1');
54
+ assert.equal(model.tasks[0].status, 'pending');
55
+ assert.equal(model.tasks[0].wave, 1);
56
+ assert.deepEqual(model.tasks[0].dependsOn, []);
57
+ assert.deepEqual(model.tasks[0].affectedFiles, ['packages/core/src/index.ts']);
58
+ assert.equal(model.tasks[0].changeSurface, 'backend_only');
59
+ assert.equal(model.tasks[0].implementationWave, 'wave-1');
60
+ assert.equal(model.tasks[0].validationBatch, 'backend-unit-wave-1');
61
+ assert.equal(model.tasks[0].validationTiming, 'batch_end');
62
+ assert.equal(model.tasks[0].requiresVerifyBeforeNext, false);
63
+ assert.deepEqual(model.tasks[0].validation, ['npm test']);
64
+ assert.deepEqual(model.tasks[0].validationCommands, [{ command: 'npm test', acceptanceRefs: ['AC-1', 'AC-2'], raw: 'npm test => AC-1, AC-2' }]);
65
+ assert.deepEqual(model.tasks[0].risk, ['parser boundary']);
66
+ assert.match(model.tasks[0].boundary ?? '', /Only parse Markdown metadata/);
67
+ assert.deepEqual(model.tasks[0].acceptance, ['Task metadata is structured.', 'Boundary is retained.']);
68
+ });
69
+
70
+ test('parseSddTasksMarkdown stops companion sections at next major section', () => {
71
+ const markdown = `# Tasks
72
+
73
+ ## Implementation Tasks
74
+
75
+ ### T2: Update JSP report page
76
+
77
+ \`\`\`sdd-task
78
+ id: T2
79
+ status: pending
80
+ workType: implementation
81
+ unitType: frontend
82
+ change_surface: frontend_only
83
+ \`\`\`
84
+
85
+ #### Implementation Notes
86
+
87
+ Use the renew report JSP only as a style reference.
88
+
89
+ ## Validation Tasks
90
+
91
+ ### T3: Validate JSP report page
92
+
93
+ \`\`\`sdd-task
94
+ id: T3
95
+ status: pending
96
+ workType: test
97
+ \`\`\`
98
+ `;
99
+ const model = parseSddTasksMarkdown(markdown, { tasksPath: 'specs/master/tasks.md', validateDependencies: false });
100
+
101
+ assert.equal(model.tasks[0].implementationNotes, 'Use the renew report JSP only as a style reference.');
102
+ assert.doesNotMatch(model.tasks[0].implementationNotes ?? '', /Validation Tasks/);
103
+ });
104
+
105
+ test('parseSddTasksMarkdown accepts cli-only change surface', () => {
106
+ const markdown = `# Tasks
107
+
108
+ ### T1: CLI status summary
109
+
110
+ \`\`\`sdd-task
111
+ id: T1
112
+ status: pending
113
+ wave: 1
114
+ depends_on: []
115
+ affected_files:
116
+ - packages/cli/src/commands/status.ts
117
+ change_surface: cli_only
118
+ validation:
119
+ - node --test --import tsx packages/cli/src/commands/cli-regression.test.ts
120
+ \`\`\`
121
+
122
+ #### Boundary
123
+
124
+ Only update the CLI status summary.
125
+
126
+ #### Acceptance
127
+
128
+ - CLI status summary renders accepted refs.
129
+ `;
130
+ const model = parseSddTasksMarkdown(markdown, { tasksPath: 'specs/master/tasks.md' });
131
+
132
+ assert.equal(model.gaps.some((gap) => gap.field === 'change_surface'), false);
133
+ assert.equal(model.tasks[0].changeSurface, 'cli_only');
134
+ });
135
+
136
+ test('parseSddTasksMarkdown blocks backend build validation for frontend-only tasks', () => {
137
+ const markdown = `# Tasks
138
+
139
+ ### T23: JSP rendering copy update
140
+
141
+ \`\`\`sdd-task
142
+ id: T23
143
+ status: pending
144
+ wave: 1
145
+ depends_on: []
146
+ affected_files:
147
+ - emp-upms/emp-upms-server/src/main/webapp/WEB-INF/views/demo.jsp
148
+ - emp-upms/emp-upms-server/src/main/webapp/static/img/banner.svg
149
+ validation:
150
+ - mvn compile -Ptest -pl emp-upms/emp-upms-server -am
151
+ risk: []
152
+ \`\`\`
153
+
154
+ #### Boundary
155
+
156
+ Only JSP copy and static image rendering.
157
+
158
+ #### Acceptance
159
+
160
+ - JSP copy renders correctly.
161
+ `;
162
+ const model = parseSddTasksMarkdown(markdown, { tasksPath: 'specs/master/tasks.md' });
163
+
164
+ assert.equal(model.gaps.some((gap) => gap.taskId === 'T23' && gap.field === 'validation' && /frontend-only/.test(gap.message)), true);
165
+ assert.equal(model.gaps.some((gap) => /Maven\/Gradle/.test(gap.recommendation)), true);
166
+ });
167
+
168
+ test('parseSddTasksMarkdown validates Phase 8.19 batch contract fields', () => {
169
+ const markdown = `# Tasks
170
+
171
+ ### T24: Invalid batch contract
172
+
173
+ \`\`\`sdd-task
174
+ id: T24
175
+ status: pending
176
+ wave: 1
177
+ depends_on: []
178
+ affected_files:
179
+ - packages/core/src/index.ts
180
+ change_surface: api_only
181
+ validation_timing: batch_end
182
+ requires_verify_before_next: sometimes
183
+ validation:
184
+ - npm test
185
+ risk: []
186
+ \`\`\`
187
+
188
+ #### Boundary
189
+
190
+ Stay in parser scope.
191
+
192
+ #### Acceptance
193
+
194
+ - Parser blocks invalid batch contract.
195
+ `;
196
+ const model = parseSddTasksMarkdown(markdown, { tasksPath: 'specs/master/tasks.md' });
197
+ const fields = model.gaps.map((gap) => gap.field);
198
+
199
+ assert.equal(fields.includes('change_surface'), true);
200
+ assert.equal(fields.includes('validation_batch'), true);
201
+ assert.equal(fields.includes('requires_verify_before_next'), true);
202
+ });
203
+
204
+ test('hashTasksContract includes Phase 8.19 validation grouping fields', () => {
205
+ const base = `# Tasks
206
+
207
+ ### T1: Hash grouping
208
+
209
+ \`\`\`sdd-task
210
+ id: T1
211
+ status: pending
212
+ wave: 1
213
+ depends_on: []
214
+ affected_files:
215
+ - packages/core/src/index.ts
216
+ change_surface: backend_only
217
+ implementation_wave: wave-1
218
+ validation_batch: batch-a
219
+ validation_timing: batch_end
220
+ requires_verify_before_next: false
221
+ validation:
222
+ - npm test
223
+ risk: []
224
+ \`\`\`
225
+
226
+ #### Boundary
227
+
228
+ Stay in parser scope.
229
+
230
+ #### Acceptance
231
+
232
+ - Hash includes validation grouping.
233
+ `;
234
+ const changed = base.replace('validation_batch: batch-a', 'validation_batch: batch-b');
235
+
236
+ assert.notEqual(hashTasksContract(base), hashTasksContract(changed));
237
+ });
238
+
239
+ test('parseSddBranch separates raw doc hash from semantic tasks contract hash', async () => {
240
+ const root = await mkdtemp(path.join(tmpdir(), 'sdd-contract-hash-'));
241
+ try {
242
+ const branchDir = path.join(root, 'specs', 'feature');
243
+ await mkdir(branchDir, { recursive: true });
244
+ await writeFile(path.join(branchDir, 'spec.md'), '# Spec\n', 'utf8');
245
+ await writeFile(path.join(branchDir, 'plan.md'), '# Plan\n', 'utf8');
246
+ const original = validTaskMarkdown('T1', []);
247
+ await writeFile(path.join(branchDir, 'tasks.md'), original, 'utf8');
248
+ const base = await parseSddBranch(root, 'feature');
249
+
250
+ await writeFile(path.join(branchDir, 'tasks.md'), `${original}\n\n<!-- formatting-only note -->\n`, 'utf8');
251
+ const formattingOnly = await parseSddBranch(root, 'feature');
252
+
253
+ await writeFile(path.join(branchDir, 'tasks.md'), original.replace('risk: []', 'risk:\n - security'), 'utf8');
254
+ const semanticChange = await parseSddBranch(root, 'feature');
255
+
256
+ assert.notEqual(formattingOnly.documents.tasksHash, base.documents.tasksHash);
257
+ assert.equal(formattingOnly.documents.tasksContractHash, base.documents.tasksContractHash);
258
+ assert.notEqual(semanticChange.documents.tasksContractHash, base.documents.tasksContractHash);
259
+ } finally {
260
+ await rm(root, { recursive: true, force: true });
261
+ }
262
+ });
263
+
264
+ test('parseSddTasksMarkdown does not leak companion sections across indented task headings', () => {
265
+ const markdown = `# Tasks
266
+
267
+ ### ERP-SCRK-1: 固化入库同步状态机边界
268
+
269
+ \`\`\`sdd-task
270
+ id: ERP-SCRK-1
271
+ status: pending
272
+ wave: 1
273
+ depends_on: []
274
+ affected_files:
275
+ - src/main/java/com/acme/erp/InboundSyncService.java
276
+ validation:
277
+ - mvn test -Dtest=InboundSyncServiceTest
278
+ risk:
279
+ - state-machine
280
+ \`\`\`
281
+
282
+ #### Boundary
283
+
284
+ Only state-machine logic.
285
+
286
+ #### Acceptance
287
+
288
+ - Terminal states never roll back.
289
+
290
+ ### ERP-SCRK-2: 移除 Mapper SQL 拼接
291
+
292
+ \`\`\`sdd-task
293
+ id: ERP-SCRK-2
294
+ status: pending
295
+ wave: 2
296
+ depends_on:
297
+ - ERP-SCRK-1
298
+ affected_files:
299
+ - src/main/java/com/acme/erp/InboundSyncMapper.java
300
+ validation:
301
+ - mvn test
302
+ risk:
303
+ - sql
304
+ \`\`\`
305
+
306
+ #### Boundary
307
+
308
+ Only mapper SQL parameterization.
309
+
310
+ #### Acceptance
311
+
312
+ - Mapper has no SQL string concatenation.
313
+ `;
314
+ const model = parseSddTasksMarkdown(markdown, { tasksPath: 'specs/master/tasks.md' });
315
+
316
+ assert.equal(model.gaps.length, 0);
317
+ assert.equal(model.tasks.length, 2);
318
+ assert.deepEqual(model.tasks[0].acceptance, ['Terminal states never roll back.']);
319
+ assert.deepEqual(model.tasks[1].acceptance, ['Mapper has no SQL string concatenation.']);
320
+ assert.doesNotMatch(model.tasks[0].boundary ?? '', /Mapper SQL/);
321
+ });
322
+
323
+ test('parseSddTasksMarkdown reports task metadata and dependency gaps', () => {
324
+ const markdown = `# Tasks
325
+
326
+ ### T2: Gap case
327
+
328
+ \`\`\`sdd-task
329
+ id: T2
330
+ status: surprise
331
+ depends_on:
332
+ - T404
333
+ affected_files: []
334
+ validation: []
335
+ risk: []
336
+ \`\`\`
337
+ `;
338
+ const model = parseSddTasksMarkdown(markdown);
339
+ const fields = model.gaps.map((gap) => gap.field);
340
+
341
+ assert.equal(model.tasks.length, 1);
342
+ assert.equal(model.gaps.every((gap) => gap.severity === 'blocking'), true);
343
+ assert.equal(fields.includes('status'), true);
344
+ assert.equal(fields.includes('wave'), true);
345
+ assert.equal(fields.includes('affected_files'), true);
346
+ assert.equal(fields.includes('validation'), true);
347
+ assert.equal(fields.includes('Boundary'), true);
348
+ assert.equal(fields.includes('Acceptance'), true);
349
+ assert.equal(fields.includes('depends_on'), true);
350
+ assert.match(renderTaskGapReport({
351
+ branch: 'master',
352
+ specPath: 'spec.md',
353
+ planPath: 'plan.md',
354
+ tasksPath: 'tasks.md',
355
+ verifyPath: 'verify.md',
356
+ documents: { specExists: true, planExists: true, tasksExists: true, verifyExists: true },
357
+ tasks: model.tasks,
358
+ gaps: model.gaps
359
+ }), /BLOCKED/);
360
+ });
361
+
362
+ test('parseSddBranch reads branch docs and inspectSddTask filters gaps', async () => {
363
+ const root = await mkdtemp(path.join(tmpdir(), 'sdd-parser-'));
364
+ try {
365
+ const branchDir = path.join(root, 'specs', 'feature');
366
+ await mkdir(branchDir, { recursive: true });
367
+ await writeFile(path.join(branchDir, 'spec.md'), '# Spec\n', 'utf8');
368
+ await writeFile(path.join(branchDir, 'plan.md'), '# Plan\n', 'utf8');
369
+ await writeFile(path.join(branchDir, 'tasks.md'), `# Tasks
370
+
371
+ ### T1: Valid task
372
+
373
+ \`\`\`sdd-task
374
+ id: T1
375
+ status: pending
376
+ wave: 1
377
+ depends_on: []
378
+ affected_files:
379
+ - a.ts
380
+ validation:
381
+ - npm test
382
+ risk: []
383
+ \`\`\`
384
+
385
+ #### Boundary
386
+
387
+ Stay in a.ts.
388
+
389
+ #### Acceptance
390
+
391
+ - a.ts behavior is covered.
392
+ `, 'utf8');
393
+
394
+ const model = await parseSddBranch(root, 'feature');
395
+ const inspected = inspectSddTask(model, 'T1');
396
+
397
+ assert.equal(model.documents.specExists, true);
398
+ assert.equal(model.documents.planExists, true);
399
+ assert.equal(model.documents.tasksExists, true);
400
+ assert.equal(model.gaps.length, 0);
401
+ assert.equal(inspected.task?.id, 'T1');
402
+ assert.equal(inspected.gaps.length, 0);
403
+ } finally {
404
+ await rm(root, { recursive: true, force: true });
405
+ }
406
+ });
407
+
408
+ test('retained phase fallback detects aggregate duplicate task ids and inspect ambiguity', async () => {
409
+ const root = await mkdtemp(path.join(tmpdir(), 'sdd-duplicate-'));
410
+ try {
411
+ const branchDir = path.join(root, 'specs', 'feature');
412
+ await mkdir(branchDir, { recursive: true });
413
+ await writeFile(path.join(branchDir, 'spec.md'), '# Spec\n', 'utf8');
414
+ await writeFile(path.join(branchDir, 'plan.md'), '# Plan\n', 'utf8');
415
+ await writeFile(path.join(branchDir, 'tasks.md'), '# Tasks\nLegacy index only.\n', 'utf8');
416
+ await writeFile(path.join(branchDir, 'phase1.0-tasks.md'), validTaskMarkdown('T1', []), 'utf8');
417
+ await writeFile(path.join(branchDir, 'phase1.1-tasks.md'), validTaskMarkdown('T1', []), 'utf8');
418
+
419
+ const model = await parseSddBranch(root, 'feature');
420
+ const inspected = inspectSddTask(model, 'T1');
421
+
422
+ assert.equal(model.tasks.length, 2);
423
+ assert.equal(model.gaps.some((gap) => gap.field === 'id' && gap.taskId === 'T1' && /Duplicate task id T1 across parsed task files/.test(gap.message)), true);
424
+ assert.equal(inspected.task, null);
425
+ assert.equal(inspected.gaps.some((gap) => /ambiguous/.test(gap.message)), true);
426
+ } finally {
427
+ await rm(root, { recursive: true, force: true });
428
+ }
429
+ });
430
+
431
+ test('retained phase fallback validates cross-file dependencies over aggregate tasks', async () => {
432
+ const root = await mkdtemp(path.join(tmpdir(), 'sdd-cross-deps-'));
433
+ try {
434
+ const branchDir = path.join(root, 'specs', 'feature');
435
+ await mkdir(branchDir, { recursive: true });
436
+ await writeFile(path.join(branchDir, 'spec.md'), '# Spec\n', 'utf8');
437
+ await writeFile(path.join(branchDir, 'plan.md'), '# Plan\n', 'utf8');
438
+ await writeFile(path.join(branchDir, 'tasks.md'), '# Tasks\nLegacy index only.\n', 'utf8');
439
+ await writeFile(path.join(branchDir, 'phase1.0-tasks.md'), validTaskMarkdown('P1.0-T1', []), 'utf8');
440
+ await writeFile(path.join(branchDir, 'phase1.1-tasks.md'), validTaskMarkdown('P1.1-T1', ['P1.0-T1']), 'utf8');
441
+
442
+ const model = await parseSddBranch(root, 'feature');
443
+
444
+ assert.equal(model.tasks.length, 2);
445
+ assert.equal(model.gaps.length, 0);
446
+ } finally {
447
+ await rm(root, { recursive: true, force: true });
448
+ }
449
+ });
450
+
451
+ test('retained phase fallback still reports unknown dependencies', async () => {
452
+ const root = await mkdtemp(path.join(tmpdir(), 'sdd-unknown-deps-'));
453
+ try {
454
+ const branchDir = path.join(root, 'specs', 'feature');
455
+ await mkdir(branchDir, { recursive: true });
456
+ await writeFile(path.join(branchDir, 'spec.md'), '# Spec\n', 'utf8');
457
+ await writeFile(path.join(branchDir, 'plan.md'), '# Plan\n', 'utf8');
458
+ await writeFile(path.join(branchDir, 'tasks.md'), '# Tasks\nLegacy index only.\n', 'utf8');
459
+ await writeFile(path.join(branchDir, 'phase1.0-tasks.md'), validTaskMarkdown('P1.0-T1', ['P9.9-T404']), 'utf8');
460
+
461
+ const model = await parseSddBranch(root, 'feature');
462
+
463
+ assert.equal(model.gaps.some((gap) => gap.type === 'Dependency Gap' && gap.taskId === 'P1.0-T1' && /unknown task P9.9-T404/.test(gap.message)), true);
464
+ } finally {
465
+ await rm(root, { recursive: true, force: true });
466
+ }
467
+ });