sdd-agent-platform 0.4.1 → 0.4.2

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 (722) hide show
  1. package/README.md +30 -28
  2. package/node_modules/@sdd-agent-platform/core/dist/ai-tools.js +67 -69
  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 +64 -9
  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 +0 -1
  7. package/node_modules/@sdd-agent-platform/core/dist/artifacts/sdd-evidence.js.map +1 -1
  8. package/node_modules/@sdd-agent-platform/core/dist/artifacts/sdd-result.js +26 -17
  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 +3 -0
  11. package/node_modules/@sdd-agent-platform/core/dist/config/init-project.js +12 -9
  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 +3 -1
  14. package/node_modules/@sdd-agent-platform/core/dist/config/project-config.js +7 -3
  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 +4 -4
  17. package/node_modules/@sdd-agent-platform/core/dist/config/starter-documents.js +12 -25
  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 +1 -7
  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 +26 -8
  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 +2 -1
  28. package/node_modules/@sdd-agent-platform/core/dist/contracts.js +1 -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 +3 -0
  31. package/node_modules/@sdd-agent-platform/core/dist/delegation/validation.d.ts +3 -0
  32. package/node_modules/@sdd-agent-platform/core/dist/delegation/validation.js +7 -4
  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 +1 -1
  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 +0 -1
  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 +0 -24
  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 +178 -58
  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.js +14 -7
  49. package/node_modules/@sdd-agent-platform/core/dist/evidence/lookup.js.map +1 -1
  50. package/node_modules/@sdd-agent-platform/core/dist/evidence-runtime/contracts.d.ts +0 -1
  51. package/node_modules/@sdd-agent-platform/core/dist/execution/background-executor.js +4 -4
  52. package/node_modules/@sdd-agent-platform/core/dist/execution/background-executor.js.map +1 -1
  53. package/node_modules/@sdd-agent-platform/core/dist/execution/foreground-subagents.js +3 -3
  54. package/node_modules/@sdd-agent-platform/core/dist/execution/foreground-subagents.js.map +1 -1
  55. package/node_modules/@sdd-agent-platform/core/dist/execution/host-invocation.js +5 -4
  56. package/node_modules/@sdd-agent-platform/core/dist/execution/host-invocation.js.map +1 -1
  57. package/node_modules/@sdd-agent-platform/core/dist/execution/resident-worker.js +3 -2
  58. package/node_modules/@sdd-agent-platform/core/dist/execution/resident-worker.js.map +1 -1
  59. package/node_modules/@sdd-agent-platform/core/dist/execution/stage-team-runtime.js +2 -2
  60. package/node_modules/@sdd-agent-platform/core/dist/execution/stage-team-runtime.js.map +1 -1
  61. package/node_modules/@sdd-agent-platform/core/dist/governance/policy.d.ts +1 -1
  62. package/node_modules/@sdd-agent-platform/core/dist/governance/policy.js +1 -1
  63. package/node_modules/@sdd-agent-platform/core/dist/governance/policy.js.map +1 -1
  64. package/node_modules/@sdd-agent-platform/core/dist/instructions.d.ts +1 -1
  65. package/node_modules/@sdd-agent-platform/core/dist/instructions.js +54 -61
  66. package/node_modules/@sdd-agent-platform/core/dist/instructions.js.map +1 -1
  67. package/node_modules/@sdd-agent-platform/core/dist/lifecycle/decision-gate.js +1 -1
  68. package/node_modules/@sdd-agent-platform/core/dist/lifecycle/decision-gate.js.map +1 -1
  69. package/node_modules/@sdd-agent-platform/core/dist/lifecycle/ship.d.ts +1 -0
  70. package/node_modules/@sdd-agent-platform/core/dist/lifecycle/ship.js +24 -8
  71. package/node_modules/@sdd-agent-platform/core/dist/lifecycle/ship.js.map +1 -1
  72. package/node_modules/@sdd-agent-platform/core/dist/orchestration/contracts.d.ts +1 -1
  73. package/node_modules/@sdd-agent-platform/core/dist/orchestration/runtime.d.ts +12 -2
  74. package/node_modules/@sdd-agent-platform/core/dist/orchestration/runtime.js +62 -21
  75. package/node_modules/@sdd-agent-platform/core/dist/orchestration/runtime.js.map +1 -1
  76. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-capability-catalog.d.ts +5 -2
  77. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-capability-catalog.js +69 -27
  78. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-capability-catalog.js.map +1 -1
  79. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-registry.js +15 -15
  80. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-registry.js.map +1 -1
  81. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-runtime-static.js +1 -1
  82. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-runtime-static.js.map +1 -1
  83. package/node_modules/@sdd-agent-platform/core/dist/registries/capability-sources.js +1 -1
  84. package/node_modules/@sdd-agent-platform/core/dist/registries/command-team-runtime.d.ts +1 -1
  85. package/node_modules/@sdd-agent-platform/core/dist/registries/command-team-runtime.js +9 -9
  86. package/node_modules/@sdd-agent-platform/core/dist/registries/command-team-runtime.js.map +1 -1
  87. package/node_modules/@sdd-agent-platform/core/dist/registries/eval-learning-context.js +4 -4
  88. package/node_modules/@sdd-agent-platform/core/dist/registries/eval-learning-context.js.map +1 -1
  89. package/node_modules/@sdd-agent-platform/core/dist/registries/query-status.js +2 -2
  90. package/node_modules/@sdd-agent-platform/core/dist/registries/query-status.js.map +1 -1
  91. package/node_modules/@sdd-agent-platform/core/dist/registries/tool-capabilities.js +3 -3
  92. package/node_modules/@sdd-agent-platform/core/dist/registries/tool-capabilities.js.map +1 -1
  93. package/node_modules/@sdd-agent-platform/core/dist/registries/tool-plugins.js +2 -2
  94. package/node_modules/@sdd-agent-platform/core/dist/registries/tool-plugins.js.map +1 -1
  95. package/node_modules/@sdd-agent-platform/core/dist/registries/worker-adapters.js +11 -11
  96. package/node_modules/@sdd-agent-platform/core/dist/registries/worker-adapters.js.map +1 -1
  97. package/node_modules/@sdd-agent-platform/core/dist/registries/workflow-gates.js +12 -12
  98. package/node_modules/@sdd-agent-platform/core/dist/registries/workflow-gates.js.map +1 -1
  99. package/node_modules/@sdd-agent-platform/core/dist/risk/contracts.d.ts +2 -2
  100. package/node_modules/@sdd-agent-platform/core/dist/risk/kernel.js +4 -4
  101. package/node_modules/@sdd-agent-platform/core/dist/risk/kernel.js.map +1 -1
  102. package/node_modules/@sdd-agent-platform/core/dist/risk/legacy-adapters.js +4 -7
  103. package/node_modules/@sdd-agent-platform/core/dist/risk/legacy-adapters.js.map +1 -1
  104. package/node_modules/@sdd-agent-platform/core/dist/risk/workflow-gates.d.ts +2 -2
  105. package/node_modules/@sdd-agent-platform/core/dist/risk/workflow-gates.js +19 -17
  106. package/node_modules/@sdd-agent-platform/core/dist/risk/workflow-gates.js.map +1 -1
  107. package/node_modules/@sdd-agent-platform/core/dist/router/agent-runtime-config.js +1 -1
  108. package/node_modules/@sdd-agent-platform/core/dist/router/agent-runtime-config.js.map +1 -1
  109. package/node_modules/@sdd-agent-platform/core/dist/router/agent-runtime.d.ts +2 -0
  110. package/node_modules/@sdd-agent-platform/core/dist/router/route-projection.js +1 -1
  111. package/node_modules/@sdd-agent-platform/core/dist/router/route-projection.js.map +1 -1
  112. package/node_modules/@sdd-agent-platform/core/dist/router/routing.js +45 -15
  113. package/node_modules/@sdd-agent-platform/core/dist/router/routing.js.map +1 -1
  114. package/node_modules/@sdd-agent-platform/core/dist/router/runtime-import.d.ts +28 -0
  115. package/node_modules/@sdd-agent-platform/core/dist/router/runtime-import.js +373 -0
  116. package/node_modules/@sdd-agent-platform/core/dist/router/runtime-import.js.map +1 -0
  117. package/node_modules/@sdd-agent-platform/core/dist/router/runtime-validation.js +2 -2
  118. package/node_modules/@sdd-agent-platform/core/dist/router/runtime-validation.js.map +1 -1
  119. package/node_modules/@sdd-agent-platform/core/dist/router/stage-route-binding.d.ts +37 -0
  120. package/node_modules/@sdd-agent-platform/core/dist/router/stage-route-binding.js +235 -0
  121. package/node_modules/@sdd-agent-platform/core/dist/router/stage-route-binding.js.map +1 -0
  122. package/node_modules/@sdd-agent-platform/core/dist/router.d.ts +2 -0
  123. package/node_modules/@sdd-agent-platform/core/dist/router.js +2 -0
  124. package/node_modules/@sdd-agent-platform/core/dist/router.js.map +1 -1
  125. package/node_modules/@sdd-agent-platform/core/dist/run-state/artifacts.d.ts +16 -0
  126. package/node_modules/@sdd-agent-platform/core/dist/run-state/artifacts.js +126 -9
  127. package/node_modules/@sdd-agent-platform/core/dist/run-state/artifacts.js.map +1 -1
  128. package/node_modules/@sdd-agent-platform/core/dist/run-state/inspect-run.d.ts +0 -2
  129. package/node_modules/@sdd-agent-platform/core/dist/run-state/inspect-run.js +7 -5
  130. package/node_modules/@sdd-agent-platform/core/dist/run-state/inspect-run.js.map +1 -1
  131. package/node_modules/@sdd-agent-platform/core/dist/run-state/model.d.ts +28 -8
  132. package/node_modules/@sdd-agent-platform/core/dist/run-state/run-index.d.ts +0 -2
  133. package/node_modules/@sdd-agent-platform/core/dist/run-state/run-index.js +1 -3
  134. package/node_modules/@sdd-agent-platform/core/dist/run-state/run-index.js.map +1 -1
  135. package/node_modules/@sdd-agent-platform/core/dist/run-state/run-state.js +37 -27
  136. package/node_modules/@sdd-agent-platform/core/dist/run-state/run-state.js.map +1 -1
  137. package/node_modules/@sdd-agent-platform/core/dist/run-state/task-evidence.d.ts +5 -2
  138. package/node_modules/@sdd-agent-platform/core/dist/run-state/task-evidence.js +53 -14
  139. package/node_modules/@sdd-agent-platform/core/dist/run-state/task-evidence.js.map +1 -1
  140. package/node_modules/@sdd-agent-platform/core/dist/run-state/timing.d.ts +8 -0
  141. package/node_modules/@sdd-agent-platform/core/dist/run-state/timing.js +131 -0
  142. package/node_modules/@sdd-agent-platform/core/dist/run-state/timing.js.map +1 -0
  143. package/node_modules/@sdd-agent-platform/core/dist/run-state.d.ts +1 -0
  144. package/node_modules/@sdd-agent-platform/core/dist/run-state.js +1 -0
  145. package/node_modules/@sdd-agent-platform/core/dist/run-state.js.map +1 -1
  146. package/node_modules/@sdd-agent-platform/core/dist/runtime-analysis/build.js +0 -3
  147. package/node_modules/@sdd-agent-platform/core/dist/runtime-analysis/build.js.map +1 -1
  148. package/node_modules/@sdd-agent-platform/core/dist/runtime-analysis/findings.js +5 -44
  149. package/node_modules/@sdd-agent-platform/core/dist/runtime-analysis/findings.js.map +1 -1
  150. package/node_modules/@sdd-agent-platform/core/dist/runtime-analysis/model.d.ts +1 -17
  151. package/node_modules/@sdd-agent-platform/core/dist/runtime-paths.d.ts +10 -0
  152. package/node_modules/@sdd-agent-platform/core/dist/runtime-paths.js +65 -0
  153. package/node_modules/@sdd-agent-platform/core/dist/runtime-paths.js.map +1 -1
  154. package/node_modules/@sdd-agent-platform/core/dist/runtime-projection-p0.d.ts +64 -0
  155. package/node_modules/@sdd-agent-platform/core/dist/runtime-projection-p0.js +200 -0
  156. package/node_modules/@sdd-agent-platform/core/dist/runtime-projection-p0.js.map +1 -0
  157. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/document-hashes.d.ts +2 -0
  158. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/document-hashes.js +97 -10
  159. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/document-hashes.js.map +1 -1
  160. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/run-binding.d.ts +1 -1
  161. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/run-binding.js +8 -6
  162. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/run-binding.js.map +1 -1
  163. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/task-parser.d.ts +1 -0
  164. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/task-parser.js +55 -34
  165. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/task-parser.js.map +1 -1
  166. package/node_modules/@sdd-agent-platform/core/dist/stage-artifacts.d.ts +55 -0
  167. package/node_modules/@sdd-agent-platform/core/dist/stage-artifacts.js +322 -0
  168. package/node_modules/@sdd-agent-platform/core/dist/stage-artifacts.js.map +1 -0
  169. package/node_modules/@sdd-agent-platform/core/dist/stage-collaboration-contracts.d.ts +55 -0
  170. package/node_modules/@sdd-agent-platform/core/dist/stage-collaboration-contracts.js +241 -0
  171. package/node_modules/@sdd-agent-platform/core/dist/stage-collaboration-contracts.js.map +1 -0
  172. package/node_modules/@sdd-agent-platform/core/dist/stage-collaboration.d.ts +888 -0
  173. package/node_modules/@sdd-agent-platform/core/dist/stage-collaboration.js +3870 -0
  174. package/node_modules/@sdd-agent-platform/core/dist/stage-collaboration.js.map +1 -0
  175. package/node_modules/@sdd-agent-platform/core/dist/stage-runtime/runtime.js +8 -1
  176. package/node_modules/@sdd-agent-platform/core/dist/stage-runtime/runtime.js.map +1 -1
  177. package/node_modules/@sdd-agent-platform/core/dist/status/project-status.d.ts +44 -1
  178. package/node_modules/@sdd-agent-platform/core/dist/status/project-status.js +170 -23
  179. package/node_modules/@sdd-agent-platform/core/dist/status/project-status.js.map +1 -1
  180. package/node_modules/@sdd-agent-platform/core/dist/storage/runtime-store.d.ts +170 -18
  181. package/node_modules/@sdd-agent-platform/core/dist/storage/runtime-store.js +544 -32
  182. package/node_modules/@sdd-agent-platform/core/dist/storage/runtime-store.js.map +1 -1
  183. package/node_modules/@sdd-agent-platform/core/dist/subagents/contracts.d.ts +1 -1
  184. package/node_modules/@sdd-agent-platform/core/dist/subagents/runtime.js +7 -7
  185. package/node_modules/@sdd-agent-platform/core/dist/subagents/runtime.js.map +1 -1
  186. package/node_modules/@sdd-agent-platform/core/dist/test-support/fixtures.js +1 -1
  187. package/node_modules/@sdd-agent-platform/core/dist/test-support/run-state.d.ts +1 -1
  188. package/node_modules/@sdd-agent-platform/core/dist/test-support/run-state.js +8 -23
  189. package/node_modules/@sdd-agent-platform/core/dist/test-support/run-state.js.map +1 -1
  190. package/node_modules/@sdd-agent-platform/core/dist/truth-reconciliation.d.ts +44 -0
  191. package/node_modules/@sdd-agent-platform/core/dist/truth-reconciliation.js +138 -0
  192. package/node_modules/@sdd-agent-platform/core/dist/truth-reconciliation.js.map +1 -0
  193. package/node_modules/@sdd-agent-platform/core/dist/tsconfig.tsbuildinfo +1 -1
  194. package/node_modules/@sdd-agent-platform/core/dist/verification/goal-verify.d.ts +0 -1
  195. package/node_modules/@sdd-agent-platform/core/dist/verification/goal-verify.js +28 -53
  196. package/node_modules/@sdd-agent-platform/core/dist/verification/goal-verify.js.map +1 -1
  197. package/node_modules/@sdd-agent-platform/core/dist/verification/rendering.d.ts +0 -2
  198. package/node_modules/@sdd-agent-platform/core/dist/verification/rendering.js +10 -50
  199. package/node_modules/@sdd-agent-platform/core/dist/verification/rendering.js.map +1 -1
  200. package/node_modules/@sdd-agent-platform/core/dist/verification/single-task-loop.d.ts +0 -1
  201. package/node_modules/@sdd-agent-platform/core/dist/verification/single-task-loop.js +159 -150
  202. package/node_modules/@sdd-agent-platform/core/dist/verification/single-task-loop.js.map +1 -1
  203. package/node_modules/@sdd-agent-platform/core/dist/verification/test-runtime.d.ts +12 -2
  204. package/node_modules/@sdd-agent-platform/core/dist/verification/test-runtime.js +238 -103
  205. package/node_modules/@sdd-agent-platform/core/dist/verification/test-runtime.js.map +1 -1
  206. package/node_modules/@sdd-agent-platform/core/dist/verification/validation-cache.d.ts +26 -0
  207. package/node_modules/@sdd-agent-platform/core/dist/verification/validation-cache.js +73 -0
  208. package/node_modules/@sdd-agent-platform/core/dist/verification/validation-cache.js.map +1 -0
  209. package/node_modules/@sdd-agent-platform/core/dist/verification/validation-wave.d.ts +18 -0
  210. package/node_modules/@sdd-agent-platform/core/dist/verification/validation-wave.js +27 -5
  211. package/node_modules/@sdd-agent-platform/core/dist/verification/validation-wave.js.map +1 -1
  212. package/node_modules/@sdd-agent-platform/core/dist/verification/verify-contract.d.ts +1 -1
  213. package/node_modules/@sdd-agent-platform/core/dist/verification/verify-contract.js +9 -32
  214. package/node_modules/@sdd-agent-platform/core/dist/verification/verify-contract.js.map +1 -1
  215. package/node_modules/@sdd-agent-platform/core/dist/work-units/contracts.d.ts +1 -1
  216. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/evidence-packet.js +228 -15
  217. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/evidence-packet.js.map +1 -1
  218. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/hard-checks.js +49 -15
  219. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/hard-checks.js.map +1 -1
  220. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/policy.js +42 -6
  221. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/policy.js.map +1 -1
  222. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/types.d.ts +4 -5
  223. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/affected-file-conflicts.d.ts +0 -1
  224. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/affected-file-conflicts.js +1 -2
  225. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/affected-file-conflicts.js.map +1 -1
  226. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/dependencies.js +1 -1
  227. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/latest-eligible-run.d.ts +0 -1
  228. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/latest-eligible-run.js +72 -6
  229. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/latest-eligible-run.js.map +1 -1
  230. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/migration-recovery.d.ts +40 -0
  231. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/migration-recovery.js +110 -0
  232. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/migration-recovery.js.map +1 -0
  233. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/repair-contract.d.ts +12 -0
  234. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/repair-contract.js +63 -0
  235. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/repair-contract.js.map +1 -0
  236. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/resolve-task-run.d.ts +21 -0
  237. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/resolve-task-run.js +95 -0
  238. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/resolve-task-run.js.map +1 -0
  239. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/resolve.d.ts +55 -5
  240. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/resolve.js +538 -34
  241. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/resolve.js.map +1 -1
  242. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/runtime-projections.d.ts +228 -0
  243. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/runtime-projections.js +452 -0
  244. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/runtime-projections.js.map +1 -0
  245. package/node_modules/@sdd-agent-platform/core/package.json +3 -3
  246. package/node_modules/@sdd-agent-platform/core/src/ai-tools.test.ts +49 -1
  247. package/node_modules/@sdd-agent-platform/core/src/ai-tools.ts +67 -69
  248. package/node_modules/@sdd-agent-platform/core/src/artifacts/ingestion.test.ts +38 -0
  249. package/node_modules/@sdd-agent-platform/core/src/artifacts/ingestion.ts +65 -9
  250. package/node_modules/@sdd-agent-platform/core/src/artifacts/sdd-evidence.ts +0 -1
  251. package/node_modules/@sdd-agent-platform/core/src/artifacts/sdd-result.test.ts +2 -2
  252. package/node_modules/@sdd-agent-platform/core/src/artifacts/sdd-result.ts +26 -17
  253. package/node_modules/@sdd-agent-platform/core/src/config/init-project.test.ts +43 -31
  254. package/node_modules/@sdd-agent-platform/core/src/config/init-project.ts +14 -11
  255. package/node_modules/@sdd-agent-platform/core/src/config/project-config.ts +10 -4
  256. package/node_modules/@sdd-agent-platform/core/src/config/starter-documents.ts +12 -25
  257. package/node_modules/@sdd-agent-platform/core/src/context/build-package.ts +2 -8
  258. package/node_modules/@sdd-agent-platform/core/src/context/context-build.test.ts +3 -2
  259. package/node_modules/@sdd-agent-platform/core/src/context/evidence-summary.ts +27 -8
  260. package/node_modules/@sdd-agent-platform/core/src/context/log-worker.ts +2 -2
  261. package/node_modules/@sdd-agent-platform/core/src/context-offload/contracts.ts +1 -1
  262. package/node_modules/@sdd-agent-platform/core/src/contracts.ts +2 -1
  263. package/node_modules/@sdd-agent-platform/core/src/delegation/model.ts +3 -0
  264. package/node_modules/@sdd-agent-platform/core/src/delegation/validation.ts +8 -5
  265. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/document-chain.ts +1 -1
  266. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/project.ts +8 -8
  267. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/registries.ts +0 -1
  268. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/run-evidence.ts +4 -4
  269. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/run-trust.ts +0 -21
  270. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/runtime-contracts.ts +1 -1
  271. package/node_modules/@sdd-agent-platform/core/src/doctor/doctor.test.ts +143 -45
  272. package/node_modules/@sdd-agent-platform/core/src/doctor/doctor.ts +193 -58
  273. package/node_modules/@sdd-agent-platform/core/src/evidence/lookup.ts +15 -7
  274. package/node_modules/@sdd-agent-platform/core/src/evidence-runtime/contracts.ts +0 -1
  275. package/node_modules/@sdd-agent-platform/core/src/execution/background-executor.test.ts +50 -2
  276. package/node_modules/@sdd-agent-platform/core/src/execution/background-executor.ts +4 -4
  277. package/node_modules/@sdd-agent-platform/core/src/execution/foreground-subagents.test.ts +11 -2
  278. package/node_modules/@sdd-agent-platform/core/src/execution/foreground-subagents.ts +3 -3
  279. package/node_modules/@sdd-agent-platform/core/src/execution/host-invocation.ts +5 -4
  280. package/node_modules/@sdd-agent-platform/core/src/execution/resident-worker.test.ts +12 -1
  281. package/node_modules/@sdd-agent-platform/core/src/execution/resident-worker.ts +3 -2
  282. package/node_modules/@sdd-agent-platform/core/src/execution/stage-team-runtime.test.ts +1 -1
  283. package/node_modules/@sdd-agent-platform/core/src/execution/stage-team-runtime.ts +2 -2
  284. package/node_modules/@sdd-agent-platform/core/src/execution/wave-executor.test.ts +10 -0
  285. package/node_modules/@sdd-agent-platform/core/src/governance/policy.test.ts +8 -0
  286. package/node_modules/@sdd-agent-platform/core/src/governance/policy.ts +2 -2
  287. package/node_modules/@sdd-agent-platform/core/src/instructions.test.ts +33 -18
  288. package/node_modules/@sdd-agent-platform/core/src/instructions.ts +55 -62
  289. package/node_modules/@sdd-agent-platform/core/src/lifecycle/decision-gate.test.ts +1 -1
  290. package/node_modules/@sdd-agent-platform/core/src/lifecycle/decision-gate.ts +1 -1
  291. package/node_modules/@sdd-agent-platform/core/src/lifecycle/ship.test.ts +47 -0
  292. package/node_modules/@sdd-agent-platform/core/src/lifecycle/ship.ts +25 -8
  293. package/node_modules/@sdd-agent-platform/core/src/orchestration/contracts.ts +1 -1
  294. package/node_modules/@sdd-agent-platform/core/src/orchestration/runtime.ts +74 -22
  295. package/node_modules/@sdd-agent-platform/core/src/phase8-contracts.test.ts +2 -3
  296. package/node_modules/@sdd-agent-platform/core/src/phase8-risk-kernel.test.ts +3 -3
  297. package/node_modules/@sdd-agent-platform/core/src/registries/agent-capability-catalog.ts +82 -35
  298. package/node_modules/@sdd-agent-platform/core/src/registries/agent-registry.ts +15 -15
  299. package/node_modules/@sdd-agent-platform/core/src/registries/agent-runtime-static.ts +1 -1
  300. package/node_modules/@sdd-agent-platform/core/src/registries/capability-sources.ts +1 -1
  301. package/node_modules/@sdd-agent-platform/core/src/registries/command-team-runtime.ts +10 -10
  302. package/node_modules/@sdd-agent-platform/core/src/registries/eval-learning-context.ts +4 -4
  303. package/node_modules/@sdd-agent-platform/core/src/registries/query-status.ts +2 -2
  304. package/node_modules/@sdd-agent-platform/core/src/registries/registries.test.ts +18 -2
  305. package/node_modules/@sdd-agent-platform/core/src/registries/tool-capabilities.ts +3 -3
  306. package/node_modules/@sdd-agent-platform/core/src/registries/tool-plugins.ts +2 -2
  307. package/node_modules/@sdd-agent-platform/core/src/registries/worker-adapters.ts +11 -11
  308. package/node_modules/@sdd-agent-platform/core/src/registries/workflow-gates.ts +12 -12
  309. package/node_modules/@sdd-agent-platform/core/src/risk/contracts.ts +2 -2
  310. package/node_modules/@sdd-agent-platform/core/src/risk/kernel.ts +4 -4
  311. package/node_modules/@sdd-agent-platform/core/src/risk/legacy-adapters.ts +4 -7
  312. package/node_modules/@sdd-agent-platform/core/src/risk/workflow-gates.ts +20 -18
  313. package/node_modules/@sdd-agent-platform/core/src/router/agent-runtime-config.ts +1 -1
  314. package/node_modules/@sdd-agent-platform/core/src/router/agent-runtime.ts +2 -0
  315. package/node_modules/@sdd-agent-platform/core/src/router/route-projection.ts +1 -1
  316. package/node_modules/@sdd-agent-platform/core/src/router/route-sdd-task.test.ts +241 -4
  317. package/node_modules/@sdd-agent-platform/core/src/router/routing.ts +47 -15
  318. package/node_modules/@sdd-agent-platform/core/src/router/runtime-import.ts +453 -0
  319. package/node_modules/@sdd-agent-platform/core/src/router/runtime-validation.ts +2 -2
  320. package/node_modules/@sdd-agent-platform/core/src/router/stage-route-binding.ts +279 -0
  321. package/node_modules/@sdd-agent-platform/core/src/router.ts +2 -0
  322. package/node_modules/@sdd-agent-platform/core/src/run-state/artifacts.ts +132 -10
  323. package/node_modules/@sdd-agent-platform/core/src/run-state/inspect-run.ts +7 -7
  324. package/node_modules/@sdd-agent-platform/core/src/run-state/model.ts +31 -8
  325. package/node_modules/@sdd-agent-platform/core/src/run-state/run-index.ts +1 -5
  326. package/node_modules/@sdd-agent-platform/core/src/run-state/run-state.test.ts +50 -2
  327. package/node_modules/@sdd-agent-platform/core/src/run-state/run-state.ts +39 -29
  328. package/node_modules/@sdd-agent-platform/core/src/run-state/task-evidence.ts +62 -16
  329. package/node_modules/@sdd-agent-platform/core/src/run-state/timing.ts +146 -0
  330. package/node_modules/@sdd-agent-platform/core/src/run-state.ts +1 -0
  331. package/node_modules/@sdd-agent-platform/core/src/runtime-analysis/build.ts +0 -3
  332. package/node_modules/@sdd-agent-platform/core/src/runtime-analysis/findings.ts +6 -46
  333. package/node_modules/@sdd-agent-platform/core/src/runtime-analysis/model.ts +1 -13
  334. package/node_modules/@sdd-agent-platform/core/src/runtime-analysis.test.ts +0 -2
  335. package/node_modules/@sdd-agent-platform/core/src/runtime-paths.ts +77 -0
  336. package/node_modules/@sdd-agent-platform/core/src/runtime-projection-p0.test.ts +96 -0
  337. package/node_modules/@sdd-agent-platform/core/src/runtime-projection-p0.ts +292 -0
  338. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/document-hashes.ts +109 -10
  339. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/run-binding.ts +8 -6
  340. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/task-parser.test.ts +123 -1
  341. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/task-parser.ts +58 -43
  342. package/node_modules/@sdd-agent-platform/core/src/stage-artifacts.ts +450 -0
  343. package/node_modules/@sdd-agent-platform/core/src/stage-collaboration-contracts.ts +322 -0
  344. package/node_modules/@sdd-agent-platform/core/src/stage-collaboration.test.ts +2903 -0
  345. package/node_modules/@sdd-agent-platform/core/src/stage-collaboration.ts +5831 -0
  346. package/node_modules/@sdd-agent-platform/core/src/stage-runtime/runtime.test.ts +1 -1
  347. package/node_modules/@sdd-agent-platform/core/src/stage-runtime/runtime.ts +9 -1
  348. package/node_modules/@sdd-agent-platform/core/src/status/project-status.test.ts +239 -16
  349. package/node_modules/@sdd-agent-platform/core/src/status/project-status.ts +249 -23
  350. package/node_modules/@sdd-agent-platform/core/src/storage/runtime-store.test.ts +196 -4
  351. package/node_modules/@sdd-agent-platform/core/src/storage/runtime-store.ts +860 -54
  352. package/node_modules/@sdd-agent-platform/core/src/subagents/contracts.ts +1 -1
  353. package/node_modules/@sdd-agent-platform/core/src/subagents/runtime.test.ts +3 -3
  354. package/node_modules/@sdd-agent-platform/core/src/subagents/runtime.ts +7 -7
  355. package/node_modules/@sdd-agent-platform/core/src/test-support/fixtures.ts +1 -1
  356. package/node_modules/@sdd-agent-platform/core/src/test-support/run-state.ts +9 -23
  357. package/node_modules/@sdd-agent-platform/core/src/truth-reconciliation.test.ts +72 -0
  358. package/node_modules/@sdd-agent-platform/core/src/truth-reconciliation.ts +177 -0
  359. package/node_modules/@sdd-agent-platform/core/src/verification/goal-verify.test.ts +13 -87
  360. package/node_modules/@sdd-agent-platform/core/src/verification/goal-verify.ts +27 -56
  361. package/node_modules/@sdd-agent-platform/core/src/verification/rendering.ts +10 -54
  362. package/node_modules/@sdd-agent-platform/core/src/verification/review-gate.test.ts +8 -1
  363. package/node_modules/@sdd-agent-platform/core/src/verification/single-task-loop.test.ts +93 -79
  364. package/node_modules/@sdd-agent-platform/core/src/verification/single-task-loop.ts +166 -154
  365. package/node_modules/@sdd-agent-platform/core/src/verification/test-runtime.test.ts +100 -47
  366. package/node_modules/@sdd-agent-platform/core/src/verification/test-runtime.ts +265 -107
  367. package/node_modules/@sdd-agent-platform/core/src/verification/validation-cache.ts +106 -0
  368. package/node_modules/@sdd-agent-platform/core/src/verification/validation-wave.test.ts +47 -5
  369. package/node_modules/@sdd-agent-platform/core/src/verification/validation-wave.ts +48 -5
  370. package/node_modules/@sdd-agent-platform/core/src/verification/verify-contract.test.ts +15 -31
  371. package/node_modules/@sdd-agent-platform/core/src/verification/verify-contract.ts +9 -33
  372. package/node_modules/@sdd-agent-platform/core/src/work-units/contracts.ts +1 -1
  373. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/evidence-packet.ts +246 -17
  374. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/hard-checks.test.ts +339 -3
  375. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/hard-checks.ts +53 -14
  376. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/policy.test.ts +45 -8
  377. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/policy.ts +45 -6
  378. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/types.ts +6 -5
  379. package/node_modules/@sdd-agent-platform/core/src/workflow-state/affected-file-conflicts.ts +1 -3
  380. package/node_modules/@sdd-agent-platform/core/src/workflow-state/dependencies.ts +1 -1
  381. package/node_modules/@sdd-agent-platform/core/src/workflow-state/latest-eligible-run.ts +75 -7
  382. package/node_modules/@sdd-agent-platform/core/src/workflow-state/migration-recovery.ts +158 -0
  383. package/node_modules/@sdd-agent-platform/core/src/workflow-state/repair-contract.ts +77 -0
  384. package/node_modules/@sdd-agent-platform/core/src/workflow-state/resolve-task-run.ts +114 -0
  385. package/node_modules/@sdd-agent-platform/core/src/workflow-state/resolve.test.ts +518 -25
  386. package/node_modules/@sdd-agent-platform/core/src/workflow-state/resolve.ts +670 -41
  387. package/node_modules/@sdd-agent-platform/core/src/workflow-state/runtime-projections.ts +712 -0
  388. package/package.json +1 -1
  389. package/packages/cli/dist/args.js +2 -2
  390. package/packages/cli/dist/args.js.map +1 -1
  391. package/packages/cli/dist/commands/ai-tools.js +13 -2
  392. package/packages/cli/dist/commands/ai-tools.js.map +1 -1
  393. package/packages/cli/dist/commands/context.js +1 -1
  394. package/packages/cli/dist/commands/context.js.map +1 -1
  395. package/packages/cli/dist/commands/execution.js +49 -1
  396. package/packages/cli/dist/commands/execution.js.map +1 -1
  397. package/packages/cli/dist/commands/governance.js +1 -1
  398. package/packages/cli/dist/commands/governance.js.map +1 -1
  399. package/packages/cli/dist/commands/init.js +6 -1
  400. package/packages/cli/dist/commands/init.js.map +1 -1
  401. package/packages/cli/dist/commands/lifecycle.js +15 -2
  402. package/packages/cli/dist/commands/lifecycle.js.map +1 -1
  403. package/packages/cli/dist/commands/registry/runtime.js +48 -2
  404. package/packages/cli/dist/commands/registry/runtime.js.map +1 -1
  405. package/packages/cli/dist/commands/run.js +52 -2
  406. package/packages/cli/dist/commands/run.js.map +1 -1
  407. package/packages/cli/dist/commands/stage-close.d.ts +6 -0
  408. package/packages/cli/dist/commands/stage-close.js +295 -0
  409. package/packages/cli/dist/commands/stage-close.js.map +1 -0
  410. package/packages/cli/dist/commands/status.js +68 -2
  411. package/packages/cli/dist/commands/status.js.map +1 -1
  412. package/packages/cli/dist/commands/test.js +180 -2
  413. package/packages/cli/dist/commands/test.js.map +1 -1
  414. package/packages/cli/dist/commands/verifies.js +7 -5
  415. package/packages/cli/dist/commands/verifies.js.map +1 -1
  416. package/packages/cli/dist/commands/verify.js +222 -26
  417. package/packages/cli/dist/commands/verify.js.map +1 -1
  418. package/packages/cli/dist/dispatch.js +4 -9
  419. package/packages/cli/dist/dispatch.js.map +1 -1
  420. package/packages/cli/dist/help.js +27 -26
  421. package/packages/cli/dist/help.js.map +1 -1
  422. package/packages/cli/dist/renderers/doctor.js +1 -1
  423. package/packages/cli/dist/renderers/doctor.js.map +1 -1
  424. package/packages/cli/dist/renderers/execution.js +1 -1
  425. package/packages/cli/dist/renderers/execution.js.map +1 -1
  426. package/packages/cli/dist/renderers/json.d.ts +1 -0
  427. package/packages/cli/dist/renderers/json.js +3 -0
  428. package/packages/cli/dist/renderers/json.js.map +1 -1
  429. package/packages/cli/dist/renderers/registry-runtime.d.ts +2 -1
  430. package/packages/cli/dist/renderers/registry-runtime.js +20 -0
  431. package/packages/cli/dist/renderers/registry-runtime.js.map +1 -1
  432. package/packages/cli/dist/renderers/router.js +1 -1
  433. package/packages/cli/dist/renderers/router.js.map +1 -1
  434. package/packages/cli/dist/renderers/workflow.d.ts +0 -4
  435. package/packages/cli/dist/renderers/workflow.js +30 -89
  436. package/packages/cli/dist/renderers/workflow.js.map +1 -1
  437. package/packages/cli/dist/skill-import-args.d.ts +10 -0
  438. package/packages/cli/dist/skill-import-args.js +47 -0
  439. package/packages/cli/dist/skill-import-args.js.map +1 -0
  440. package/packages/cli/dist/tsconfig.tsbuildinfo +1 -1
  441. package/packages/cli/package.json +2 -2
  442. package/packages/core/dist/ai-tools.js +67 -69
  443. package/packages/core/dist/ai-tools.js.map +1 -1
  444. package/packages/core/dist/artifacts/ingestion.js +64 -9
  445. package/packages/core/dist/artifacts/ingestion.js.map +1 -1
  446. package/packages/core/dist/artifacts/sdd-evidence.js +0 -1
  447. package/packages/core/dist/artifacts/sdd-evidence.js.map +1 -1
  448. package/packages/core/dist/artifacts/sdd-result.js +26 -17
  449. package/packages/core/dist/artifacts/sdd-result.js.map +1 -1
  450. package/packages/core/dist/config/init-project.d.ts +3 -0
  451. package/packages/core/dist/config/init-project.js +12 -9
  452. package/packages/core/dist/config/init-project.js.map +1 -1
  453. package/packages/core/dist/config/project-config.d.ts +3 -1
  454. package/packages/core/dist/config/project-config.js +7 -3
  455. package/packages/core/dist/config/project-config.js.map +1 -1
  456. package/packages/core/dist/config/starter-documents.d.ts +4 -4
  457. package/packages/core/dist/config/starter-documents.js +12 -25
  458. package/packages/core/dist/config/starter-documents.js.map +1 -1
  459. package/packages/core/dist/context/build-package.d.ts +1 -1
  460. package/packages/core/dist/context/build-package.js +1 -7
  461. package/packages/core/dist/context/build-package.js.map +1 -1
  462. package/packages/core/dist/context/evidence-summary.js +26 -8
  463. package/packages/core/dist/context/evidence-summary.js.map +1 -1
  464. package/packages/core/dist/context/log-worker.js +2 -2
  465. package/packages/core/dist/context/log-worker.js.map +1 -1
  466. package/packages/core/dist/context-offload/contracts.d.ts +1 -1
  467. package/packages/core/dist/contracts.d.ts +2 -1
  468. package/packages/core/dist/contracts.js +1 -0
  469. package/packages/core/dist/contracts.js.map +1 -1
  470. package/packages/core/dist/delegation/model.d.ts +3 -0
  471. package/packages/core/dist/delegation/validation.d.ts +3 -0
  472. package/packages/core/dist/delegation/validation.js +7 -4
  473. package/packages/core/dist/delegation/validation.js.map +1 -1
  474. package/packages/core/dist/doctor/checks/document-chain.js +1 -1
  475. package/packages/core/dist/doctor/checks/document-chain.js.map +1 -1
  476. package/packages/core/dist/doctor/checks/project.js +8 -8
  477. package/packages/core/dist/doctor/checks/project.js.map +1 -1
  478. package/packages/core/dist/doctor/checks/registries.js +0 -1
  479. package/packages/core/dist/doctor/checks/registries.js.map +1 -1
  480. package/packages/core/dist/doctor/checks/run-evidence.js +4 -4
  481. package/packages/core/dist/doctor/checks/run-evidence.js.map +1 -1
  482. package/packages/core/dist/doctor/checks/run-trust.js +0 -24
  483. package/packages/core/dist/doctor/checks/run-trust.js.map +1 -1
  484. package/packages/core/dist/doctor/checks/runtime-contracts.js +1 -1
  485. package/packages/core/dist/doctor/checks/runtime-contracts.js.map +1 -1
  486. package/packages/core/dist/doctor/doctor.js +178 -58
  487. package/packages/core/dist/doctor/doctor.js.map +1 -1
  488. package/packages/core/dist/evidence/lookup.js +14 -7
  489. package/packages/core/dist/evidence/lookup.js.map +1 -1
  490. package/packages/core/dist/evidence-runtime/contracts.d.ts +0 -1
  491. package/packages/core/dist/execution/background-executor.js +4 -4
  492. package/packages/core/dist/execution/background-executor.js.map +1 -1
  493. package/packages/core/dist/execution/foreground-subagents.js +3 -3
  494. package/packages/core/dist/execution/foreground-subagents.js.map +1 -1
  495. package/packages/core/dist/execution/host-invocation.js +5 -4
  496. package/packages/core/dist/execution/host-invocation.js.map +1 -1
  497. package/packages/core/dist/execution/resident-worker.js +3 -2
  498. package/packages/core/dist/execution/resident-worker.js.map +1 -1
  499. package/packages/core/dist/execution/stage-team-runtime.js +2 -2
  500. package/packages/core/dist/execution/stage-team-runtime.js.map +1 -1
  501. package/packages/core/dist/governance/policy.d.ts +1 -1
  502. package/packages/core/dist/governance/policy.js +1 -1
  503. package/packages/core/dist/governance/policy.js.map +1 -1
  504. package/packages/core/dist/instructions.d.ts +1 -1
  505. package/packages/core/dist/instructions.js +54 -61
  506. package/packages/core/dist/instructions.js.map +1 -1
  507. package/packages/core/dist/lifecycle/decision-gate.js +1 -1
  508. package/packages/core/dist/lifecycle/decision-gate.js.map +1 -1
  509. package/packages/core/dist/lifecycle/ship.d.ts +1 -0
  510. package/packages/core/dist/lifecycle/ship.js +24 -8
  511. package/packages/core/dist/lifecycle/ship.js.map +1 -1
  512. package/packages/core/dist/orchestration/contracts.d.ts +1 -1
  513. package/packages/core/dist/orchestration/runtime.d.ts +12 -2
  514. package/packages/core/dist/orchestration/runtime.js +62 -21
  515. package/packages/core/dist/orchestration/runtime.js.map +1 -1
  516. package/packages/core/dist/registries/agent-capability-catalog.d.ts +5 -2
  517. package/packages/core/dist/registries/agent-capability-catalog.js +69 -27
  518. package/packages/core/dist/registries/agent-capability-catalog.js.map +1 -1
  519. package/packages/core/dist/registries/agent-registry.js +15 -15
  520. package/packages/core/dist/registries/agent-registry.js.map +1 -1
  521. package/packages/core/dist/registries/agent-runtime-static.js +1 -1
  522. package/packages/core/dist/registries/agent-runtime-static.js.map +1 -1
  523. package/packages/core/dist/registries/capability-sources.js +1 -1
  524. package/packages/core/dist/registries/command-team-runtime.d.ts +1 -1
  525. package/packages/core/dist/registries/command-team-runtime.js +9 -9
  526. package/packages/core/dist/registries/command-team-runtime.js.map +1 -1
  527. package/packages/core/dist/registries/eval-learning-context.js +4 -4
  528. package/packages/core/dist/registries/eval-learning-context.js.map +1 -1
  529. package/packages/core/dist/registries/query-status.js +2 -2
  530. package/packages/core/dist/registries/query-status.js.map +1 -1
  531. package/packages/core/dist/registries/tool-capabilities.js +3 -3
  532. package/packages/core/dist/registries/tool-capabilities.js.map +1 -1
  533. package/packages/core/dist/registries/tool-plugins.js +2 -2
  534. package/packages/core/dist/registries/tool-plugins.js.map +1 -1
  535. package/packages/core/dist/registries/worker-adapters.js +11 -11
  536. package/packages/core/dist/registries/worker-adapters.js.map +1 -1
  537. package/packages/core/dist/registries/workflow-gates.js +12 -12
  538. package/packages/core/dist/registries/workflow-gates.js.map +1 -1
  539. package/packages/core/dist/risk/contracts.d.ts +2 -2
  540. package/packages/core/dist/risk/kernel.js +4 -4
  541. package/packages/core/dist/risk/kernel.js.map +1 -1
  542. package/packages/core/dist/risk/legacy-adapters.js +4 -7
  543. package/packages/core/dist/risk/legacy-adapters.js.map +1 -1
  544. package/packages/core/dist/risk/workflow-gates.d.ts +2 -2
  545. package/packages/core/dist/risk/workflow-gates.js +19 -17
  546. package/packages/core/dist/risk/workflow-gates.js.map +1 -1
  547. package/packages/core/dist/router/agent-runtime-config.js +1 -1
  548. package/packages/core/dist/router/agent-runtime-config.js.map +1 -1
  549. package/packages/core/dist/router/agent-runtime.d.ts +2 -0
  550. package/packages/core/dist/router/route-projection.js +1 -1
  551. package/packages/core/dist/router/route-projection.js.map +1 -1
  552. package/packages/core/dist/router/routing.js +45 -15
  553. package/packages/core/dist/router/routing.js.map +1 -1
  554. package/packages/core/dist/router/runtime-import.d.ts +28 -0
  555. package/packages/core/dist/router/runtime-import.js +373 -0
  556. package/packages/core/dist/router/runtime-import.js.map +1 -0
  557. package/packages/core/dist/router/runtime-validation.js +2 -2
  558. package/packages/core/dist/router/runtime-validation.js.map +1 -1
  559. package/packages/core/dist/router/stage-route-binding.d.ts +37 -0
  560. package/packages/core/dist/router/stage-route-binding.js +235 -0
  561. package/packages/core/dist/router/stage-route-binding.js.map +1 -0
  562. package/packages/core/dist/router.d.ts +2 -0
  563. package/packages/core/dist/router.js +2 -0
  564. package/packages/core/dist/router.js.map +1 -1
  565. package/packages/core/dist/run-state/artifacts.d.ts +16 -0
  566. package/packages/core/dist/run-state/artifacts.js +126 -9
  567. package/packages/core/dist/run-state/artifacts.js.map +1 -1
  568. package/packages/core/dist/run-state/inspect-run.d.ts +0 -2
  569. package/packages/core/dist/run-state/inspect-run.js +7 -5
  570. package/packages/core/dist/run-state/inspect-run.js.map +1 -1
  571. package/packages/core/dist/run-state/model.d.ts +28 -8
  572. package/packages/core/dist/run-state/run-index.d.ts +0 -2
  573. package/packages/core/dist/run-state/run-index.js +1 -3
  574. package/packages/core/dist/run-state/run-index.js.map +1 -1
  575. package/packages/core/dist/run-state/run-state.js +37 -27
  576. package/packages/core/dist/run-state/run-state.js.map +1 -1
  577. package/packages/core/dist/run-state/task-evidence.d.ts +5 -2
  578. package/packages/core/dist/run-state/task-evidence.js +53 -14
  579. package/packages/core/dist/run-state/task-evidence.js.map +1 -1
  580. package/packages/core/dist/run-state/timing.d.ts +8 -0
  581. package/packages/core/dist/run-state/timing.js +131 -0
  582. package/packages/core/dist/run-state/timing.js.map +1 -0
  583. package/packages/core/dist/run-state.d.ts +1 -0
  584. package/packages/core/dist/run-state.js +1 -0
  585. package/packages/core/dist/run-state.js.map +1 -1
  586. package/packages/core/dist/runtime-analysis/build.js +0 -3
  587. package/packages/core/dist/runtime-analysis/build.js.map +1 -1
  588. package/packages/core/dist/runtime-analysis/findings.js +5 -44
  589. package/packages/core/dist/runtime-analysis/findings.js.map +1 -1
  590. package/packages/core/dist/runtime-analysis/model.d.ts +1 -17
  591. package/packages/core/dist/runtime-paths.d.ts +10 -0
  592. package/packages/core/dist/runtime-paths.js +65 -0
  593. package/packages/core/dist/runtime-paths.js.map +1 -1
  594. package/packages/core/dist/runtime-projection-p0.d.ts +64 -0
  595. package/packages/core/dist/runtime-projection-p0.js +200 -0
  596. package/packages/core/dist/runtime-projection-p0.js.map +1 -0
  597. package/packages/core/dist/sdd-docs/document-hashes.d.ts +2 -0
  598. package/packages/core/dist/sdd-docs/document-hashes.js +97 -10
  599. package/packages/core/dist/sdd-docs/document-hashes.js.map +1 -1
  600. package/packages/core/dist/sdd-docs/run-binding.d.ts +1 -1
  601. package/packages/core/dist/sdd-docs/run-binding.js +8 -6
  602. package/packages/core/dist/sdd-docs/run-binding.js.map +1 -1
  603. package/packages/core/dist/sdd-docs/task-parser.d.ts +1 -0
  604. package/packages/core/dist/sdd-docs/task-parser.js +55 -34
  605. package/packages/core/dist/sdd-docs/task-parser.js.map +1 -1
  606. package/packages/core/dist/stage-artifacts.d.ts +55 -0
  607. package/packages/core/dist/stage-artifacts.js +322 -0
  608. package/packages/core/dist/stage-artifacts.js.map +1 -0
  609. package/packages/core/dist/stage-collaboration-contracts.d.ts +55 -0
  610. package/packages/core/dist/stage-collaboration-contracts.js +241 -0
  611. package/packages/core/dist/stage-collaboration-contracts.js.map +1 -0
  612. package/packages/core/dist/stage-collaboration.d.ts +888 -0
  613. package/packages/core/dist/stage-collaboration.js +3870 -0
  614. package/packages/core/dist/stage-collaboration.js.map +1 -0
  615. package/packages/core/dist/stage-runtime/runtime.js +8 -1
  616. package/packages/core/dist/stage-runtime/runtime.js.map +1 -1
  617. package/packages/core/dist/status/project-status.d.ts +44 -1
  618. package/packages/core/dist/status/project-status.js +170 -23
  619. package/packages/core/dist/status/project-status.js.map +1 -1
  620. package/packages/core/dist/storage/runtime-store.d.ts +170 -18
  621. package/packages/core/dist/storage/runtime-store.js +544 -32
  622. package/packages/core/dist/storage/runtime-store.js.map +1 -1
  623. package/packages/core/dist/subagents/contracts.d.ts +1 -1
  624. package/packages/core/dist/subagents/runtime.js +7 -7
  625. package/packages/core/dist/subagents/runtime.js.map +1 -1
  626. package/packages/core/dist/test-support/fixtures.js +1 -1
  627. package/packages/core/dist/test-support/run-state.d.ts +1 -1
  628. package/packages/core/dist/test-support/run-state.js +8 -23
  629. package/packages/core/dist/test-support/run-state.js.map +1 -1
  630. package/packages/core/dist/truth-reconciliation.d.ts +44 -0
  631. package/packages/core/dist/truth-reconciliation.js +138 -0
  632. package/packages/core/dist/truth-reconciliation.js.map +1 -0
  633. package/packages/core/dist/tsconfig.tsbuildinfo +1 -1
  634. package/packages/core/dist/verification/goal-verify.d.ts +0 -1
  635. package/packages/core/dist/verification/goal-verify.js +28 -53
  636. package/packages/core/dist/verification/goal-verify.js.map +1 -1
  637. package/packages/core/dist/verification/rendering.d.ts +0 -2
  638. package/packages/core/dist/verification/rendering.js +10 -50
  639. package/packages/core/dist/verification/rendering.js.map +1 -1
  640. package/packages/core/dist/verification/single-task-loop.d.ts +0 -1
  641. package/packages/core/dist/verification/single-task-loop.js +159 -150
  642. package/packages/core/dist/verification/single-task-loop.js.map +1 -1
  643. package/packages/core/dist/verification/test-runtime.d.ts +12 -2
  644. package/packages/core/dist/verification/test-runtime.js +238 -103
  645. package/packages/core/dist/verification/test-runtime.js.map +1 -1
  646. package/packages/core/dist/verification/validation-cache.d.ts +26 -0
  647. package/packages/core/dist/verification/validation-cache.js +73 -0
  648. package/packages/core/dist/verification/validation-cache.js.map +1 -0
  649. package/packages/core/dist/verification/validation-wave.d.ts +18 -0
  650. package/packages/core/dist/verification/validation-wave.js +27 -5
  651. package/packages/core/dist/verification/validation-wave.js.map +1 -1
  652. package/packages/core/dist/verification/verify-contract.d.ts +1 -1
  653. package/packages/core/dist/verification/verify-contract.js +9 -32
  654. package/packages/core/dist/verification/verify-contract.js.map +1 -1
  655. package/packages/core/dist/work-units/contracts.d.ts +1 -1
  656. package/packages/core/dist/workflow-gate/evidence-packet.js +228 -15
  657. package/packages/core/dist/workflow-gate/evidence-packet.js.map +1 -1
  658. package/packages/core/dist/workflow-gate/hard-checks.js +49 -15
  659. package/packages/core/dist/workflow-gate/hard-checks.js.map +1 -1
  660. package/packages/core/dist/workflow-gate/policy.js +42 -6
  661. package/packages/core/dist/workflow-gate/policy.js.map +1 -1
  662. package/packages/core/dist/workflow-gate/types.d.ts +4 -5
  663. package/packages/core/dist/workflow-state/affected-file-conflicts.d.ts +0 -1
  664. package/packages/core/dist/workflow-state/affected-file-conflicts.js +1 -2
  665. package/packages/core/dist/workflow-state/affected-file-conflicts.js.map +1 -1
  666. package/packages/core/dist/workflow-state/dependencies.js +1 -1
  667. package/packages/core/dist/workflow-state/latest-eligible-run.d.ts +0 -1
  668. package/packages/core/dist/workflow-state/latest-eligible-run.js +72 -6
  669. package/packages/core/dist/workflow-state/latest-eligible-run.js.map +1 -1
  670. package/packages/core/dist/workflow-state/migration-recovery.d.ts +40 -0
  671. package/packages/core/dist/workflow-state/migration-recovery.js +110 -0
  672. package/packages/core/dist/workflow-state/migration-recovery.js.map +1 -0
  673. package/packages/core/dist/workflow-state/repair-contract.d.ts +12 -0
  674. package/packages/core/dist/workflow-state/repair-contract.js +63 -0
  675. package/packages/core/dist/workflow-state/repair-contract.js.map +1 -0
  676. package/packages/core/dist/workflow-state/resolve-task-run.d.ts +21 -0
  677. package/packages/core/dist/workflow-state/resolve-task-run.js +95 -0
  678. package/packages/core/dist/workflow-state/resolve-task-run.js.map +1 -0
  679. package/packages/core/dist/workflow-state/resolve.d.ts +55 -5
  680. package/packages/core/dist/workflow-state/resolve.js +538 -34
  681. package/packages/core/dist/workflow-state/resolve.js.map +1 -1
  682. package/packages/core/dist/workflow-state/runtime-projections.d.ts +228 -0
  683. package/packages/core/dist/workflow-state/runtime-projections.js +452 -0
  684. package/packages/core/dist/workflow-state/runtime-projections.js.map +1 -0
  685. package/packages/core/package.json +3 -3
  686. package/node_modules/@sdd-agent-platform/core/dist/doctor/render.d.ts +0 -2
  687. package/node_modules/@sdd-agent-platform/core/dist/doctor/render.js +0 -44
  688. package/node_modules/@sdd-agent-platform/core/dist/doctor/render.js.map +0 -1
  689. package/node_modules/@sdd-agent-platform/core/dist/sync-back/apply.d.ts +0 -17
  690. package/node_modules/@sdd-agent-platform/core/dist/sync-back/apply.js +0 -243
  691. package/node_modules/@sdd-agent-platform/core/dist/sync-back/apply.js.map +0 -1
  692. package/node_modules/@sdd-agent-platform/core/dist/sync-back/inspect.d.ts +0 -110
  693. package/node_modules/@sdd-agent-platform/core/dist/sync-back/inspect.js +0 -497
  694. package/node_modules/@sdd-agent-platform/core/dist/sync-back/inspect.js.map +0 -1
  695. package/node_modules/@sdd-agent-platform/core/dist/sync-back.d.ts +0 -2
  696. package/node_modules/@sdd-agent-platform/core/dist/sync-back.js +0 -3
  697. package/node_modules/@sdd-agent-platform/core/dist/sync-back.js.map +0 -1
  698. package/node_modules/@sdd-agent-platform/core/src/sync-back/apply.ts +0 -270
  699. package/node_modules/@sdd-agent-platform/core/src/sync-back/inspect.ts +0 -655
  700. package/node_modules/@sdd-agent-platform/core/src/sync-back/sync-back.test.ts +0 -569
  701. package/node_modules/@sdd-agent-platform/core/src/sync-back.ts +0 -2
  702. package/packages/cli/dist/commands/artifact.d.ts +0 -6
  703. package/packages/cli/dist/commands/artifact.js +0 -168
  704. package/packages/cli/dist/commands/artifact.js.map +0 -1
  705. package/packages/cli/dist/commands/sync-back.d.ts +0 -6
  706. package/packages/cli/dist/commands/sync-back.js +0 -82
  707. package/packages/cli/dist/commands/sync-back.js.map +0 -1
  708. package/packages/cli/dist/renderers/artifacts.d.ts +0 -5
  709. package/packages/cli/dist/renderers/artifacts.js +0 -43
  710. package/packages/cli/dist/renderers/artifacts.js.map +0 -1
  711. package/packages/core/dist/doctor/render.d.ts +0 -2
  712. package/packages/core/dist/doctor/render.js +0 -44
  713. package/packages/core/dist/doctor/render.js.map +0 -1
  714. package/packages/core/dist/sync-back/apply.d.ts +0 -17
  715. package/packages/core/dist/sync-back/apply.js +0 -243
  716. package/packages/core/dist/sync-back/apply.js.map +0 -1
  717. package/packages/core/dist/sync-back/inspect.d.ts +0 -110
  718. package/packages/core/dist/sync-back/inspect.js +0 -497
  719. package/packages/core/dist/sync-back/inspect.js.map +0 -1
  720. package/packages/core/dist/sync-back.d.ts +0 -2
  721. package/packages/core/dist/sync-back.js +0 -3
  722. package/packages/core/dist/sync-back.js.map +0 -1
@@ -1,8 +1,21 @@
1
1
  import test from 'node:test';
2
2
  import assert from 'node:assert/strict';
3
+ import { createHash } from 'node:crypto';
4
+ import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';
5
+ import { tmpdir } from 'node:os';
6
+ import path from 'node:path';
3
7
 
4
8
  import { STAGE_TEAM_RUNTIME_CONTRACT_VERSION } from '../contracts.js';
9
+ import { initProject } from '../config/init-project.js';
10
+ import { getEvidenceAttachmentPath } from '../runtime-paths.js';
11
+ import { createRun } from '../run-state/run-state.js';
12
+ import { createRuntimeEvidenceSet, listRuntimeRepairs, recordRuntimeArtifactPayload, recordRuntimeRepair, runtimeScopedId, updateRuntimeSelectionPointer } from '../storage/runtime-store.js';
13
+ import { validTaskMarkdown, writeBranchDocs } from '../test-support/fixtures.js';
14
+ import { bindTestRunState, markTestRunReadyForShip } from '../test-support/run-state.js';
15
+ import { writeVerifyContract } from '../verification/verify-contract.js';
16
+ import { buildOpenRepairRecord } from '../workflow-state/repair-contract.js';
5
17
  import { evaluateWorkflowGateHardChecks } from './hard-checks.js';
18
+ import { buildWorkflowGateEvidencePacket, evaluateAndRecordWorkflowGateDecision } from './evidence-packet.js';
6
19
  import type { WorkflowGateEvidencePacket } from './types.js';
7
20
 
8
21
  const generatedAt = '2026-01-01T00:00:00.000Z';
@@ -63,6 +76,46 @@ test('workflow gate hard checks warn when no latest eligible run exists', () =>
63
76
  assert.equal(checks.some((check) => check.code === 'latest_eligible_missing' && check.severity === 'warning'), true);
64
77
  });
65
78
 
79
+ test('workflow gate hard checks do not require latest do run for scoped test run', () => {
80
+ const checks = evaluateWorkflowGateHardChecks(packetInput({
81
+ decisionKind: 'test',
82
+ workflowScope: { waveRunId: null, taskIds: ['T6'], runIds: ['test-run-001'], evidenceRefs: [] },
83
+ latestEligibleSelection: {
84
+ partition: 'feature',
85
+ taskId: 'T6',
86
+ selected: null,
87
+ candidates: [{
88
+ partition: 'feature',
89
+ gitBranch: 'feature',
90
+ taskId: 'T6',
91
+ runId: 'blocked-do-run',
92
+ runStatus: 'blocked',
93
+ validationStatus: 'blocked',
94
+ affectedFiles: [],
95
+ updatedAt: generatedAt,
96
+ compatibility: 'compatible',
97
+ eligibleForDefaultApply: false,
98
+ reasons: ['Run is blocked.']
99
+ }],
100
+ rejected: [{
101
+ partition: 'feature',
102
+ gitBranch: 'feature',
103
+ taskId: 'T6',
104
+ runId: 'blocked-do-run',
105
+ runStatus: 'blocked',
106
+ validationStatus: 'blocked',
107
+ affectedFiles: [],
108
+ updatedAt: generatedAt,
109
+ compatibility: 'compatible',
110
+ eligibleForDefaultApply: false,
111
+ reasons: ['Run is blocked.']
112
+ }]
113
+ }
114
+ }));
115
+
116
+ assert.equal(checks.some((check) => check.code === 'run_rejected'), false);
117
+ });
118
+
66
119
  test('workflow gate hard checks block missing and drifted artifact payloads', () => {
67
120
  const checks = evaluateWorkflowGateHardChecks(packetInput({
68
121
  artifactPayloadHealth: [
@@ -88,6 +141,58 @@ test('workflow gate hard checks block missing and drifted artifact payloads', ()
88
141
  assert.deepEqual(checks.filter((check) => check.severity === 'blocked').map((check) => check.code).sort(), ['digest_drift', 'missing_payload']);
89
142
  });
90
143
 
144
+ test('workflow gate hard checks require accepted selection pointer evidence authority', () => {
145
+ const noneChecks = evaluateWorkflowGateHardChecks(packetInput({
146
+ selectedEvidence: { source: 'none', evidenceSet: null, pointer: null, payloads: [] }
147
+ }));
148
+ const legacyChecks = evaluateWorkflowGateHardChecks(packetInput({
149
+ selectedEvidence: { source: 'legacy_active_payloads', evidenceSet: null, pointer: null, payloads: [selectedEvidencePayload('artifacts/validation-T1.md', 'active')] }
150
+ }));
151
+ const candidateChecks = evaluateWorkflowGateHardChecks(packetInput({
152
+ selectedEvidence: { source: 'candidate_payloads', evidenceSet: null, pointer: null, payloads: [selectedEvidencePayload('artifacts/validation-T1.md', 'active')] }
153
+ }));
154
+
155
+ assert.equal(noneChecks.some((check) => check.code === 'missing_evidence_selection' && check.severity === 'blocked'), true);
156
+ assert.equal(legacyChecks.some((check) => check.code === 'missing_evidence_selection' && check.refs.includes('payload-active')), true);
157
+ assert.equal(candidateChecks.some((check) => check.code === 'missing_evidence_selection' && check.refs.includes('payload-active')), true);
158
+ });
159
+
160
+ test('workflow gate hard checks reject non-consumable evidence statuses', () => {
161
+ const statuses: Array<WorkflowGateEvidencePacket['selectedEvidence']['payloads'][number]['status']> = ['partial', 'active_attempt', 'rejected', 'superseded', 'quarantined', 'stale'];
162
+ const checks = evaluateWorkflowGateHardChecks(packetInput({
163
+ selectedEvidence: selectedEvidenceSelection(statuses.map((status) => selectedEvidencePayload('artifacts/validation-T1.md', status))),
164
+ requiredArtifactRefs: ['artifacts/validation-T1.md']
165
+ }));
166
+
167
+ assert.equal(checks.filter((check) => check.code === 'non_consumable_evidence').length, statuses.length);
168
+ assert.equal(checks.some((check) => check.code === 'missing_required_artifact' && check.refs.includes('artifacts/validation-T1.md')), true);
169
+ });
170
+
171
+ test('workflow gate hard checks do not let fan-in refs satisfy selected evidence requirements', () => {
172
+ const checks = evaluateWorkflowGateHardChecks(packetInput({
173
+ fanInEvidenceSets: [{
174
+ contract: STAGE_TEAM_RUNTIME_CONTRACT_VERSION,
175
+ fanInId: 'fanin-selected-authority',
176
+ partition: 'feature',
177
+ runId: 'run-001',
178
+ taskId: 'T1',
179
+ stage: 'test',
180
+ roleResultIds: [],
181
+ durableGapIds: [],
182
+ proposalRefs: [],
183
+ advisorAssessmentIds: [],
184
+ evidenceRefs: ['artifacts/required-T1.md'],
185
+ canonicalEvidenceRefs: ['artifacts/required-T1.md'],
186
+ gateInputOnly: true,
187
+ createdAt: generatedAt,
188
+ payload: {}
189
+ }],
190
+ requiredArtifactRefs: ['artifacts/required-T1.md']
191
+ }));
192
+
193
+ assert.equal(checks.some((check) => check.code === 'missing_required_artifact' && check.refs.includes('artifacts/required-T1.md')), true);
194
+ });
195
+
91
196
  test('workflow gate hard checks block missing verify contract and runtime health failures', () => {
92
197
  const checks = evaluateWorkflowGateHardChecks(packetInput({
93
198
  runtimeHealth: { status: 'unavailable', issues: ['schema mismatch'] },
@@ -102,6 +207,239 @@ test('workflow gate hard checks block missing verify contract and runtime health
102
207
  assert.equal(checks.some((check) => check.code === 'missing_documents' && check.refs.includes('verify.md')), true);
103
208
  });
104
209
 
210
+ test('workflow gate evidence scopes dependency blockers by decision kind', async () => {
211
+ const root = await mkdtemp(path.join(tmpdir(), 'sdd-workflow-gate-scope-'));
212
+ try {
213
+ await initProject(root);
214
+ await writeBranchDocs(root, 'feature', `# Tasks\n\n${validTaskMarkdown('DEP1', []).replace('packages/core/src/index.ts', 'docs/dep1.md')}\n${validTaskMarkdown('DEP2', ['DEP1']).replaceAll('T1', 'DEP2').replace('packages/core/src/index.ts', 'docs/dep2.md')}`);
215
+
216
+ const taskPacket = await buildWorkflowGateEvidencePacket(root, {
217
+ branch: 'feature',
218
+ taskId: 'DEP1',
219
+ decisionKind: 'test'
220
+ });
221
+ const shipPacket = await buildWorkflowGateEvidencePacket(root, {
222
+ branch: 'feature',
223
+ decisionKind: 'ship'
224
+ });
225
+
226
+ assert.deepEqual(taskPacket.workflowScope.taskIds, ['DEP1']);
227
+ assert.deepEqual(taskPacket.dependencyBlockers, []);
228
+ assert.deepEqual(shipPacket.workflowScope.taskIds, ['DEP1', 'DEP2']);
229
+ assert.deepEqual(shipPacket.dependencyBlockers.map((blocker) => `${blocker.taskId}->${blocker.dependencyId}`), ['DEP2->DEP1']);
230
+ } finally {
231
+ await rm(root, { recursive: true, force: true });
232
+ }
233
+ });
234
+
235
+ test('workflow gate uses selected accepted evidence instead of latest active payload drift', async () => {
236
+ const root = await mkdtemp(path.join(tmpdir(), 'sdd-workflow-gate-selected-evidence-'));
237
+ try {
238
+ await initProject(root);
239
+ await writeBranchDocs(root, 'feature', validTaskMarkdown('T1', []));
240
+ const run = await createRun(root, { runId: 'selected-evidence-run-001' });
241
+ const logicalRef = 'artifacts/validation-T1.md';
242
+ const acceptedPath = 'artifacts/validation-T1-accepted.md';
243
+ const latestPath = 'artifacts/validation-T1-latest.md';
244
+ const acceptedContent = 'accepted evidence\n';
245
+ const latestContent = 'latest evidence\n';
246
+ await mkdir(path.dirname(getEvidenceAttachmentPath(root, 'feature', acceptedPath)), { recursive: true });
247
+ await mkdir(path.dirname(getEvidenceAttachmentPath(root, 'feature', latestPath)), { recursive: true });
248
+ await writeFile(getEvidenceAttachmentPath(root, 'feature', acceptedPath), acceptedContent, 'utf8');
249
+ await writeFile(getEvidenceAttachmentPath(root, 'feature', latestPath), latestContent, 'utf8');
250
+ const acceptedPayload = await recordRuntimeArtifactPayload(root, {
251
+ payloadId: runtimeScopedId(run.runId, logicalRef, 'accepted'),
252
+ runId: run.runId,
253
+ sourceRunId: run.runId,
254
+ branchSlug: 'feature',
255
+ taskId: 'T1',
256
+ logicalRef,
257
+ physicalPayloadPath: acceptedPath,
258
+ artifactRole: 'validation',
259
+ digest: hashContent(acceptedContent),
260
+ status: 'active',
261
+ payload: { title: 'accepted' }
262
+ });
263
+ const latestPayload = await recordRuntimeArtifactPayload(root, {
264
+ payloadId: runtimeScopedId(run.runId, logicalRef, 'latest'),
265
+ runId: run.runId,
266
+ sourceRunId: run.runId,
267
+ branchSlug: 'feature',
268
+ taskId: 'T1',
269
+ logicalRef,
270
+ physicalPayloadPath: latestPath,
271
+ artifactRole: 'validation',
272
+ digest: hashContent(latestContent),
273
+ status: 'active',
274
+ payload: { title: 'latest' }
275
+ });
276
+ const evidenceSetId = runtimeScopedId(run.runId, 'T1', 'accepted-set');
277
+ await createRuntimeEvidenceSet(root, {
278
+ evidenceSetId,
279
+ branchSlug: 'feature',
280
+ scopeKind: 'task',
281
+ scopeId: 'T1',
282
+ sourceRunId: run.runId,
283
+ documentContractHashes: { spec: null, plan: null, tasks: null, verify: null },
284
+ gateDecisionId: 'gate-pass-001',
285
+ status: 'accepted',
286
+ items: [{ evidenceSetId, payloadId: acceptedPayload.payloadId, logicalRef, role: 'validation', required: false, digestAtSelection: acceptedPayload.digest }],
287
+ payload: { source: 'test' }
288
+ });
289
+ await updateRuntimeSelectionPointer(root, {
290
+ branchSlug: 'feature',
291
+ scopeKind: 'task',
292
+ scopeId: 'T1',
293
+ selectedEvidenceSetId: evidenceSetId,
294
+ selectedAt: generatedAt,
295
+ selectedByGateDecisionId: 'gate-pass-001',
296
+ reason: 'accepted test evidence'
297
+ });
298
+
299
+ await writeFile(getEvidenceAttachmentPath(root, 'feature', latestPath), 'latest drift\n', 'utf8');
300
+ const latestDriftPacket = await buildWorkflowGateEvidencePacket(root, { branch: 'feature', taskId: 'T1', decisionKind: 'test' });
301
+ await writeFile(getEvidenceAttachmentPath(root, 'feature', acceptedPath), 'accepted drift\n', 'utf8');
302
+ const selectedDriftPacket = await buildWorkflowGateEvidencePacket(root, { branch: 'feature', taskId: 'T1', decisionKind: 'test' });
303
+
304
+ assert.deepEqual(latestDriftPacket.selectedEvidence.payloads.map((payload) => payload.payloadId), [acceptedPayload.payloadId]);
305
+ assert.equal(latestDriftPacket.selectedEvidence.payloads.some((payload) => payload.payloadId === latestPayload.payloadId), false);
306
+ assert.equal(latestDriftPacket.hardChecks.some((check) => check.code === 'digest_drift'), false);
307
+ assert.equal(selectedDriftPacket.hardChecks.some((check) => check.code === 'digest_drift' && check.refs.includes(acceptedPayload.payloadId)), true);
308
+ } finally {
309
+ await rm(root, { recursive: true, force: true });
310
+ }
311
+ });
312
+
313
+ test('workflow gate PASS resolves scoped open repair records', async () => {
314
+ const root = await mkdtemp(path.join(tmpdir(), 'sdd-workflow-gate-repair-'));
315
+ try {
316
+ await initProject(root);
317
+ await writeBranchDocs(root, 'feature', validTaskMarkdown('T1', []));
318
+ await writeVerifyContract(root, { branch: 'feature', branchSource: 'cli_option' });
319
+ const run = await createRun(root, { runId: 'repair-gate-run-001' });
320
+ await bindTestRunState(root, run.runId, 'feature', 'T1');
321
+ await markTestRunReadyForShip(root, run.runId, 'T1');
322
+ const validationRef = 'artifacts/validation-T1.md';
323
+ const validationPath = 'artifacts/validation-T1-repair.md';
324
+ const validationContent = 'repair gate validation evidence\n';
325
+ await mkdir(path.dirname(getEvidenceAttachmentPath(root, 'feature', validationPath)), { recursive: true });
326
+ await writeFile(getEvidenceAttachmentPath(root, 'feature', validationPath), validationContent, 'utf8');
327
+ const validationPayloadId = runtimeScopedId(run.runId, validationRef, 'repair-validation');
328
+ await recordRuntimeArtifactPayload(root, {
329
+ payloadId: validationPayloadId,
330
+ runId: run.runId,
331
+ sourceRunId: run.runId,
332
+ branchSlug: 'feature',
333
+ taskId: 'T1',
334
+ logicalRef: validationRef,
335
+ physicalPayloadPath: validationPath,
336
+ artifactRole: 'validation',
337
+ digest: hashContent(validationContent),
338
+ status: 'active',
339
+ payload: { source: 'repair-test' }
340
+ });
341
+ const evidenceSetId = runtimeScopedId(run.runId, 'T1', 'repair-accepted-set');
342
+ await createRuntimeEvidenceSet(root, {
343
+ evidenceSetId,
344
+ branchSlug: 'feature',
345
+ scopeKind: 'task',
346
+ scopeId: 'T1',
347
+ sourceRunId: run.runId,
348
+ documentContractHashes: { spec: null, plan: null, tasks: null, verify: null },
349
+ gateDecisionId: 'gate-pass-repair-input',
350
+ status: 'accepted',
351
+ items: [{ evidenceSetId, payloadId: validationPayloadId, logicalRef: validationRef, role: 'validation', required: false, digestAtSelection: hashContent(validationContent) }],
352
+ payload: { source: 'repair-test' }
353
+ });
354
+ await updateRuntimeSelectionPointer(root, {
355
+ branchSlug: 'feature',
356
+ scopeKind: 'task',
357
+ scopeId: 'T1',
358
+ selectedEvidenceSetId: evidenceSetId,
359
+ selectedAt: generatedAt,
360
+ selectedByGateDecisionId: 'gate-pass-repair-input',
361
+ reason: 'accepted repair validation evidence'
362
+ });
363
+ await recordRuntimeRepair(root, buildOpenRepairRecord({
364
+ branchSlug: 'feature',
365
+ taskId: 'T1',
366
+ runId: run.runId,
367
+ message: 'artifact digest evidence drift requires replay',
368
+ recommendedCommands: ['sdd test task-T1 --branch feature']
369
+ }));
370
+
371
+ const result = await evaluateAndRecordWorkflowGateDecision(root, { branch: 'feature', taskId: 'T1', runId: run.runId, decisionKind: 'test' });
372
+ const openRepairs = await listRuntimeRepairs(root, { branchSlug: 'feature', status: 'open' });
373
+ const resolvedRepairs = await listRuntimeRepairs(root, { branchSlug: 'feature', status: 'resolved' });
374
+
375
+ assert.equal(result.decision.status, 'PASS');
376
+ assert.equal(openRepairs.length, 0);
377
+ assert.equal(resolvedRepairs.length, 1);
378
+ assert.equal((resolvedRepairs[0].payload as { resolvedByGateDecisionId?: string }).resolvedByGateDecisionId, result.decision.decisionId);
379
+ } finally {
380
+ await rm(root, { recursive: true, force: true });
381
+ }
382
+ });
383
+
384
+ function selectedEvidencePayload(logicalRef = 'artifacts/validation-T1.md', status: WorkflowGateEvidencePacket['selectedEvidence']['payloads'][number]['status'] = 'active'): WorkflowGateEvidencePacket['selectedEvidence']['payloads'][number] {
385
+ return {
386
+ payloadId: `payload-${status}`,
387
+ runId: 'run-001',
388
+ sourceRunId: 'run-001',
389
+ branchSlug: 'feature',
390
+ taskId: 'T1',
391
+ logicalRef,
392
+ physicalPayloadPath: logicalRef,
393
+ artifactRole: 'validation',
394
+ digest: `digest-${status}`,
395
+ sequence: 1,
396
+ status,
397
+ supersedes: null,
398
+ createdAt: generatedAt,
399
+ payload: {}
400
+ };
401
+ }
402
+
403
+ function selectedEvidenceSelection(payloads = [selectedEvidencePayload()]): WorkflowGateEvidencePacket['selectedEvidence'] {
404
+ return {
405
+ source: 'selection_pointer',
406
+ evidenceSet: {
407
+ evidenceSetId: 'evidence-set-001',
408
+ branchSlug: 'feature',
409
+ scopeKind: 'task',
410
+ scopeId: 'T1',
411
+ sourceRunId: 'run-001',
412
+ documentContractHashes: {},
413
+ gateDecisionId: 'gate-001',
414
+ status: 'accepted',
415
+ createdAt: generatedAt,
416
+ items: payloads.map((payload) => ({
417
+ evidenceSetId: 'evidence-set-001',
418
+ payloadId: payload.payloadId,
419
+ logicalRef: payload.logicalRef,
420
+ role: payload.artifactRole,
421
+ required: true,
422
+ digestAtSelection: payload.digest
423
+ })),
424
+ payload: {}
425
+ },
426
+ pointer: {
427
+ branchSlug: 'feature',
428
+ scopeKind: 'task',
429
+ scopeId: 'T1',
430
+ selectedEvidenceSetId: 'evidence-set-001',
431
+ selectedAt: generatedAt,
432
+ selectedByGateDecisionId: 'gate-001',
433
+ reason: 'accepted evidence selection'
434
+ },
435
+ payloads
436
+ };
437
+ }
438
+
439
+ function hashContent(content: string): string {
440
+ return createHash('sha256').update(content.replace(/\r\n/g, '\n'), 'utf8').digest('hex');
441
+ }
442
+
105
443
  function packetInput(overrides: Partial<Omit<WorkflowGateEvidencePacket, 'hardChecks'>> = {}): Omit<WorkflowGateEvidencePacket, 'hardChecks'> {
106
444
  return {
107
445
  packetId: 'packet-001',
@@ -143,7 +481,6 @@ function packetInput(overrides: Partial<Omit<WorkflowGateEvidencePacket, 'hardCh
143
481
  runId: 'run-001',
144
482
  runStatus: 'completed',
145
483
  validationStatus: 'pass',
146
- syncBackStatus: 'not_created',
147
484
  affectedFiles: [],
148
485
  updatedAt: generatedAt,
149
486
  compatibility: 'compatible',
@@ -159,10 +496,9 @@ function packetInput(overrides: Partial<Omit<WorkflowGateEvidencePacket, 'hardCh
159
496
  durableGaps: [],
160
497
  dependencyBlockers: [],
161
498
  affectedFileConflicts: [],
162
- syncBackDecision: null,
163
- syncBackDecisions: [],
164
499
  fanInEvidenceSets: [],
165
500
  advisorAssessments: [],
501
+ selectedEvidence: selectedEvidenceSelection(),
166
502
  canonicalEvidenceRefs: [],
167
503
  requiredArtifactRefs: [],
168
504
  artifactPayloadHealth: [],
@@ -11,7 +11,6 @@ export function evaluateWorkflowGateHardChecks(packet: WorkflowGateHardCheckInpu
11
11
  ...affectedFileChecks(packet),
12
12
  ...durableGapChecks(packet),
13
13
  ...artifactChecks(packet),
14
- ...syncBackChecks(packet),
15
14
  ...authorityChecks(packet)
16
15
  ];
17
16
  }
@@ -43,15 +42,13 @@ function documentChecks(packet: WorkflowGateHardCheckInput): WorkflowGateHardChe
43
42
  if (stale.length > 0) {
44
43
  checks.push(blocked('stale_documents', packet.partition, `Stale workflow documents: ${stale.join(', ')}.`, 'Refresh the stale stage contract before continuing.', stale));
45
44
  }
46
- if (docs.verifyExists && !docs.verifyBasedOnTasksContractHash) {
47
- checks.push(blocked('contract_hash_mismatch', packet.partition, 'verify.md is missing based_on_tasks_contract_hash.', 'Regenerate verify.md from the frozen current tasks contract.', ['verify.md', 'tasks.md']));
48
- } else if (docs.verifyBasedOnTasksContractHash && docs.tasksContractHash && docs.verifyBasedOnTasksContractHash !== docs.tasksContractHash) {
49
- checks.push(blocked('contract_hash_mismatch', packet.partition, 'verify.md is bound to an older tasks contract hash.', 'Regenerate verify.md from the frozen current tasks contract.', ['verify.md', 'tasks.md']));
50
- }
51
45
  return checks;
52
46
  }
53
47
 
54
48
  function latestEligibleChecks(packet: WorkflowGateHardCheckInput): WorkflowGateHardCheck[] {
49
+ if (packet.decisionKind === 'test' && packet.workflowScope.runIds.length > 0) {
50
+ return [];
51
+ }
55
52
  const scopedSelections = packet.latestEligibleSelections ?? [];
56
53
  const selections = scopedSelections.length > 0 ? scopedSelections : (packet.latestEligibleSelection ? [packet.latestEligibleSelection] : []);
57
54
  if (selections.length === 0) {
@@ -94,10 +91,25 @@ function durableGapChecks(packet: WorkflowGateHardCheckInput): WorkflowGateHardC
94
91
  }
95
92
 
96
93
  function artifactChecks(packet: WorkflowGateHardCheckInput): WorkflowGateHardCheck[] {
97
- const available = new Set([...packet.canonicalEvidenceRefs, ...packet.fanInEvidenceSets.flatMap((set) => [...set.canonicalEvidenceRefs, ...set.evidenceRefs])]);
98
- const checks = packet.requiredArtifactRefs
94
+ const checks: WorkflowGateHardCheck[] = [];
95
+ if (packet.selectedEvidence.source === 'legacy_active_payloads' || packet.selectedEvidence.source === 'candidate_payloads') {
96
+ checks.push(blocked('missing_evidence_selection', packet.partition, `Gate evidence resolved from ${packet.selectedEvidence.source} instead of an accepted selection pointer.`, 'Create or refresh the runtime accepted evidence set before gate PASS.', packet.selectedEvidence.payloads.map((payload) => payload.payloadId)));
97
+ }
98
+ if (packet.selectedEvidence.source === 'none' || packet.selectedEvidence.payloads.length === 0) {
99
+ checks.push(blocked('missing_evidence_selection', packet.partition, 'No runtime-selected evidence payloads are available for this gate.', 'Collect evidence and create a runtime accepted evidence selection before gate PASS.', packet.requiredArtifactRefs));
100
+ }
101
+ const nonConsumable = packet.selectedEvidence.payloads.filter((payload) => !isConsumablePayloadStatus(payload.status));
102
+ for (const payload of nonConsumable) {
103
+ checks.push(blocked('non_consumable_evidence', packet.partition, `Evidence ${payload.logicalRef} is ${payload.status} and cannot satisfy gate authority.`, 'Select accepted or current candidate evidence; keep rejected, superseded, quarantined, stale, partial, and active-attempt refs for audit only.', [payload.payloadId, payload.logicalRef, payload.status]));
104
+ }
105
+ const nonPrimary = packet.selectedEvidence.payloads.filter((payload) => isConsumablePayloadStatus(payload.status) && !isPrimaryGateEvidencePayload(payload));
106
+ for (const payload of nonPrimary) {
107
+ checks.push(warning('non_primary_evidence', packet.partition, `Evidence ${payload.logicalRef} has role ${payload.artifactRole} and cannot satisfy primary gate authority.`, 'Use selected primary stage evidence for gate obligations; keep diagnostic, derived, legacy, and reasoning refs outside primary evidence.', [payload.payloadId, payload.logicalRef, payload.artifactRole]));
108
+ }
109
+ const available = new Set(consumableEvidenceRefs(packet));
110
+ checks.push(...packet.requiredArtifactRefs
99
111
  .filter((ref) => !available.has(ref))
100
- .map((ref) => blocked('missing_required_artifact', packet.partition, `Required artifact ${ref} is missing from gate evidence.`, 'Collect required artifacts before gate PASS.', [ref]));
112
+ .map((ref) => blocked('missing_required_artifact', packet.partition, `Required artifact ${ref} is missing from selected gate evidence.`, 'Collect required artifacts and include them in the accepted evidence selection before gate PASS.', [ref])));
101
113
  for (const payload of packet.artifactPayloadHealth) {
102
114
  if (payload.status === 'missing') {
103
115
  checks.push(blocked('missing_payload', packet.partition, `Artifact payload ${payload.logicalRef} is missing at ${payload.physicalPayloadPath}.`, 'Restore the immutable payload or regenerate current evidence before gate PASS.', [payload.payloadId, payload.logicalRef, payload.physicalPayloadPath]));
@@ -108,13 +120,40 @@ function artifactChecks(packet: WorkflowGateHardCheckInput): WorkflowGateHardChe
108
120
  return checks;
109
121
  }
110
122
 
111
- function syncBackChecks(packet: WorkflowGateHardCheckInput): WorkflowGateHardCheck[] {
112
- const decisions = packet.syncBackDecisions.length > 0 ? packet.syncBackDecisions : (packet.syncBackDecision ? [packet.syncBackDecision] : []);
113
- return decisions
114
- .filter((decision) => decision.status === 'blocked' || decision.status === 'divergent')
115
- .map((decision) => blocked('sync_back_divergence', packet.partition, `Sync-back decision ${decision.decisionId} is ${decision.status}.`, 'Inspect sync-back decision divergence before continuing.', [decision.decisionId]));
123
+ function consumableEvidenceRefs(packet: WorkflowGateHardCheckInput): string[] {
124
+ if (packet.selectedEvidence.source === 'selection_pointer') {
125
+ if (packet.selectedEvidence.evidenceSet?.status !== 'accepted') {
126
+ return [];
127
+ }
128
+ return activePayloadRefs(packet);
129
+ }
130
+ if (packet.selectedEvidence.source === 'candidate_payloads') {
131
+ return activePayloadRefs(packet);
132
+ }
133
+ return [];
134
+ }
135
+
136
+ function activePayloadRefs(packet: WorkflowGateHardCheckInput): string[] {
137
+ return packet.selectedEvidence.payloads.filter((payload) => isConsumablePayloadStatus(payload.status) && isPrimaryGateEvidencePayload(payload)).map((payload) => payload.logicalRef);
138
+ }
139
+
140
+ function isConsumablePayloadStatus(status: string): boolean {
141
+ return status === 'active';
116
142
  }
117
143
 
144
+ function isPrimaryGateEvidencePayload(payload: WorkflowGateHardCheckInput['selectedEvidence']['payloads'][number]): boolean {
145
+ const ref = payload.logicalRef.replace(/\\/g, '/').toLowerCase();
146
+ const role = payload.artifactRole.toLowerCase();
147
+ if (ref.startsWith('runs/') || ref.startsWith('artifacts/') || ref.includes('/evidence/artifacts/')) {
148
+ return false;
149
+ }
150
+ if (ref.includes('/test-index-') || ref.endsWith('.log')) {
151
+ return false;
152
+ }
153
+ return !/(command-output|test-index|diagnostic|derived|cache|profile|summary|context-package|acceptance-coverage|review|manager|handoff|collaboration)/.test(role);
154
+ }
155
+
156
+
118
157
  function authorityChecks(packet: WorkflowGateHardCheckInput): WorkflowGateHardCheck[] {
119
158
  const checks: WorkflowGateHardCheck[] = [];
120
159
  for (const fanIn of packet.fanInEvidenceSets) {
@@ -22,7 +22,7 @@ test('workflow gate policy keeps hard blocks monotonic over advisor concerns', (
22
22
 
23
23
  assert.equal(decision.status, 'BLOCKED');
24
24
  assert.equal(decision.decidedBy, 'runtime_policy');
25
- assert.deepEqual(decision.forbiddenNextActions, ['ship', 'sync-back-apply', 'mark-task-complete', 'stage-pass']);
25
+ assert.deepEqual(decision.forbiddenNextActions, ['ship', 'truth-alignment-approval', 'mark-task-complete', 'stage-pass']);
26
26
  });
27
27
 
28
28
  test('workflow gate policy requires a human for high-concern ship advisors', () => {
@@ -54,12 +54,14 @@ test('workflow gate policy escalates invalid advisors and warns on low confidenc
54
54
  assert.equal(lowConfidence.status, 'WARN');
55
55
  assert.equal(lowConfidence.advisorSummary.lowConfidenceCount, 1);
56
56
  assert.deepEqual(lowConfidence.allowedNextActions, ['inspect-evidence']);
57
- assert.deepEqual(lowConfidence.forbiddenNextActions, ['ship', 'sync-back-apply', 'mark-task-complete', 'stage-pass']);
57
+ assert.deepEqual(lowConfidence.forbiddenNextActions, ['ship', 'truth-alignment-approval', 'mark-task-complete', 'stage-pass']);
58
58
  });
59
59
 
60
- test('workflow gate policy hashes stable gate inputs and carries evidence refs', () => {
60
+ test('workflow gate policy hashes selected evidence and carries gate binding', () => {
61
+ const selectedPayload = selectedEvidencePayload('artifacts/validation-T1.md', 'digest-validation');
61
62
  const decision = synthesizeWorkflowGateDecision(packet({
62
63
  canonicalEvidenceRefs: ['artifacts/validation-T1.md'],
64
+ selectedEvidence: { source: 'candidate_payloads', evidenceSet: null, pointer: null, payloads: [selectedPayload] },
63
65
  fanInEvidenceSets: [{
64
66
  contract: STAGE_TEAM_RUNTIME_CONTRACT_VERSION,
65
67
  fanInId: 'fanin-001',
@@ -72,7 +74,7 @@ test('workflow gate policy hashes stable gate inputs and carries evidence refs',
72
74
  proposalRefs: [],
73
75
  advisorAssessmentIds: [],
74
76
  evidenceRefs: ['artifacts/review-T1.md'],
75
- canonicalEvidenceRefs: ['artifacts/validation-T1.md'],
77
+ canonicalEvidenceRefs: ['artifacts/review-T1.md'],
76
78
  gateInputOnly: true,
77
79
  createdAt: generatedAt,
78
80
  payload: {}
@@ -81,8 +83,25 @@ test('workflow gate policy hashes stable gate inputs and carries evidence refs',
81
83
 
82
84
  assert.match(decision.decisionId, /^gate-[a-f0-9]{16}$/);
83
85
  assert.equal(decision.status, 'PASS');
84
- assert.deepEqual(decision.evidenceRefs, ['artifacts/review-T1.md', 'artifacts/validation-T1.md']);
85
- assert.deepEqual(decision.payload, { contract: WORKFLOW_GATE_RUNTIME_CONTRACT_VERSION, packetId: 'packet-001', workflowScope: { waveRunId: null, taskIds: ['T1'], runIds: ['run-001'], evidenceRefs: [] } });
86
+ assert.deepEqual(decision.evidenceRefs, ['artifacts/validation-T1.md']);
87
+ assert.deepEqual(decision.payload, {
88
+ contract: WORKFLOW_GATE_RUNTIME_CONTRACT_VERSION,
89
+ packetId: 'packet-001',
90
+ workflowScope: { waveRunId: null, taskIds: ['T1'], runIds: ['run-001'], evidenceRefs: [] },
91
+ evidenceBinding: {
92
+ contract: 'sdd-gate-evidence-binding-v1',
93
+ branch: 'feature',
94
+ gate: 'ship',
95
+ selectionPointerRef: null,
96
+ acceptedEvidenceSetRef: null,
97
+ source: 'candidate_payloads',
98
+ selectedRefs: [{ payloadId: selectedPayload.payloadId, logicalRef: selectedPayload.logicalRef, digest: selectedPayload.digest, status: selectedPayload.status }],
99
+ blockedRefs: [],
100
+ selectionReasons: [],
101
+ decision: 'pass',
102
+ reasons: []
103
+ }
104
+ });
86
105
  });
87
106
 
88
107
  function packet(overrides: Partial<WorkflowGateEvidencePacket> = {}): WorkflowGateEvidencePacket {
@@ -101,10 +120,9 @@ function packet(overrides: Partial<WorkflowGateEvidencePacket> = {}): WorkflowGa
101
120
  durableGaps: [],
102
121
  dependencyBlockers: [],
103
122
  affectedFileConflicts: [],
104
- syncBackDecision: null,
105
- syncBackDecisions: [],
106
123
  fanInEvidenceSets: [],
107
124
  advisorAssessments: [],
125
+ selectedEvidence: { source: 'none', evidenceSet: null, pointer: null, payloads: [] },
108
126
  canonicalEvidenceRefs: [],
109
127
  requiredArtifactRefs: [],
110
128
  artifactPayloadHealth: [],
@@ -113,6 +131,25 @@ function packet(overrides: Partial<WorkflowGateEvidencePacket> = {}): WorkflowGa
113
131
  };
114
132
  }
115
133
 
134
+ function selectedEvidencePayload(logicalRef: string, digest: string): WorkflowGateEvidencePacket['selectedEvidence']['payloads'][number] {
135
+ return {
136
+ payloadId: `payload-${digest}`,
137
+ runId: 'run-001',
138
+ sourceRunId: 'run-001',
139
+ branchSlug: 'feature',
140
+ taskId: 'T1',
141
+ logicalRef,
142
+ physicalPayloadPath: logicalRef,
143
+ artifactRole: 'validation',
144
+ digest,
145
+ sequence: 1,
146
+ status: 'active',
147
+ supersedes: null,
148
+ createdAt: generatedAt,
149
+ payload: {}
150
+ };
151
+ }
152
+
116
153
  function advisor(concern: WorkflowGateEvidencePacket['advisorAssessments'][number]['concern'], overrides: Partial<WorkflowGateEvidencePacket['advisorAssessments'][number]> = {}): WorkflowGateEvidencePacket['advisorAssessments'][number] {
117
154
  return {
118
155
  contract: STAGE_TEAM_RUNTIME_CONTRACT_VERSION,