ai-delivery-workflow 0.3.0 → 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 (357) hide show
  1. package/README.md +42 -16
  2. package/bin/ai-delivery.mjs +181 -6
  3. package/bin/benchmark-autonomy.mjs +14 -6
  4. package/bin/release-check.mjs +10 -3
  5. package/docs/CLI-PARAMETER-REFERENCE.zh-CN.md +159 -17
  6. package/docs/CODEGRAPH-INTEGRATION.zh-CN.md +89 -0
  7. package/docs/DUAL-REPOSITORY-WORKSPACE.zh-CN.md +15 -2
  8. package/docs/EVOLUTION-MAINTENANCE.zh-CN.md +7 -7
  9. package/docs/EVOLUTION-USER-GUIDE.zh-CN.md +2 -2
  10. package/docs/FILE-REFERENCE.zh-CN.md +119 -46
  11. package/docs/MAINTENANCE-VERIFICATION.zh-CN.md +2 -2
  12. package/docs/MOCK-SYSTEM.zh-CN.md +141 -0
  13. package/docs/NPM-RELEASE-MANAGEMENT.zh-CN.md +2 -1
  14. package/docs/PROJECT-MANUAL.zh-CN.md +175 -98
  15. package/docs/PROTOTYPE-MIGRATION.zh-CN.md +164 -0
  16. package/docs/STATE-CLI-MAINTENANCE.zh-CN.md +35 -17
  17. package/docs/STATE-CLI-USER-GUIDE.zh-CN.md +115 -39
  18. package/docs/VIEWER-MAINTENANCE.zh-CN.md +101 -324
  19. package/docs/VIEWER-USER-GUIDE.zh-CN.md +68 -190
  20. package/docs/adr/0001-prototype-first-ui-governance.md +3 -0
  21. package/docs/adr/0002-microcks-as-default-mock-system.md +3 -0
  22. package/docs/adr/0003-workflow-manager-governed-control-surface.md +46 -0
  23. package/docs/adr/0004-operational-carbon-visual-standard.md +9 -0
  24. package/docs/adr/0005-prototype-management-as-routed-pages.md +7 -0
  25. package/docs/adr/0006-product-line-candidate-inventory.md +20 -0
  26. package/docs/agents/domain.md +37 -0
  27. package/docs/agents/issue-tracker.md +26 -0
  28. package/docs/agents/triage-labels.md +11 -0
  29. package/docs/agents/workflow-manager-acceptance-matrix.md +93 -0
  30. package/docs/agents/workflow-manager-agent-interface.md +145 -0
  31. package/docs/agents/workflow-manager-current-state.md +205 -0
  32. package/lib/artifact-files.mjs +47 -0
  33. package/lib/codegraph.mjs +405 -0
  34. package/lib/delivery-state.mjs +3079 -198
  35. package/lib/frontend-guard.mjs +288 -0
  36. package/lib/fs-utils.mjs +53 -0
  37. package/lib/history-anchor.mjs +98 -0
  38. package/lib/mock-scenario-pack.mjs +687 -0
  39. package/lib/mock-system.mjs +897 -0
  40. package/lib/npm-auth.mjs +16 -0
  41. package/lib/npm-package-result.mjs +11 -0
  42. package/lib/png-evidence.mjs +149 -0
  43. package/lib/project-bootstrap.mjs +96 -55
  44. package/lib/project-installer.mjs +1484 -164
  45. package/lib/project-migration.mjs +1193 -0
  46. package/lib/prototype-migration.mjs +713 -0
  47. package/lib/prototype-page-review.mjs +384 -0
  48. package/lib/prototype-review-target.mjs +334 -0
  49. package/lib/prototype-revision.mjs +812 -0
  50. package/lib/stable-value.mjs +15 -0
  51. package/lib/toml-hooks.mjs +69 -0
  52. package/lib/ui-acceptance.mjs +565 -0
  53. package/lib/visual-standard.mjs +232 -0
  54. package/lib/workflow-manager-contracts.mjs +367 -0
  55. package/lib/workflow-manager-facts.mjs +778 -0
  56. package/lib/workflow-manager-governance.mjs +514 -0
  57. package/lib/workflow-manager-mock.mjs +183 -0
  58. package/lib/workflow-manager-prototypes.mjs +1847 -0
  59. package/lib/workflow-manager-public/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  60. package/lib/workflow-manager-public/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  61. package/lib/workflow-manager-public/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
  62. package/lib/workflow-manager-public/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
  63. package/lib/workflow-manager-public/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
  64. package/lib/workflow-manager-public/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
  65. package/lib/workflow-manager-public/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
  66. package/lib/workflow-manager-public/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
  67. package/lib/workflow-manager-public/assets/index-Chlg6r8f.css +1 -0
  68. package/lib/workflow-manager-public/assets/index-E-hGB5ZD.js +13 -0
  69. package/lib/workflow-manager-public/fonts/OFL-1.1.txt +90 -0
  70. package/lib/workflow-manager-public/index.html +14 -0
  71. package/lib/workflow-manager-systems.mjs +519 -0
  72. package/lib/workflow-manager-transaction.mjs +397 -0
  73. package/lib/workflow-manager.mjs +745 -0
  74. package/package.json +6 -2
  75. package/skills/ai-delivery-assemble-release/SKILL.md +10 -8
  76. package/skills/ai-delivery-assemble-release/assets/release-candidate-manifest.yaml +16 -4
  77. package/skills/ai-delivery-assemble-release/assets/release-git-plan.yaml +96 -6
  78. package/skills/ai-delivery-assemble-release/assets/release-material-index.csv +1 -1
  79. package/skills/ai-delivery-assemble-release/assets/version-inclusion.csv +2 -2
  80. package/skills/ai-delivery-assemble-release/references/release-assembly-contract.md +16 -2
  81. package/skills/ai-delivery-assemble-release/scripts/plan-release.mjs +127 -3
  82. package/skills/ai-delivery-bootstrap/SKILL.md +4 -4
  83. package/skills/ai-delivery-bootstrap/references/bootstrap-contract.md +4 -2
  84. package/skills/ai-delivery-checkpoint-task/SKILL.md +17 -3
  85. package/skills/ai-delivery-checkpoint-task/assets/runtime-template/task.json +7 -1
  86. package/skills/ai-delivery-checkpoint-task/references/checkpoint-contract.md +22 -8
  87. package/skills/ai-delivery-checkpoint-task/scripts/hook-event.mjs +91 -0
  88. package/skills/ai-delivery-checkpoint-task/scripts/task-state.mjs +1086 -51
  89. package/skills/ai-delivery-close-version/SKILL.md +9 -8
  90. package/skills/ai-delivery-close-version/assets/version-lineage.yaml +1 -1
  91. package/skills/ai-delivery-close-version/references/version-closeout-contract.md +2 -2
  92. package/skills/ai-delivery-define-product/SKILL.md +8 -4
  93. package/skills/ai-delivery-define-product/references/product-contract.md +2 -2
  94. package/skills/ai-delivery-design-architecture/SKILL.md +9 -5
  95. package/skills/ai-delivery-design-architecture/assets/architecture-template/prototype-architecture-validation.yaml +16 -16
  96. package/skills/ai-delivery-design-architecture/references/architecture-contract.md +1 -1
  97. package/skills/ai-delivery-design-experience/SKILL.md +36 -30
  98. package/skills/ai-delivery-design-experience/assets/experience-template/LEGACY-COMPATIBILITY.md +16 -0
  99. package/skills/ai-delivery-design-experience/assets/experience-template/design-reference-selection.yaml +32 -0
  100. package/skills/ai-delivery-design-experience/assets/experience-template/experience-baseline.yaml +2 -2
  101. package/skills/ai-delivery-design-experience/assets/experience-template/formal-ui-confirmation.yaml +16 -3
  102. package/skills/ai-delivery-design-experience/assets/experience-template/frontend-change-scope.yaml +30 -0
  103. package/skills/ai-delivery-design-experience/assets/experience-template/interaction-contract.csv +1 -1
  104. package/skills/ai-delivery-design-experience/assets/experience-template/mock-admin-export.yaml +8 -0
  105. package/skills/ai-delivery-design-experience/assets/experience-template/mock-scenario-mappings.csv +1 -0
  106. package/skills/ai-delivery-design-experience/assets/experience-template/mock-scenario-pack-request.yaml +24 -0
  107. package/skills/ai-delivery-design-experience/assets/experience-template/product-prototype-reconciliation.yaml +2 -1
  108. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-adjustment-log.csv +1 -1
  109. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-component-bindings.csv +1 -0
  110. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-component-candidates.csv +1 -0
  111. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-components.csv +1 -0
  112. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-confirmation.yaml +18 -18
  113. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-data-contracts.csv +1 -0
  114. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-impact-assessment.yaml +5 -5
  115. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-implementation-bindings.csv +1 -0
  116. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-manifest.yaml +2 -0
  117. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-pages.csv +1 -0
  118. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-product-coverage.csv +1 -1
  119. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-review-comments.csv +1 -1
  120. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-review-decision.yaml +13 -12
  121. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-review-scenes.csv +1 -0
  122. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-review-sessions.csv +1 -1
  123. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-review-unit-pages.csv +1 -0
  124. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-review-units.csv +1 -0
  125. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-revision.yaml +88 -0
  126. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-routes.csv +1 -0
  127. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-set.yaml +2 -0
  128. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-source-inspection-snapshots.csv +1 -0
  129. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-terminals.csv +1 -0
  130. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-tool-candidates.csv +1 -1
  131. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-tool-selection.yaml +2 -3
  132. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-traceability.csv +1 -1
  133. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-trigger-conditions.csv +1 -0
  134. package/skills/ai-delivery-design-experience/assets/experience-template/prototype.yaml +6 -0
  135. package/skills/ai-delivery-design-experience/assets/experience-template/ui-framework-selection.yaml +17 -1
  136. package/skills/ai-delivery-design-experience/assets/experience-template/ui-handoff.yaml +6 -5
  137. package/skills/ai-delivery-design-experience/assets/experience-template/ui-mapping.csv +1 -0
  138. package/skills/ai-delivery-design-experience/assets/experience-template/visual-direction.yaml +4 -0
  139. package/skills/ai-delivery-design-experience/assets/experience-template/visual-reference-manifest.yaml +23 -0
  140. package/skills/ai-delivery-design-experience/assets/experience-template/visual-reference.html +163 -0
  141. package/skills/ai-delivery-design-experience/assets/experience-template/visual-system-confirmation.yaml +11 -0
  142. package/skills/ai-delivery-design-experience/references/experience-contract.md +26 -27
  143. package/skills/ai-delivery-design-experience/references/prototype-management-contract.md +42 -21
  144. package/skills/ai-delivery-design-tests/SKILL.md +13 -7
  145. package/skills/ai-delivery-design-tests/assets/test-design-template/prototype-test-scope.csv +1 -1
  146. package/skills/ai-delivery-design-tests/assets/test-design-template/prototype-test-validation.yaml +17 -16
  147. package/skills/ai-delivery-design-tests/references/test-design-contract.md +7 -5
  148. package/skills/ai-delivery-develop-iteration/SKILL.md +18 -11
  149. package/skills/ai-delivery-develop-iteration/assets/development-template/candidate-manifest.yaml +36 -0
  150. package/skills/ai-delivery-develop-iteration/assets/development-template/task-prototype-traceability.csv +1 -1
  151. package/skills/ai-delivery-develop-iteration/references/development-contract.md +5 -3
  152. package/skills/ai-delivery-execute-test/SKILL.md +6 -2
  153. package/skills/ai-delivery-execute-work-package/SKILL.md +10 -3
  154. package/skills/ai-delivery-execute-work-package/references/work-package-contract.md +1 -1
  155. package/skills/ai-delivery-manage-git/SKILL.md +9 -7
  156. package/skills/ai-delivery-manage-git/references/git-policy.md +7 -3
  157. package/skills/ai-delivery-manage-git/scripts/release-git.mjs +995 -0
  158. package/skills/ai-delivery-orchestrate/SKILL.md +47 -29
  159. package/skills/ai-delivery-orchestrate/assets/project-template/.workflow/control/migrations/.gitkeep +0 -0
  160. package/skills/ai-delivery-orchestrate/assets/project-template/.workflow/control/repairs/.gitkeep +0 -0
  161. package/skills/ai-delivery-orchestrate/assets/project-template/.workflow/delivery/project.yaml +1 -0
  162. package/skills/ai-delivery-orchestrate/assets/project-template/.workflow/delivery/workflow-state.yaml +2 -0
  163. package/skills/ai-delivery-orchestrate/assets/project-template/.workflow/tools/frontend-guard/frontend-guard.mjs +50 -0
  164. package/skills/ai-delivery-orchestrate/assets/project-template/.workflow/tools/hooks/hook-event.mjs +91 -0
  165. package/skills/ai-delivery-orchestrate/assets/project-template/.workflow/tools/manager/manager.mjs +64 -0
  166. package/skills/ai-delivery-orchestrate/assets/project-template/.workflow/tools/manager/start.cmd +4 -0
  167. package/skills/ai-delivery-orchestrate/assets/project-template/.workflow/tools/manager/start.ps1 +2 -0
  168. package/skills/ai-delivery-orchestrate/assets/project-template/.workflow/tools/{viewer → manager}/start.sh +1 -1
  169. package/skills/ai-delivery-orchestrate/assets/project-template/.workflow/tools/mock/mock.mjs +50 -0
  170. package/skills/ai-delivery-orchestrate/assets/project-template/.workflow/tools/ui-acceptance/ui-acceptance.mjs +37 -0
  171. package/skills/ai-delivery-orchestrate/assets/project-template/AGENTS.md +37 -9
  172. package/skills/ai-delivery-orchestrate/assets/project-template/gitignore.template +1 -0
  173. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/CONTRIBUTING.md +25 -0
  174. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/LICENSE +21 -0
  175. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/README.md +250 -0
  176. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/UPSTREAM.yaml +19 -0
  177. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/airbnb/DESIGN.md +545 -0
  178. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/airbnb/README.md +5 -0
  179. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/airtable/DESIGN.md +554 -0
  180. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/airtable/README.md +5 -0
  181. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/apple/DESIGN.md +562 -0
  182. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/apple/README.md +5 -0
  183. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/binance/DESIGN.md +634 -0
  184. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/binance/README.md +5 -0
  185. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/bmw/DESIGN.md +544 -0
  186. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/bmw/README.md +5 -0
  187. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/bmw-m/DESIGN.md +503 -0
  188. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/bmw-m/README.md +5 -0
  189. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/bugatti/DESIGN.md +454 -0
  190. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/bugatti/README.md +5 -0
  191. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/cal/DESIGN.md +542 -0
  192. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/cal/README.md +5 -0
  193. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/claude/DESIGN.md +589 -0
  194. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/claude/README.md +5 -0
  195. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/clay/DESIGN.md +541 -0
  196. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/clay/README.md +5 -0
  197. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/clickhouse/DESIGN.md +544 -0
  198. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/clickhouse/README.md +5 -0
  199. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/cohere/DESIGN.md +451 -0
  200. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/cohere/README.md +5 -0
  201. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/coinbase/DESIGN.md +570 -0
  202. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/coinbase/README.md +5 -0
  203. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/composio/DESIGN.md +506 -0
  204. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/composio/README.md +5 -0
  205. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/cursor/DESIGN.md +537 -0
  206. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/cursor/README.md +5 -0
  207. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/dell-1996/DESIGN.md +632 -0
  208. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/dell-1996/README.md +5 -0
  209. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/elevenlabs/DESIGN.md +504 -0
  210. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/elevenlabs/README.md +5 -0
  211. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/expo/DESIGN.md +526 -0
  212. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/expo/README.md +5 -0
  213. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/ferrari/DESIGN.md +531 -0
  214. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/ferrari/README.md +5 -0
  215. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/figma/DESIGN.md +578 -0
  216. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/figma/README.md +5 -0
  217. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/framer/DESIGN.md +544 -0
  218. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/framer/README.md +5 -0
  219. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/hashicorp/DESIGN.md +575 -0
  220. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/hashicorp/README.md +5 -0
  221. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/hp/DESIGN.md +670 -0
  222. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/hp/README.md +5 -0
  223. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/ibm/DESIGN.md +550 -0
  224. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/ibm/README.md +5 -0
  225. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/intercom/DESIGN.md +546 -0
  226. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/intercom/README.md +5 -0
  227. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/kraken/DESIGN.md +125 -0
  228. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/kraken/README.md +5 -0
  229. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/lamborghini/DESIGN.md +288 -0
  230. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/lamborghini/README.md +5 -0
  231. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/linear.app/DESIGN.md +548 -0
  232. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/linear.app/README.md +5 -0
  233. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/lovable/DESIGN.md +298 -0
  234. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/lovable/README.md +5 -0
  235. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mastercard/DESIGN.md +365 -0
  236. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mastercard/README.md +5 -0
  237. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/meta/DESIGN.md +683 -0
  238. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/meta/README.md +5 -0
  239. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/minimax/DESIGN.md +746 -0
  240. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/minimax/README.md +5 -0
  241. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mintlify/DESIGN.md +852 -0
  242. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mintlify/README.md +5 -0
  243. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/miro/DESIGN.md +825 -0
  244. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/miro/README.md +5 -0
  245. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mistral.ai/DESIGN.md +773 -0
  246. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mistral.ai/README.md +5 -0
  247. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mongodb/DESIGN.md +767 -0
  248. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mongodb/README.md +5 -0
  249. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/nike/DESIGN.md +575 -0
  250. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/nike/README.md +5 -0
  251. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/nintendo-2001/DESIGN.md +649 -0
  252. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/nintendo-2001/README.md +5 -0
  253. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/notion/DESIGN.md +821 -0
  254. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/notion/README.md +5 -0
  255. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/nvidia/DESIGN.md +640 -0
  256. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/nvidia/README.md +5 -0
  257. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/ollama/DESIGN.md +539 -0
  258. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/ollama/README.md +5 -0
  259. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/opencode.ai/DESIGN.md +521 -0
  260. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/opencode.ai/README.md +5 -0
  261. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/pinterest/DESIGN.md +597 -0
  262. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/pinterest/README.md +5 -0
  263. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/playstation/DESIGN.md +661 -0
  264. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/playstation/README.md +5 -0
  265. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/posthog/DESIGN.md +690 -0
  266. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/posthog/README.md +5 -0
  267. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/raycast/DESIGN.md +669 -0
  268. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/raycast/README.md +5 -0
  269. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/renault/DESIGN.md +589 -0
  270. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/renault/README.md +5 -0
  271. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/replicate/DESIGN.md +616 -0
  272. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/replicate/README.md +5 -0
  273. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/resend/DESIGN.md +585 -0
  274. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/resend/README.md +5 -0
  275. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/revolut/DESIGN.md +636 -0
  276. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/revolut/README.md +5 -0
  277. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/runwayml/DESIGN.md +244 -0
  278. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/runwayml/README.md +5 -0
  279. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/sanity/DESIGN.md +357 -0
  280. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/sanity/README.md +5 -0
  281. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/sentry/DESIGN.md +551 -0
  282. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/sentry/README.md +5 -0
  283. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/shopify/DESIGN.md +516 -0
  284. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/shopify/README.md +5 -0
  285. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/slack/DESIGN.md +482 -0
  286. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/spacex/DESIGN.md +363 -0
  287. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/spacex/README.md +5 -0
  288. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/spotify/DESIGN.md +246 -0
  289. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/spotify/README.md +5 -0
  290. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/starbucks/DESIGN.md +580 -0
  291. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/starbucks/README.md +5 -0
  292. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/stripe/DESIGN.md +487 -0
  293. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/stripe/README.md +5 -0
  294. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/supabase/DESIGN.md +462 -0
  295. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/supabase/README.md +5 -0
  296. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/superhuman/DESIGN.md +448 -0
  297. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/superhuman/README.md +5 -0
  298. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/tesla/DESIGN.md +286 -0
  299. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/tesla/README.md +5 -0
  300. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/theverge/DESIGN.md +339 -0
  301. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/theverge/README.md +5 -0
  302. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/together.ai/DESIGN.md +633 -0
  303. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/together.ai/README.md +5 -0
  304. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/uber/DESIGN.md +636 -0
  305. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/uber/README.md +5 -0
  306. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/vercel/DESIGN.md +736 -0
  307. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/vercel/README.md +5 -0
  308. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/vodafone/DESIGN.md +538 -0
  309. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/vodafone/README.md +5 -0
  310. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/voltagent/DESIGN.md +521 -0
  311. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/voltagent/README.md +5 -0
  312. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/warp/DESIGN.md +526 -0
  313. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/warp/README.md +5 -0
  314. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/webflow/DESIGN.md +588 -0
  315. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/webflow/README.md +5 -0
  316. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/wired/DESIGN.md +497 -0
  317. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/wired/README.md +5 -0
  318. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/wise/DESIGN.md +544 -0
  319. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/wise/README.md +5 -0
  320. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/x.ai/DESIGN.md +465 -0
  321. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/x.ai/README.md +5 -0
  322. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/zapier/DESIGN.md +537 -0
  323. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/zapier/README.md +5 -0
  324. package/skills/ai-delivery-orchestrate/references/formal-state-contract.md +65 -20
  325. package/skills/ai-delivery-orchestrate/references/workflow-model.md +8 -6
  326. package/skills/ai-delivery-orchestrate-release/SKILL.md +12 -12
  327. package/skills/ai-delivery-orchestrate-release/assets/release-request.yaml +4 -1
  328. package/skills/ai-delivery-orchestrate-release/assets/version-selection.yaml +13 -1
  329. package/skills/ai-delivery-orchestrate-release/references/release-workflow-contract.md +15 -1
  330. package/skills/ai-delivery-plan-iteration/SKILL.md +11 -4
  331. package/skills/ai-delivery-plan-iteration/assets/planning-template/scope-manifest.yaml +17 -0
  332. package/skills/ai-delivery-plan-iteration/assets/planning-template/slice-prototype-traceability.csv +1 -1
  333. package/skills/ai-delivery-plan-iteration/references/planning-contract.md +8 -2
  334. package/skills/ai-delivery-prepare-platform/SKILL.md +5 -1
  335. package/skills/ai-delivery-prepare-release/SKILL.md +6 -5
  336. package/skills/ai-delivery-prepare-release/assets/release-template/release-manifest.yaml +23 -2
  337. package/skills/ai-delivery-prepare-release/references/release-contract.md +5 -1
  338. package/skills/ai-delivery-review-change/SKILL.md +14 -4
  339. package/skills/ai-delivery-review-change/references/review-contract.md +6 -0
  340. package/skills/ai-delivery-triage-failure/SKILL.md +5 -1
  341. package/skills/ai-delivery-validate-artifacts/SKILL.md +6 -3
  342. package/skills/ai-delivery-validate-artifacts/references/artifact-contract.md +13 -13
  343. package/skills/ai-delivery-verify-candidate/SKILL.md +13 -6
  344. package/skills/ai-delivery-verify-candidate/assets/verification-template/ui-acceptance-request.yaml +19 -0
  345. package/skills/ai-delivery-verify-candidate/assets/verification-template/ui-acceptance-results.yaml +53 -0
  346. package/skills/ai-delivery-verify-candidate/references/candidate-verification-contract.md +10 -2
  347. package/skills/ai-delivery-verify-production/SKILL.md +7 -4
  348. package/skills/ai-delivery-verify-production/assets/production-verification-template/production-verification.json +9 -0
  349. package/skills/ai-delivery-verify-production/assets/production-verification-template/production-verification.md +20 -0
  350. package/skills/ai-delivery-verify-production/references/production-verification-contract.md +19 -3
  351. package/skills/ai-delivery-design-experience/assets/experience-template/low-fidelity-confirmation.yaml +0 -32
  352. package/skills/ai-delivery-orchestrate/assets/project-template/.workflow/tools/viewer/public/app.js +0 -546
  353. package/skills/ai-delivery-orchestrate/assets/project-template/.workflow/tools/viewer/public/index.html +0 -199
  354. package/skills/ai-delivery-orchestrate/assets/project-template/.workflow/tools/viewer/public/styles.css +0 -529
  355. package/skills/ai-delivery-orchestrate/assets/project-template/.workflow/tools/viewer/server.mjs +0 -780
  356. package/skills/ai-delivery-orchestrate/assets/project-template/.workflow/tools/viewer/start.cmd +0 -4
  357. package/skills/ai-delivery-orchestrate/assets/project-template/.workflow/tools/viewer/start.ps1 +0 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-delivery-workflow",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "description": "Project-scoped Codex skills and hooks for artifact-driven AI software delivery",
5
5
  "type": "module",
6
6
  "repository": {
@@ -23,6 +23,7 @@
23
23
  ],
24
24
  "scripts": {
25
25
  "test": "node --test verification/*.test.mjs",
26
+ "manager:build": "npm --prefix manager run build",
26
27
  "skills:validate": "node bin/validate-skills.mjs",
27
28
  "audit:generate": "node audit/generate-all.mjs",
28
29
  "audit:verify": "node verification/audit/verify-audit.mjs",
@@ -37,5 +38,8 @@
37
38
  "engines": {
38
39
  "node": ">=18"
39
40
  },
40
- "license": "MIT"
41
+ "license": "MIT",
42
+ "devDependencies": {
43
+ "playwright-core": "^1.55.0"
44
+ }
41
45
  }
@@ -9,19 +9,21 @@ Produce a deterministic release selection and auditable material package. Do not
9
9
 
10
10
  ## Select The Version Closure
11
11
 
12
- 1. Build a JSON lineage input from registered version-closeout manifests. Include exactly one predecessor, status, candidate ID/commit, code Tag, workflow commit, workflow Tag, manifest path, and checksum per version.
13
- 2. Run `node scripts/plan-release.mjs --lineage <file> --release-id <id> --target <version> --requested-by <actor> --rationale <text> --workspace <workspace-root>`.
14
- 3. Preserve the JSON result as the source for `R01-version-selection`. Do not use `--skip-git` outside isolated contract tests.
15
- 4. Block on missing predecessors, branching, cycles, disconnected lineage, stale/ineligible versions, wrong `repo_id`, missing code or workflow Tags, workflow manifest checksum drift, backward targets, or any failed adjacent code/workflow ancestry edge. Checking only production-to-target reachability is insufficient.
12
+ 1. Read the immutable R00 release request first. It must name the production branch and record the exact request-time `main` snapshot commit (`expected_main`); it is the release base for this release ID.
13
+ 2. Build a JSON lineage input from registered version-closeout manifests. Include exactly one predecessor, status, candidate ID/commit, code Tag, workflow commit, workflow Tag, manifest path, and checksum per version.
14
+ 3. Run `node scripts/plan-release.mjs --lineage <file> --release-id <id> --target <version> --requested-by <actor> --rationale <text> --workspace <workspace-root>`. Its captured `release_base` must equal the R00 snapshot. Do not use `--skip-git` outside isolated contract tests.
15
+ 4. Preserve the JSON result as the source for `R01-version-selection`. The target's `version-ready/<version-id>/rN` value is an immutable Tag, never a branch.
16
+ 5. Block on missing predecessors, branching, cycles, disconnected lineage, stale/ineligible versions, wrong `repo_id`, missing code or workflow Tags, workflow manifest checksum drift, backward targets, a changed production branch, or any failed adjacent code/workflow ancestry edge. For an incremental release, the release base must be an ancestor of the target Tag; for a same-version redeploy, the target Tag must already be an ancestor of or equal to the release base. Checking only production-to-target reachability is insufficient.
16
17
 
17
18
  ## Aggregate Materials
18
19
 
19
20
  1. Copy the assets into `.workflow/releases/<release-id>/R03-material-aggregation/` and `R04-release-candidate/`.
20
21
  2. Add every actual requirement, product, architecture, prototype, source, image, configuration, migration, infrastructure, test, security, risk, operations, rollback, and observability item to `release-material-index.csv`. Code entries require `repo_id`, `code_commit`, optional `code_tag`, `source_path`, source version, original workflow path, and SHA-256.
21
- 3. Record every selected version and immutable identity in `version-inclusion.csv`. Intermediate versions provide traceability; build the release branch from only the exact target tag.
22
- 4. Create `release/<release-id>-<slug>` at the target tag. Apply release-only fixes through `release-fix/<release-id>/<defect-id>`, create a new candidate, and repeat affected verification.
23
- 5. Freeze `release-candidate-manifest.yaml` with the branch commit, image digest, material index checksum, environment/configuration snapshot requirements, and rollback image.
22
+ 3. Record every selected version and immutable identity in `version-inclusion.csv`. Intermediate versions provide traceability only; do not merge their Tags into the release branch.
23
+ 4. At R04 invoke `$ai-delivery-manage-git`'s controlled `scripts/release-git.mjs create-candidate` operation with `--release-id`, `--release-branch`, R00 `--expected-main`, exactly one `--source-tag` and its immutable `--source-commit`, plus `--receipt <path> --apply`. For an incremental release it creates `release/<release-id>-<slug>` at that snapshot and merges that one Tag with `--no-ff`; for a same-version redeploy whose target is already reachable from the snapshot, it records the snapshot itself as the candidate with no new merge. It returns the only authoritative candidate receipt. Omitting `--apply` is a zero-write plan. Do not substitute a movable line/version branch head, cherry-picks, or repeated Tag merges.
24
+ 5. Apply a release-only correction from the active candidate through `release-fix/<release-id>/<defect-id>`. A fix produces a new exact candidate identity and repeats all affected verification; it never rewrites historical version-ready Tags or manifests.
25
+ 6. Freeze `release-candidate-manifest.yaml` with the request-time `main` base, exact source Tag/commit, integration commit, branch commit, image digest, material index checksum, environment/configuration snapshot requirements, rollback image, and any release-fix identities.
24
26
 
25
- Same-version redeploy reuses immutable application identities but regenerates the release-scoped indexes, snapshots, verification, approval, deployment, and archive evidence.
27
+ Same-version redeploy reuses immutable application identities but regenerates the release-scoped indexes, snapshots, verification, approval, deployment, and archive evidence. A release-fix still advances the product-line candidate inventory through a distinct immutable successor; it never rewrites the predecessor inventory.
26
28
 
27
29
  Read [release-assembly-contract.md](references/release-assembly-contract.md) before aggregation.
@@ -1,14 +1,25 @@
1
- schema_version: 2
1
+ schema_version: 3
2
2
  release_id: "REL-0001"
3
3
  release_candidate_id: "RC-0001"
4
4
  mode: "incremental"
5
5
  target_version: "VER-0005"
6
- source_tag: "version-ready/VER-0005/r1"
6
+ release_branch: "release/REL-0001-short-slug"
7
+ release_base:
8
+ production_branch: "main"
9
+ commit: "<git-sha>"
10
+ captured_at: "<RFC3339>"
11
+ release_merge:
12
+ strategy: "no-ff-single-version-ready-tag"
13
+ merge_created: true # False when a same-version target is already in the release base.
14
+ source_tag: "version-ready/VER-0005/r1"
15
+ source_commit: "<git-sha>"
16
+ commit: "<git-sha>" # Null when merge_created is false.
17
+ candidate_receipt_ref: ".workflow/releases/REL-0001/R04-release-candidate/candidate-receipt.json"
7
18
  repository:
8
19
  repo_id: "app"
9
20
  source_path: "code"
10
- code_commit: "<git-sha>"
11
- code_tag: "version-ready/VER-0005/r1"
21
+ code_commit: "<git-sha>" # Exact candidate commit: incremental merge result or same-version release base, never a mutable branch head.
22
+ code_tag: "release/REL-0001/r1"
12
23
  workflow_identity:
13
24
  workflow_commit: "<workflow-git-sha>"
14
25
  workflow_tag: "workflow-ready/VER-0005/r1"
@@ -19,4 +30,5 @@ material_index_sha256: "<sha256>"
19
30
  configuration_baseline_sha256: "<sha256>"
20
31
  migration_set_sha256: "<sha256>"
21
32
  rollback_image_digest: "sha256:<previous-digest>"
33
+ release_fixes: []
22
34
  status: "immutable"
@@ -1,9 +1,99 @@
1
- schema_version: 1
1
+ schema_version: 2
2
2
  release_id: "REL-0001"
3
- source_tag: "version-ready/VER-0005/r1"
4
- source_commit: "<git-sha>"
5
- release_branch: "release/REL-0001-short-slug"
3
+ product_id: "PRODUCT-001"
6
4
  production_branch: "main"
7
- line_branch: "line/PRODUCT-001"
8
- merge_intermediate_tags: false
5
+ release_branch: "release/REL-0001-short-slug"
6
+ release_base:
7
+ expected_main: "<git-sha>"
8
+ captured_at: "<RFC3339>"
9
+ request_artifact: ".workflow/releases/REL-0001/R00-release-request/release-request.yaml"
10
+ target_version:
11
+ version_id: "VER-0005"
12
+ source_tag: "version-ready/VER-0005/r1"
13
+ source_commit: "<git-sha>"
14
+ source_relation_to_release_base: "incremental: target-descends-from-release-base; same-version-redeploy: target-already-in-release-base"
15
+ candidate_operation:
16
+ command: "release-git.mjs create-candidate"
17
+ required_arguments:
18
+ - "--release-id REL-0001"
19
+ - "--release-branch release/REL-0001-short-slug"
20
+ - "--expected-main <git-sha>"
21
+ - "--source-tag version-ready/VER-0005/r1"
22
+ - "--source-commit <git-sha>"
23
+ - "--receipt <path>"
24
+ - "--apply"
25
+ merge_strategy: "no-ff-single-version-ready-tag"
26
+ merge_created: true # False when a same-version target is already in the release base.
27
+ merge_intermediate_tags: false
28
+ release_candidate_commit: null
29
+ receipt_fields:
30
+ - "operation: create-release-candidate"
31
+ - "release_base_commit"
32
+ - "source_ref"
33
+ - "source_commit"
34
+ - "candidate_commit"
35
+ - "status: planned | applied | idempotent"
36
+ receipt_ref: null
37
+ status: "pending-controlled-git-operation"
38
+ promotion_operation:
39
+ command: "release-git.mjs promote"
40
+ required_arguments:
41
+ - "--release-id REL-0001"
42
+ - "--release-branch release/REL-0001-short-slug"
43
+ - "--expected-main <git-sha>"
44
+ - "--verified-release-commit <git-sha>"
45
+ - "--production-verification .workflow/releases/REL-0001/R09-production-verification/production-verification.json"
46
+ - "--receipt <path>"
47
+ - "--apply"
48
+ verified_release_commit: null
49
+ receipt_fields:
50
+ - "operation: promote-release-candidate"
51
+ - "production_verification.path"
52
+ - "production_verification.sha256"
53
+ - "old_main_head"
54
+ - "new_main_head"
55
+ - "status: planned | applied | idempotent"
56
+ receipt_ref: null
57
+ status: "pending-production-verification"
58
+ release_fix_synchronization:
59
+ line_branch: "line/PRODUCT-001"
60
+ command: "release-git.mjs sync-release-fix"
61
+ required_arguments:
62
+ - "--release-id REL-0001"
63
+ - "--source-ref release-fix/REL-0001/DEFECT-001"
64
+ - "--source-commit <git-sha>"
65
+ - "--verified-release-commit <git-sha>"
66
+ - "--expected-line <git-sha>"
67
+ - "--production-verification .workflow/releases/REL-0001/R09-production-verification/production-verification.json"
68
+ - "--candidate-inventory .workflow/releases/REL-0001/R10-release-archive/candidate-inventory.json"
69
+ - "--successor-candidate-inventory .workflow/releases/REL-0001/R10-release-archive/candidate-inventory-successor.json"
70
+ - "--receipt <path>"
71
+ - "--apply"
72
+ required_before_archive: true
73
+ expected_line: "<git-sha>"
74
+ candidate_inventory_contract:
75
+ schema_version: 2
76
+ scope: "product-line"
77
+ product_id: "PRODUCT-001"
78
+ line_branch: "line/PRODUCT-001"
79
+ root_release_id: forbidden
80
+ candidate_fields:
81
+ - "candidate_id"
82
+ - "release_id"
83
+ - "candidate_commit"
84
+ - "status"
85
+ successor_is_immutable: true
86
+ receipt_fields:
87
+ - "operation: synchronize-release-fix-to-line"
88
+ - "old_line_head"
89
+ - "new_line_head"
90
+ - "stale_candidate_ids"
91
+ - "candidate_status_updates"
92
+ - "production_verification.sha256"
93
+ - "candidate_inventory.sha256"
94
+ - "successor_candidate_inventory.path"
95
+ - "successor_candidate_inventory.sha256"
96
+ - "successor_candidate_inventory_write.status"
97
+ - "status: planned | applied | idempotent"
98
+ receipt_refs: []
9
99
  rollback_branch_allowed: false
@@ -1,2 +1,2 @@
1
1
  item_id,category,source_version_id,artifact_id,repo_id,code_commit,code_tag,source_path,original_workflow_path,sha256,target_environment,apply_order,verification,rollback_or_recovery
2
- ITEM-0001,container-image,VER-0001,ART-IMAGE-0001,app,<git-sha>,version-ready/VER-0001/r1,code,.workflow/iterations/VER-0001/12-version-closeout/version-manifest.yaml,<sha256>,production,10,verify image digest,deploy previous immutable image digest
2
+ ITEM-0001,container-image,VER-0001,ART-IMAGE-0001,app,<git-sha>,version-ready/VER-0001/r1,code,.workflow/iterations/VER-0001/06-version-closeout/version-manifest.yaml,<sha256>,production,10,verify image digest,deploy previous immutable image digest
@@ -1,2 +1,2 @@
1
- sequence,version_id,predecessor_version_id,candidate_id,candidate_commit,version_ready_tag,manifest_path,manifest_sha256,inclusion_type
2
- 1,VER-0001,,CAND-0001,<git-sha>,version-ready/VER-0001/r1,.workflow/iterations/VER-0001/12-version-closeout/version-manifest.yaml,<sha256>,dependency-closure
1
+ sequence,version_id,predecessor_version_id,candidate_id,candidate_commit,version_ready_tag,manifest_path,manifest_sha256,inclusion_type,release_code_role
2
+ 1,VER-0001,,CAND-0001,<git-sha>,version-ready/VER-0001/r1,.workflow/iterations/VER-0001/06-version-closeout/version-manifest.yaml,<sha256>,dependency-closure,incremental-target-tag-merged-once-or-same-version-already-reachable
@@ -1,7 +1,21 @@
1
1
  # Release Assembly Contract
2
2
 
3
- Treat the target version tag as the only code source for a release candidate. Never assemble code by merging every intermediate tag and never use a movable branch head as the source.
3
+ ## Candidate Identity
4
+
5
+ At R00, freeze the exact request-time production branch head as `expected_main`. A release candidate is not a checkout of the target Tag. For an incremental release, the controlled Git operation creates `release/<release-id>-<slug>` at that exact commit, confirms that `main` still equals it and that it is an ancestor of the selected target, then merges exactly one target `version-ready/<version-id>/rN` Tag with `--no-ff`. The resulting merge commit is the release-candidate identity. For a same-version redeploy, the selected target Tag must already be an ancestor of or equal to `expected_main`; no merge is created and the exact snapshot commit is the release-candidate identity.
6
+
7
+ The target Tag is immutable and resolves to the target version's `candidate_commit`. Never merge every intermediate Tag, use a movable branch head, or replace the single incremental target merge with cherry-picks. Intermediate versions appear only in the continuous dependency closure and material traceability. If `main` moves after R00 or before candidate acceptance, preserve the abandoned evidence as `stale` and start a new release request/snapshot; do not retarget the existing release branch.
8
+
9
+ `release-git.mjs create-candidate` receives `--release-id`, `--release-branch`, `--expected-main`, `--source-tag`, the resolved `--source-commit`, `--receipt`, and explicit `--apply`. Its receipt records `operation: create-release-candidate`, `release_id`, production branch, release branch, `release_base_commit`, `source_ref`, `source_commit`, `candidate_commit`, whether a merge was created, merge strategy, and `planned`, `applied`, or `idempotent` status. The candidate commit, not the branch's later head, is what R05 through R09 verify, approve, deploy, Tag, and ultimately promote.
10
+
11
+ ## Materials And Closure
4
12
 
5
13
  The material index is exhaustive for actual changes and contains stable item ID, category, source version, source artifact ID/path/checksum, target environment, application order, verification, and rollback/recovery action. Do not record secret values.
6
14
 
7
- Require every adjacent version in the full dependency closure through the target, including already produced history, to descend from its predecessor in both the code repository (`candidate_commit`) and workflow repository (`workflow_commit`). Production-to-target reachability alone cannot prove that an intermediate version is included. Repeat the full closure check for same-version redeploy. A production hotfix must first be synchronized into `line/<product-id>`; candidates that do not contain it are `stale`. When current production equals target, emit `same-version-redeploy`, an empty newly included range, and a fresh release identity.
15
+ Require every adjacent version in the full dependency closure through the target, including already produced history, to descend from its predecessor in both the code repository (`candidate_commit`) and workflow repository (`workflow_commit`). Production-to-target reachability alone cannot prove that an intermediate version is included. Repeat the full closure check for same-version redeploy. When current production equals target, emit `same-version-redeploy`, an empty newly included range, and a fresh release identity.
16
+
17
+ ## Release-Fix Reconciliation
18
+
19
+ Create `release-fix/<release-id>/<defect-id>` only from the active release candidate. After the corrected candidate has passed affected verification and production verification has decided `released`, freeze the R09 `production-verification.json` decision and a schema-2 R10 product-line `candidate-inventory.json` before synchronizing its fix commit into `line/<product-id>` through the protected `sync-release-fix` operation. The inventory has `scope: product-line`, `product_id`, `line_branch`, active candidate ID/commit, and all product-line candidate records. Each record retains its own `release_id`, ID, commit, and status; the root has no release ID. The operation checks that the active and verified records belong to the release being synchronized, derives stale updates instead of accepting a stale-candidate argument, and writes a separate immutable successor inventory rather than updating the source snapshot. Record its JSON receipt with the release ID, source ref/commit, verified release commit, old/new line heads, merge strategy, predecessor/successor inventory evidence bindings, derived stale candidate IDs/status updates, and status.
20
+
21
+ Invoke it with `--candidate-inventory <predecessor>` and, for `--apply`, a distinct unused `--successor-candidate-inventory <successor>`. If the fix commit is already reachable from the line, `release-git.mjs sync-release-fix` returns `status: idempotent` with unchanged old/new line heads rather than changing history, and only accepts the exact already-written successor on replay. Historical version-ready Tags and manifests remain immutable. The receipt marks every selectable candidate in the product line that does not contain a production-successful fix `stale`; it cannot be selected until recreated from current lineage. Subsequent synchronization begins from that successor inventory.
@@ -69,6 +69,7 @@ function repositoriesFromWorkspace(workspaceRoot) {
69
69
  codeRepo,
70
70
  workflowRepo: root,
71
71
  repoId,
72
+ productionBranch: value(codeSection, "default_branch") || "main",
72
73
  codeRemote: value(codeSection, "remote"),
73
74
  workflowRemote: value(workflowSection, "remote"),
74
75
  };
@@ -134,6 +135,72 @@ function validateRemoteTag(remote, tag, expectedCommit) {
134
135
  }
135
136
  }
136
137
 
138
+ function validateRemoteBranch(remote, branch, expectedCommit) {
139
+ if (!remote) return;
140
+ const reference = `refs/heads/${branch}`;
141
+ const result = spawnSync("git", ["ls-remote", "--heads", remote, reference], {
142
+ encoding: "utf8",
143
+ windowsHide: true,
144
+ });
145
+ if (result.status !== 0) {
146
+ throw new Error(`Remote branch validation failed for ${branch}: ${result.stderr.trim()}`);
147
+ }
148
+ const commits = result.stdout.split(/\r?\n/).filter(Boolean).map((line) => line.split(/\s+/)[0].toLowerCase());
149
+ if (!commits.length) throw new Error(`Remote is missing production branch ${branch}: ${remote}`);
150
+ if (!commits.includes(expectedCommit.toLowerCase())) {
151
+ throw new Error(
152
+ `Remote production branch ${branch} drifted from the captured main commit ${expectedCommit}; refresh the release request.`,
153
+ );
154
+ }
155
+ }
156
+
157
+ function validateReleaseBase(repo, branch, currentProduction, remote) {
158
+ const reference = `refs/heads/${branch}`;
159
+ const commit = git(repo, ["rev-parse", "--verify", `${reference}^{commit}`]);
160
+ validateRemoteBranch(remote, branch, commit);
161
+ if (currentProduction) {
162
+ const result = spawnSync(
163
+ "git",
164
+ ["merge-base", "--is-ancestor", currentProduction.candidate_commit, commit],
165
+ { cwd: repo, encoding: "utf8", windowsHide: true },
166
+ );
167
+ if (result.status !== 0) {
168
+ throw new Error(
169
+ `Production branch ${branch} is not descended from current production ${currentProduction.version_id}; refusing a divergent release base.`,
170
+ );
171
+ }
172
+ }
173
+ return commit;
174
+ }
175
+
176
+ function validateTargetContainsReleaseBase(repo, branch, releaseBase, target) {
177
+ if (releaseBase.toLowerCase() === String(target.candidate_commit).toLowerCase()) {
178
+ throw new Error(
179
+ `Target ${target.version_ready_tag} equals captured production branch ${branch} commit ${releaseBase}; an incremental release target must strictly descend from the R00 main snapshot.`,
180
+ );
181
+ }
182
+ const targetAlreadyReachable = spawnSync(
183
+ "git",
184
+ ["merge-base", "--is-ancestor", target.candidate_commit, releaseBase],
185
+ { cwd: repo, encoding: "utf8", windowsHide: true },
186
+ );
187
+ if (targetAlreadyReachable.status === 0) {
188
+ throw new Error(
189
+ `Target ${target.version_ready_tag} is already reachable from captured production branch ${branch} commit ${releaseBase}; an incremental release target must strictly descend from the R00 main snapshot.`,
190
+ );
191
+ }
192
+ const result = spawnSync(
193
+ "git",
194
+ ["merge-base", "--is-ancestor", releaseBase, target.candidate_commit],
195
+ { cwd: repo, encoding: "utf8", windowsHide: true },
196
+ );
197
+ if (result.status !== 0) {
198
+ throw new Error(
199
+ `Captured production branch ${branch} commit ${releaseBase} is not an ancestor of target ${target.version_ready_tag}; recreate the version candidate before release.`,
200
+ );
201
+ }
202
+ }
203
+
137
204
  function validateAdjacentAncestry(repo, selected, currentProduction, commitField, label) {
138
205
  const chain = currentProduction
139
206
  ? [currentProduction, ...selected.filter((version) => version.version_id !== currentProduction.version_id)]
@@ -199,9 +266,21 @@ export function planRelease(lineage, request, options = {}) {
199
266
  }
200
267
 
201
268
  const target = ordered[targetIndex];
269
+ const sameVersionRedeploy = targetIndex === currentIndex;
202
270
  const newlyIncluded = ordered.slice(currentIndex + 1, targetIndex + 1);
203
- const releaseEvidence = targetIndex === currentIndex ? [target] : newlyIncluded;
271
+ const releaseEvidence = sameVersionRedeploy ? [target] : newlyIncluded;
204
272
  const dependencyClosure = ordered.slice(0, targetIndex + 1);
273
+ const productionBranch = options.productionBranch || "main";
274
+ const currentProduction = currentIndex < 0 ? null : ordered[currentIndex];
275
+ let releaseBaseCommit = null;
276
+ if (!sameVersionRedeploy
277
+ && currentProduction?.candidate_commit
278
+ && target.candidate_commit
279
+ && String(currentProduction.candidate_commit).toLowerCase() === String(target.candidate_commit).toLowerCase()) {
280
+ throw new Error(
281
+ `Incremental target ${target.version_id} reuses current production ${currentProduction.version_id} candidate commit; use same-version redeploy instead.`,
282
+ );
283
+ }
205
284
  for (const version of releaseEvidence) {
206
285
  if (!ELIGIBLE_STATUSES.has(version.status)) {
207
286
  throw new Error(`Version ${version.version_id} is not eligible for release: ${version.status || "missing status"}.`);
@@ -221,6 +300,20 @@ export function planRelease(lineage, request, options = {}) {
221
300
  }
222
301
 
223
302
  if (!options.skipGit) {
303
+ releaseBaseCommit = validateReleaseBase(
304
+ path.resolve(options.repo || process.cwd()),
305
+ productionBranch,
306
+ currentProduction,
307
+ options.codeRemote || null,
308
+ );
309
+ if (!sameVersionRedeploy) {
310
+ validateTargetContainsReleaseBase(
311
+ path.resolve(options.repo || process.cwd()),
312
+ productionBranch,
313
+ releaseBaseCommit,
314
+ target,
315
+ );
316
+ }
224
317
  validateGit(
225
318
  path.resolve(options.repo || process.cwd()),
226
319
  dependencyClosure,
@@ -244,7 +337,7 @@ export function planRelease(lineage, request, options = {}) {
244
337
  target_environment: "production",
245
338
  current_production_version: currentId,
246
339
  target_version: target.version_id,
247
- mode: targetIndex === currentIndex ? "same-version-redeploy" : "incremental",
340
+ mode: sameVersionRedeploy ? "same-version-redeploy" : "incremental",
248
341
  newly_included_versions: newlyIncluded.map((version) => version.version_id),
249
342
  dependency_closure: dependencyClosure.map((version) => version.version_id),
250
343
  target: {
@@ -262,6 +355,29 @@ export function planRelease(lineage, request, options = {}) {
262
355
  requires_fresh_verification: true,
263
356
  requires_fresh_approval: true,
264
357
  rollback_strategy: "previous-immutable-image-digest",
358
+ release_base: {
359
+ branch: productionBranch,
360
+ commit: releaseBaseCommit,
361
+ status: releaseBaseCommit ? "captured" : "pending-git-validation",
362
+ target_relation: sameVersionRedeploy
363
+ ? "target-already-in-release-base"
364
+ : "target-must-descend-from-release-base",
365
+ },
366
+ release_merge: {
367
+ strategy: sameVersionRedeploy ? "target-already-in-release-base" : "no-ff-single-version-ready-tag",
368
+ source_tag: target.version_ready_tag,
369
+ source_commit: target.candidate_commit,
370
+ merge_commit: null,
371
+ merge_created: !sameVersionRedeploy,
372
+ status: "pending-controlled-git-operation",
373
+ },
374
+ release_candidate: {
375
+ commit: sameVersionRedeploy ? releaseBaseCommit : null,
376
+ identity_source: sameVersionRedeploy
377
+ ? "release-base-when-target-already-reachable"
378
+ : "release-branch-head-after-merge",
379
+ status: "pending-controlled-git-operation",
380
+ },
265
381
  };
266
382
  }
267
383
 
@@ -270,7 +386,14 @@ function main(argv) {
270
386
  const lineageFile = path.resolve(required(options, "--lineage"));
271
387
  const configured = options.get("--workspace")
272
388
  ? repositoriesFromWorkspace(options.get("--workspace"))
273
- : { codeRepo: process.cwd(), workflowRepo: process.cwd(), repoId: null, codeRemote: null, workflowRemote: null };
389
+ : {
390
+ codeRepo: process.cwd(),
391
+ workflowRepo: process.cwd(),
392
+ repoId: null,
393
+ productionBranch: "main",
394
+ codeRemote: null,
395
+ workflowRemote: null,
396
+ };
274
397
  const result = planRelease(readLineage(lineageFile), {
275
398
  release_id: required(options, "--release-id"),
276
399
  target_version: required(options, "--target"),
@@ -280,6 +403,7 @@ function main(argv) {
280
403
  repo: options.get("--repo") || configured.codeRepo,
281
404
  workflowRepo: options.get("--workflow-repo") || configured.workflowRepo,
282
405
  repoId: configured.repoId,
406
+ productionBranch: options.get("--production-branch") || configured.productionBranch || "main",
283
407
  codeRemote: configured.codeRemote,
284
408
  workflowRemote: configured.workflowRemote,
285
409
  skipGit: options.get("--skip-git") === true,
@@ -32,8 +32,8 @@ When inspection returns `workflow-ready`, there are no task shards, and the form
32
32
 
33
33
  1. Run `node .workflow/tools/bootstrap/bootstrap.mjs bootstrap` to create the observed bootstrap context.
34
34
  2. Start development scope `INIT-0001` through the formal state CLI.
35
- 3. Register `TASK-INIT-0001-00` for `00-bootstrap` and `TASK-INIT-0001-01` for `01-product-discovery`, with the latter depending on the former.
36
- 4. Finish the bootstrap task only after its report and handoff evidence are registered, then activate the discovery task.
35
+ 3. Register `TASK-INIT-0001-00` for `00-bootstrap` and `TASK-INIT-0001-01` for `01-product-shaping`, with the latter depending on the former.
36
+ 4. Finish the bootstrap task only after its report and handoff evidence are registered, then activate the Product Shaping task.
37
37
  5. Let `task-state.mjs` resolve `code_branch` and `code_commit` from the authoritative `.workflow/config/workspace.yaml`; never use the install manifest copy or record the workflow Git identity as code identity.
38
38
 
39
39
  The first product question is the safe stopping point. Do not invent the initial business need and do not leave product artifacts outside an initialized task.
@@ -44,13 +44,13 @@ The first product question is the safe stopping point. Do not invent the initial
44
44
  - `codebase-uninitialized`: use packaged `ai-delivery bootstrap`, review the repository baseline, inventory, context index, and adoption assessment, then invoke `$ai-delivery-define-product` to distinguish observed behavior from intended product behavior.
45
45
  - `workflow-interrupted`: do not write bootstrap artifacts. If `runtime.next_action_owner` is `user`, return the recorded `next_action` as the single business question and perform no recovery, activation, checkpoint, task, artifact, or Git mutation. If it is `external`, report the recorded wait condition without mutation. Only an `agent`-owned next action may invoke `$ai-delivery-checkpoint-task recover`, reconcile reality, inspect the pending Evolution queue without applying changes mid-task, and continue `recommended_task_id`. When required input arrives, transfer ownership with both `--next-action-owner agent` and a new idempotent `--next-action`.
46
46
  - `workflow-ready`: when a queued task is recommended, first apply the same `next_action_owner` boundary; activate it through `$ai-delivery-checkpoint-task` only when the owner is `agent`. Otherwise use the reported specialist skill or `$ai-delivery-orchestrate` to derive the next development node. Treat `release-ready` versions as completed development evidence, not implicit release intent. Route to `$ai-delivery-orchestrate-release` only when the user explicitly requests a release.
47
- - `workflow-inconsistent`: stop automatic mutation, run the available project/package doctor internally, report exact conflicts, and obtain a repair decision. Never use `--force` unless the user explicitly approves replacing the reported managed files.
47
+ - `workflow-inconsistent`: stop automatic mutation, run the available project/package doctor internally, report exact conflicts, and obtain a repair decision. An installed project must use packaged `upgrade --dry-run` for managed installation drift and `migrate --dry-run` for legacy schema, task grouping, anchor, or archive conflicts rather than repeat `init`. Structural migration copies legacy-root workflow material, adds explicit task attempts, and preserves lifecycle and scope facts; grouping ambiguities require a source-checksum-bound `--decisions` document with a `human:` actor and rationale. Route an approved premature-archive correction through packaged `repair --invalidate-archive` with a human actor, reason, RCA evidence, and recovery evidence; the original archive remains immutable. Use `upgrade --force` only when the user explicitly approves replacing the reported managed files.
48
48
 
49
49
  ## Brownfield Rules
50
50
 
51
51
  Treat repository scans as observations, not approved product or architecture truth. Keep generated artifacts `draft`. Exclude secrets, dependency/build directories, workflow internals, and files outside the project. Verify inferred commands before recording them as supported.
52
52
 
53
- Do not replace existing product, architecture, test, or release baselines. Register the project-state report, preserve every timestamped bootstrap run, and update only the `.workflow/delivery/bootstrap/latest.yaml` pointer.
53
+ Do not replace existing product, architecture, test, or release baselines. Keep the project-state report and related observations outside the formal artifact registry while they remain working drafts, preserve every timestamped bootstrap run, and update only the `.workflow/delivery/bootstrap/latest.yaml` pointer.
54
54
 
55
55
  ## Resume Boundary
56
56
 
@@ -28,6 +28,8 @@ After installation, `node .workflow/tools/bootstrap/bootstrap.mjs inspect` is th
28
28
 
29
29
  `ai-delivery bootstrap <project-root>` may initialize only `empty-uninitialized` and `codebase-uninitialized` projects through the project-scoped installer. Preserve existing code and configuration. On partial or conflicting installation, return `workflow-inconsistent` without writes. `--force` is allowed only after explicit user approval.
30
30
 
31
+ For an installed legacy or conflicting state, keep Bootstrap read-only. Use packaged `migrate --dry-run` to report schema conversion, semantic task groups and ambiguities, state/archive conflicts, verified anchors, and exact file changes. A legacy root migration copies `delivery/`, `control/`, and `standards/` into `.workflow/` while preserving source bytes; flat task shards gain explicit attempts with checksummed rollback backups. Resolve grouping ambiguities only through a checksum-bound `--decisions` document with a `human:` actor and rationale. Migration must not activate or close tasks, infer completion, change scope, or rewrite legacy events. Incorrect archives require the separate packaged `repair --invalidate-archive` forward transaction with an explicit human actor, reason, RCA evidence, and recovery evidence; the original archive bytes remain authoritative history.
32
+
31
33
  For an uninitialized project, generate repository inventory and context artifacts from the first read-only scan snapshot. Do not let installer-generated `AGENTS.md`, `.gitignore`, Hook, skill, standard, or delivery files contaminate the observed pre-install codebase baseline.
32
34
 
33
35
  When an active or dependency-ready runtime task exists, defer to its task contract and write no bootstrap artifacts. An `agent`-owned next action routes to checkpoint recovery. A `user`-owned next action returns the recorded question verbatim and forbids all task, checkpoint, artifact, formal-state, and Git mutation until the user answers. An `external`-owned next action reports the wait condition and also forbids mutation. Read-only inspection must return `mutation_allowed: false` for the latter two cases.
@@ -46,7 +48,7 @@ For a newly initialized project or a ready project without a recoverable task, c
46
48
  bootstrap-plan.yaml
47
49
  ```
48
50
 
49
- Register `project-state-report.yaml` through `.workflow/tools/state/state.mjs artifact register`. Keep every generated artifact `draft`. Bootstrap code must call the shared formal-state module and must not parse and rewrite the registry itself.
51
+ Keep every generated artifact `draft` and do not register it in the formal artifact registry. `project-state-report.yaml` remains discoverable through the checksummed `.workflow/delivery/bootstrap/latest.yaml` pointer until a later workflow node creates an immutable semantic revision. Bootstrap code must not parse or rewrite the registry itself.
50
52
 
51
53
  ## Artifact Meaning
52
54
 
@@ -61,7 +63,7 @@ Register `project-state-report.yaml` through `.workflow/tools/state/state.mjs ar
61
63
 
62
64
  Natural-language startup is the public user interface. The AI must translate “开始”, “继续”, “下一步”, status questions, product ideas, and release intent into internal Skill and CLI calls; it must never delegate workflow command selection or execution to the user.
63
65
 
64
- For a ready installation with no formal delivery artifact and no task shard, initialize the deterministic `INIT-0001` bootstrap/discovery task pair before writing product material. This is runtime state, unlike the draft tasks in `bootstrap-plan.yaml`. Resolve every shared task's code identity from the nested repository configured by `.workflow/config/workspace.yaml`, never from the install manifest or workflow repository.
66
+ For a ready installation with no formal delivery artifact and no task shard, initialize the deterministic `INIT-0001` Bootstrap/Product Shaping task pair before writing product material. This is runtime state, unlike the draft tasks in `bootstrap-plan.yaml`. Resolve every shared task's code identity from the nested repository configured by `.workflow/config/workspace.yaml`, never from the install manifest or workflow repository.
65
67
 
66
68
  For an empty project, hand off to `$ai-delivery-define-product` and ask for the problem to solve, target users, and success measure one decision at a time.
67
69
 
@@ -11,6 +11,10 @@ Treat explicit task snapshots as authoritative. Treat Hook events as an audit tr
11
11
 
12
12
  Write portable task state to `.workflow/control/tasks/<task-id>.yaml` and `.workflow/control/checkpoints/<task-id>/<checkpoint-id>.yaml`. Keep only PID, heartbeat, temporary locks, raw Hook events, and unshared context under ignored `.workflow/delivery/runtime/`. Keep durable node documents under `.workflow/iterations/<iteration-id>/<node-id>/`; runtime snapshots never replace registered delivery artifacts. Resolve code branch and commit from `.workflow/config/workspace.yaml` and the nested code repository.
13
13
 
14
+ ## Legacy Node Boundary
15
+
16
+ Legacy development nodes are read-only compatibility. `inspect` remains a strictly read-only diagnosis path for historical tasks. `init`, `activate`, `checkpoint`, `finish`, and `archive-version` reject legacy task targets before mutation or Hook dispatch; `recover` refuses to materialize them and `publish` refuses to share them. New tasks use only the `development-seven-node` route, while `R00-release-request` through `R10-release-archive` remain writable.
17
+
14
18
  ## Start Or Resume
15
19
 
16
20
  1. Locate the project root and shared state root.
@@ -25,6 +29,16 @@ Write portable task state to `.workflow/control/tasks/<task-id>.yaml` and `.work
25
29
 
26
30
  Use statuses `queued`, `preparing`, `running`, `checkpointed`, `pending-review`, `blocked`, `interrupted`, `completed`, `failed`, and `abandoned`.
27
31
 
32
+ ## Stable Logical Tasks And Attempts
33
+
34
+ Keep one stable logical task identity while iteration, node, skill, goal, scope, responsibility, dependencies, and acceptance remain unchanged. Register those fields with `init`, including repeatable `--scope` and `--acceptance` values plus `--responsibility`; every new task is initialized as `queued`, and any other requested status is rejected. Repeating the same `init` is zero-write and idempotent; attempting to register the same logical contract under another task ID is rejected. If any logical contract field changes, create a new task ID and link it with `--derived-from <task-id>` or `--supersedes <task-id>`; never encode planning, review, triage, repair, test, or version rounds in a new task-name suffix.
35
+
36
+ A queued task has no attempt and cannot be checkpointed or finished; `activate --phase <phase>` creates attempt `A1`. Phase status is derived from the task transition, and `--phase-status` is not supported. Record planning, implementation, review, triage, repair, test, verification, and handoff as structured phases. Entering a review phase captures its immutable `review_subject_baseline`; later approval fails if Git changed during feedback collection. Record a review or test finding with `--finding-json <json>`; finding records are append-only, and the latest record with the same ID is its current task-level conclusion. Close feedback collection in the review phase with `--change-set-json <json>` containing `change_set_id`, `approval_actor`, `rationale`, exact `finding_ids`, repository-relative `allowed_files`, `expected_evidence`, `review_axes`, and `collection_decision`. The CLI promotes the pinned subject to `repair_baseline`, persists the canonical `feedback_collection`, and computes its SHA-256 `collection_checksum`; a caller-supplied checksum is optional and must match. A `resolved` record must reference an existing open finding and recorded approved change set, be written during concentrated rereview in the review phase, carry the expected evidence, and declare `changed_files` exactly equal to the real Git changes since approval and within the allowed files. `completed` is refused while any current blocking finding is still `open`. Optionally attribute elapsed time with paired `--time-category <category> --elapsed-minutes <minutes>`. A failed attempt cannot satisfy dependencies. Retry the unchanged task only with `activate --new-attempt --phase repair`; this creates the next attempt under the same task ID. A later task becomes dependency-ready only after the logical task itself reaches `completed`.
37
+
38
+ During review, finish feedback collection across the pinned subject before any repair begins. Group every current open finding into one immutable approved `--change-set-json` record; the executor applies only that set in a repair phase and records its evidence before concentrated rereview. Never interleave code changes with feedback collection or add an unapproved finding or file to the active set.
39
+
40
+ Run `scripts/task-state.mjs inspect --task-id <task-id> --include-closed` for strict read-only diagnosis. It returns source reconciliation, dependency state, attempt totals, current phase, and time by category without hydrating runtime, writing a resume, checkpointing, or changing Git state.
41
+
28
42
  ## Checkpoint
29
43
 
30
44
  Checkpoint after every externally meaningful milestone, before a long command, after test or review evidence, before context compaction, and before returning control. Keep `next_action` concrete and idempotent and set `next_action_owner` to `agent`, `user`, or `external`. Store decisions in their owning product, architecture, design, standard, or release artifact rather than in runtime notes alone. Repeated evidence references are idempotent and must remain unique.
@@ -33,7 +47,7 @@ Checkpoint after every externally meaningful milestone, before a long command, a
33
47
 
34
48
  1. Validate expected outputs and update the artifact registry through `.workflow/tools/state/state.mjs`.
35
49
  2. Record evidence, actual outputs, residual blockers, and the next workflow action.
36
- 3. Atomically set `completed`, `blocked`, `failed`, `interrupted`, or explicitly `abandoned`. Treat `completed`, `failed`, and `abandoned` as closed tasks and omit them from default recovery output without archiving them individually.
50
+ 3. Atomically set `completed`, `blocked`, `failed`, `interrupted`, or explicitly `abandoned`. Closed statuses `completed`, `failed`, and `abandoned` may be written only by `finish`, never `checkpoint`. Treat them as closed for historical counts and archival eligibility. Default recovery omits `completed` and `abandoned`, but returns `failed` as retryable work until a new attempt completes or the version is abandoned.
37
51
  4. After the task snapshot succeeds, update formal workflow state only through `.workflow/tools/state/state.mjs`, then run its `verify` command.
38
52
  5. Invoke `$ai-delivery-evolve-workflow evaluate --safe-point task` after the task and formal-state writes are complete. Apply any newly eligible extension only to the next task; do not change the task that just finished.
39
53
  6. Never mark production deployment complete from a Hook event.
@@ -43,14 +57,14 @@ Checkpoint after every externally meaningful milestone, before a long command, a
43
57
  1. Use the iteration version as the archive unit; never archive one completed task independently.
44
58
  2. Require version status `release-ready`, `released`, or `abandoned` and at least one completion evidence reference. Require `candidate_id` for `release-ready`; require `release_id` for `released`.
45
59
  3. Refuse archival while any version task is queued, preparing, running, checkpointed, pending review, blocked, or interrupted.
46
- 4. Write the portable archive manifest, task snapshots, and shared checkpoints under `.workflow/control/archives/versions/<version-id>/`. Retain detailed local event, heartbeat, and recovery copies under ignored runtime by default; use `--portable-only` to omit that disposable, non-authoritative copy.
60
+ 4. Before writing any archive file, require `state.mjs snapshot references` to project the target version from the latest trusted version-boundary anchor. Fail closed unless it returns the scope manifest, selected candidate, Gate decisions, and history anchor. Then write the portable archive manifest, task snapshots, and shared checkpoints under `.workflow/control/archives/versions/<version-id>/`. The manifest references checksummed task summary files and the complete referenced attempt values within that archive, plus every formal projection by relative path and checksum rather than copying their bodies. Retain detailed local event, heartbeat, and recovery copies under ignored runtime by default; use `--portable-only` to omit that disposable, non-authoritative copy.
47
61
  5. Only after the portable archive is complete, remove the version's shards from `.workflow/control/tasks/` and `.workflow/control/checkpoints/` and remove local active records. Normal recovery scans active collections only and must not load archived details, even with `--include-closed`.
48
62
 
49
63
  ## Recover
50
64
 
51
65
  Use shared shards and the newest shared checkpoint as the portable recovery source. If local runtime is absent and `next_action_owner` is `agent`, `recover` restores it from shared state. For `user` or `external`, report the wait state without hydration; after the input arrives, `activate` performs the atomic hydration and owner transfer. If local and shared revisions or semantic checksums differ, stop for reconciliation. Inspect both Git repositories before resuming. Report pending `.workflow/delivery/runtime/evolution/pending/` events, but defer their evaluation until the recovered task reaches a safe point.
52
66
 
53
- Generate a compact recovery report from snapshots, checkpoints, Hook events, Git, and workspace state. Return only non-closed tasks by default; use `--include-closed` only for an explicit audit. For each iteration, report total, completed, closed, remaining, active, queued, dependency-ready, and waiting tasks plus one deterministic `recommended_task_id`. Prefer an interrupted or active task; otherwise choose the lowest-sequence queued task whose dependencies are all `completed`. Resume only idempotent steps. Re-read production and external systems before any deployment recovery; never replay production deployment automatically.
67
+ Generate a compact recovery report from snapshots, checkpoints, Hook events, Git, and workspace state. Return active work and failed tasks in `retryable_task_ids` by default; use `--include-closed` only when completed or abandoned details are required for an explicit audit. For each iteration, report total, completed, closed, remaining, active, retryable, queued, dependency-ready, and waiting tasks plus one deterministic `recommended_task_id`. Prefer an interrupted or active task, then the lowest-sequence failed task requiring `activate --new-attempt --phase repair`, then the lowest-sequence queued task whose dependencies are all `completed`. Resume only idempotent steps. Re-read production and external systems before any deployment recovery; never replay production deployment automatically.
54
68
 
55
69
  ## Hook Boundary
56
70
 
@@ -6,9 +6,15 @@
6
6
  "status": "queued",
7
7
  "sequence": 1,
8
8
  "depends_on": [],
9
- "attempt": 1,
9
+ "attempt": 0,
10
+ "attempts": [],
11
+ "change_sets": [],
10
12
  "goal": "",
13
+ "responsibility": "",
11
14
  "scope": [],
15
+ "acceptance": [],
16
+ "derived_from": null,
17
+ "supersedes": null,
12
18
  "input_artifacts": [],
13
19
  "standards": [],
14
20
  "branch": null,