sdd-agent-platform 0.4.2 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (826) hide show
  1. package/README.md +33 -39
  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 -0
  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 +7 -13
  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/project.js +8 -8
  37. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/project.js.map +1 -1
  38. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/registries.js +1 -0
  39. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/registries.js.map +1 -1
  40. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/run-evidence.js +4 -4
  41. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/run-evidence.js.map +1 -1
  42. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/run-trust.js +24 -0
  43. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/run-trust.js.map +1 -1
  44. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/runtime-contracts.js +1 -1
  45. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/runtime-contracts.js.map +1 -1
  46. package/node_modules/@sdd-agent-platform/core/dist/doctor/doctor.js +43 -180
  47. package/node_modules/@sdd-agent-platform/core/dist/doctor/doctor.js.map +1 -1
  48. package/node_modules/@sdd-agent-platform/core/dist/evidence/lookup.d.ts +1 -1
  49. package/node_modules/@sdd-agent-platform/core/dist/evidence/lookup.js +7 -14
  50. package/node_modules/@sdd-agent-platform/core/dist/evidence/lookup.js.map +1 -1
  51. package/node_modules/@sdd-agent-platform/core/dist/evidence-runtime/coordination.js +110 -0
  52. package/node_modules/@sdd-agent-platform/core/dist/evidence-runtime/coordination.js.map +1 -0
  53. package/node_modules/@sdd-agent-platform/core/dist/execution/background-executor.js +4 -4
  54. package/node_modules/@sdd-agent-platform/core/dist/execution/background-executor.js.map +1 -1
  55. package/node_modules/@sdd-agent-platform/core/dist/execution/foreground-subagents.js +3 -3
  56. package/node_modules/@sdd-agent-platform/core/dist/execution/foreground-subagents.js.map +1 -1
  57. package/node_modules/@sdd-agent-platform/core/dist/execution/host-invocation.js +85 -86
  58. package/node_modules/@sdd-agent-platform/core/dist/execution/host-invocation.js.map +1 -1
  59. package/node_modules/@sdd-agent-platform/core/dist/execution/resident-worker.js +2 -3
  60. package/node_modules/@sdd-agent-platform/core/dist/execution/resident-worker.js.map +1 -1
  61. package/node_modules/@sdd-agent-platform/core/dist/execution/stage-team-runtime.js +2 -2
  62. package/node_modules/@sdd-agent-platform/core/dist/execution/stage-team-runtime.js.map +1 -1
  63. package/node_modules/@sdd-agent-platform/core/dist/governance/policy.d.ts +1 -1
  64. package/node_modules/@sdd-agent-platform/core/dist/governance/policy.js +1 -1
  65. package/node_modules/@sdd-agent-platform/core/dist/governance/policy.js.map +1 -1
  66. package/node_modules/@sdd-agent-platform/core/dist/instructions.d.ts +1 -1
  67. package/node_modules/@sdd-agent-platform/core/dist/instructions.js +31 -67
  68. package/node_modules/@sdd-agent-platform/core/dist/instructions.js.map +1 -1
  69. package/node_modules/@sdd-agent-platform/core/dist/lifecycle/decision-gate.js +1 -1
  70. package/node_modules/@sdd-agent-platform/core/dist/lifecycle/decision-gate.js.map +1 -1
  71. package/node_modules/@sdd-agent-platform/core/dist/lifecycle/ship.d.ts +0 -1
  72. package/node_modules/@sdd-agent-platform/core/dist/lifecycle/ship.js +59 -85
  73. package/node_modules/@sdd-agent-platform/core/dist/lifecycle/ship.js.map +1 -1
  74. package/node_modules/@sdd-agent-platform/core/dist/lifecycle-graph/contracts.d.ts +159 -0
  75. package/node_modules/@sdd-agent-platform/core/dist/lifecycle-graph/contracts.js +7 -0
  76. package/node_modules/@sdd-agent-platform/core/dist/lifecycle-graph/contracts.js.map +1 -0
  77. package/node_modules/@sdd-agent-platform/core/dist/lifecycle-graph/kernel.d.ts +16 -0
  78. package/node_modules/@sdd-agent-platform/core/dist/lifecycle-graph/kernel.js +461 -0
  79. package/node_modules/@sdd-agent-platform/core/dist/lifecycle-graph/kernel.js.map +1 -0
  80. package/node_modules/@sdd-agent-platform/core/dist/lifecycle-graph.d.ts +2 -0
  81. package/node_modules/@sdd-agent-platform/core/dist/lifecycle-graph.js +3 -0
  82. package/node_modules/@sdd-agent-platform/core/dist/lifecycle-graph.js.map +1 -0
  83. package/node_modules/@sdd-agent-platform/core/dist/orchestration/contracts.d.ts +1 -1
  84. package/node_modules/@sdd-agent-platform/core/dist/orchestration/runtime.d.ts +2 -12
  85. package/node_modules/@sdd-agent-platform/core/dist/orchestration/runtime.js +32 -80
  86. package/node_modules/@sdd-agent-platform/core/dist/orchestration/runtime.js.map +1 -1
  87. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-capability-catalog.d.ts +2 -5
  88. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-capability-catalog.js +27 -69
  89. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-capability-catalog.js.map +1 -1
  90. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-registry.js +118 -34
  91. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-registry.js.map +1 -1
  92. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-runtime-static.js +1 -1
  93. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-runtime-static.js.map +1 -1
  94. package/node_modules/@sdd-agent-platform/core/dist/registries/capability-sources.js +1 -1
  95. package/node_modules/@sdd-agent-platform/core/dist/registries/command-team-runtime.d.ts +1 -1
  96. package/node_modules/@sdd-agent-platform/core/dist/registries/command-team-runtime.js +8 -15
  97. package/node_modules/@sdd-agent-platform/core/dist/registries/command-team-runtime.js.map +1 -1
  98. package/node_modules/@sdd-agent-platform/core/dist/registries/eval-learning-context.js +4 -4
  99. package/node_modules/@sdd-agent-platform/core/dist/registries/eval-learning-context.js.map +1 -1
  100. package/node_modules/@sdd-agent-platform/core/dist/registries/plan-scout-domains.d.ts +13 -0
  101. package/node_modules/@sdd-agent-platform/core/dist/registries/plan-scout-domains.js +76 -0
  102. package/node_modules/@sdd-agent-platform/core/dist/registries/plan-scout-domains.js.map +1 -0
  103. package/node_modules/@sdd-agent-platform/core/dist/registries/query-status.js +2 -2
  104. package/node_modules/@sdd-agent-platform/core/dist/registries/query-status.js.map +1 -1
  105. package/node_modules/@sdd-agent-platform/core/dist/registries/skill-capabilities.js +7 -7
  106. package/node_modules/@sdd-agent-platform/core/dist/registries/skill-capabilities.js.map +1 -1
  107. package/node_modules/@sdd-agent-platform/core/dist/registries/tool-capabilities.js +4 -4
  108. package/node_modules/@sdd-agent-platform/core/dist/registries/tool-capabilities.js.map +1 -1
  109. package/node_modules/@sdd-agent-platform/core/dist/registries/tool-plugins.js +2 -2
  110. package/node_modules/@sdd-agent-platform/core/dist/registries/tool-plugins.js.map +1 -1
  111. package/node_modules/@sdd-agent-platform/core/dist/registries/worker-adapters.js +11 -11
  112. package/node_modules/@sdd-agent-platform/core/dist/registries/worker-adapters.js.map +1 -1
  113. package/node_modules/@sdd-agent-platform/core/dist/registries/workflow-gates.d.ts +1 -1
  114. package/node_modules/@sdd-agent-platform/core/dist/registries/workflow-gates.js +21 -21
  115. package/node_modules/@sdd-agent-platform/core/dist/registries/workflow-gates.js.map +1 -1
  116. package/node_modules/@sdd-agent-platform/core/dist/risk/consumer-diagnostics.js +2 -1
  117. package/node_modules/@sdd-agent-platform/core/dist/risk/consumer-diagnostics.js.map +1 -1
  118. package/node_modules/@sdd-agent-platform/core/dist/risk/kernel.js +6 -6
  119. package/node_modules/@sdd-agent-platform/core/dist/risk/kernel.js.map +1 -1
  120. package/node_modules/@sdd-agent-platform/core/dist/risk/legacy-adapters.js +11 -23
  121. package/node_modules/@sdd-agent-platform/core/dist/risk/legacy-adapters.js.map +1 -1
  122. package/node_modules/@sdd-agent-platform/core/dist/risk/workflow-gates.d.ts +2 -2
  123. package/node_modules/@sdd-agent-platform/core/dist/risk/workflow-gates.js +18 -20
  124. package/node_modules/@sdd-agent-platform/core/dist/risk/workflow-gates.js.map +1 -1
  125. package/node_modules/@sdd-agent-platform/core/dist/router/agent-runtime.d.ts +0 -2
  126. package/node_modules/@sdd-agent-platform/core/dist/router/route-projection.js +1 -1
  127. package/node_modules/@sdd-agent-platform/core/dist/router/route-projection.js.map +1 -1
  128. package/node_modules/@sdd-agent-platform/core/dist/router/routing.js +16 -48
  129. package/node_modules/@sdd-agent-platform/core/dist/router/routing.js.map +1 -1
  130. package/node_modules/@sdd-agent-platform/core/dist/router/runtime-import.js +11 -1
  131. package/node_modules/@sdd-agent-platform/core/dist/router/runtime-import.js.map +1 -1
  132. package/node_modules/@sdd-agent-platform/core/dist/router/runtime-validation.js +2 -2
  133. package/node_modules/@sdd-agent-platform/core/dist/router/runtime-validation.js.map +1 -1
  134. package/node_modules/@sdd-agent-platform/core/dist/router/stage-route-binding.d.ts +2 -2
  135. package/node_modules/@sdd-agent-platform/core/dist/router/stage-route-binding.js +20 -28
  136. package/node_modules/@sdd-agent-platform/core/dist/router/stage-route-binding.js.map +1 -1
  137. package/node_modules/@sdd-agent-platform/core/dist/router.d.ts +0 -1
  138. package/node_modules/@sdd-agent-platform/core/dist/router.js +0 -1
  139. package/node_modules/@sdd-agent-platform/core/dist/router.js.map +1 -1
  140. package/node_modules/@sdd-agent-platform/core/dist/run-state/artifacts.d.ts +6 -6
  141. package/node_modules/@sdd-agent-platform/core/dist/run-state/artifacts.js +13 -124
  142. package/node_modules/@sdd-agent-platform/core/dist/run-state/artifacts.js.map +1 -1
  143. package/node_modules/@sdd-agent-platform/core/dist/run-state/inspect-run.d.ts +2 -0
  144. package/node_modules/@sdd-agent-platform/core/dist/run-state/inspect-run.js +5 -7
  145. package/node_modules/@sdd-agent-platform/core/dist/run-state/inspect-run.js.map +1 -1
  146. package/node_modules/@sdd-agent-platform/core/dist/run-state/model.d.ts +28 -28
  147. package/node_modules/@sdd-agent-platform/core/dist/run-state/run-index.d.ts +2 -0
  148. package/node_modules/@sdd-agent-platform/core/dist/run-state/run-index.js +3 -1
  149. package/node_modules/@sdd-agent-platform/core/dist/run-state/run-index.js.map +1 -1
  150. package/node_modules/@sdd-agent-platform/core/dist/run-state/run-state.js +26 -36
  151. package/node_modules/@sdd-agent-platform/core/dist/run-state/run-state.js.map +1 -1
  152. package/node_modules/@sdd-agent-platform/core/dist/run-state/task-evidence.d.ts +0 -4
  153. package/node_modules/@sdd-agent-platform/core/dist/run-state/task-evidence.js +5 -51
  154. package/node_modules/@sdd-agent-platform/core/dist/run-state/task-evidence.js.map +1 -1
  155. package/node_modules/@sdd-agent-platform/core/dist/run-state.d.ts +0 -1
  156. package/node_modules/@sdd-agent-platform/core/dist/run-state.js +0 -1
  157. package/node_modules/@sdd-agent-platform/core/dist/run-state.js.map +1 -1
  158. package/node_modules/@sdd-agent-platform/core/dist/runtime-analysis/build.js +1 -1
  159. package/node_modules/@sdd-agent-platform/core/dist/runtime-analysis/build.js.map +1 -1
  160. package/node_modules/@sdd-agent-platform/core/dist/runtime-analysis/findings.js +5 -5
  161. package/node_modules/@sdd-agent-platform/core/dist/runtime-analysis/findings.js.map +1 -1
  162. package/node_modules/@sdd-agent-platform/core/dist/runtime-paths.js +1 -1
  163. package/node_modules/@sdd-agent-platform/core/dist/runtime-paths.js.map +1 -1
  164. package/node_modules/@sdd-agent-platform/core/dist/runtime-projection-p0.d.ts +2 -2
  165. package/node_modules/@sdd-agent-platform/core/dist/runtime-projection-p0.js +11 -0
  166. package/node_modules/@sdd-agent-platform/core/dist/runtime-projection-p0.js.map +1 -1
  167. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/artifact-depth.d.ts +14 -0
  168. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/artifact-depth.js +179 -0
  169. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/artifact-depth.js.map +1 -0
  170. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/document-hashes.d.ts +0 -2
  171. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/document-hashes.js +10 -97
  172. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/document-hashes.js.map +1 -1
  173. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/run-binding.d.ts +1 -1
  174. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/run-binding.js +6 -8
  175. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/run-binding.js.map +1 -1
  176. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/task-parser.d.ts +5 -2
  177. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/task-parser.js +85 -68
  178. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/task-parser.js.map +1 -1
  179. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/task-rendering.js +2 -2
  180. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/task-rendering.js.map +1 -1
  181. package/node_modules/@sdd-agent-platform/core/dist/spec-entry.js +40 -0
  182. package/node_modules/@sdd-agent-platform/core/dist/spec-entry.js.map +1 -0
  183. package/node_modules/@sdd-agent-platform/core/dist/spec-manager-contracts.d.ts +12 -0
  184. package/node_modules/@sdd-agent-platform/core/dist/spec-manager-contracts.js +2 -0
  185. package/node_modules/@sdd-agent-platform/core/dist/spec-manager-contracts.js.map +1 -0
  186. package/node_modules/@sdd-agent-platform/core/dist/stage-artifacts.d.ts +2 -2
  187. package/node_modules/@sdd-agent-platform/core/dist/stage-artifacts.js +19 -26
  188. package/node_modules/@sdd-agent-platform/core/dist/stage-artifacts.js.map +1 -1
  189. package/node_modules/@sdd-agent-platform/core/dist/stage-collaboration-contracts.d.ts +1 -1
  190. package/node_modules/@sdd-agent-platform/core/dist/stage-collaboration-contracts.js +3 -6
  191. package/node_modules/@sdd-agent-platform/core/dist/stage-collaboration-contracts.js.map +1 -1
  192. package/node_modules/@sdd-agent-platform/core/dist/stage-collaboration.d.ts +111 -263
  193. package/node_modules/@sdd-agent-platform/core/dist/stage-collaboration.js +1272 -1124
  194. package/node_modules/@sdd-agent-platform/core/dist/stage-collaboration.js.map +1 -1
  195. package/node_modules/@sdd-agent-platform/core/dist/stage-runtime/runtime.js +5 -5
  196. package/node_modules/@sdd-agent-platform/core/dist/stage-runtime/runtime.js.map +1 -1
  197. package/node_modules/@sdd-agent-platform/core/dist/status/project-status.d.ts +1 -44
  198. package/node_modules/@sdd-agent-platform/core/dist/status/project-status.js +47 -170
  199. package/node_modules/@sdd-agent-platform/core/dist/status/project-status.js.map +1 -1
  200. package/node_modules/@sdd-agent-platform/core/dist/storage/runtime-store.js +73 -73
  201. package/node_modules/@sdd-agent-platform/core/dist/subagents/contracts.d.ts +1 -1
  202. package/node_modules/@sdd-agent-platform/core/dist/subagents/runtime.js +7 -7
  203. package/node_modules/@sdd-agent-platform/core/dist/subagents/runtime.js.map +1 -1
  204. package/node_modules/@sdd-agent-platform/core/dist/sync-back/apply.d.ts +1 -0
  205. package/node_modules/@sdd-agent-platform/core/dist/sync-back/apply.js +2 -0
  206. package/node_modules/@sdd-agent-platform/core/dist/sync-back/apply.js.map +1 -0
  207. package/node_modules/@sdd-agent-platform/core/dist/sync-back/inspect.d.ts +1 -0
  208. package/node_modules/@sdd-agent-platform/core/dist/sync-back/inspect.js +2 -0
  209. package/node_modules/@sdd-agent-platform/core/dist/sync-back/inspect.js.map +1 -0
  210. package/node_modules/@sdd-agent-platform/core/dist/sync-back.d.ts +1 -0
  211. package/node_modules/@sdd-agent-platform/core/dist/sync-back.js +2 -0
  212. package/node_modules/@sdd-agent-platform/core/dist/sync-back.js.map +1 -0
  213. package/node_modules/@sdd-agent-platform/core/dist/task-execution-contract.d.ts +167 -0
  214. package/node_modules/@sdd-agent-platform/core/dist/task-execution-contract.js +377 -0
  215. package/node_modules/@sdd-agent-platform/core/dist/task-execution-contract.js.map +1 -0
  216. package/node_modules/@sdd-agent-platform/core/dist/test-support/fixtures.js +329 -314
  217. package/node_modules/@sdd-agent-platform/core/dist/test-support/fixtures.js.map +1 -1
  218. package/node_modules/@sdd-agent-platform/core/dist/test-support/run-state.d.ts +1 -0
  219. package/node_modules/@sdd-agent-platform/core/dist/test-support/run-state.js +53 -7
  220. package/node_modules/@sdd-agent-platform/core/dist/test-support/run-state.js.map +1 -1
  221. package/node_modules/@sdd-agent-platform/core/dist/truth-reconciliation.js +9 -12
  222. package/node_modules/@sdd-agent-platform/core/dist/truth-reconciliation.js.map +1 -1
  223. package/node_modules/@sdd-agent-platform/core/dist/tsconfig.tsbuildinfo +1 -1
  224. package/node_modules/@sdd-agent-platform/core/dist/verification/goal-verify.d.ts +0 -48
  225. package/node_modules/@sdd-agent-platform/core/dist/verification/goal-verify.js +1 -520
  226. package/node_modules/@sdd-agent-platform/core/dist/verification/goal-verify.js.map +1 -1
  227. package/node_modules/@sdd-agent-platform/core/dist/verification/rendering.d.ts +5 -5
  228. package/node_modules/@sdd-agent-platform/core/dist/verification/rendering.js +14 -14
  229. package/node_modules/@sdd-agent-platform/core/dist/verification/rendering.js.map +1 -1
  230. package/node_modules/@sdd-agent-platform/core/dist/verification/single-task-loop.d.ts +1 -0
  231. package/node_modules/@sdd-agent-platform/core/dist/verification/single-task-loop.js +111 -159
  232. package/node_modules/@sdd-agent-platform/core/dist/verification/single-task-loop.js.map +1 -1
  233. package/node_modules/@sdd-agent-platform/core/dist/verification/task-evidence-judgment.d.ts +49 -0
  234. package/node_modules/@sdd-agent-platform/core/dist/verification/task-evidence-judgment.js +521 -0
  235. package/node_modules/@sdd-agent-platform/core/dist/verification/task-evidence-judgment.js.map +1 -0
  236. package/node_modules/@sdd-agent-platform/core/dist/verification/test-runtime.js +21 -21
  237. package/node_modules/@sdd-agent-platform/core/dist/verification/test-runtime.js.map +1 -1
  238. package/node_modules/@sdd-agent-platform/core/dist/verification/validation-wave.d.ts +0 -18
  239. package/node_modules/@sdd-agent-platform/core/dist/verification/validation-wave.js +5 -27
  240. package/node_modules/@sdd-agent-platform/core/dist/verification/validation-wave.js.map +1 -1
  241. package/node_modules/@sdd-agent-platform/core/dist/verification/verify-contract.js +45 -45
  242. package/node_modules/@sdd-agent-platform/core/dist/verification/verify-contract.js.map +1 -1
  243. package/node_modules/@sdd-agent-platform/core/dist/verification.d.ts +3 -3
  244. package/node_modules/@sdd-agent-platform/core/dist/verification.js +2 -2
  245. package/node_modules/@sdd-agent-platform/core/dist/verification.js.map +1 -1
  246. package/node_modules/@sdd-agent-platform/core/dist/work-units/contracts.d.ts +1 -1
  247. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/evidence-packet.js +9 -227
  248. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/evidence-packet.js.map +1 -1
  249. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/hard-checks.js +9 -50
  250. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/hard-checks.js.map +1 -1
  251. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/policy.js +4 -42
  252. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/policy.js.map +1 -1
  253. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/types.d.ts +2 -3
  254. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/affected-file-conflicts.d.ts +1 -0
  255. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/affected-file-conflicts.js +2 -1
  256. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/affected-file-conflicts.js.map +1 -1
  257. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/dependencies.js +1 -1
  258. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/latest-eligible-run.d.ts +1 -0
  259. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/latest-eligible-run.js +23 -63
  260. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/latest-eligible-run.js.map +1 -1
  261. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/resolve.d.ts +2 -2
  262. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/resolve.js +43 -65
  263. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/resolve.js.map +1 -1
  264. package/node_modules/@sdd-agent-platform/core/package.json +5 -2
  265. package/node_modules/@sdd-agent-platform/core/src/ai-tools.test.ts +238 -185
  266. package/node_modules/@sdd-agent-platform/core/src/ai-tools.ts +56 -73
  267. package/node_modules/@sdd-agent-platform/core/src/artifacts/ingestion.test.ts +189 -227
  268. package/node_modules/@sdd-agent-platform/core/src/artifacts/ingestion.ts +222 -278
  269. package/node_modules/@sdd-agent-platform/core/src/artifacts/sdd-evidence.test.ts +28 -28
  270. package/node_modules/@sdd-agent-platform/core/src/artifacts/sdd-evidence.ts +302 -301
  271. package/node_modules/@sdd-agent-platform/core/src/artifacts/sdd-result.test.ts +181 -181
  272. package/node_modules/@sdd-agent-platform/core/src/artifacts/sdd-result.ts +231 -240
  273. package/node_modules/@sdd-agent-platform/core/src/artifacts/templates.ts +99 -99
  274. package/node_modules/@sdd-agent-platform/core/src/artifacts.ts +4 -4
  275. package/node_modules/@sdd-agent-platform/core/src/coding-facts/contracts.ts +79 -79
  276. package/node_modules/@sdd-agent-platform/core/src/coding-facts.ts +1 -1
  277. package/node_modules/@sdd-agent-platform/core/src/config/init-project.test.ts +314 -318
  278. package/node_modules/@sdd-agent-platform/core/src/config/init-project.ts +128 -123
  279. package/node_modules/@sdd-agent-platform/core/src/config/project-config.ts +265 -265
  280. package/node_modules/@sdd-agent-platform/core/src/config/project-detection.ts +147 -147
  281. package/node_modules/@sdd-agent-platform/core/src/config/starter-documents.ts +400 -432
  282. package/node_modules/@sdd-agent-platform/core/src/context/budget.ts +30 -30
  283. package/node_modules/@sdd-agent-platform/core/src/context/build-package.ts +305 -311
  284. package/node_modules/@sdd-agent-platform/core/src/context/command-summary.ts +45 -45
  285. package/node_modules/@sdd-agent-platform/core/src/context/context-build.test.ts +188 -189
  286. package/node_modules/@sdd-agent-platform/core/src/context/evidence-summary.ts +144 -163
  287. package/node_modules/@sdd-agent-platform/core/src/context/log-worker.ts +48 -48
  288. package/node_modules/@sdd-agent-platform/core/src/context/source-refs.ts +41 -41
  289. package/node_modules/@sdd-agent-platform/core/src/context-offload/contracts.ts +47 -47
  290. package/node_modules/@sdd-agent-platform/core/src/context-offload/runtime.test.ts +71 -71
  291. package/node_modules/@sdd-agent-platform/core/src/context-offload/runtime.ts +178 -178
  292. package/node_modules/@sdd-agent-platform/core/src/context-offload.ts +2 -2
  293. package/node_modules/@sdd-agent-platform/core/src/context.ts +6 -6
  294. package/node_modules/@sdd-agent-platform/core/src/contracts/issues.ts +13 -13
  295. package/node_modules/@sdd-agent-platform/core/src/contracts.test.ts +9 -9
  296. package/node_modules/@sdd-agent-platform/core/src/contracts.ts +121 -116
  297. package/node_modules/@sdd-agent-platform/core/src/delegation/delegation.test.ts +183 -183
  298. package/node_modules/@sdd-agent-platform/core/src/delegation/model.ts +23 -26
  299. package/node_modules/@sdd-agent-platform/core/src/delegation/queue.ts +58 -58
  300. package/node_modules/@sdd-agent-platform/core/src/delegation/run-state.ts +14 -14
  301. package/node_modules/@sdd-agent-platform/core/src/delegation/state-machine.ts +90 -90
  302. package/node_modules/@sdd-agent-platform/core/src/delegation/validation.ts +124 -127
  303. package/node_modules/@sdd-agent-platform/core/src/delegation.ts +26 -26
  304. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/ai-entries.ts +28 -28
  305. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/document-chain.ts +104 -112
  306. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/local-run-index.ts +27 -27
  307. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/project.ts +84 -84
  308. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/registries.ts +252 -251
  309. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/run-evidence.ts +330 -330
  310. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/run-records.ts +79 -79
  311. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/run-trust.ts +128 -107
  312. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/runtime-contracts.ts +300 -300
  313. package/node_modules/@sdd-agent-platform/core/src/doctor/doctor.test.ts +627 -755
  314. package/node_modules/@sdd-agent-platform/core/src/doctor/doctor.ts +301 -453
  315. package/node_modules/@sdd-agent-platform/core/src/doctor/model.ts +13 -13
  316. package/node_modules/@sdd-agent-platform/core/src/doctor/summary.ts +11 -11
  317. package/node_modules/@sdd-agent-platform/core/src/doctor.ts +2 -2
  318. package/node_modules/@sdd-agent-platform/core/src/evidence/lookup.ts +80 -88
  319. package/node_modules/@sdd-agent-platform/core/src/evidence-runtime/contracts.ts +48 -48
  320. package/node_modules/@sdd-agent-platform/core/src/evidence-runtime.ts +1 -1
  321. package/node_modules/@sdd-agent-platform/core/src/execution/agent-execution-records.ts +195 -195
  322. package/node_modules/@sdd-agent-platform/core/src/execution/background-executor.test.ts +187 -235
  323. package/node_modules/@sdd-agent-platform/core/src/execution/background-executor.ts +305 -305
  324. package/node_modules/@sdd-agent-platform/core/src/execution/foreground-subagents.test.ts +97 -106
  325. package/node_modules/@sdd-agent-platform/core/src/execution/foreground-subagents.ts +453 -453
  326. package/node_modules/@sdd-agent-platform/core/src/execution/host-invocation.ts +225 -226
  327. package/node_modules/@sdd-agent-platform/core/src/execution/resident-worker.test.ts +132 -143
  328. package/node_modules/@sdd-agent-platform/core/src/execution/resident-worker.ts +436 -437
  329. package/node_modules/@sdd-agent-platform/core/src/execution/stage-team-runtime.test.ts +102 -102
  330. package/node_modules/@sdd-agent-platform/core/src/execution/stage-team-runtime.ts +271 -271
  331. package/node_modules/@sdd-agent-platform/core/src/execution/wave-executor.test.ts +111 -121
  332. package/node_modules/@sdd-agent-platform/core/src/execution/wave-executor.ts +231 -231
  333. package/node_modules/@sdd-agent-platform/core/src/execution.ts +5 -5
  334. package/node_modules/@sdd-agent-platform/core/src/governance/policy.test.ts +57 -65
  335. package/node_modules/@sdd-agent-platform/core/src/governance/policy.ts +175 -175
  336. package/node_modules/@sdd-agent-platform/core/src/governance.ts +1 -1
  337. package/node_modules/@sdd-agent-platform/core/src/instructions.test.ts +80 -64
  338. package/node_modules/@sdd-agent-platform/core/src/instructions.ts +32 -68
  339. package/node_modules/@sdd-agent-platform/core/src/lifecycle/decision-gate.test.ts +174 -174
  340. package/node_modules/@sdd-agent-platform/core/src/lifecycle/decision-gate.ts +373 -373
  341. package/node_modules/@sdd-agent-platform/core/src/lifecycle/rendering.ts +29 -29
  342. package/node_modules/@sdd-agent-platform/core/src/lifecycle/risk-signals.ts +146 -146
  343. package/node_modules/@sdd-agent-platform/core/src/lifecycle/ship.test.ts +47 -47
  344. package/node_modules/@sdd-agent-platform/core/src/lifecycle/ship.ts +255 -280
  345. package/node_modules/@sdd-agent-platform/core/src/lifecycle-graph/contracts.ts +179 -0
  346. package/node_modules/@sdd-agent-platform/core/src/lifecycle-graph/kernel.ts +522 -0
  347. package/node_modules/@sdd-agent-platform/core/src/lifecycle-graph.ts +2 -0
  348. package/node_modules/@sdd-agent-platform/core/src/lifecycle.ts +4 -4
  349. package/node_modules/@sdd-agent-platform/core/src/orchestration/contracts.ts +50 -50
  350. package/node_modules/@sdd-agent-platform/core/src/orchestration/index.ts +2 -2
  351. package/node_modules/@sdd-agent-platform/core/src/orchestration/runtime.ts +331 -394
  352. package/node_modules/@sdd-agent-platform/core/src/path-safety.test.ts +22 -22
  353. package/node_modules/@sdd-agent-platform/core/src/phase8-contracts.test.ts +243 -242
  354. package/node_modules/@sdd-agent-platform/core/src/phase8-projection-compat.test.ts +152 -153
  355. package/node_modules/@sdd-agent-platform/core/src/phase8-risk-kernel.test.ts +277 -277
  356. package/node_modules/@sdd-agent-platform/core/src/phase9-lifecycle-graph.test.ts +103 -0
  357. package/node_modules/@sdd-agent-platform/core/src/planning/task-graph.test.ts +88 -88
  358. package/node_modules/@sdd-agent-platform/core/src/planning/task-graph.ts +222 -222
  359. package/node_modules/@sdd-agent-platform/core/src/planning/wave-plan.test.ts +79 -79
  360. package/node_modules/@sdd-agent-platform/core/src/planning/wave-plan.ts +160 -160
  361. package/node_modules/@sdd-agent-platform/core/src/planning.ts +2 -2
  362. package/node_modules/@sdd-agent-platform/core/src/registries/agent-capability-catalog.ts +426 -473
  363. package/node_modules/@sdd-agent-platform/core/src/registries/agent-registry.ts +230 -146
  364. package/node_modules/@sdd-agent-platform/core/src/registries/agent-runtime-static.ts +142 -142
  365. package/node_modules/@sdd-agent-platform/core/src/registries/capability-sources.ts +253 -253
  366. package/node_modules/@sdd-agent-platform/core/src/registries/command-team-runtime.ts +302 -309
  367. package/node_modules/@sdd-agent-platform/core/src/registries/eval-learning-context.ts +246 -246
  368. package/node_modules/@sdd-agent-platform/core/src/registries/plan-scout-domains.ts +89 -0
  369. package/node_modules/@sdd-agent-platform/core/src/registries/query-status.ts +119 -119
  370. package/node_modules/@sdd-agent-platform/core/src/registries/registries.test.ts +454 -445
  371. package/node_modules/@sdd-agent-platform/core/src/registries/skill-capabilities.ts +37 -37
  372. package/node_modules/@sdd-agent-platform/core/src/registries/tool-capabilities.ts +135 -135
  373. package/node_modules/@sdd-agent-platform/core/src/registries/tool-plugins.ts +132 -132
  374. package/node_modules/@sdd-agent-platform/core/src/registries/worker-adapters.ts +144 -144
  375. package/node_modules/@sdd-agent-platform/core/src/registries/workflow-gates.ts +111 -111
  376. package/node_modules/@sdd-agent-platform/core/src/registries.ts +42 -42
  377. package/node_modules/@sdd-agent-platform/core/src/risk/consumer-diagnostics.ts +98 -97
  378. package/node_modules/@sdd-agent-platform/core/src/risk/contracts.ts +63 -63
  379. package/node_modules/@sdd-agent-platform/core/src/risk/kernel.ts +233 -233
  380. package/node_modules/@sdd-agent-platform/core/src/risk/legacy-adapters.ts +251 -263
  381. package/node_modules/@sdd-agent-platform/core/src/risk/workflow-gates.ts +203 -205
  382. package/node_modules/@sdd-agent-platform/core/src/risk.ts +5 -5
  383. package/node_modules/@sdd-agent-platform/core/src/router/agent-runtime-config.ts +327 -327
  384. package/node_modules/@sdd-agent-platform/core/src/router/agent-runtime.ts +388 -390
  385. package/node_modules/@sdd-agent-platform/core/src/router/profile-resolution.ts +154 -154
  386. package/node_modules/@sdd-agent-platform/core/src/router/risk-policy.ts +33 -33
  387. package/node_modules/@sdd-agent-platform/core/src/router/route-cache.ts +100 -100
  388. package/node_modules/@sdd-agent-platform/core/src/router/route-projection.ts +356 -356
  389. package/node_modules/@sdd-agent-platform/core/src/router/route-sdd-task.test.ts +428 -665
  390. package/node_modules/@sdd-agent-platform/core/src/router/route-sdd-task.ts +2 -2
  391. package/node_modules/@sdd-agent-platform/core/src/router/routing-rules.ts +73 -73
  392. package/node_modules/@sdd-agent-platform/core/src/router/routing.ts +189 -223
  393. package/node_modules/@sdd-agent-platform/core/src/router/runtime-import.ts +464 -453
  394. package/node_modules/@sdd-agent-platform/core/src/router/runtime-inspection.ts +124 -124
  395. package/node_modules/@sdd-agent-platform/core/src/router/runtime-registry.ts +123 -123
  396. package/node_modules/@sdd-agent-platform/core/src/router/runtime-validation.ts +277 -277
  397. package/node_modules/@sdd-agent-platform/core/src/router/stage-route-binding.ts +273 -279
  398. package/node_modules/@sdd-agent-platform/core/src/router/team-mode.ts +170 -170
  399. package/node_modules/@sdd-agent-platform/core/src/router.ts +5 -6
  400. package/node_modules/@sdd-agent-platform/core/src/run-state/artifacts.ts +126 -240
  401. package/node_modules/@sdd-agent-platform/core/src/run-state/events.ts +27 -27
  402. package/node_modules/@sdd-agent-platform/core/src/run-state/inspect-run.ts +172 -172
  403. package/node_modules/@sdd-agent-platform/core/src/run-state/invocation-ledger.ts +109 -109
  404. package/node_modules/@sdd-agent-platform/core/src/run-state/model.ts +252 -253
  405. package/node_modules/@sdd-agent-platform/core/src/run-state/run-index.test.ts +52 -52
  406. package/node_modules/@sdd-agent-platform/core/src/run-state/run-index.ts +356 -352
  407. package/node_modules/@sdd-agent-platform/core/src/run-state/run-state.test.ts +70 -118
  408. package/node_modules/@sdd-agent-platform/core/src/run-state/run-state.ts +406 -416
  409. package/node_modules/@sdd-agent-platform/core/src/run-state/task-evidence.ts +198 -252
  410. package/node_modules/@sdd-agent-platform/core/src/run-state/timing.ts +146 -146
  411. package/node_modules/@sdd-agent-platform/core/src/run-state.ts +8 -9
  412. package/node_modules/@sdd-agent-platform/core/src/runtime-analysis/build.ts +60 -60
  413. package/node_modules/@sdd-agent-platform/core/src/runtime-analysis/findings.ts +257 -256
  414. package/node_modules/@sdd-agent-platform/core/src/runtime-analysis/model.ts +140 -140
  415. package/node_modules/@sdd-agent-platform/core/src/runtime-analysis.test.ts +66 -66
  416. package/node_modules/@sdd-agent-platform/core/src/runtime-analysis.ts +2 -2
  417. package/node_modules/@sdd-agent-platform/core/src/runtime-paths.ts +253 -253
  418. package/node_modules/@sdd-agent-platform/core/src/runtime-projection-p0.test.ts +101 -96
  419. package/node_modules/@sdd-agent-platform/core/src/runtime-projection-p0.ts +314 -292
  420. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/artifact-depth.test.ts +380 -0
  421. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/artifact-depth.ts +207 -0
  422. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/context.ts +111 -111
  423. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/document-hashes.ts +207 -306
  424. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/run-binding.ts +95 -97
  425. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/task-inspection.ts +39 -39
  426. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/task-parser.test.ts +467 -523
  427. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/task-parser.ts +738 -709
  428. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/task-rendering.ts +81 -81
  429. package/node_modules/@sdd-agent-platform/core/src/sdd-docs.ts +5 -5
  430. package/node_modules/@sdd-agent-platform/core/src/spec-manager-contracts.ts +13 -0
  431. package/node_modules/@sdd-agent-platform/core/src/stage-artifacts.ts +435 -450
  432. package/node_modules/@sdd-agent-platform/core/src/stage-collaboration-contracts.ts +316 -322
  433. package/node_modules/@sdd-agent-platform/core/src/stage-collaboration.test.ts +2963 -2902
  434. package/node_modules/@sdd-agent-platform/core/src/stage-collaboration.ts +5856 -5831
  435. package/node_modules/@sdd-agent-platform/core/src/stage-runtime/contracts.ts +40 -40
  436. package/node_modules/@sdd-agent-platform/core/src/stage-runtime/runtime.test.ts +209 -209
  437. package/node_modules/@sdd-agent-platform/core/src/stage-runtime/runtime.ts +360 -360
  438. package/node_modules/@sdd-agent-platform/core/src/stage-runtime.ts +2 -2
  439. package/node_modules/@sdd-agent-platform/core/src/status/project-status.test.ts +288 -511
  440. package/node_modules/@sdd-agent-platform/core/src/status/project-status.ts +651 -851
  441. package/node_modules/@sdd-agent-platform/core/src/status.ts +2 -2
  442. package/node_modules/@sdd-agent-platform/core/src/storage/json-io.ts +10 -10
  443. package/node_modules/@sdd-agent-platform/core/src/storage/runtime-store.test.ts +489 -681
  444. package/node_modules/@sdd-agent-platform/core/src/storage/runtime-store.ts +1981 -1981
  445. package/node_modules/@sdd-agent-platform/core/src/subagents/contracts.ts +45 -45
  446. package/node_modules/@sdd-agent-platform/core/src/subagents/runtime.test.ts +232 -232
  447. package/node_modules/@sdd-agent-platform/core/src/subagents/runtime.ts +307 -307
  448. package/node_modules/@sdd-agent-platform/core/src/subagents.ts +2 -2
  449. package/node_modules/@sdd-agent-platform/core/src/task-execution-contract.test.ts +141 -0
  450. package/node_modules/@sdd-agent-platform/core/src/task-execution-contract.ts +566 -0
  451. package/node_modules/@sdd-agent-platform/core/src/task-risk-profile.ts +193 -193
  452. package/node_modules/@sdd-agent-platform/core/src/test-support/fixtures.ts +413 -398
  453. package/node_modules/@sdd-agent-platform/core/src/test-support/run-state.ts +102 -56
  454. package/node_modules/@sdd-agent-platform/core/src/test-support.ts +2 -2
  455. package/node_modules/@sdd-agent-platform/core/src/truth-reconciliation.test.ts +72 -72
  456. package/node_modules/@sdd-agent-platform/core/src/truth-reconciliation.ts +9 -12
  457. package/node_modules/@sdd-agent-platform/core/src/verification/rendering.ts +137 -137
  458. package/node_modules/@sdd-agent-platform/core/src/verification/review-gate.test.ts +77 -84
  459. package/node_modules/@sdd-agent-platform/core/src/verification/review-gate.ts +77 -77
  460. package/node_modules/@sdd-agent-platform/core/src/verification/single-task-loop.ts +455 -506
  461. package/node_modules/@sdd-agent-platform/core/src/verification/{goal-verify.test.ts → task-evidence-judgment.test.ts} +261 -261
  462. package/node_modules/@sdd-agent-platform/core/src/verification/{goal-verify.ts → task-evidence-judgment.ts} +619 -619
  463. package/node_modules/@sdd-agent-platform/core/src/verification/test-runtime.ts +1190 -1190
  464. package/node_modules/@sdd-agent-platform/core/src/verification/validation-cache.ts +106 -106
  465. package/node_modules/@sdd-agent-platform/core/src/verification/validation-wave.ts +513 -556
  466. package/node_modules/@sdd-agent-platform/core/src/verification/verify-contract.ts +334 -334
  467. package/node_modules/@sdd-agent-platform/core/src/verification.ts +8 -8
  468. package/node_modules/@sdd-agent-platform/core/src/work-units/contracts.ts +26 -26
  469. package/node_modules/@sdd-agent-platform/core/src/work-units/runtime.test.ts +88 -88
  470. package/node_modules/@sdd-agent-platform/core/src/work-units/runtime.ts +112 -112
  471. package/node_modules/@sdd-agent-platform/core/src/work-units.ts +2 -2
  472. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/evidence-packet.ts +190 -425
  473. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/hard-checks.test.ts +169 -507
  474. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/hard-checks.ts +136 -182
  475. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/policy.test.ts +135 -174
  476. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/policy.ts +153 -194
  477. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/types.ts +111 -115
  478. package/node_modules/@sdd-agent-platform/core/src/workflow-state/affected-file-conflicts.ts +95 -93
  479. package/node_modules/@sdd-agent-platform/core/src/workflow-state/dependencies.test.ts +32 -32
  480. package/node_modules/@sdd-agent-platform/core/src/workflow-state/dependencies.ts +114 -114
  481. package/node_modules/@sdd-agent-platform/core/src/workflow-state/latest-eligible-run.ts +184 -224
  482. package/node_modules/@sdd-agent-platform/core/src/workflow-state/migration-recovery.ts +158 -158
  483. package/node_modules/@sdd-agent-platform/core/src/workflow-state/repair-contract.ts +77 -77
  484. package/node_modules/@sdd-agent-platform/core/src/workflow-state/resolve-task-run.ts +114 -114
  485. package/node_modules/@sdd-agent-platform/core/src/workflow-state/resolve.test.ts +969 -956
  486. package/node_modules/@sdd-agent-platform/core/src/workflow-state/resolve.ts +967 -992
  487. package/node_modules/@sdd-agent-platform/core/src/workflow-state/runtime-projections.ts +712 -712
  488. package/node_modules/@sdd-agent-platform/core/src/workflow-state.ts +2 -2
  489. package/node_modules/@sdd-agent-platform/core/src/worktree/isolation.ts +130 -130
  490. package/node_modules/@sdd-agent-platform/core/src/worktree/lifecycle.ts +269 -269
  491. package/node_modules/@sdd-agent-platform/core/src/worktree/worktree.test.ts +150 -150
  492. package/node_modules/@sdd-agent-platform/core/src/worktree.ts +2 -2
  493. package/node_modules/@sdd-agent-platform/core/tsconfig.json +15 -15
  494. package/package.json +2 -2
  495. package/packages/cli/dist/args.js +2 -2
  496. package/packages/cli/dist/args.js.map +1 -1
  497. package/packages/cli/dist/commands/ai-tools.js +2 -13
  498. package/packages/cli/dist/commands/ai-tools.js.map +1 -1
  499. package/packages/cli/dist/commands/{verifies.d.ts → artifact.d.ts} +1 -1
  500. package/packages/cli/dist/commands/artifact.js +168 -0
  501. package/packages/cli/dist/commands/artifact.js.map +1 -0
  502. package/packages/cli/dist/commands/context.js +1 -1
  503. package/packages/cli/dist/commands/context.js.map +1 -1
  504. package/packages/cli/dist/commands/evidence.js.map +1 -0
  505. package/packages/cli/dist/commands/execution.js +127 -49
  506. package/packages/cli/dist/commands/execution.js.map +1 -1
  507. package/packages/cli/dist/commands/governance.js +1 -1
  508. package/packages/cli/dist/commands/governance.js.map +1 -1
  509. package/packages/cli/dist/commands/init.js +1 -6
  510. package/packages/cli/dist/commands/init.js.map +1 -1
  511. package/packages/cli/dist/commands/instructions.d.ts +1 -1
  512. package/packages/cli/dist/commands/instructions.js +15 -1
  513. package/packages/cli/dist/commands/instructions.js.map +1 -1
  514. package/packages/cli/dist/commands/registry/runtime.js +63 -40
  515. package/packages/cli/dist/commands/registry/runtime.js.map +1 -1
  516. package/packages/cli/dist/commands/run.js +13 -52
  517. package/packages/cli/dist/commands/run.js.map +1 -1
  518. package/packages/cli/dist/commands/stage-close.d.ts +60 -0
  519. package/packages/cli/dist/commands/stage-close.js +270 -41
  520. package/packages/cli/dist/commands/stage-close.js.map +1 -1
  521. package/packages/cli/dist/commands/status.js +9 -68
  522. package/packages/cli/dist/commands/status.js.map +1 -1
  523. package/packages/cli/dist/commands/tasks.js.map +1 -1
  524. package/packages/cli/dist/dispatch.js +6 -26
  525. package/packages/cli/dist/dispatch.js.map +1 -1
  526. package/packages/cli/dist/help.js +153 -159
  527. package/packages/cli/dist/help.js.map +1 -1
  528. package/packages/cli/dist/renderers/artifacts.d.ts +5 -0
  529. package/packages/cli/dist/renderers/artifacts.js +43 -0
  530. package/packages/cli/dist/renderers/artifacts.js.map +1 -0
  531. package/packages/cli/dist/renderers/doctor.js +1 -1
  532. package/packages/cli/dist/renderers/doctor.js.map +1 -1
  533. package/packages/cli/dist/renderers/execution.js +1 -1
  534. package/packages/cli/dist/renderers/execution.js.map +1 -1
  535. package/packages/cli/dist/renderers/json.d.ts +0 -1
  536. package/packages/cli/dist/renderers/json.js +0 -3
  537. package/packages/cli/dist/renderers/json.js.map +1 -1
  538. package/packages/cli/dist/renderers/registry-runtime.d.ts +1 -2
  539. package/packages/cli/dist/renderers/registry-runtime.js +0 -20
  540. package/packages/cli/dist/renderers/registry-runtime.js.map +1 -1
  541. package/packages/cli/dist/renderers/router.js +1 -1
  542. package/packages/cli/dist/renderers/router.js.map +1 -1
  543. package/packages/cli/dist/renderers/workflow.d.ts +53 -0
  544. package/packages/cli/dist/renderers/workflow.js +89 -30
  545. package/packages/cli/dist/renderers/workflow.js.map +1 -1
  546. package/packages/cli/dist/tsconfig.tsbuildinfo +1 -1
  547. package/packages/cli/package.json +2 -2
  548. package/packages/core/dist/ai-tools.js +56 -73
  549. package/packages/core/dist/ai-tools.js.map +1 -1
  550. package/packages/core/dist/artifacts/ingestion.js +9 -64
  551. package/packages/core/dist/artifacts/ingestion.js.map +1 -1
  552. package/packages/core/dist/artifacts/sdd-evidence.js +1 -0
  553. package/packages/core/dist/artifacts/sdd-evidence.js.map +1 -1
  554. package/packages/core/dist/artifacts/sdd-result.js +17 -26
  555. package/packages/core/dist/artifacts/sdd-result.js.map +1 -1
  556. package/packages/core/dist/config/init-project.d.ts +8 -7
  557. package/packages/core/dist/config/init-project.js +8 -12
  558. package/packages/core/dist/config/init-project.js.map +1 -1
  559. package/packages/core/dist/config/project-config.d.ts +1 -1
  560. package/packages/core/dist/config/project-config.js +1 -1
  561. package/packages/core/dist/config/project-config.js.map +1 -1
  562. package/packages/core/dist/config/starter-documents.d.ts +3 -4
  563. package/packages/core/dist/config/starter-documents.js +377 -411
  564. package/packages/core/dist/config/starter-documents.js.map +1 -1
  565. package/packages/core/dist/context/build-package.d.ts +1 -1
  566. package/packages/core/dist/context/build-package.js +7 -13
  567. package/packages/core/dist/context/build-package.js.map +1 -1
  568. package/packages/core/dist/context/evidence-summary.js +8 -26
  569. package/packages/core/dist/context/evidence-summary.js.map +1 -1
  570. package/packages/core/dist/context/log-worker.js +2 -2
  571. package/packages/core/dist/context/log-worker.js.map +1 -1
  572. package/packages/core/dist/context-offload/contracts.d.ts +1 -1
  573. package/packages/core/dist/contracts.d.ts +6 -1
  574. package/packages/core/dist/contracts.js +5 -0
  575. package/packages/core/dist/contracts.js.map +1 -1
  576. package/packages/core/dist/delegation/model.d.ts +0 -3
  577. package/packages/core/dist/delegation/validation.d.ts +0 -3
  578. package/packages/core/dist/delegation/validation.js +4 -7
  579. package/packages/core/dist/delegation/validation.js.map +1 -1
  580. package/packages/core/dist/doctor/checks/document-chain.js +3 -13
  581. package/packages/core/dist/doctor/checks/document-chain.js.map +1 -1
  582. package/packages/core/dist/doctor/checks/project.js +8 -8
  583. package/packages/core/dist/doctor/checks/project.js.map +1 -1
  584. package/packages/core/dist/doctor/checks/registries.js +1 -0
  585. package/packages/core/dist/doctor/checks/registries.js.map +1 -1
  586. package/packages/core/dist/doctor/checks/run-evidence.js +4 -4
  587. package/packages/core/dist/doctor/checks/run-evidence.js.map +1 -1
  588. package/packages/core/dist/doctor/checks/run-trust.js +24 -0
  589. package/packages/core/dist/doctor/checks/run-trust.js.map +1 -1
  590. package/packages/core/dist/doctor/checks/runtime-contracts.js +1 -1
  591. package/packages/core/dist/doctor/checks/runtime-contracts.js.map +1 -1
  592. package/packages/core/dist/doctor/doctor.js +43 -180
  593. package/packages/core/dist/doctor/doctor.js.map +1 -1
  594. package/packages/core/dist/evidence/lookup.d.ts +1 -1
  595. package/packages/core/dist/evidence/lookup.js +7 -14
  596. package/packages/core/dist/evidence/lookup.js.map +1 -1
  597. package/packages/core/dist/evidence-runtime/coordination.js +110 -0
  598. package/packages/core/dist/evidence-runtime/coordination.js.map +1 -0
  599. package/packages/core/dist/execution/background-executor.js +4 -4
  600. package/packages/core/dist/execution/background-executor.js.map +1 -1
  601. package/packages/core/dist/execution/foreground-subagents.js +3 -3
  602. package/packages/core/dist/execution/foreground-subagents.js.map +1 -1
  603. package/packages/core/dist/execution/host-invocation.js +85 -86
  604. package/packages/core/dist/execution/host-invocation.js.map +1 -1
  605. package/packages/core/dist/execution/resident-worker.js +2 -3
  606. package/packages/core/dist/execution/resident-worker.js.map +1 -1
  607. package/packages/core/dist/execution/stage-team-runtime.js +2 -2
  608. package/packages/core/dist/execution/stage-team-runtime.js.map +1 -1
  609. package/packages/core/dist/governance/policy.d.ts +1 -1
  610. package/packages/core/dist/governance/policy.js +1 -1
  611. package/packages/core/dist/governance/policy.js.map +1 -1
  612. package/packages/core/dist/instructions.d.ts +1 -1
  613. package/packages/core/dist/instructions.js +31 -67
  614. package/packages/core/dist/instructions.js.map +1 -1
  615. package/packages/core/dist/lifecycle/decision-gate.js +1 -1
  616. package/packages/core/dist/lifecycle/decision-gate.js.map +1 -1
  617. package/packages/core/dist/lifecycle/ship.d.ts +0 -1
  618. package/packages/core/dist/lifecycle/ship.js +59 -85
  619. package/packages/core/dist/lifecycle/ship.js.map +1 -1
  620. package/packages/core/dist/lifecycle-graph/contracts.d.ts +159 -0
  621. package/packages/core/dist/lifecycle-graph/contracts.js +7 -0
  622. package/packages/core/dist/lifecycle-graph/contracts.js.map +1 -0
  623. package/packages/core/dist/lifecycle-graph/kernel.d.ts +16 -0
  624. package/packages/core/dist/lifecycle-graph/kernel.js +461 -0
  625. package/packages/core/dist/lifecycle-graph/kernel.js.map +1 -0
  626. package/packages/core/dist/lifecycle-graph.d.ts +2 -0
  627. package/packages/core/dist/lifecycle-graph.js +3 -0
  628. package/packages/core/dist/lifecycle-graph.js.map +1 -0
  629. package/packages/core/dist/orchestration/contracts.d.ts +1 -1
  630. package/packages/core/dist/orchestration/runtime.d.ts +2 -12
  631. package/packages/core/dist/orchestration/runtime.js +32 -80
  632. package/packages/core/dist/orchestration/runtime.js.map +1 -1
  633. package/packages/core/dist/registries/agent-capability-catalog.d.ts +2 -5
  634. package/packages/core/dist/registries/agent-capability-catalog.js +27 -69
  635. package/packages/core/dist/registries/agent-capability-catalog.js.map +1 -1
  636. package/packages/core/dist/registries/agent-registry.js +118 -34
  637. package/packages/core/dist/registries/agent-registry.js.map +1 -1
  638. package/packages/core/dist/registries/agent-runtime-static.js +1 -1
  639. package/packages/core/dist/registries/agent-runtime-static.js.map +1 -1
  640. package/packages/core/dist/registries/capability-sources.js +1 -1
  641. package/packages/core/dist/registries/command-team-runtime.d.ts +1 -1
  642. package/packages/core/dist/registries/command-team-runtime.js +8 -15
  643. package/packages/core/dist/registries/command-team-runtime.js.map +1 -1
  644. package/packages/core/dist/registries/eval-learning-context.js +4 -4
  645. package/packages/core/dist/registries/eval-learning-context.js.map +1 -1
  646. package/packages/core/dist/registries/plan-scout-domains.d.ts +13 -0
  647. package/packages/core/dist/registries/plan-scout-domains.js +76 -0
  648. package/packages/core/dist/registries/plan-scout-domains.js.map +1 -0
  649. package/packages/core/dist/registries/query-status.js +2 -2
  650. package/packages/core/dist/registries/query-status.js.map +1 -1
  651. package/packages/core/dist/registries/skill-capabilities.js +7 -7
  652. package/packages/core/dist/registries/skill-capabilities.js.map +1 -1
  653. package/packages/core/dist/registries/tool-capabilities.js +4 -4
  654. package/packages/core/dist/registries/tool-capabilities.js.map +1 -1
  655. package/packages/core/dist/registries/tool-plugins.js +2 -2
  656. package/packages/core/dist/registries/tool-plugins.js.map +1 -1
  657. package/packages/core/dist/registries/worker-adapters.js +11 -11
  658. package/packages/core/dist/registries/worker-adapters.js.map +1 -1
  659. package/packages/core/dist/registries/workflow-gates.d.ts +1 -1
  660. package/packages/core/dist/registries/workflow-gates.js +21 -21
  661. package/packages/core/dist/registries/workflow-gates.js.map +1 -1
  662. package/packages/core/dist/risk/consumer-diagnostics.js +2 -1
  663. package/packages/core/dist/risk/consumer-diagnostics.js.map +1 -1
  664. package/packages/core/dist/risk/kernel.js +6 -6
  665. package/packages/core/dist/risk/kernel.js.map +1 -1
  666. package/packages/core/dist/risk/legacy-adapters.js +11 -23
  667. package/packages/core/dist/risk/legacy-adapters.js.map +1 -1
  668. package/packages/core/dist/risk/workflow-gates.d.ts +2 -2
  669. package/packages/core/dist/risk/workflow-gates.js +18 -20
  670. package/packages/core/dist/risk/workflow-gates.js.map +1 -1
  671. package/packages/core/dist/router/agent-runtime.d.ts +0 -2
  672. package/packages/core/dist/router/route-projection.js +1 -1
  673. package/packages/core/dist/router/route-projection.js.map +1 -1
  674. package/packages/core/dist/router/routing.js +16 -48
  675. package/packages/core/dist/router/routing.js.map +1 -1
  676. package/packages/core/dist/router/runtime-import.js +11 -1
  677. package/packages/core/dist/router/runtime-import.js.map +1 -1
  678. package/packages/core/dist/router/runtime-validation.js +2 -2
  679. package/packages/core/dist/router/runtime-validation.js.map +1 -1
  680. package/packages/core/dist/router/stage-route-binding.d.ts +2 -2
  681. package/packages/core/dist/router/stage-route-binding.js +20 -28
  682. package/packages/core/dist/router/stage-route-binding.js.map +1 -1
  683. package/packages/core/dist/router.d.ts +0 -1
  684. package/packages/core/dist/router.js +0 -1
  685. package/packages/core/dist/router.js.map +1 -1
  686. package/packages/core/dist/run-state/artifacts.d.ts +6 -6
  687. package/packages/core/dist/run-state/artifacts.js +13 -124
  688. package/packages/core/dist/run-state/artifacts.js.map +1 -1
  689. package/packages/core/dist/run-state/inspect-run.d.ts +2 -0
  690. package/packages/core/dist/run-state/inspect-run.js +5 -7
  691. package/packages/core/dist/run-state/inspect-run.js.map +1 -1
  692. package/packages/core/dist/run-state/model.d.ts +28 -28
  693. package/packages/core/dist/run-state/run-index.d.ts +2 -0
  694. package/packages/core/dist/run-state/run-index.js +3 -1
  695. package/packages/core/dist/run-state/run-index.js.map +1 -1
  696. package/packages/core/dist/run-state/run-state.js +26 -36
  697. package/packages/core/dist/run-state/run-state.js.map +1 -1
  698. package/packages/core/dist/run-state/task-evidence.d.ts +0 -4
  699. package/packages/core/dist/run-state/task-evidence.js +5 -51
  700. package/packages/core/dist/run-state/task-evidence.js.map +1 -1
  701. package/packages/core/dist/run-state.d.ts +0 -1
  702. package/packages/core/dist/run-state.js +0 -1
  703. package/packages/core/dist/run-state.js.map +1 -1
  704. package/packages/core/dist/runtime-analysis/build.js +1 -1
  705. package/packages/core/dist/runtime-analysis/build.js.map +1 -1
  706. package/packages/core/dist/runtime-analysis/findings.js +5 -5
  707. package/packages/core/dist/runtime-analysis/findings.js.map +1 -1
  708. package/packages/core/dist/runtime-paths.js +1 -1
  709. package/packages/core/dist/runtime-paths.js.map +1 -1
  710. package/packages/core/dist/runtime-projection-p0.d.ts +2 -2
  711. package/packages/core/dist/runtime-projection-p0.js +11 -0
  712. package/packages/core/dist/runtime-projection-p0.js.map +1 -1
  713. package/packages/core/dist/sdd-docs/artifact-depth.d.ts +14 -0
  714. package/packages/core/dist/sdd-docs/artifact-depth.js +179 -0
  715. package/packages/core/dist/sdd-docs/artifact-depth.js.map +1 -0
  716. package/packages/core/dist/sdd-docs/document-hashes.d.ts +0 -2
  717. package/packages/core/dist/sdd-docs/document-hashes.js +10 -97
  718. package/packages/core/dist/sdd-docs/document-hashes.js.map +1 -1
  719. package/packages/core/dist/sdd-docs/run-binding.d.ts +1 -1
  720. package/packages/core/dist/sdd-docs/run-binding.js +6 -8
  721. package/packages/core/dist/sdd-docs/run-binding.js.map +1 -1
  722. package/packages/core/dist/sdd-docs/task-parser.d.ts +5 -2
  723. package/packages/core/dist/sdd-docs/task-parser.js +85 -68
  724. package/packages/core/dist/sdd-docs/task-parser.js.map +1 -1
  725. package/packages/core/dist/sdd-docs/task-rendering.js +2 -2
  726. package/packages/core/dist/sdd-docs/task-rendering.js.map +1 -1
  727. package/packages/core/dist/spec-entry.js +40 -0
  728. package/packages/core/dist/spec-entry.js.map +1 -0
  729. package/packages/core/dist/spec-manager-contracts.d.ts +12 -0
  730. package/packages/core/dist/spec-manager-contracts.js +2 -0
  731. package/packages/core/dist/spec-manager-contracts.js.map +1 -0
  732. package/packages/core/dist/stage-artifacts.d.ts +2 -2
  733. package/packages/core/dist/stage-artifacts.js +19 -26
  734. package/packages/core/dist/stage-artifacts.js.map +1 -1
  735. package/packages/core/dist/stage-collaboration-contracts.d.ts +1 -1
  736. package/packages/core/dist/stage-collaboration-contracts.js +3 -6
  737. package/packages/core/dist/stage-collaboration-contracts.js.map +1 -1
  738. package/packages/core/dist/stage-collaboration.d.ts +111 -263
  739. package/packages/core/dist/stage-collaboration.js +1272 -1124
  740. package/packages/core/dist/stage-collaboration.js.map +1 -1
  741. package/packages/core/dist/stage-runtime/runtime.js +5 -5
  742. package/packages/core/dist/stage-runtime/runtime.js.map +1 -1
  743. package/packages/core/dist/status/project-status.d.ts +1 -44
  744. package/packages/core/dist/status/project-status.js +47 -170
  745. package/packages/core/dist/status/project-status.js.map +1 -1
  746. package/packages/core/dist/storage/runtime-store.js +73 -73
  747. package/packages/core/dist/subagents/contracts.d.ts +1 -1
  748. package/packages/core/dist/subagents/runtime.js +7 -7
  749. package/packages/core/dist/subagents/runtime.js.map +1 -1
  750. package/packages/core/dist/sync-back/apply.d.ts +1 -0
  751. package/packages/core/dist/sync-back/apply.js +2 -0
  752. package/packages/core/dist/sync-back/apply.js.map +1 -0
  753. package/packages/core/dist/sync-back/inspect.d.ts +1 -0
  754. package/packages/core/dist/sync-back/inspect.js +2 -0
  755. package/packages/core/dist/sync-back/inspect.js.map +1 -0
  756. package/packages/core/dist/sync-back.d.ts +1 -0
  757. package/packages/core/dist/sync-back.js +2 -0
  758. package/packages/core/dist/sync-back.js.map +1 -0
  759. package/packages/core/dist/task-execution-contract.d.ts +167 -0
  760. package/packages/core/dist/task-execution-contract.js +377 -0
  761. package/packages/core/dist/task-execution-contract.js.map +1 -0
  762. package/packages/core/dist/test-support/fixtures.js +329 -314
  763. package/packages/core/dist/test-support/fixtures.js.map +1 -1
  764. package/packages/core/dist/test-support/run-state.d.ts +1 -0
  765. package/packages/core/dist/test-support/run-state.js +53 -7
  766. package/packages/core/dist/test-support/run-state.js.map +1 -1
  767. package/packages/core/dist/truth-reconciliation.js +9 -12
  768. package/packages/core/dist/truth-reconciliation.js.map +1 -1
  769. package/packages/core/dist/tsconfig.tsbuildinfo +1 -1
  770. package/packages/core/dist/verification/goal-verify.d.ts +0 -48
  771. package/packages/core/dist/verification/goal-verify.js +1 -520
  772. package/packages/core/dist/verification/goal-verify.js.map +1 -1
  773. package/packages/core/dist/verification/rendering.d.ts +5 -5
  774. package/packages/core/dist/verification/rendering.js +14 -14
  775. package/packages/core/dist/verification/rendering.js.map +1 -1
  776. package/packages/core/dist/verification/single-task-loop.d.ts +1 -0
  777. package/packages/core/dist/verification/single-task-loop.js +111 -159
  778. package/packages/core/dist/verification/single-task-loop.js.map +1 -1
  779. package/packages/core/dist/verification/task-evidence-judgment.d.ts +49 -0
  780. package/packages/core/dist/verification/task-evidence-judgment.js +521 -0
  781. package/packages/core/dist/verification/task-evidence-judgment.js.map +1 -0
  782. package/packages/core/dist/verification/test-runtime.js +21 -21
  783. package/packages/core/dist/verification/test-runtime.js.map +1 -1
  784. package/packages/core/dist/verification/validation-wave.d.ts +0 -18
  785. package/packages/core/dist/verification/validation-wave.js +5 -27
  786. package/packages/core/dist/verification/validation-wave.js.map +1 -1
  787. package/packages/core/dist/verification/verify-contract.js +45 -45
  788. package/packages/core/dist/verification/verify-contract.js.map +1 -1
  789. package/packages/core/dist/verification.d.ts +3 -3
  790. package/packages/core/dist/verification.js +2 -2
  791. package/packages/core/dist/verification.js.map +1 -1
  792. package/packages/core/dist/work-units/contracts.d.ts +1 -1
  793. package/packages/core/dist/workflow-gate/evidence-packet.js +9 -227
  794. package/packages/core/dist/workflow-gate/evidence-packet.js.map +1 -1
  795. package/packages/core/dist/workflow-gate/hard-checks.js +9 -50
  796. package/packages/core/dist/workflow-gate/hard-checks.js.map +1 -1
  797. package/packages/core/dist/workflow-gate/policy.js +4 -42
  798. package/packages/core/dist/workflow-gate/policy.js.map +1 -1
  799. package/packages/core/dist/workflow-gate/types.d.ts +2 -3
  800. package/packages/core/dist/workflow-state/affected-file-conflicts.d.ts +1 -0
  801. package/packages/core/dist/workflow-state/affected-file-conflicts.js +2 -1
  802. package/packages/core/dist/workflow-state/affected-file-conflicts.js.map +1 -1
  803. package/packages/core/dist/workflow-state/dependencies.js +1 -1
  804. package/packages/core/dist/workflow-state/latest-eligible-run.d.ts +1 -0
  805. package/packages/core/dist/workflow-state/latest-eligible-run.js +23 -63
  806. package/packages/core/dist/workflow-state/latest-eligible-run.js.map +1 -1
  807. package/packages/core/dist/workflow-state/resolve.d.ts +2 -2
  808. package/packages/core/dist/workflow-state/resolve.js +43 -65
  809. package/packages/core/dist/workflow-state/resolve.js.map +1 -1
  810. package/packages/core/package.json +5 -2
  811. package/tsconfig.build.json +6 -7
  812. package/node_modules/@sdd-agent-platform/core/src/verification/single-task-loop.test.ts +0 -269
  813. package/node_modules/@sdd-agent-platform/core/src/verification/test-runtime.test.ts +0 -492
  814. package/node_modules/@sdd-agent-platform/core/src/verification/validation-wave.test.ts +0 -383
  815. package/node_modules/@sdd-agent-platform/core/src/verification/verify-contract.test.ts +0 -188
  816. package/packages/cli/dist/commands/lifecycle.d.ts +0 -6
  817. package/packages/cli/dist/commands/lifecycle.js +0 -125
  818. package/packages/cli/dist/commands/lifecycle.js.map +0 -1
  819. package/packages/cli/dist/commands/test.d.ts +0 -6
  820. package/packages/cli/dist/commands/test.js +0 -373
  821. package/packages/cli/dist/commands/test.js.map +0 -1
  822. package/packages/cli/dist/commands/verifies.js +0 -87
  823. package/packages/cli/dist/commands/verifies.js.map +0 -1
  824. package/packages/cli/dist/commands/verify.d.ts +0 -6
  825. package/packages/cli/dist/commands/verify.js +0 -330
  826. 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
+ });