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,619 +1,619 @@
1
- import { createHash } from 'node:crypto';
2
- import { readFile } from 'node:fs/promises';
3
- import {
4
- ACCEPTANCE_POLICY_RULESET_VERSION,
5
- SDD_EVIDENCE_CONTRACT,
6
- SDD_EVIDENCE_VERSION,
7
- SDD_RESULT_CONTRACT,
8
- SDD_RESULT_VERSION
9
- } from '../contracts.js';
10
- import { artifactKind, readArtifact, recordRuntimeOnlyArtifact } from '../run-state/artifacts.js';
11
- import { appendEvent } from '../run-state/events.js';
12
- import { appendArtifactHashLedgerEntry, appendDeclaredCommandLedgerEntries, appendInvocationLedgerEntry, listInvocationLedgerEntries } from '../run-state/invocation-ledger.js';
13
- import type { InvocationLedgerEntry, InvocationLedgerKind, RunState, RunStateTaskRuntime } from '../run-state/model.js';
14
- import { readRunState, writeRunState } from '../run-state/run-state.js';
15
- import { getBranchStageEvidencePathFromRef, isBranchStageEvidenceRef, toBranchStageEvidenceRef, toEvidencePayloadFileName } from '../runtime-paths.js';
16
- import { hasRuntimeEvidenceScopeViolation, readRuntimeEvidenceClaims } from '../context/evidence-summary.js';
17
- import type { ArtifactTrustValidationReport, EvidenceClaim, EvidenceCoverageStatus, EvidenceQualityIssue } from '../artifacts/sdd-evidence.js';
18
- import { validateSddResultArtifact } from '../artifacts/sdd-result.js';
19
- import type { SddResultStatus } from '../artifacts/sdd-result.js';
20
- import { taskGap } from '../sdd-docs/task-inspection.js';
21
- import { inspectSddTask } from '../sdd-docs/task-inspection.js';
22
- import type { SddTask, SddTaskGap } from '../sdd-docs/task-parser.js';
23
- import { resolveTaskRun } from '../workflow-state/resolve-task-run.js';
24
-
25
- export type GoalVerifyStatus = 'PASS' | 'PASS_WITH_GAPS' | 'FAIL' | 'BLOCKED';
26
- export type HarnessVerifyStatus = 'PASS' | 'GAPS' | 'BLOCKED' | 'HUMAN_NEEDED';
27
-
28
- export interface GoalVerifyOptions {
29
- branch?: string;
30
- taskId: string;
31
- runId?: string;
32
- reviewArtifact?: string;
33
- validationArtifact?: string;
34
- }
35
-
36
- interface PolicyRuleSet {
37
- id: typeof ACCEPTANCE_POLICY_RULESET_VERSION;
38
- version: string;
39
- ruleIds: string[];
40
- }
41
-
42
- interface PolicyDecision {
43
- status: EvidenceCoverageStatus;
44
- ruleSet: PolicyRuleSet;
45
- passedRules: string[];
46
- failedRules: string[];
47
- issueCodes: EvidenceQualityIssue[];
48
- }
49
-
50
- export interface AcceptanceCoverageItem {
51
- acceptance: string;
52
- status: EvidenceCoverageStatus;
53
- evidence: string;
54
- policyDecision?: PolicyDecision;
55
- issueCodes?: EvidenceQualityIssue[];
56
- }
57
-
58
- export interface GoalVerifyResult {
59
- runId: string;
60
- taskId: string;
61
- status: GoalVerifyStatus;
62
- task: SddTask | null;
63
- reviewArtifact: string | null;
64
- validationArtifact: string | null;
65
- coverageArtifactPath: string;
66
- acceptanceCoverage: AcceptanceCoverageItem[];
67
- gaps: SddTaskGap[];
68
- commands: string[];
69
- plannedCommands: string[];
70
- executedCommands: string[];
71
- standardStatus: HarnessVerifyStatus;
72
- message: string;
73
- }
74
-
75
- interface AcceptanceCoverageTarget {
76
- label: string;
77
- description: string | null;
78
- matchTexts: string[];
79
- }
80
-
81
- export async function runGoalVerify(projectRoot: string, options: GoalVerifyOptions): Promise<GoalVerifyResult> {
82
- const resolved = await resolveTaskRun(projectRoot, { runId: options.runId, branch: options.branch, taskId: options.taskId });
83
- const branch = resolved.context.partition;
84
- const model = resolved.model;
85
- const inspected = { task: resolved.task, gaps: inspectSddTask(model, options.taskId).gaps };
86
- const runId = resolved.runId;
87
- const state = resolved.state;
88
- const reviewArtifact = options.reviewArtifact ?? artifactPathForAgent(state, options.taskId, 'reviewer');
89
- const validationArtifact = options.validationArtifact ?? artifactPathForAgent(state, options.taskId, 'validator');
90
- const gaps: SddTaskGap[] = [...inspected.gaps];
91
- const plannedCommands = inspected.task?.validation ?? [];
92
- for (const reason of resolved.staleReasons) {
93
- gaps.push(taskGap(options.taskId, 'run_snapshot', reason, 'Rerun sdd do task for the current partition before verify.'));
94
- }
95
- for (const conflict of resolved.affectedFileConflicts) {
96
- gaps.push(taskGap(options.taskId, 'affected_files', `Affected file ${conflict.file} is active in run ${conflict.runId} for ${conflict.partition}/${conflict.taskId}.`, 'Resolve or archive the conflicting active run before verify.'));
97
- }
98
- const acceptanceCoverage: AcceptanceCoverageItem[] = [];
99
- const acceptedArtifacts: string[] = [];
100
- let reviewStatus: SddResultStatus | null = null;
101
- let validationStatus: SddResultStatus | null = null;
102
- let validationTrust: ArtifactTrustValidationReport | null = null;
103
- let executedCommands: string[] = [];
104
-
105
- await appendEvent(projectRoot, runId, {
106
- event: 'phase_started',
107
- runId,
108
- summary: `Phase 1.9 goal-level verify started for ${options.taskId}`,
109
- data: { phase: 'verify', branch, task: options.taskId }
110
- });
111
-
112
- if (!inspected.task) {
113
- gaps.push(taskGap(options.taskId, 'task', `Task ${options.taskId} was not found for goal-level verification.`, 'Create the task or choose an existing task id before verify.'));
114
- }
115
-
116
- if (!reviewArtifact) {
117
- gaps.push(taskGap(options.taskId, 'review_artifact', 'No reviewer evidence was supplied or selected from runtime state.', 'Author reviewer evidence under .sdd/runs/<branch>/do/code-review-vN.md and register its ref/hash before goal-level verify.'));
118
- } else {
119
- const reviewReport = await validateSddResultArtifact(projectRoot, runId, reviewArtifact, { expectedTask: options.taskId, expectedAgent: 'reviewer' });
120
- if (!reviewReport.valid || !reviewReport.result) {
121
- gaps.push(taskGap(options.taskId, 'review_artifact', `Reviewer artifact ${reviewArtifact} is invalid: ${reviewReport.issues.map((issue) => issue.message).join('; ')}`, 'Fix reviewer artifact contract before goal-level verify.'));
122
- } else {
123
- reviewStatus = reviewReport.result.status;
124
- acceptedArtifacts.push(reviewArtifact);
125
- if (reviewReport.result.status !== 'PASS') {
126
- gaps.push(taskGap(options.taskId, 'review_status', `Reviewer status is ${reviewReport.result.status}, not PASS.`, 'Resolve review findings before marking verification PASS.'));
127
- }
128
- }
129
- }
130
-
131
- if (!validationArtifact) {
132
- gaps.push(taskGap(options.taskId, 'validation_artifact', 'No validator evidence was supplied or selected from runtime state.', 'Author validator evidence under .sdd/runs/<branch>/test/validation-vN.md and register its ref/hash before goal-level verify.'));
133
- } else {
134
- const validationReport = await validateSddResultArtifact(projectRoot, runId, validationArtifact, { expectedTask: options.taskId, expectedAgent: 'validator' });
135
- validationTrust = validationReport.trust ?? null;
136
- if (!validationReport.valid || !validationReport.result) {
137
- gaps.push(taskGap(options.taskId, 'validation_artifact', `Validator artifact ${validationArtifact} is invalid: ${validationReport.issues.map((issue) => issue.message).join('; ')}`, 'Fix validator artifact contract before goal-level verify.'));
138
- } else {
139
- validationStatus = validationReport.result.status;
140
- acceptedArtifacts.push(validationArtifact);
141
- if (validationReport.result.status === 'FAIL' || validationReport.result.status === 'BLOCKED') {
142
- gaps.push(taskGap(options.taskId, 'validation_status', `Validator status is ${validationReport.result.status}.`, 'Do not mark task completed; inspect validation gaps and recovery proposal.'));
143
- }
144
- }
145
- }
146
-
147
- if (inspected.task) {
148
- const validationRaw = validationArtifact ? await readArtifactIfExists(projectRoot, runId, validationArtifact) : '';
149
- const reviewRaw = reviewArtifact ? await readArtifactIfExists(projectRoot, runId, reviewArtifact) : '';
150
- if (reviewArtifact && reviewRaw.length > 0) {
151
- await appendArtifactHashLedgerEntry(projectRoot, { runId, taskId: options.taskId, branch, artifactPath: reviewArtifact, content: reviewRaw });
152
- }
153
- if (validationArtifact && validationRaw.length > 0) {
154
- await appendArtifactHashLedgerEntry(projectRoot, { runId, taskId: options.taskId, branch, artifactPath: validationArtifact, content: validationRaw });
155
- }
156
- await appendDeclaredCommandLedgerEntries(projectRoot, { runId, taskId: options.taskId, branch, commands: inspected.task.validation });
157
- const invocationLedger = await listInvocationLedgerEntries(projectRoot, runId);
158
- executedCommands = executedCommandsFromLedger(invocationLedger);
159
- const admittedClaims = await readRuntimeEvidenceClaims(projectRoot, runId, options.taskId);
160
- const scopeViolation = await hasRuntimeEvidenceScopeViolation(projectRoot, runId, options.taskId);
161
- if (scopeViolation) {
162
- gaps.push(taskGap(options.taskId, 'runtime_scope', 'PARTITION_SCOPE_VIOLATION: Runtime evidence claims do not match the run partition.', 'Reingest validator evidence in the correct branch/partition before verify.'));
163
- }
164
- for (const target of taskAcceptanceCoverageTargets(inspected.task)) {
165
- const coverage = scopeViolation
166
- ? acceptanceCoverageDecision(target.label, 'BLOCKED', 'Runtime evidence scope violation blocks acceptance coverage.', ['PARTITION_SCOPE_VIOLATION'], [], ['require-partition-scope'])
167
- : evaluateAcceptanceCoverageTarget(target, {
168
- taskId: options.taskId,
169
- validationArtifact,
170
- validationRaw,
171
- claims: admittedClaims.length > 0 ? admittedClaims : validationTrust?.claims ?? [],
172
- validationStatus,
173
- invocationLedger
174
- });
175
- await appendInvocationLedgerEntry(projectRoot, {
176
- runId,
177
- taskId: options.taskId,
178
- branch,
179
- kind: 'policy_evaluation',
180
- ref: `${ACCEPTANCE_POLICY_RULESET_VERSION}:${target.label}`,
181
- status: coverage.status,
182
- artifactPath: validationArtifact,
183
- inputHash: validationRaw.length > 0 ? hashDocumentContent(validationRaw) : null,
184
- materialRefs: [],
185
- metadata: {
186
- passedRules: coverage.policyDecision?.passedRules.join(',') ?? '',
187
- failedRules: coverage.policyDecision?.failedRules.join(',') ?? '',
188
- issueCodes: coverage.issueCodes?.join(',') ?? ''
189
- }
190
- });
191
- acceptanceCoverage.push(coverage);
192
- if (coverage.status !== 'PASS') {
193
- gaps.push(taskGap(options.taskId, 'acceptance_coverage', `Acceptance target ${target.label} is ${coverage.status}: ${coverage.evidence}`, `Add ${SDD_EVIDENCE_CONTRACT} claim/evidence/provenance/policy records for ${target.label}; mention-only acceptance refs cannot pass.`));
194
- }
195
- }
196
- }
197
-
198
- const status = deriveGoalVerifyStatus(reviewStatus, validationStatus, gaps);
199
- const standardStatus = toHarnessVerifyStatus(status, reviewStatus, validationStatus, gaps);
200
- const coverageFileName = `acceptance-coverage-${options.taskId}.md`;
201
- const coverageRef = toBranchStageEvidenceRef(branch, 'goal-verify', coverageFileName);
202
- await recordRuntimeOnlyArtifact(projectRoot, runId, coverageFileName, renderAcceptanceCoverageArtifact(options.taskId, status, coverageRef, inspected.task, reviewArtifact, validationArtifact, acceptanceCoverage, gaps, executedCommands), { logicalRef: coverageRef, branch, taskId: options.taskId, artifactRole: 'goal-verify-acceptance-coverage' });
203
- const allArtifacts = [...acceptedArtifacts, coverageRef];
204
-
205
- await persistVerifyState(projectRoot, runId, {
206
- status,
207
- taskId: options.taskId,
208
- taskState: buildGoalVerifyTaskState(inspected.task, status, gaps, allArtifacts, acceptanceCoverage),
209
- commands: plannedCommands,
210
- evidence: allArtifacts,
211
- artifacts: allArtifacts.map((artifactPath) => ({ path: artifactPath, kind: artifactKind(artifactPath), task: options.taskId, agent: agentFromArtifactPath(artifactPath) }))
212
- });
213
- await appendEvent(projectRoot, runId, {
214
- event: status === 'PASS' ? 'validation_passed' : 'validation_failed',
215
- runId,
216
- summary: `Phase 1.9 goal-level verify ${status} for ${options.taskId}`,
217
- data: { task: options.taskId, status, coverageArtifact: coverageRef, gaps, plannedCommands, executedCommands }
218
- });
219
-
220
- return {
221
- runId,
222
- taskId: options.taskId,
223
- status,
224
- task: inspected.task,
225
- reviewArtifact,
226
- validationArtifact,
227
- coverageArtifactPath: coverageRef,
228
- acceptanceCoverage,
229
- gaps,
230
- commands: plannedCommands,
231
- plannedCommands,
232
- executedCommands,
233
- standardStatus,
234
- message: status === 'PASS' ? 'Goal-level verify passed with explicit acceptance coverage.' : 'Goal-level verify found gaps; inspect coverage artifact.'
235
- };
236
- }
237
-
238
- function buildGoalVerifyTaskState(task: SddTask | null, status: GoalVerifyStatus, gaps: SddTaskGap[], artifacts: string[], acceptanceCoverage: unknown[]): RunStateTaskRuntime {
239
- const verificationStatus = status === 'PASS' ? 'pass' : status === 'PASS_WITH_GAPS' ? 'pass_with_gaps' : status === 'FAIL' ? 'failed' : 'blocked';
240
- return {
241
- status: status === 'PASS' ? 'implemented_verified' : verificationStatus === 'pass_with_gaps' ? 'validation_blocked' : verificationStatus === 'failed' ? 'validation_failed' : 'validation_blocked',
242
- implementationStatus: 'implemented',
243
- verificationStatus,
244
- validationBatch: task?.validationBatch ?? null,
245
- validationTiming: task?.validationTiming ?? 'task_end',
246
- requiresVerifyBeforeNext: task?.requiresVerifyBeforeNext ?? true,
247
- verifyStatus: status,
248
- gaps,
249
- artifacts,
250
- acceptanceCoverage
251
- };
252
- }
253
-
254
- async function persistVerifyState(projectRoot: string, runId: string, input: {
255
- status: GoalVerifyStatus;
256
- taskId: string;
257
- taskState: RunStateTaskRuntime;
258
- commands: string[];
259
- evidence: string[];
260
- artifacts: Array<{ path: string; kind: string; task: string; agent: string }>;
261
- }): Promise<void> {
262
- const state = await readRunState(projectRoot, runId);
263
- const now = new Date().toISOString();
264
- const knownArtifactPaths = new Set(state.artifacts.map((artifact) => artifact.path));
265
- const newArtifacts = input.artifacts
266
- .filter((artifact) => !knownArtifactPaths.has(artifact.path))
267
- .map((artifact) => ({ ...artifact, createdAt: now }));
268
- await writeRunState(projectRoot, {
269
- ...state,
270
- status: input.status === 'PASS' ? 'completed' : 'blocked',
271
- phase: 'verify',
272
- currentTask: input.taskId,
273
- tasks: {
274
- ...state.tasks,
275
- [input.taskId]: input.taskState
276
- },
277
- artifacts: [...state.artifacts, ...newArtifacts],
278
- validation: {
279
- status: input.status === 'PASS' ? 'pass' : input.status === 'PASS_WITH_GAPS' ? 'pass_with_gaps' : input.status === 'BLOCKED' ? 'blocked' : 'fail',
280
- commands: input.commands,
281
- evidence: input.evidence
282
- },
283
- });
284
- }
285
-
286
-
287
- function renderAcceptanceCoverageArtifact(taskId: string, status: GoalVerifyStatus, coverageRef: string, task: SddTask | null, reviewArtifact: string | null, validationArtifact: string | null, coverage: AcceptanceCoverageItem[], gaps: SddTaskGap[], executedCommands: string[]): string {
288
- return `# Acceptance Coverage ${taskId}\n\n\`\`\`sdd-result\ncontract: ${SDD_RESULT_CONTRACT}\nversion: ${SDD_RESULT_VERSION}\nagent: validator\ntask: ${taskId}\nstatus: ${status}\nartifacts:\n - ${coverageRef}\n\`\`\`\n\n## Source Evidence\n\n- review_artifact: ${reviewArtifact ?? 'missing'}\n- validation_artifact: ${validationArtifact ?? 'missing'}\n- task_source: ${task ? sourceLocationEvidence(task.source) : 'missing'}\n\n## Planned Validation Commands\n\n${task && task.validation.length > 0 ? task.validation.map((command) => `- ${command}`).join('\n') : '- none'}\n\n## Executed Runtime Commands\n\n${executedCommands.length > 0 ? executedCommands.map((command) => `- ${command}`).join('\n') : '- none'}\n\n## Acceptance Mapping\n\n${coverage.length > 0 ? coverage.map((item) => `- [${item.status}] ${item.acceptance} Evidence: ${item.evidence}`).join('\n') : '- No acceptance items available.'}\n\n## Policy Decisions\n\n${coverage.length > 0 ? coverage.map((item) => `- ${item.acceptance}: status=${item.policyDecision?.status ?? item.status}; ruleset=${item.policyDecision?.ruleSet.id ?? ACCEPTANCE_POLICY_RULESET_VERSION}; passed=${item.policyDecision?.passedRules.join(',') || 'none'}; failed=${item.policyDecision?.failedRules.join(',') || 'none'}; issues=${item.issueCodes?.join(',') || 'none'}`).join('\n') : '- none'}\n\n## Gaps\n\n${gaps.length > 0 ? gaps.map((gap) => `- [${gap.severity}] ${gap.type} ${gap.field}: ${gap.message} Recommendation: ${gap.recommendation}`).join('\n') : '- none'}\n`;
289
- }
290
-
291
- function evaluateAcceptanceCoverageTarget(target: AcceptanceCoverageTarget, input: { taskId: string; validationArtifact: string | null; validationRaw: string; claims: EvidenceClaim[]; validationStatus: SddResultStatus | null; invocationLedger: InvocationLedgerEntry[] }): AcceptanceCoverageItem {
292
- const matchingClaims = input.claims.filter((claim) => claim.task === input.taskId && acceptanceMatchesTarget(target, claim.acceptance));
293
- const issueCodes: EvidenceQualityIssue[] = [];
294
- const failedRules: string[] = [];
295
- if (matchingClaims.length === 0) {
296
- if (target.matchTexts.some((text) => text.length > 0 && input.validationRaw.toLowerCase().includes(text.toLowerCase()))) {
297
- issueCodes.push('MENTION_ONLY');
298
- failedRules.push('require-structured-evidence');
299
- return acceptanceCoverageDecision(target.label, 'REFERENCED_ONLY', `Referenced ${target.label} in ${input.validationArtifact ?? 'validator artifact'} without policy-backed evidence.`, issueCodes, [], failedRules);
300
- }
301
- issueCodes.push('MISSING_ARTIFACT_REFERENCE');
302
- failedRules.push('require-acceptance-claim');
303
- return acceptanceCoverageDecision(target.label, 'MISSING', 'No policy-backed acceptance evidence found in validator artifact.', issueCodes, [], failedRules);
304
- }
305
-
306
- let best = matchingClaims[0];
307
- let bestRank = evidenceClaimSelectionRank(best, input);
308
- for (const claim of matchingClaims.slice(1)) {
309
- const rank = evidenceClaimSelectionRank(claim, input);
310
- if (rank > bestRank) {
311
- best = claim;
312
- bestRank = rank;
313
- }
314
- }
315
-
316
- if (best.status === 'PASS') {
317
- const ledgerDecision = evaluatePassClaimPolicy(best, input);
318
- if (ledgerDecision.issueCodes.length === 0) {
319
- return acceptanceCoverageDecision(target.label, 'PASS', `Policy-proven by ${SDD_EVIDENCE_CONTRACT} claim for ${best.acceptance} in ${best.sourceArtifact}; evidence=${best.evidence.map((item) => `${item.kind}:${item.ref}`).join(', ')}; provenance=${best.provenance.join(', ')}; policy=${best.policy.join(', ')}.`, [], ledgerDecision.passedRules, []);
320
- }
321
- return acceptanceCoverageDecision(target.label, 'BLOCKED', `PASS claim for ${best.acceptance} is missing required policy/provenance corroboration.`, ledgerDecision.issueCodes, [], ledgerDecision.failedRules);
322
- }
323
-
324
- if (best.status === 'FAIL') {
325
- return acceptanceCoverageDecision(target.label, 'FAIL', `Explicit FAIL claim for ${best.acceptance}: ${best.claim}`, [], ['explicit-fail-overrides-pass'], []);
326
- }
327
- if (best.status === 'BLOCKED') {
328
- return acceptanceCoverageDecision(target.label, 'BLOCKED', `Explicit BLOCKED claim for ${best.acceptance}: ${best.claim}`, [], ['explicit-blocked-overrides-pass'], []);
329
- }
330
- if (best.status === 'REFERENCED_ONLY') {
331
- return acceptanceCoverageDecision(target.label, 'REFERENCED_ONLY', `Structured evidence references ${best.acceptance} but does not prove PASS.`, ['MENTION_ONLY'], [], ['require-pass-claim']);
332
- }
333
- return acceptanceCoverageDecision(target.label, 'MISSING', `Structured evidence marks ${best.acceptance} missing.`, ['MISSING_ARTIFACT_REFERENCE'], [], ['require-pass-claim']);
334
- }
335
-
336
- function evidenceClaimSelectionRank(claim: EvidenceClaim, input: { validationStatus: SddResultStatus | null; invocationLedger: InvocationLedgerEntry[] }): number {
337
- if (claim.status === 'FAIL') {
338
- return 500;
339
- }
340
- if (claim.status === 'BLOCKED') {
341
- return 400;
342
- }
343
- if (claim.status === 'PASS') {
344
- const decision = evaluatePassClaimPolicy(claim, input);
345
- return decision.issueCodes.length === 0 ? 300 : 200 - decision.issueCodes.length;
346
- }
347
- if (claim.status === 'REFERENCED_ONLY') {
348
- return 100;
349
- }
350
- return 0;
351
- }
352
-
353
- function evaluatePassClaimPolicy(claim: EvidenceClaim, input: { validationStatus: SddResultStatus | null; invocationLedger: InvocationLedgerEntry[] }): { issueCodes: EvidenceQualityIssue[]; failedRules: string[]; passedRules: string[] } {
354
- const issueCodes: EvidenceQualityIssue[] = [];
355
- const failedRules: string[] = [];
356
- const passedRules: string[] = [];
357
- const addFailure = (code: EvidenceQualityIssue, rule: string): void => {
358
- if (!issueCodes.includes(code)) {
359
- issueCodes.push(code);
360
- }
361
- if (!failedRules.includes(rule)) {
362
- failedRules.push(rule);
363
- }
364
- };
365
- const addPassed = (rule: string): void => {
366
- if (!passedRules.includes(rule)) {
367
- passedRules.push(rule);
368
- }
369
- };
370
- if (claim.evidence.length === 0) {
371
- addFailure('UNSOURCED_PASS', 'require-source-evidence');
372
- } else {
373
- addPassed('require-source-evidence');
374
- }
375
- if (claim.provenance.length === 0) {
376
- addFailure('PROVENANCE_GAP', 'require-provenance');
377
- } else {
378
- addPassed('require-provenance');
379
- }
380
- if (claim.policy.length === 0) {
381
- addFailure('POLICY_RULE_FAILED', 'require-policy-rule');
382
- } else {
383
- addPassed('require-policy-rule');
384
- }
385
- if (input.validationStatus !== 'PASS') {
386
- addFailure('POLICY_RULE_FAILED', 'require-validator-pass');
387
- } else {
388
- addPassed('require-validator-pass');
389
- }
390
- const ledgerDecision = evaluateClaimLedgerCorroboration(claim, input.invocationLedger);
391
- for (const issue of ledgerDecision.issueCodes) {
392
- if (!issueCodes.includes(issue)) {
393
- issueCodes.push(issue);
394
- }
395
- }
396
- for (const rule of ledgerDecision.failedRules) {
397
- if (!failedRules.includes(rule)) {
398
- failedRules.push(rule);
399
- }
400
- }
401
- if (ledgerDecision.failedRules.length === 0) {
402
- addPassed('require-ledger-corroboration');
403
- }
404
- return { issueCodes, failedRules, passedRules };
405
- }
406
-
407
- function evaluateClaimLedgerCorroboration(claim: EvidenceClaim, entries: InvocationLedgerEntry[]): { issueCodes: EvidenceQualityIssue[]; failedRules: string[] } {
408
- const issueCodes: EvidenceQualityIssue[] = [];
409
- const failedRules: string[] = [];
410
- const commandRefs = invocationLedgerRefs(entries, 'command');
411
- const artifactRefs = invocationLedgerRefs(entries, 'artifact_hash');
412
- const materialRefs = ledgerMaterialRefs(entries);
413
- const addIssue = (code: EvidenceQualityIssue, rule: string): void => {
414
- if (!issueCodes.includes(code)) {
415
- issueCodes.push(code);
416
- }
417
- if (!failedRules.includes(rule)) {
418
- failedRules.push(rule);
419
- }
420
- };
421
-
422
- if (!artifactRefs.has(claim.sourceArtifact)) {
423
- addIssue('MISSING_ARTIFACT_REFERENCE', 'require-source-artifact-hash');
424
- }
425
- for (const item of claim.evidence) {
426
- if (item.kind === 'command' && !commandRefs.has(item.ref)) {
427
- addIssue('MISSING_COMMAND_OUTPUT', 'require-command-ledger');
428
- }
429
- if (item.kind === 'artifact' && !artifactRefs.has(item.ref)) {
430
- addIssue('MISSING_ARTIFACT_REFERENCE', 'require-artifact-hash');
431
- }
432
- if (item.kind === 'material' && !materialRefs.has(item.ref)) {
433
- addIssue('MISSING_MATERIAL_REFERENCE', 'require-material-ledger');
434
- }
435
- }
436
- for (const ref of claim.provenance) {
437
- const typed = parseTypedLedgerRef(ref);
438
- if (!typed) {
439
- continue;
440
- }
441
- if (typed.kind === 'command' && !commandRefs.has(typed.ref)) {
442
- addIssue('PROVENANCE_GAP', 'require-command-provenance-ledger');
443
- }
444
- if (typed.kind === 'artifact' && !artifactRefs.has(typed.ref)) {
445
- addIssue('PROVENANCE_GAP', 'require-artifact-provenance-ledger');
446
- }
447
- if (typed.kind === 'material' && !materialRefs.has(typed.ref)) {
448
- addIssue('PROVENANCE_GAP', 'require-material-provenance-ledger');
449
- }
450
- }
451
- return { issueCodes, failedRules };
452
- }
453
-
454
- function invocationLedgerRefs(entries: InvocationLedgerEntry[], kind: InvocationLedgerKind): Set<string> {
455
- const refs = new Set<string>();
456
- for (const entry of entries) {
457
- if (entry.kind === kind) {
458
- refs.add(entry.ref);
459
- if (entry.artifactPath) {
460
- refs.add(entry.artifactPath);
461
- }
462
- if (kind === 'command' && typeof entry.metadata.stepId === 'string') {
463
- refs.add(entry.metadata.stepId);
464
- }
465
- }
466
- }
467
- return refs;
468
- }
469
-
470
- function parseTypedLedgerRef(value: string): { kind: string; ref: string } | null {
471
- const separator = value.indexOf(':');
472
- if (separator <= 0) {
473
- return null;
474
- }
475
- const kind = value.slice(0, separator).trim();
476
- const ref = value.slice(separator + 1).trim();
477
- if (!/^[A-Za-z0-9_-]+$/.test(kind) || !ref) {
478
- return null;
479
- }
480
- return { kind, ref };
481
- }
482
-
483
- function acceptanceMatchesTarget(target: AcceptanceCoverageTarget, acceptance: string): boolean {
484
- const normalizedAcceptance = acceptance.toLowerCase();
485
- return target.matchTexts.some((text) => text.toLowerCase() === normalizedAcceptance) || target.label.toLowerCase() === normalizedAcceptance;
486
- }
487
-
488
-
489
- function acceptanceCoverageDecision(acceptance: string, status: EvidenceCoverageStatus, evidence: string, issueCodes: EvidenceQualityIssue[], passedRules: string[], failedRules: string[]): AcceptanceCoverageItem {
490
- return {
491
- acceptance,
492
- status,
493
- evidence,
494
- issueCodes,
495
- policyDecision: {
496
- status,
497
- ruleSet: {
498
- id: ACCEPTANCE_POLICY_RULESET_VERSION,
499
- version: SDD_EVIDENCE_VERSION,
500
- ruleIds: ['require-structured-evidence', 'require-source-evidence', 'require-provenance', 'require-policy-rule']
501
- },
502
- passedRules,
503
- failedRules,
504
- issueCodes
505
- }
506
- };
507
- }
508
-
509
- function taskAcceptanceCoverageTargets(task: SddTask): AcceptanceCoverageTarget[] {
510
- if (task.acceptanceRefs.length > 0) {
511
- return task.acceptanceRefs.map((ref, index) => {
512
- const description = task.acceptance[index] ?? null;
513
- return {
514
- label: ref,
515
- description,
516
- matchTexts: description ? [ref, description] : [ref]
517
- };
518
- });
519
- }
520
- return task.acceptance.map((acceptance) => ({
521
- label: acceptance,
522
- description: null,
523
- matchTexts: [acceptance]
524
- }));
525
- }
526
-
527
- function deriveGoalVerifyStatus(reviewStatus: SddResultStatus | null, validationStatus: SddResultStatus | null, gaps: SddTaskGap[]): GoalVerifyStatus {
528
- if (gaps.length > 0) {
529
- return validationStatus === 'PASS_WITH_GAPS' ? 'PASS_WITH_GAPS' : 'BLOCKED';
530
- }
531
- if (reviewStatus !== 'PASS' || !validationStatus) {
532
- return 'BLOCKED';
533
- }
534
- if (validationStatus === 'PASS') {
535
- return 'PASS';
536
- }
537
- if (validationStatus === 'PASS_WITH_GAPS') {
538
- return 'PASS_WITH_GAPS';
539
- }
540
- return validationStatus === 'FAIL' ? 'FAIL' : 'BLOCKED';
541
- }
542
-
543
- function toHarnessVerifyStatus(status: GoalVerifyStatus, reviewStatus: SddResultStatus | null, validationStatus: SddResultStatus | null, gaps: SddTaskGap[]): HarnessVerifyStatus {
544
- if (status === 'PASS') {
545
- return 'PASS';
546
- }
547
- if (status === 'PASS_WITH_GAPS') {
548
- return 'GAPS';
549
- }
550
- if (!reviewStatus || !validationStatus || gaps.some((gap) => gap.field === 'review_artifact' || gap.field === 'validation_artifact')) {
551
- return 'HUMAN_NEEDED';
552
- }
553
- return 'BLOCKED';
554
- }
555
-
556
- async function readArtifactIfExists(projectRoot: string, runId: string, runRelativeArtifactPath: string): Promise<string> {
557
- try {
558
- if (isBranchStageEvidenceRef(runRelativeArtifactPath)) {
559
- try {
560
- return await readFile(getBranchStageEvidencePathFromRef(projectRoot, runRelativeArtifactPath), 'utf8');
561
- } catch {
562
- return await readArtifact(projectRoot, runId, toEvidencePayloadFileName(runRelativeArtifactPath));
563
- }
564
- }
565
- return await readArtifact(projectRoot, runId, toEvidencePayloadFileName(runRelativeArtifactPath));
566
- } catch {
567
- return '';
568
- }
569
- }
570
-
571
- function artifactPathForAgent(state: RunState, taskId: string, agent: string): string | null {
572
- const delegation = Object.values(state.delegations).find((candidate) => candidate.task === taskId && candidate.agent === agent && candidate.status === 'COMPLETED');
573
- if (delegation) {
574
- return delegation.expectedArtifact;
575
- }
576
- const artifact = state.artifacts.find((candidate) => candidate.task === taskId && candidate.agent === agent);
577
- return artifact?.path ?? null;
578
- }
579
-
580
- function agentFromArtifactPath(artifactPath: string): string {
581
- const kind = artifactKind(artifactPath);
582
- if (kind === 'implement') {
583
- return 'implementer';
584
- }
585
- if (kind === 'review' || kind === 'validation' || kind === 'debug') {
586
- return kind === 'debug' ? 'debugger' : kind === 'review' ? 'reviewer' : 'validator';
587
- }
588
- if (kind === 'gap-report') {
589
- return 'runtime';
590
- }
591
- return 'unknown';
592
- }
593
-
594
- function executedCommandsFromLedger(entries: InvocationLedgerEntry[]): string[] {
595
- return [...new Set(entries
596
- .filter((entry) => entry.kind === 'command' && entry.status !== 'declared')
597
- .map((entry) => entry.ref))];
598
- }
599
-
600
- function sourceLocationEvidence(source: SddTask['source']): string {
601
- return `${source.filePath}:${source.lineStart}-${source.lineEnd}`;
602
- }
603
-
604
- function ledgerMaterialRefs(entries: InvocationLedgerEntry[]): Set<string> {
605
- const refs = new Set<string>();
606
- for (const entry of entries) {
607
- if (entry.kind === 'material') {
608
- refs.add(entry.ref);
609
- }
610
- for (const ref of entry.materialRefs) {
611
- refs.add(ref);
612
- }
613
- }
614
- return refs;
615
- }
616
-
617
- function hashDocumentContent(raw: string): string {
618
- return createHash('sha256').update(raw.replace(/\r\n/g, '\n'), 'utf8').digest('hex');
619
- }
1
+ import { createHash } from 'node:crypto';
2
+ import { readFile } from 'node:fs/promises';
3
+ import {
4
+ ACCEPTANCE_POLICY_RULESET_VERSION,
5
+ SDD_EVIDENCE_CONTRACT,
6
+ SDD_EVIDENCE_VERSION,
7
+ SDD_RESULT_CONTRACT,
8
+ SDD_RESULT_VERSION
9
+ } from '../contracts.js';
10
+ import { artifactKind, readArtifact, recordRuntimeOnlyArtifact } from '../run-state/artifacts.js';
11
+ import { appendEvent } from '../run-state/events.js';
12
+ import { appendArtifactHashLedgerEntry, appendDeclaredCommandLedgerEntries, appendInvocationLedgerEntry, listInvocationLedgerEntries } from '../run-state/invocation-ledger.js';
13
+ import type { InvocationLedgerEntry, InvocationLedgerKind, RunState, RunStateTaskRuntime } from '../run-state/model.js';
14
+ import { readRunState, writeRunState } from '../run-state/run-state.js';
15
+ import { getBranchStageEvidencePathFromRef, isBranchStageEvidenceRef, toBranchStageEvidenceRef, toEvidencePayloadFileName } from '../runtime-paths.js';
16
+ import { hasRuntimeEvidenceScopeViolation, readRuntimeEvidenceClaims } from '../context/evidence-summary.js';
17
+ import type { ArtifactTrustValidationReport, EvidenceClaim, EvidenceCoverageStatus, EvidenceQualityIssue } from '../artifacts/sdd-evidence.js';
18
+ import { validateSddResultArtifact } from '../artifacts/sdd-result.js';
19
+ import type { SddResultStatus } from '../artifacts/sdd-result.js';
20
+ import { taskGap } from '../sdd-docs/task-inspection.js';
21
+ import { inspectSddTask } from '../sdd-docs/task-inspection.js';
22
+ import type { SddTask, SddTaskGap } from '../sdd-docs/task-parser.js';
23
+ import { resolveTaskRun } from '../workflow-state/resolve-task-run.js';
24
+
25
+ export type TaskEvidenceJudgmentStatus = 'PASS' | 'PASS_WITH_GAPS' | 'FAIL' | 'BLOCKED';
26
+ export type HarnessVerifyStatus = 'PASS' | 'GAPS' | 'BLOCKED' | 'HUMAN_NEEDED';
27
+
28
+ export interface TaskEvidenceJudgmentOptions {
29
+ branch?: string;
30
+ taskId: string;
31
+ runId?: string;
32
+ reviewArtifact?: string;
33
+ validationArtifact?: string;
34
+ }
35
+
36
+ interface PolicyRuleSet {
37
+ id: typeof ACCEPTANCE_POLICY_RULESET_VERSION;
38
+ version: string;
39
+ ruleIds: string[];
40
+ }
41
+
42
+ interface PolicyDecision {
43
+ status: EvidenceCoverageStatus;
44
+ ruleSet: PolicyRuleSet;
45
+ passedRules: string[];
46
+ failedRules: string[];
47
+ issueCodes: EvidenceQualityIssue[];
48
+ }
49
+
50
+ export interface AcceptanceCoverageItem {
51
+ acceptance: string;
52
+ status: EvidenceCoverageStatus;
53
+ evidence: string;
54
+ policyDecision?: PolicyDecision;
55
+ issueCodes?: EvidenceQualityIssue[];
56
+ }
57
+
58
+ export interface TaskEvidenceJudgmentResult {
59
+ runId: string;
60
+ taskId: string;
61
+ status: TaskEvidenceJudgmentStatus;
62
+ task: SddTask | null;
63
+ reviewArtifact: string | null;
64
+ validationArtifact: string | null;
65
+ coverageArtifactPath: string;
66
+ acceptanceCoverage: AcceptanceCoverageItem[];
67
+ gaps: SddTaskGap[];
68
+ commands: string[];
69
+ plannedCommands: string[];
70
+ executedCommands: string[];
71
+ standardStatus: HarnessVerifyStatus;
72
+ message: string;
73
+ }
74
+
75
+ interface AcceptanceCoverageTarget {
76
+ label: string;
77
+ description: string | null;
78
+ matchTexts: string[];
79
+ }
80
+
81
+ export async function runTaskEvidenceJudgment(projectRoot: string, options: TaskEvidenceJudgmentOptions): Promise<TaskEvidenceJudgmentResult> {
82
+ const resolved = await resolveTaskRun(projectRoot, { runId: options.runId, branch: options.branch, taskId: options.taskId });
83
+ const branch = resolved.context.partition;
84
+ const model = resolved.model;
85
+ const inspected = { task: resolved.task, gaps: inspectSddTask(model, options.taskId).gaps };
86
+ const runId = resolved.runId;
87
+ const state = resolved.state;
88
+ const reviewArtifact = options.reviewArtifact ?? artifactPathForAgent(state, options.taskId, 'reviewer');
89
+ const validationArtifact = options.validationArtifact ?? artifactPathForAgent(state, options.taskId, 'validator');
90
+ const gaps: SddTaskGap[] = [...inspected.gaps];
91
+ const plannedCommands = inspected.task?.validation ?? [];
92
+ for (const reason of resolved.staleReasons) {
93
+ gaps.push(taskGap(options.taskId, 'run_snapshot', reason, 'Rerun sdd execute for the current partition before verify.'));
94
+ }
95
+ for (const conflict of resolved.affectedFileConflicts) {
96
+ gaps.push(taskGap(options.taskId, 'affected_files', `Affected file ${conflict.file} is active in run ${conflict.runId} for ${conflict.partition}/${conflict.taskId}.`, 'Resolve or archive the conflicting active run before verify.'));
97
+ }
98
+ const acceptanceCoverage: AcceptanceCoverageItem[] = [];
99
+ const acceptedArtifacts: string[] = [];
100
+ let reviewStatus: SddResultStatus | null = null;
101
+ let validationStatus: SddResultStatus | null = null;
102
+ let validationTrust: ArtifactTrustValidationReport | null = null;
103
+ let executedCommands: string[] = [];
104
+
105
+ await appendEvent(projectRoot, runId, {
106
+ event: 'phase_started',
107
+ runId,
108
+ summary: `Execute evidence judgment started for ${options.taskId}`,
109
+ data: { phase: 'verify', branch, task: options.taskId }
110
+ });
111
+
112
+ if (!inspected.task) {
113
+ gaps.push(taskGap(options.taskId, 'task', `Task ${options.taskId} was not found for goal-level verification.`, 'Create the task or choose an existing task id before verify.'));
114
+ }
115
+
116
+ if (!reviewArtifact) {
117
+ gaps.push(taskGap(options.taskId, 'review_artifact', 'No reviewer evidence was supplied or selected from runtime state.', 'Author reviewer evidence under .sdd/runs/<branch>/execute/code-review-vN.md and register its ref/hash before execute evidence judgment.'));
118
+ } else {
119
+ const reviewReport = await validateSddResultArtifact(projectRoot, runId, reviewArtifact, { expectedTask: options.taskId, expectedAgent: 'reviewer' });
120
+ if (!reviewReport.valid || !reviewReport.result) {
121
+ gaps.push(taskGap(options.taskId, 'review_artifact', `Reviewer artifact ${reviewArtifact} is invalid: ${reviewReport.issues.map((issue) => issue.message).join('; ')}`, 'Fix reviewer artifact contract before execute evidence judgment.'));
122
+ } else {
123
+ reviewStatus = reviewReport.result.status;
124
+ acceptedArtifacts.push(reviewArtifact);
125
+ if (reviewReport.result.status !== 'PASS') {
126
+ gaps.push(taskGap(options.taskId, 'review_status', `Reviewer status is ${reviewReport.result.status}, not PASS.`, 'Resolve review findings before marking verification PASS.'));
127
+ }
128
+ }
129
+ }
130
+
131
+ if (!validationArtifact) {
132
+ gaps.push(taskGap(options.taskId, 'validation_artifact', 'No validator evidence was supplied or selected from runtime state.', 'Author validator evidence under .sdd/runs/<branch>/execute/validation-vN.md and register its ref/hash before execute evidence judgment.'));
133
+ } else {
134
+ const validationReport = await validateSddResultArtifact(projectRoot, runId, validationArtifact, { expectedTask: options.taskId, expectedAgent: 'validator' });
135
+ validationTrust = validationReport.trust ?? null;
136
+ if (!validationReport.valid || !validationReport.result) {
137
+ gaps.push(taskGap(options.taskId, 'validation_artifact', `Validator artifact ${validationArtifact} is invalid: ${validationReport.issues.map((issue) => issue.message).join('; ')}`, 'Fix validator artifact contract before execute evidence judgment.'));
138
+ } else {
139
+ validationStatus = validationReport.result.status;
140
+ acceptedArtifacts.push(validationArtifact);
141
+ if (validationReport.result.status === 'FAIL' || validationReport.result.status === 'BLOCKED') {
142
+ gaps.push(taskGap(options.taskId, 'validation_status', `Validator status is ${validationReport.result.status}.`, 'Do not mark task completed; inspect validation gaps and recovery proposal.'));
143
+ }
144
+ }
145
+ }
146
+
147
+ if (inspected.task) {
148
+ const validationRaw = validationArtifact ? await readArtifactIfExists(projectRoot, runId, validationArtifact) : '';
149
+ const reviewRaw = reviewArtifact ? await readArtifactIfExists(projectRoot, runId, reviewArtifact) : '';
150
+ if (reviewArtifact && reviewRaw.length > 0) {
151
+ await appendArtifactHashLedgerEntry(projectRoot, { runId, taskId: options.taskId, branch, artifactPath: reviewArtifact, content: reviewRaw });
152
+ }
153
+ if (validationArtifact && validationRaw.length > 0) {
154
+ await appendArtifactHashLedgerEntry(projectRoot, { runId, taskId: options.taskId, branch, artifactPath: validationArtifact, content: validationRaw });
155
+ }
156
+ await appendDeclaredCommandLedgerEntries(projectRoot, { runId, taskId: options.taskId, branch, commands: inspected.task.validation });
157
+ const invocationLedger = await listInvocationLedgerEntries(projectRoot, runId);
158
+ executedCommands = executedCommandsFromLedger(invocationLedger);
159
+ const admittedClaims = await readRuntimeEvidenceClaims(projectRoot, runId, options.taskId);
160
+ const scopeViolation = await hasRuntimeEvidenceScopeViolation(projectRoot, runId, options.taskId);
161
+ if (scopeViolation) {
162
+ gaps.push(taskGap(options.taskId, 'runtime_scope', 'PARTITION_SCOPE_VIOLATION: Runtime evidence claims do not match the run partition.', 'Reingest validator evidence in the correct branch/partition before verify.'));
163
+ }
164
+ for (const target of taskAcceptanceCoverageTargets(inspected.task)) {
165
+ const coverage = scopeViolation
166
+ ? acceptanceCoverageDecision(target.label, 'BLOCKED', 'Runtime evidence scope violation blocks acceptance coverage.', ['PARTITION_SCOPE_VIOLATION'], [], ['require-partition-scope'])
167
+ : evaluateAcceptanceCoverageTarget(target, {
168
+ taskId: options.taskId,
169
+ validationArtifact,
170
+ validationRaw,
171
+ claims: admittedClaims.length > 0 ? admittedClaims : validationTrust?.claims ?? [],
172
+ validationStatus,
173
+ invocationLedger
174
+ });
175
+ await appendInvocationLedgerEntry(projectRoot, {
176
+ runId,
177
+ taskId: options.taskId,
178
+ branch,
179
+ kind: 'policy_evaluation',
180
+ ref: `${ACCEPTANCE_POLICY_RULESET_VERSION}:${target.label}`,
181
+ status: coverage.status,
182
+ artifactPath: validationArtifact,
183
+ inputHash: validationRaw.length > 0 ? hashDocumentContent(validationRaw) : null,
184
+ materialRefs: [],
185
+ metadata: {
186
+ passedRules: coverage.policyDecision?.passedRules.join(',') ?? '',
187
+ failedRules: coverage.policyDecision?.failedRules.join(',') ?? '',
188
+ issueCodes: coverage.issueCodes?.join(',') ?? ''
189
+ }
190
+ });
191
+ acceptanceCoverage.push(coverage);
192
+ if (coverage.status !== 'PASS') {
193
+ gaps.push(taskGap(options.taskId, 'acceptance_coverage', `Acceptance target ${target.label} is ${coverage.status}: ${coverage.evidence}`, `Add ${SDD_EVIDENCE_CONTRACT} claim/evidence/provenance/policy records for ${target.label}; mention-only acceptance refs cannot pass.`));
194
+ }
195
+ }
196
+ }
197
+
198
+ const status = deriveTaskEvidenceJudgmentStatus(reviewStatus, validationStatus, gaps);
199
+ const standardStatus = toHarnessVerifyStatus(status, reviewStatus, validationStatus, gaps);
200
+ const coverageFileName = `acceptance-coverage-${options.taskId}.md`;
201
+ const coverageRef = toBranchStageEvidenceRef(branch, 'execute', coverageFileName);
202
+ await recordRuntimeOnlyArtifact(projectRoot, runId, coverageFileName, renderAcceptanceCoverageArtifact(options.taskId, status, coverageRef, inspected.task, reviewArtifact, validationArtifact, acceptanceCoverage, gaps, executedCommands), { logicalRef: coverageRef, branch, taskId: options.taskId, artifactRole: 'task-evidence-judgment-acceptance-coverage' });
203
+ const allArtifacts = [...acceptedArtifacts, coverageRef];
204
+
205
+ await persistVerifyState(projectRoot, runId, {
206
+ status,
207
+ taskId: options.taskId,
208
+ taskState: buildTaskEvidenceJudgmentTaskState(inspected.task, status, gaps, allArtifacts, acceptanceCoverage),
209
+ commands: plannedCommands,
210
+ evidence: allArtifacts,
211
+ artifacts: allArtifacts.map((artifactPath) => ({ path: artifactPath, kind: artifactKind(artifactPath), task: options.taskId, agent: agentFromArtifactPath(artifactPath) }))
212
+ });
213
+ await appendEvent(projectRoot, runId, {
214
+ event: status === 'PASS' ? 'validation_passed' : 'validation_failed',
215
+ runId,
216
+ summary: `Execute evidence judgment ${status} for ${options.taskId}`,
217
+ data: { task: options.taskId, status, coverageArtifact: coverageRef, gaps, plannedCommands, executedCommands }
218
+ });
219
+
220
+ return {
221
+ runId,
222
+ taskId: options.taskId,
223
+ status,
224
+ task: inspected.task,
225
+ reviewArtifact,
226
+ validationArtifact,
227
+ coverageArtifactPath: coverageRef,
228
+ acceptanceCoverage,
229
+ gaps,
230
+ commands: plannedCommands,
231
+ plannedCommands,
232
+ executedCommands,
233
+ standardStatus,
234
+ message: status === 'PASS' ? 'Task evidence judgment passed with explicit acceptance coverage.' : 'Task evidence judgment found gaps; inspect coverage artifact.'
235
+ };
236
+ }
237
+
238
+ function buildTaskEvidenceJudgmentTaskState(task: SddTask | null, status: TaskEvidenceJudgmentStatus, gaps: SddTaskGap[], artifacts: string[], acceptanceCoverage: unknown[]): RunStateTaskRuntime {
239
+ const verificationStatus = status === 'PASS' ? 'pass' : status === 'PASS_WITH_GAPS' ? 'pass_with_gaps' : status === 'FAIL' ? 'failed' : 'blocked';
240
+ return {
241
+ status: status === 'PASS' ? 'implemented_verified' : verificationStatus === 'pass_with_gaps' ? 'validation_blocked' : verificationStatus === 'failed' ? 'validation_failed' : 'validation_blocked',
242
+ implementationStatus: 'implemented',
243
+ verificationStatus,
244
+ validationBatch: task?.validationBatch ?? null,
245
+ validationTiming: task?.validationTiming ?? 'task_end',
246
+ requiresVerifyBeforeNext: task?.requiresVerifyBeforeNext ?? true,
247
+ verifyStatus: status,
248
+ gaps,
249
+ artifacts,
250
+ acceptanceCoverage
251
+ };
252
+ }
253
+
254
+ async function persistVerifyState(projectRoot: string, runId: string, input: {
255
+ status: TaskEvidenceJudgmentStatus;
256
+ taskId: string;
257
+ taskState: RunStateTaskRuntime;
258
+ commands: string[];
259
+ evidence: string[];
260
+ artifacts: Array<{ path: string; kind: string; task: string; agent: string }>;
261
+ }): Promise<void> {
262
+ const state = await readRunState(projectRoot, runId);
263
+ const now = new Date().toISOString();
264
+ const knownArtifactPaths = new Set(state.artifacts.map((artifact) => artifact.path));
265
+ const newArtifacts = input.artifacts
266
+ .filter((artifact) => !knownArtifactPaths.has(artifact.path))
267
+ .map((artifact) => ({ ...artifact, createdAt: now }));
268
+ await writeRunState(projectRoot, {
269
+ ...state,
270
+ status: input.status === 'PASS' ? 'completed' : 'blocked',
271
+ phase: 'verify',
272
+ currentTask: input.taskId,
273
+ tasks: {
274
+ ...state.tasks,
275
+ [input.taskId]: input.taskState
276
+ },
277
+ artifacts: [...state.artifacts, ...newArtifacts],
278
+ validation: {
279
+ status: input.status === 'PASS' ? 'pass' : input.status === 'PASS_WITH_GAPS' ? 'pass_with_gaps' : input.status === 'BLOCKED' ? 'blocked' : 'fail',
280
+ commands: input.commands,
281
+ evidence: input.evidence
282
+ },
283
+ });
284
+ }
285
+
286
+
287
+ function renderAcceptanceCoverageArtifact(taskId: string, status: TaskEvidenceJudgmentStatus, coverageRef: string, task: SddTask | null, reviewArtifact: string | null, validationArtifact: string | null, coverage: AcceptanceCoverageItem[], gaps: SddTaskGap[], executedCommands: string[]): string {
288
+ return `# Acceptance Coverage ${taskId}\n\n\`\`\`sdd-result\ncontract: ${SDD_RESULT_CONTRACT}\nversion: ${SDD_RESULT_VERSION}\nagent: validator\ntask: ${taskId}\nstatus: ${status}\nartifacts:\n - ${coverageRef}\n\`\`\`\n\n## Source Evidence\n\n- review_artifact: ${reviewArtifact ?? 'missing'}\n- validation_artifact: ${validationArtifact ?? 'missing'}\n- task_source: ${task ? sourceLocationEvidence(task.source) : 'missing'}\n\n## Planned Validation Commands\n\n${task && task.validation.length > 0 ? task.validation.map((command) => `- ${command}`).join('\n') : '- none'}\n\n## Executed Runtime Commands\n\n${executedCommands.length > 0 ? executedCommands.map((command) => `- ${command}`).join('\n') : '- none'}\n\n## Acceptance Mapping\n\n${coverage.length > 0 ? coverage.map((item) => `- [${item.status}] ${item.acceptance} Evidence: ${item.evidence}`).join('\n') : '- No acceptance items available.'}\n\n## Policy Decisions\n\n${coverage.length > 0 ? coverage.map((item) => `- ${item.acceptance}: status=${item.policyDecision?.status ?? item.status}; ruleset=${item.policyDecision?.ruleSet.id ?? ACCEPTANCE_POLICY_RULESET_VERSION}; passed=${item.policyDecision?.passedRules.join(',') || 'none'}; failed=${item.policyDecision?.failedRules.join(',') || 'none'}; issues=${item.issueCodes?.join(',') || 'none'}`).join('\n') : '- none'}\n\n## Gaps\n\n${gaps.length > 0 ? gaps.map((gap) => `- [${gap.severity}] ${gap.type} ${gap.field}: ${gap.message} Recommendation: ${gap.recommendation}`).join('\n') : '- none'}\n`;
289
+ }
290
+
291
+ function evaluateAcceptanceCoverageTarget(target: AcceptanceCoverageTarget, input: { taskId: string; validationArtifact: string | null; validationRaw: string; claims: EvidenceClaim[]; validationStatus: SddResultStatus | null; invocationLedger: InvocationLedgerEntry[] }): AcceptanceCoverageItem {
292
+ const matchingClaims = input.claims.filter((claim) => claim.task === input.taskId && acceptanceMatchesTarget(target, claim.acceptance));
293
+ const issueCodes: EvidenceQualityIssue[] = [];
294
+ const failedRules: string[] = [];
295
+ if (matchingClaims.length === 0) {
296
+ if (target.matchTexts.some((text) => text.length > 0 && input.validationRaw.toLowerCase().includes(text.toLowerCase()))) {
297
+ issueCodes.push('MENTION_ONLY');
298
+ failedRules.push('require-structured-evidence');
299
+ return acceptanceCoverageDecision(target.label, 'REFERENCED_ONLY', `Referenced ${target.label} in ${input.validationArtifact ?? 'validator artifact'} without policy-backed evidence.`, issueCodes, [], failedRules);
300
+ }
301
+ issueCodes.push('MISSING_ARTIFACT_REFERENCE');
302
+ failedRules.push('require-acceptance-claim');
303
+ return acceptanceCoverageDecision(target.label, 'MISSING', 'No policy-backed acceptance evidence found in validator artifact.', issueCodes, [], failedRules);
304
+ }
305
+
306
+ let best = matchingClaims[0];
307
+ let bestRank = evidenceClaimSelectionRank(best, input);
308
+ for (const claim of matchingClaims.slice(1)) {
309
+ const rank = evidenceClaimSelectionRank(claim, input);
310
+ if (rank > bestRank) {
311
+ best = claim;
312
+ bestRank = rank;
313
+ }
314
+ }
315
+
316
+ if (best.status === 'PASS') {
317
+ const ledgerDecision = evaluatePassClaimPolicy(best, input);
318
+ if (ledgerDecision.issueCodes.length === 0) {
319
+ return acceptanceCoverageDecision(target.label, 'PASS', `Policy-proven by ${SDD_EVIDENCE_CONTRACT} claim for ${best.acceptance} in ${best.sourceArtifact}; evidence=${best.evidence.map((item) => `${item.kind}:${item.ref}`).join(', ')}; provenance=${best.provenance.join(', ')}; policy=${best.policy.join(', ')}.`, [], ledgerDecision.passedRules, []);
320
+ }
321
+ return acceptanceCoverageDecision(target.label, 'BLOCKED', `PASS claim for ${best.acceptance} is missing required policy/provenance corroboration.`, ledgerDecision.issueCodes, [], ledgerDecision.failedRules);
322
+ }
323
+
324
+ if (best.status === 'FAIL') {
325
+ return acceptanceCoverageDecision(target.label, 'FAIL', `Explicit FAIL claim for ${best.acceptance}: ${best.claim}`, [], ['explicit-fail-overrides-pass'], []);
326
+ }
327
+ if (best.status === 'BLOCKED') {
328
+ return acceptanceCoverageDecision(target.label, 'BLOCKED', `Explicit BLOCKED claim for ${best.acceptance}: ${best.claim}`, [], ['explicit-blocked-overrides-pass'], []);
329
+ }
330
+ if (best.status === 'REFERENCED_ONLY') {
331
+ return acceptanceCoverageDecision(target.label, 'REFERENCED_ONLY', `Structured evidence references ${best.acceptance} but does not prove PASS.`, ['MENTION_ONLY'], [], ['require-pass-claim']);
332
+ }
333
+ return acceptanceCoverageDecision(target.label, 'MISSING', `Structured evidence marks ${best.acceptance} missing.`, ['MISSING_ARTIFACT_REFERENCE'], [], ['require-pass-claim']);
334
+ }
335
+
336
+ function evidenceClaimSelectionRank(claim: EvidenceClaim, input: { validationStatus: SddResultStatus | null; invocationLedger: InvocationLedgerEntry[] }): number {
337
+ if (claim.status === 'FAIL') {
338
+ return 500;
339
+ }
340
+ if (claim.status === 'BLOCKED') {
341
+ return 400;
342
+ }
343
+ if (claim.status === 'PASS') {
344
+ const decision = evaluatePassClaimPolicy(claim, input);
345
+ return decision.issueCodes.length === 0 ? 300 : 200 - decision.issueCodes.length;
346
+ }
347
+ if (claim.status === 'REFERENCED_ONLY') {
348
+ return 100;
349
+ }
350
+ return 0;
351
+ }
352
+
353
+ function evaluatePassClaimPolicy(claim: EvidenceClaim, input: { validationStatus: SddResultStatus | null; invocationLedger: InvocationLedgerEntry[] }): { issueCodes: EvidenceQualityIssue[]; failedRules: string[]; passedRules: string[] } {
354
+ const issueCodes: EvidenceQualityIssue[] = [];
355
+ const failedRules: string[] = [];
356
+ const passedRules: string[] = [];
357
+ const addFailure = (code: EvidenceQualityIssue, rule: string): void => {
358
+ if (!issueCodes.includes(code)) {
359
+ issueCodes.push(code);
360
+ }
361
+ if (!failedRules.includes(rule)) {
362
+ failedRules.push(rule);
363
+ }
364
+ };
365
+ const addPassed = (rule: string): void => {
366
+ if (!passedRules.includes(rule)) {
367
+ passedRules.push(rule);
368
+ }
369
+ };
370
+ if (claim.evidence.length === 0) {
371
+ addFailure('UNSOURCED_PASS', 'require-source-evidence');
372
+ } else {
373
+ addPassed('require-source-evidence');
374
+ }
375
+ if (claim.provenance.length === 0) {
376
+ addFailure('PROVENANCE_GAP', 'require-provenance');
377
+ } else {
378
+ addPassed('require-provenance');
379
+ }
380
+ if (claim.policy.length === 0) {
381
+ addFailure('POLICY_RULE_FAILED', 'require-policy-rule');
382
+ } else {
383
+ addPassed('require-policy-rule');
384
+ }
385
+ if (input.validationStatus !== 'PASS') {
386
+ addFailure('POLICY_RULE_FAILED', 'require-validator-pass');
387
+ } else {
388
+ addPassed('require-validator-pass');
389
+ }
390
+ const ledgerDecision = evaluateClaimLedgerCorroboration(claim, input.invocationLedger);
391
+ for (const issue of ledgerDecision.issueCodes) {
392
+ if (!issueCodes.includes(issue)) {
393
+ issueCodes.push(issue);
394
+ }
395
+ }
396
+ for (const rule of ledgerDecision.failedRules) {
397
+ if (!failedRules.includes(rule)) {
398
+ failedRules.push(rule);
399
+ }
400
+ }
401
+ if (ledgerDecision.failedRules.length === 0) {
402
+ addPassed('require-ledger-corroboration');
403
+ }
404
+ return { issueCodes, failedRules, passedRules };
405
+ }
406
+
407
+ function evaluateClaimLedgerCorroboration(claim: EvidenceClaim, entries: InvocationLedgerEntry[]): { issueCodes: EvidenceQualityIssue[]; failedRules: string[] } {
408
+ const issueCodes: EvidenceQualityIssue[] = [];
409
+ const failedRules: string[] = [];
410
+ const commandRefs = invocationLedgerRefs(entries, 'command');
411
+ const artifactRefs = invocationLedgerRefs(entries, 'artifact_hash');
412
+ const materialRefs = ledgerMaterialRefs(entries);
413
+ const addIssue = (code: EvidenceQualityIssue, rule: string): void => {
414
+ if (!issueCodes.includes(code)) {
415
+ issueCodes.push(code);
416
+ }
417
+ if (!failedRules.includes(rule)) {
418
+ failedRules.push(rule);
419
+ }
420
+ };
421
+
422
+ if (!artifactRefs.has(claim.sourceArtifact)) {
423
+ addIssue('MISSING_ARTIFACT_REFERENCE', 'require-source-artifact-hash');
424
+ }
425
+ for (const item of claim.evidence) {
426
+ if (item.kind === 'command' && !commandRefs.has(item.ref)) {
427
+ addIssue('MISSING_COMMAND_OUTPUT', 'require-command-ledger');
428
+ }
429
+ if (item.kind === 'artifact' && !artifactRefs.has(item.ref)) {
430
+ addIssue('MISSING_ARTIFACT_REFERENCE', 'require-artifact-hash');
431
+ }
432
+ if (item.kind === 'material' && !materialRefs.has(item.ref)) {
433
+ addIssue('MISSING_MATERIAL_REFERENCE', 'require-material-ledger');
434
+ }
435
+ }
436
+ for (const ref of claim.provenance) {
437
+ const typed = parseTypedLedgerRef(ref);
438
+ if (!typed) {
439
+ continue;
440
+ }
441
+ if (typed.kind === 'command' && !commandRefs.has(typed.ref)) {
442
+ addIssue('PROVENANCE_GAP', 'require-command-provenance-ledger');
443
+ }
444
+ if (typed.kind === 'artifact' && !artifactRefs.has(typed.ref)) {
445
+ addIssue('PROVENANCE_GAP', 'require-artifact-provenance-ledger');
446
+ }
447
+ if (typed.kind === 'material' && !materialRefs.has(typed.ref)) {
448
+ addIssue('PROVENANCE_GAP', 'require-material-provenance-ledger');
449
+ }
450
+ }
451
+ return { issueCodes, failedRules };
452
+ }
453
+
454
+ function invocationLedgerRefs(entries: InvocationLedgerEntry[], kind: InvocationLedgerKind): Set<string> {
455
+ const refs = new Set<string>();
456
+ for (const entry of entries) {
457
+ if (entry.kind === kind) {
458
+ refs.add(entry.ref);
459
+ if (entry.artifactPath) {
460
+ refs.add(entry.artifactPath);
461
+ }
462
+ if (kind === 'command' && typeof entry.metadata.stepId === 'string') {
463
+ refs.add(entry.metadata.stepId);
464
+ }
465
+ }
466
+ }
467
+ return refs;
468
+ }
469
+
470
+ function parseTypedLedgerRef(value: string): { kind: string; ref: string } | null {
471
+ const separator = value.indexOf(':');
472
+ if (separator <= 0) {
473
+ return null;
474
+ }
475
+ const kind = value.slice(0, separator).trim();
476
+ const ref = value.slice(separator + 1).trim();
477
+ if (!/^[A-Za-z0-9_-]+$/.test(kind) || !ref) {
478
+ return null;
479
+ }
480
+ return { kind, ref };
481
+ }
482
+
483
+ function acceptanceMatchesTarget(target: AcceptanceCoverageTarget, acceptance: string): boolean {
484
+ const normalizedAcceptance = acceptance.toLowerCase();
485
+ return target.matchTexts.some((text) => text.toLowerCase() === normalizedAcceptance) || target.label.toLowerCase() === normalizedAcceptance;
486
+ }
487
+
488
+
489
+ function acceptanceCoverageDecision(acceptance: string, status: EvidenceCoverageStatus, evidence: string, issueCodes: EvidenceQualityIssue[], passedRules: string[], failedRules: string[]): AcceptanceCoverageItem {
490
+ return {
491
+ acceptance,
492
+ status,
493
+ evidence,
494
+ issueCodes,
495
+ policyDecision: {
496
+ status,
497
+ ruleSet: {
498
+ id: ACCEPTANCE_POLICY_RULESET_VERSION,
499
+ version: SDD_EVIDENCE_VERSION,
500
+ ruleIds: ['require-structured-evidence', 'require-source-evidence', 'require-provenance', 'require-policy-rule']
501
+ },
502
+ passedRules,
503
+ failedRules,
504
+ issueCodes
505
+ }
506
+ };
507
+ }
508
+
509
+ function taskAcceptanceCoverageTargets(task: SddTask): AcceptanceCoverageTarget[] {
510
+ if (task.acceptanceRefs.length > 0) {
511
+ return task.acceptanceRefs.map((ref, index) => {
512
+ const description = task.acceptance[index] ?? null;
513
+ return {
514
+ label: ref,
515
+ description,
516
+ matchTexts: description ? [ref, description] : [ref]
517
+ };
518
+ });
519
+ }
520
+ return task.acceptance.map((acceptance) => ({
521
+ label: acceptance,
522
+ description: null,
523
+ matchTexts: [acceptance]
524
+ }));
525
+ }
526
+
527
+ function deriveTaskEvidenceJudgmentStatus(reviewStatus: SddResultStatus | null, validationStatus: SddResultStatus | null, gaps: SddTaskGap[]): TaskEvidenceJudgmentStatus {
528
+ if (gaps.length > 0) {
529
+ return validationStatus === 'PASS_WITH_GAPS' ? 'PASS_WITH_GAPS' : 'BLOCKED';
530
+ }
531
+ if (reviewStatus !== 'PASS' || !validationStatus) {
532
+ return 'BLOCKED';
533
+ }
534
+ if (validationStatus === 'PASS') {
535
+ return 'PASS';
536
+ }
537
+ if (validationStatus === 'PASS_WITH_GAPS') {
538
+ return 'PASS_WITH_GAPS';
539
+ }
540
+ return validationStatus === 'FAIL' ? 'FAIL' : 'BLOCKED';
541
+ }
542
+
543
+ function toHarnessVerifyStatus(status: TaskEvidenceJudgmentStatus, reviewStatus: SddResultStatus | null, validationStatus: SddResultStatus | null, gaps: SddTaskGap[]): HarnessVerifyStatus {
544
+ if (status === 'PASS') {
545
+ return 'PASS';
546
+ }
547
+ if (status === 'PASS_WITH_GAPS') {
548
+ return 'GAPS';
549
+ }
550
+ if (!reviewStatus || !validationStatus || gaps.some((gap) => gap.field === 'review_artifact' || gap.field === 'validation_artifact')) {
551
+ return 'HUMAN_NEEDED';
552
+ }
553
+ return 'BLOCKED';
554
+ }
555
+
556
+ async function readArtifactIfExists(projectRoot: string, runId: string, runRelativeArtifactPath: string): Promise<string> {
557
+ try {
558
+ if (isBranchStageEvidenceRef(runRelativeArtifactPath)) {
559
+ try {
560
+ return await readFile(getBranchStageEvidencePathFromRef(projectRoot, runRelativeArtifactPath), 'utf8');
561
+ } catch {
562
+ return await readArtifact(projectRoot, runId, toEvidencePayloadFileName(runRelativeArtifactPath));
563
+ }
564
+ }
565
+ return await readArtifact(projectRoot, runId, toEvidencePayloadFileName(runRelativeArtifactPath));
566
+ } catch {
567
+ return '';
568
+ }
569
+ }
570
+
571
+ function artifactPathForAgent(state: RunState, taskId: string, agent: string): string | null {
572
+ const delegation = Object.values(state.delegations).find((candidate) => candidate.task === taskId && candidate.agent === agent && candidate.status === 'COMPLETED');
573
+ if (delegation) {
574
+ return delegation.expectedArtifact;
575
+ }
576
+ const artifact = state.artifacts.find((candidate) => candidate.task === taskId && candidate.agent === agent);
577
+ return artifact?.path ?? null;
578
+ }
579
+
580
+ function agentFromArtifactPath(artifactPath: string): string {
581
+ const kind = artifactKind(artifactPath);
582
+ if (kind === 'implement') {
583
+ return 'implementer';
584
+ }
585
+ if (kind === 'review' || kind === 'validation' || kind === 'debug') {
586
+ return kind === 'debug' ? 'debugger' : kind === 'review' ? 'reviewer' : 'validator';
587
+ }
588
+ if (kind === 'gap-report') {
589
+ return 'runtime';
590
+ }
591
+ return 'unknown';
592
+ }
593
+
594
+ function executedCommandsFromLedger(entries: InvocationLedgerEntry[]): string[] {
595
+ return [...new Set(entries
596
+ .filter((entry) => entry.kind === 'command' && entry.status !== 'declared')
597
+ .map((entry) => entry.ref))];
598
+ }
599
+
600
+ function sourceLocationEvidence(source: SddTask['source']): string {
601
+ return `${source.filePath}:${source.lineStart}-${source.lineEnd}`;
602
+ }
603
+
604
+ function ledgerMaterialRefs(entries: InvocationLedgerEntry[]): Set<string> {
605
+ const refs = new Set<string>();
606
+ for (const entry of entries) {
607
+ if (entry.kind === 'material') {
608
+ refs.add(entry.ref);
609
+ }
610
+ for (const ref of entry.materialRefs) {
611
+ refs.add(ref);
612
+ }
613
+ }
614
+ return refs;
615
+ }
616
+
617
+ function hashDocumentContent(raw: string): string {
618
+ return createHash('sha256').update(raw.replace(/\r\n/g, '\n'), 'utf8').digest('hex');
619
+ }