ai-delivery-workflow 0.4.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/README.md +7 -8
  2. package/bin/ai-delivery.mjs +2 -24
  3. package/bin/release-check.mjs +8 -2
  4. package/docs/CLI-PARAMETER-REFERENCE.zh-CN.md +6 -67
  5. package/docs/DUAL-REPOSITORY-WORKSPACE.zh-CN.md +14 -1
  6. package/docs/FILE-REFERENCE.zh-CN.md +17 -36
  7. package/docs/MAINTENANCE-VERIFICATION.zh-CN.md +2 -2
  8. package/docs/NPM-RELEASE-MANAGEMENT.zh-CN.md +2 -1
  9. package/docs/PROJECT-MANUAL.zh-CN.md +50 -43
  10. package/docs/STATE-CLI-MAINTENANCE.zh-CN.md +8 -10
  11. package/docs/STATE-CLI-USER-GUIDE.zh-CN.md +7 -17
  12. package/docs/adr/0006-product-line-candidate-inventory.md +20 -0
  13. package/docs/agents/domain.md +31 -6
  14. package/docs/agents/issue-tracker.md +17 -18
  15. package/docs/agents/triage-labels.md +7 -7
  16. package/docs/agents/workflow-manager-acceptance-matrix.md +9 -15
  17. package/docs/agents/workflow-manager-current-state.md +14 -17
  18. package/lib/delivery-state.mjs +59 -910
  19. package/lib/fs-utils.mjs +0 -16
  20. package/lib/npm-auth.mjs +16 -0
  21. package/lib/project-bootstrap.mjs +21 -58
  22. package/lib/project-installer.mjs +24 -180
  23. package/lib/project-repair.mjs +217 -0
  24. package/lib/toml-hooks.mjs +2 -4
  25. package/lib/workflow-manager-governance.mjs +3 -47
  26. package/lib/workspace.mjs +2 -3
  27. package/package.json +2 -2
  28. package/skills/ai-delivery-assemble-release/SKILL.md +10 -8
  29. package/skills/ai-delivery-assemble-release/agents/openai.yaml +3 -3
  30. package/skills/ai-delivery-assemble-release/assets/release-candidate-manifest.yaml +16 -4
  31. package/skills/ai-delivery-assemble-release/assets/release-git-plan.yaml +96 -6
  32. package/skills/ai-delivery-assemble-release/assets/version-inclusion.csv +2 -2
  33. package/skills/ai-delivery-assemble-release/references/release-assembly-contract.md +16 -2
  34. package/skills/ai-delivery-assemble-release/scripts/plan-release.mjs +127 -3
  35. package/skills/ai-delivery-bootstrap/SKILL.md +1 -1
  36. package/skills/ai-delivery-bootstrap/agents/openai.yaml +3 -3
  37. package/skills/ai-delivery-bootstrap/references/bootstrap-contract.md +1 -1
  38. package/skills/ai-delivery-checkpoint-task/SKILL.md +0 -4
  39. package/skills/ai-delivery-checkpoint-task/agents/openai.yaml +3 -3
  40. package/skills/ai-delivery-checkpoint-task/references/checkpoint-contract.md +2 -2
  41. package/skills/ai-delivery-checkpoint-task/scripts/hook-event.mjs +2 -8
  42. package/skills/ai-delivery-checkpoint-task/scripts/task-state.mjs +26 -46
  43. package/skills/ai-delivery-close-version/agents/openai.yaml +3 -3
  44. package/skills/ai-delivery-define-product/agents/openai.yaml +4 -4
  45. package/skills/ai-delivery-deploy-production/agents/openai.yaml +3 -3
  46. package/skills/ai-delivery-design-experience/SKILL.md +3 -3
  47. package/skills/ai-delivery-design-experience/agents/openai.yaml +4 -4
  48. package/skills/ai-delivery-design-experience/references/experience-contract.md +1 -11
  49. package/skills/ai-delivery-design-experience/references/prototype-management-contract.md +1 -1
  50. package/skills/ai-delivery-develop-iteration/agents/openai.yaml +3 -3
  51. package/skills/ai-delivery-evolve-workflow/agents/openai.yaml +3 -3
  52. package/skills/ai-delivery-execute-test/agents/openai.yaml +4 -4
  53. package/skills/ai-delivery-execute-work-package/agents/openai.yaml +4 -4
  54. package/skills/ai-delivery-manage-git/SKILL.md +9 -7
  55. package/skills/ai-delivery-manage-git/agents/openai.yaml +3 -3
  56. package/skills/ai-delivery-manage-git/references/git-policy.md +7 -3
  57. package/skills/ai-delivery-manage-git/scripts/release-git.mjs +995 -0
  58. package/skills/ai-delivery-manage-standards/agents/openai.yaml +4 -4
  59. package/skills/ai-delivery-orchestrate/SKILL.md +5 -7
  60. package/skills/ai-delivery-orchestrate/agents/openai.yaml +3 -3
  61. package/skills/ai-delivery-orchestrate/assets/project-template/.workflow/tools/hooks/hook-event.mjs +2 -8
  62. package/skills/ai-delivery-orchestrate/assets/project-template/AGENTS.md +9 -8
  63. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/CONTRIBUTING.md +25 -25
  64. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/airbnb/DESIGN.md +545 -545
  65. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/airbnb/README.md +5 -5
  66. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/airtable/DESIGN.md +554 -554
  67. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/airtable/README.md +5 -5
  68. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/apple/DESIGN.md +562 -562
  69. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/apple/README.md +5 -5
  70. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/binance/DESIGN.md +634 -634
  71. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/binance/README.md +5 -5
  72. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/bmw/DESIGN.md +544 -544
  73. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/bmw/README.md +5 -5
  74. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/bmw-m/DESIGN.md +503 -503
  75. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/bmw-m/README.md +5 -5
  76. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/bugatti/DESIGN.md +454 -454
  77. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/bugatti/README.md +5 -5
  78. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/cal/DESIGN.md +542 -542
  79. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/cal/README.md +5 -5
  80. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/claude/DESIGN.md +589 -589
  81. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/claude/README.md +5 -5
  82. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/clay/DESIGN.md +541 -541
  83. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/clay/README.md +5 -5
  84. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/clickhouse/DESIGN.md +544 -544
  85. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/clickhouse/README.md +5 -5
  86. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/cohere/DESIGN.md +451 -451
  87. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/cohere/README.md +5 -5
  88. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/coinbase/DESIGN.md +570 -570
  89. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/coinbase/README.md +5 -5
  90. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/composio/DESIGN.md +506 -506
  91. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/composio/README.md +5 -5
  92. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/cursor/DESIGN.md +537 -537
  93. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/cursor/README.md +5 -5
  94. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/dell-1996/DESIGN.md +632 -632
  95. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/dell-1996/README.md +5 -5
  96. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/elevenlabs/DESIGN.md +504 -504
  97. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/elevenlabs/README.md +5 -5
  98. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/expo/DESIGN.md +526 -526
  99. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/expo/README.md +5 -5
  100. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/ferrari/DESIGN.md +531 -531
  101. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/ferrari/README.md +5 -5
  102. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/figma/DESIGN.md +578 -578
  103. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/figma/README.md +5 -5
  104. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/framer/DESIGN.md +544 -544
  105. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/framer/README.md +5 -5
  106. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/hashicorp/DESIGN.md +575 -575
  107. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/hashicorp/README.md +5 -5
  108. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/hp/DESIGN.md +670 -670
  109. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/hp/README.md +5 -5
  110. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/ibm/DESIGN.md +550 -550
  111. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/ibm/README.md +5 -5
  112. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/intercom/DESIGN.md +546 -546
  113. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/intercom/README.md +5 -5
  114. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/kraken/DESIGN.md +125 -125
  115. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/kraken/README.md +5 -5
  116. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/lamborghini/DESIGN.md +288 -288
  117. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/lamborghini/README.md +5 -5
  118. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/linear.app/DESIGN.md +548 -548
  119. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/linear.app/README.md +5 -5
  120. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/lovable/DESIGN.md +298 -298
  121. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/lovable/README.md +5 -5
  122. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mastercard/DESIGN.md +365 -365
  123. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mastercard/README.md +5 -5
  124. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/meta/DESIGN.md +683 -683
  125. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/meta/README.md +5 -5
  126. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/minimax/DESIGN.md +746 -746
  127. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/minimax/README.md +5 -5
  128. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mintlify/DESIGN.md +852 -852
  129. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mintlify/README.md +5 -5
  130. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/miro/DESIGN.md +825 -825
  131. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/miro/README.md +5 -5
  132. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mistral.ai/DESIGN.md +773 -773
  133. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mistral.ai/README.md +5 -5
  134. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mongodb/DESIGN.md +767 -767
  135. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mongodb/README.md +5 -5
  136. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/nike/DESIGN.md +575 -575
  137. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/nike/README.md +5 -5
  138. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/nintendo-2001/DESIGN.md +649 -649
  139. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/nintendo-2001/README.md +5 -5
  140. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/notion/DESIGN.md +821 -821
  141. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/notion/README.md +5 -5
  142. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/nvidia/DESIGN.md +640 -640
  143. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/nvidia/README.md +5 -5
  144. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/ollama/DESIGN.md +539 -539
  145. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/ollama/README.md +5 -5
  146. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/opencode.ai/DESIGN.md +521 -521
  147. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/opencode.ai/README.md +5 -5
  148. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/pinterest/DESIGN.md +597 -597
  149. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/pinterest/README.md +5 -5
  150. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/playstation/DESIGN.md +661 -661
  151. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/playstation/README.md +5 -5
  152. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/posthog/DESIGN.md +690 -690
  153. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/posthog/README.md +5 -5
  154. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/raycast/DESIGN.md +669 -669
  155. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/raycast/README.md +5 -5
  156. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/renault/DESIGN.md +589 -589
  157. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/renault/README.md +5 -5
  158. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/replicate/DESIGN.md +616 -616
  159. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/replicate/README.md +5 -5
  160. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/resend/DESIGN.md +585 -585
  161. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/resend/README.md +5 -5
  162. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/revolut/DESIGN.md +636 -636
  163. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/revolut/README.md +5 -5
  164. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/runwayml/DESIGN.md +244 -244
  165. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/runwayml/README.md +5 -5
  166. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/sanity/DESIGN.md +357 -357
  167. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/sanity/README.md +5 -5
  168. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/sentry/DESIGN.md +551 -551
  169. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/sentry/README.md +5 -5
  170. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/shopify/DESIGN.md +516 -516
  171. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/shopify/README.md +5 -5
  172. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/slack/DESIGN.md +482 -482
  173. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/spacex/DESIGN.md +363 -363
  174. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/spacex/README.md +5 -5
  175. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/spotify/DESIGN.md +246 -246
  176. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/spotify/README.md +5 -5
  177. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/starbucks/DESIGN.md +580 -580
  178. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/starbucks/README.md +5 -5
  179. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/stripe/DESIGN.md +487 -487
  180. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/stripe/README.md +5 -5
  181. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/supabase/DESIGN.md +462 -462
  182. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/supabase/README.md +5 -5
  183. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/superhuman/DESIGN.md +448 -448
  184. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/superhuman/README.md +5 -5
  185. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/tesla/DESIGN.md +286 -286
  186. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/tesla/README.md +5 -5
  187. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/theverge/DESIGN.md +339 -339
  188. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/theverge/README.md +5 -5
  189. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/together.ai/DESIGN.md +633 -633
  190. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/together.ai/README.md +5 -5
  191. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/uber/DESIGN.md +636 -636
  192. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/uber/README.md +5 -5
  193. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/vercel/DESIGN.md +736 -736
  194. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/vercel/README.md +5 -5
  195. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/vodafone/DESIGN.md +538 -538
  196. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/vodafone/README.md +5 -5
  197. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/voltagent/DESIGN.md +521 -521
  198. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/voltagent/README.md +5 -5
  199. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/warp/DESIGN.md +526 -526
  200. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/warp/README.md +5 -5
  201. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/webflow/DESIGN.md +588 -588
  202. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/webflow/README.md +5 -5
  203. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/wired/DESIGN.md +497 -497
  204. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/wired/README.md +5 -5
  205. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/wise/DESIGN.md +544 -544
  206. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/wise/README.md +5 -5
  207. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/x.ai/DESIGN.md +465 -465
  208. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/x.ai/README.md +5 -5
  209. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/zapier/DESIGN.md +537 -537
  210. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/zapier/README.md +5 -5
  211. package/skills/ai-delivery-orchestrate/references/formal-state-contract.md +11 -20
  212. package/skills/ai-delivery-orchestrate/references/workflow-model.md +2 -4
  213. package/skills/ai-delivery-orchestrate-release/SKILL.md +10 -10
  214. package/skills/ai-delivery-orchestrate-release/agents/openai.yaml +4 -4
  215. package/skills/ai-delivery-orchestrate-release/assets/release-request.yaml +4 -1
  216. package/skills/ai-delivery-orchestrate-release/assets/version-selection.yaml +13 -1
  217. package/skills/ai-delivery-orchestrate-release/references/release-workflow-contract.md +14 -0
  218. package/skills/ai-delivery-plan-iteration/agents/openai.yaml +4 -4
  219. package/skills/ai-delivery-prepare-platform/agents/openai.yaml +4 -4
  220. package/skills/ai-delivery-prepare-release/SKILL.md +6 -5
  221. package/skills/ai-delivery-prepare-release/agents/openai.yaml +4 -4
  222. package/skills/ai-delivery-prepare-release/assets/release-template/release-manifest.yaml +21 -2
  223. package/skills/ai-delivery-prepare-release/references/release-contract.md +5 -1
  224. package/skills/ai-delivery-review-change/agents/openai.yaml +4 -4
  225. package/skills/ai-delivery-triage-failure/agents/openai.yaml +4 -4
  226. package/skills/ai-delivery-validate-artifacts/agents/openai.yaml +4 -4
  227. package/skills/ai-delivery-verify-candidate/agents/openai.yaml +3 -3
  228. package/skills/ai-delivery-verify-production/SKILL.md +7 -4
  229. package/skills/ai-delivery-verify-production/agents/openai.yaml +3 -3
  230. package/skills/ai-delivery-verify-production/assets/production-verification-template/production-verification.json +9 -0
  231. package/skills/ai-delivery-verify-production/assets/production-verification-template/production-verification.md +20 -0
  232. package/skills/ai-delivery-verify-production/references/production-verification-contract.md +19 -3
  233. package/docs/PROTOTYPE-MIGRATION.zh-CN.md +0 -164
  234. package/docs/VIEWER-MAINTENANCE.zh-CN.md +0 -150
  235. package/docs/VIEWER-USER-GUIDE.zh-CN.md +0 -113
  236. package/lib/project-migration.mjs +0 -1193
  237. package/lib/prototype-migration.mjs +0 -713
  238. package/skills/ai-delivery-design-experience/assets/experience-template/LEGACY-COMPATIBILITY.md +0 -16
  239. package/skills/ai-delivery-design-experience/assets/experience-template/canvas-catalog.csv +0 -1
  240. package/skills/ai-delivery-design-experience/assets/experience-template/canvas-pages.csv +0 -1
  241. package/skills/ai-delivery-design-experience/assets/experience-template/page-catalog.csv +0 -1
  242. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-file-terminals.csv +0 -1
  243. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-files.csv +0 -1
  244. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-manifest.yaml +0 -76
  245. package/skills/ai-delivery-design-experience/assets/experience-template/prototype-set.yaml +0 -24
package/lib/fs-utils.mjs CHANGED
@@ -35,19 +35,3 @@ export function assertPathInside(root, target) {
35
35
  if (relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative))) return target;
36
36
  throw new Error(`Path resolves outside the project: ${target} -> ${realAncestor}`);
37
37
  }
38
-
39
- export function resolveContainedRelativePath(root, relative, allowedPrefixes = []) {
40
- const value = String(relative || "");
41
- if (!value || value.includes("\\") || value.includes("\0")
42
- || path.posix.isAbsolute(value) || path.posix.normalize(value) !== value
43
- || value === ".." || value.startsWith("../")) {
44
- throw new Error(`Invalid migration path: ${value || "missing"}.`);
45
- }
46
- if (allowedPrefixes.length && !allowedPrefixes.some((prefix) =>
47
- value === prefix || value.startsWith(`${prefix}/`))) {
48
- throw new Error(`Migration path is outside its allowed area: ${value}.`);
49
- }
50
- const target = path.resolve(root, ...value.split("/"));
51
- assertPathInside(root, target);
52
- return target;
53
- }
@@ -0,0 +1,16 @@
1
+ const OFFICIAL_NPM_REGISTRY = "https://registry.npmjs.org/";
2
+ const OFFICIAL_NPM_TOKEN_ENV_KEY = "npm_config_//registry.npmjs.org/:_authToken";
3
+
4
+ export function withNpmAccessToken(environment = process.env) {
5
+ const token = typeof environment.NPM_ACCESS_TOKEN === "string"
6
+ ? environment.NPM_ACCESS_TOKEN.trim()
7
+ : "";
8
+ if (!token) return environment;
9
+
10
+ return {
11
+ ...environment,
12
+ [OFFICIAL_NPM_TOKEN_ENV_KEY]: token,
13
+ };
14
+ }
15
+
16
+ export { OFFICIAL_NPM_REGISTRY, OFFICIAL_NPM_TOKEN_ENV_KEY };
@@ -14,7 +14,6 @@ const IGNORED_DIRECTORIES = new Set([
14
14
  ".git",
15
15
  ".agents",
16
16
  ".codex",
17
- ".ai-delivery",
18
17
  ".workflow",
19
18
  ".idea",
20
19
  ".vscode",
@@ -94,19 +93,6 @@ const WORKFLOW_REQUIRED_FILES = [
94
93
  ".workflow/standards/index.yaml",
95
94
  ".gitattributes",
96
95
  ];
97
- const LEGACY_WORKFLOW_REQUIRED_FILES = [
98
- ".ai-delivery/workspace.yaml",
99
- ".ai-delivery/install-manifest.json",
100
- ".codex/config.toml",
101
- "AGENTS.md",
102
- ".ai-delivery/state/state.mjs",
103
- ".ai-delivery/hooks/hook-event.mjs",
104
- "delivery/project.yaml",
105
- "delivery/workflow-state.yaml",
106
- "delivery/artifact-registry.yaml",
107
- "delivery/standards-baseline.yaml",
108
- "standards/index.yaml",
109
- ];
110
96
  const ESSENTIAL_STARTUP_SKILLS = [
111
97
  "ai-delivery-bootstrap",
112
98
  "ai-delivery-checkpoint-task",
@@ -306,13 +292,13 @@ function normalizeInspectedScope(value, fallbackScopeId = null) {
306
292
  }
307
293
 
308
294
  function inspectWorkflowScopes(workflowState, errors) {
309
- const schemaVersion = Number(workflowState?.schema_version || 1);
310
- const development = schemaVersion >= 2
311
- ? normalizeInspectedScope(workflowState.development_state)
312
- : normalizeInspectedScope(workflowState, workflowState.iteration_id ?? null);
313
- const release = schemaVersion >= 2
314
- ? normalizeInspectedScope(workflowState.release_state)
315
- : normalizeInspectedScope(null);
295
+ if (Number(workflowState?.schema_version) !== 2
296
+ || !workflowState?.development_state || !workflowState?.release_state) {
297
+ errors.push("formal state must use schema 2 with development_state and release_state scopes");
298
+ return { development: normalizeInspectedScope(null), release: normalizeInspectedScope(null) };
299
+ }
300
+ const development = normalizeInspectedScope(workflowState.development_state);
301
+ const release = normalizeInspectedScope(workflowState.release_state);
316
302
 
317
303
  for (const [scopeName, scope] of [["development", development], ["release", release]]) {
318
304
  for (const conflict of findIncompatibleNodeStates(scope)) {
@@ -505,23 +491,15 @@ export function inspectProjectState(target) {
505
491
  const codebase = scanProjectFiles(codeRoot);
506
492
  const errors = [];
507
493
  const currentIndicators = WORKFLOW_REQUIRED_FILES.filter((file) => exists(root, file));
508
- const legacyIndicators = LEGACY_WORKFLOW_REQUIRED_FILES.filter((file) => exists(root, file));
509
- const currentStateIndicators = WORKFLOW_REQUIRED_FILES.filter((file) =>
510
- file.startsWith(".workflow/delivery/") || file === ".workflow/standards/index.yaml")
511
- .filter((file) => exists(root, file));
512
- const legacyStateIndicators = LEGACY_WORKFLOW_REQUIRED_FILES.filter((file) =>
513
- file.startsWith("delivery/") || file === "standards/index.yaml")
494
+ const unsupportedIndicators = [".ai-delivery", ".ai-delivery-task", "delivery", "standards"]
514
495
  .filter((file) => exists(root, file));
515
- const legacyLayout = currentStateIndicators.length === 0 && legacyStateIndicators.length > 0;
516
- const requiredFiles = legacyLayout ? LEGACY_WORKFLOW_REQUIRED_FILES : WORKFLOW_REQUIRED_FILES;
517
- const workflowRoot = legacyLayout ? "." : ".workflow";
518
- const workflowIndicators = requiredFiles.filter((file) => exists(root, file));
519
- const missingFiles = requiredFiles.filter((file) => !exists(root, file));
496
+ const workflowRoot = ".workflow";
497
+ const workflowIndicators = WORKFLOW_REQUIRED_FILES.filter((file) => exists(root, file));
498
+ const missingFiles = WORKFLOW_REQUIRED_FILES.filter((file) => !exists(root, file));
520
499
  const installation = {
521
- detected: currentIndicators.length > 0 || legacyIndicators.length > 0,
522
- complete: workflowIndicators.length === requiredFiles.length,
500
+ detected: currentIndicators.length > 0 || unsupportedIndicators.length > 0,
501
+ complete: workflowIndicators.length === WORKFLOW_REQUIRED_FILES.length,
523
502
  workflow_root: workflowRoot,
524
- legacy_layout: legacyLayout,
525
503
  present_files: workflowIndicators,
526
504
  missing_files: missingFiles,
527
505
  installed_skill_count: 0,
@@ -556,25 +534,13 @@ export function inspectProjectState(target) {
556
534
  dependency_errors: [],
557
535
  };
558
536
 
559
- if (legacyLayout) {
560
- errors.push("检测到旧版 delivery/ 与 standards/ 布局;迁移到 .workflow/ 后才能继续执行。");
561
- }
562
- if (currentStateIndicators.length > 0 && legacyStateIndicators.length > 0) {
563
- errors.push("同时检测到 .workflow 和旧版 delivery/standards 状态;必须人工确定唯一权威根。");
537
+ if (unsupportedIndicators.length) {
538
+ errors.push(`检测到不受支持的旧工作流路径:${unsupportedIndicators.join(", ")}。当前项目只接受 .workflow/ 布局。`);
564
539
  }
565
540
 
566
541
  if (installation.complete) {
567
- if (legacyLayout) {
568
- errors.push("检测到旧版 delivery/ 与 standards/ 布局;迁移到 .workflow/ 后才能继续执行。");
569
- }
570
- if (currentStateIndicators.length > 0 && legacyStateIndicators.length > 0) {
571
- errors.push("同时检测到 .workflow 和旧版 delivery/standards 状态;必须人工确定唯一权威根。");
572
- }
573
- const manifest = readStructuredFile(path.join(
574
- root,
575
- legacyLayout ? ".ai-delivery/install-manifest.json" : ".workflow/config/install-manifest.json",
576
- ), "json", errors);
577
- const stateRoot = path.join(root, workflowRoot);
542
+ const manifest = readStructuredFile(path.join(root, ".workflow/config/install-manifest.json"), "json", errors);
543
+ const stateRoot = path.join(root, ".workflow");
578
544
  let project = null;
579
545
  let workflowState = null;
580
546
  let registry = null;
@@ -583,13 +549,10 @@ export function inspectProjectState(target) {
583
549
  workflowState = readStructuredFile(path.join(stateRoot, "delivery", "workflow-state.yaml"), "yaml", errors);
584
550
  registry = readStructuredFile(path.join(stateRoot, "delivery", "artifact-registry.yaml"), "yaml", errors);
585
551
  };
586
- if (legacyLayout) readFormalState();
587
- else {
588
- try {
589
- withFormalStateReadLock(root, readFormalState);
590
- } catch (error) {
591
- errors.push(error.message);
592
- }
552
+ try {
553
+ withFormalStateReadLock(root, readFormalState);
554
+ } catch (error) {
555
+ errors.push(error.message);
593
556
  }
594
557
  readStructuredFile(path.join(stateRoot, "delivery", "standards-baseline.yaml"), "yaml", errors);
595
558
  readStructuredFile(path.join(stateRoot, "standards", "index.yaml"), "yaml", errors);
@@ -9,10 +9,8 @@ import { isSeq, parse as parseYaml, parseDocument, stringify as stringifyYaml }
9
9
  import { assertPathInside, atomicWrite, filesUnder } from "./fs-utils.mjs";
10
10
  import { inspectCodeGraph } from "./codegraph.mjs";
11
11
  import { executeDeliveryStateCommand } from "./delivery-state.mjs";
12
- import { planPrototypeMigration } from "./prototype-migration.mjs";
13
12
  import { inspectHookConfig, managedHookConfigProjection, mergeHookConfig } from "./toml-hooks.mjs";
14
13
  import {
15
- LEGACY_WORKSPACE_CONFIG,
16
14
  WORKSPACE_CONFIG,
17
15
  gitCommonDirectory,
18
16
  gitTopLevel,
@@ -39,7 +37,6 @@ const GIT_ATTRIBUTE_ENTRIES = [
39
37
  "/.gitattributes text eol=lf",
40
38
  ...RAW_GIT_ATTRIBUTE_TARGETS.map((file) => `/${file} -text`),
41
39
  ];
42
- const OBSOLETE_IGNORE_ENTRIES = new Set([".ai-delivery-task", ".ai-delivery/backups/"]);
43
40
  const INSTALL_MANIFEST = path.join(".workflow", "config", "install-manifest.json");
44
41
  const UPGRADE_RUNTIME = path.join(".workflow", "delivery", "runtime", "upgrades");
45
42
  const PRESERVED_DETAIL_LIMIT = 200;
@@ -48,32 +45,18 @@ const DOCTOR_ATTRIBUTE_BATCH_SIZE = 5_000;
48
45
  const DOCTOR_DETAIL_LIMIT = 200;
49
46
  const FORMAL_STATE_INSPECT_MAX_BUFFER = 16 * 1024 * 1024;
50
47
  const INSTALL_MANIFEST_SCHEMA = 6;
51
- const UI_CONTRACT_VERSION = "prototype-first-ui-v1";
52
- const FORMAL_STATE_YAML = {
53
- parse: parseYaml,
54
- stringify: (value) => stringifyYaml(value, { lineWidth: 0 }),
55
- };
56
48
  const MERGED_MANAGED_SURFACES = Object.freeze([
57
49
  { key: "agents", path: "AGENTS.md" },
58
50
  { key: "hook_config", path: ".codex/config.toml" },
59
51
  { key: "gitignore", path: ".gitignore" },
60
52
  { key: "gitattributes", path: ".gitattributes" },
61
53
  ]);
62
- const ACTIVE_TASK = path.join(".workflow", "delivery", "runtime", "active-task.json");
63
- const LEGACY_ACTIVE_TASK = ".ai-delivery-task";
64
54
  const WORKFLOW_CONTENT_DIRECTORIES = ["product", "architecture", "experience", "iterations", "releases"];
65
55
  const CONTROL_DIRECTORIES = [
66
56
  "tasks", "checkpoints", "artifacts", "gates", "versions", "releases", "events", "archives",
67
- "migrations", "repairs",
57
+ "repairs",
68
58
  ];
69
- const ENSURED_CONTROL_DIRECTORIES = ["migrations", "repairs"];
70
- const RETIRED_MANAGED_ASSETS = Object.freeze([
71
- {
72
- path: ".workflow/tools/viewer",
73
- kind: "retired-directory",
74
- manifest_key: "viewer",
75
- },
76
- ]);
59
+ const ENSURED_CONTROL_DIRECTORIES = ["repairs"];
77
60
  const ESSENTIAL_STARTUP_SKILLS = [
78
61
  "ai-delivery-assemble-release",
79
62
  "ai-delivery-bootstrap",
@@ -138,11 +121,9 @@ const V2_PROTOTYPE_DELIVERY_SURFACE_FILES = Object.freeze([
138
121
  const REQUIRED_PACKAGE_SURFACE_FILES = Object.freeze([
139
122
  "LICENSE",
140
123
  "bin/ai-delivery.mjs",
141
- "docs/PROTOTYPE-MIGRATION.zh-CN.md",
142
124
  "lib/mock-scenario-pack.mjs",
143
125
  "lib/mock-system.mjs",
144
- "lib/project-migration.mjs",
145
- "lib/prototype-migration.mjs",
126
+ "lib/project-repair.mjs",
146
127
  "lib/prototype-page-review.mjs",
147
128
  "lib/prototype-review-target.mjs",
148
129
  "skills/ai-delivery-checkpoint-task/scripts/hook-event.mjs",
@@ -344,8 +325,7 @@ function mergeManagedMarkdown(existing, managedTemplate) {
344
325
  }
345
326
 
346
327
  function mergeGitignore(existing, requiredEntries = []) {
347
- const lines = existing.split(/\r?\n/)
348
- .filter((line) => !OBSOLETE_IGNORE_ENTRIES.has(line.trim()));
328
+ const lines = existing.split(/\r?\n/);
349
329
  const additions = [...IGNORE_ENTRIES, ...requiredEntries]
350
330
  .filter((entry) => !lines.some((line) => line.trim() === entry));
351
331
  const retained = lines.join("\n").trimEnd();
@@ -706,7 +686,7 @@ function mergedSurfaceManagedDigest(key, text, codePath) {
706
686
  if (key === "hook_config") return contentDigest(JSON.stringify(managedHookConfigProjection(text)));
707
687
  const lines = text.split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
708
688
  if (key === "gitignore") {
709
- const managedEntries = new Set([...IGNORE_ENTRIES, `/${codePath}/`, ...OBSOLETE_IGNORE_ENTRIES]);
689
+ const managedEntries = new Set([...IGNORE_ENTRIES, `/${codePath}/`]);
710
690
  return contentDigest(JSON.stringify(lines.filter((line) => managedEntries.has(line)).sort()));
711
691
  }
712
692
  return contentDigest(JSON.stringify(lines.filter((line) => GIT_ATTRIBUTE_ENTRIES.includes(line)).sort()));
@@ -868,10 +848,11 @@ export function initProject(packageRoot, target, options = {}) {
868
848
  "backups",
869
849
  new Date().toISOString().replaceAll(":", "-"),
870
850
  );
871
- const legacyRoot = path.join(target, ".ai-delivery");
872
- const legacyActiveTask = path.join(target, LEGACY_ACTIVE_TASK);
873
- const hasLegacyRoot = fs.existsSync(legacyRoot);
874
- const hasLegacyActiveTask = fs.existsSync(legacyActiveTask);
851
+ const unsupportedRoot = path.join(target, ".ai-delivery");
852
+ const unsupportedActiveTask = path.join(target, ".ai-delivery-task");
853
+ if (fs.existsSync(unsupportedRoot) || fs.existsSync(unsupportedActiveTask)) {
854
+ throw new Error("Unsupported workflow layout detected; install requires the current .workflow contract.");
855
+ }
875
856
  let previousManifest = null;
876
857
  try {
877
858
  previousManifest = JSON.parse(fs.readFileSync(path.join(target, INSTALL_MANIFEST), "utf8"));
@@ -889,24 +870,9 @@ export function initProject(packageRoot, target, options = {}) {
889
870
  throw new Error(`Refusing package downgrade from ${previousManifest.version} to ${packageVersion}; use --force only after explicit approval.`);
890
871
  }
891
872
  const packageVersionUpgrade = packageVersionComparison > 0;
892
- const reinstallManagedRuntime = force || hasLegacyRoot || hasLegacyActiveTask
893
- || packageVersionUpgrade || (previousManifest && previousManifest.schema_version < 5);
894
- if (!dryRun && hasLegacyRoot) {
895
- const legacyBackup = path.join(backupRoot, "legacy-ai-delivery");
896
- fs.mkdirSync(path.dirname(legacyBackup), { recursive: true });
897
- fs.cpSync(legacyRoot, legacyBackup, { recursive: true });
898
- }
899
- if (!dryRun && hasLegacyActiveTask) {
900
- const taskBackup = path.join(backupRoot, "legacy-active-task.json");
901
- fs.mkdirSync(path.dirname(taskBackup), { recursive: true });
902
- fs.copyFileSync(legacyActiveTask, taskBackup);
903
- }
873
+ const reinstallManagedRuntime = force || packageVersionUpgrade;
904
874
  const currentWorkspace = readWorkspaceConfiguration(target, { optional: true });
905
- const legacyWorkspaceFile = path.join(target, LEGACY_WORKSPACE_CONFIG);
906
- const legacyWorkspace = !currentWorkspace && fs.existsSync(legacyWorkspaceFile)
907
- ? readWorkspaceConfiguration(target, { configurationPath: LEGACY_WORKSPACE_CONFIG })
908
- : null;
909
- const existingWorkspace = (currentWorkspace || legacyWorkspace)?.configuration;
875
+ const existingWorkspace = currentWorkspace?.configuration;
910
876
  const codePath = options.codePath || existingWorkspace?.code_repository?.path || "code";
911
877
  const codeId = options.codeId || existingWorkspace?.code_repository?.repo_id || "app";
912
878
  const sharedRemote = options.sharedRemote || null;
@@ -942,23 +908,23 @@ export function initProject(packageRoot, target, options = {}) {
942
908
  const sourceStandardsIndex = path.join(sourceWorkflow, "standards", "index.yaml");
943
909
  const workflowRoot = path.join(target, ".workflow");
944
910
  const standardsIndexFile = path.join(workflowRoot, "standards", "index.yaml");
945
- const legacyIndicators = [
911
+ const unsupportedIndicators = [
946
912
  path.join(target, "delivery", "project.yaml"),
947
913
  path.join(target, "delivery", "workflow-state.yaml"),
948
914
  path.join(target, "delivery", "artifact-registry.yaml"),
949
915
  path.join(target, "delivery", "standards-baseline.yaml"),
950
916
  path.join(target, "standards", "index.yaml"),
951
917
  ].filter((candidate) => fs.existsSync(candidate));
952
- if (fs.existsSync(workflowRoot) && legacyIndicators.length) {
918
+ if (fs.existsSync(workflowRoot) && unsupportedIndicators.length) {
953
919
  throw new Error(
954
- "Detected both .workflow and legacy delivery/standards directories. "
920
+ "Detected both .workflow and unsupported delivery/standards directories. "
955
921
  + "Resolve the split workflow state before initialization.",
956
922
  );
957
923
  }
958
- if (legacyIndicators.length) {
924
+ if (unsupportedIndicators.length) {
959
925
  throw new Error(
960
- "Legacy workflow directories detected at delivery/ or standards/. "
961
- + "Move them under .workflow/ before upgrading; refusing to create split workflow state.",
926
+ "Unsupported workflow directories detected at delivery/ or standards/. "
927
+ + "Remove them before initialization; refusing to create split workflow state.",
962
928
  );
963
929
  }
964
930
  for (const managedPath of [
@@ -986,8 +952,6 @@ export function initProject(packageRoot, target, options = {}) {
986
952
  const hookConflict = fs.existsSync(hookDestination)
987
953
  && !managedFilesEqual(hookDestination, sourceHook);
988
954
  if (hookConflict && !reinstallManagedRuntime) conflicts.push(path.relative(target, hookDestination));
989
- const retiredViewerDestination = path.join(target, ".workflow", "tools", "viewer");
990
- const retireLegacyViewer = hasLegacyRoot && fs.existsSync(retiredViewerDestination);
991
955
  const designReferenceDestination = path.join(target, "ref", "ui");
992
956
  let designReferencePlan = null;
993
957
  if (!fs.existsSync(designReferenceDestination)) {
@@ -1064,19 +1028,6 @@ export function initProject(packageRoot, target, options = {}) {
1064
1028
  ? fs.readFileSync(gitattributesFile, "utf8")
1065
1029
  : "";
1066
1030
  const gitattributesText = mergeGitattributes(existingGitattributes);
1067
- if (hasLegacyRoot || hasLegacyActiveTask) {
1068
- actions.push("migrate legacy .ai-delivery runtime into .workflow");
1069
- if (!dryRun) {
1070
- if (hasLegacyActiveTask) {
1071
- const activeTask = path.join(target, ACTIVE_TASK);
1072
- if (!fs.existsSync(activeTask)) {
1073
- fs.mkdirSync(path.dirname(activeTask), { recursive: true });
1074
- fs.copyFileSync(legacyActiveTask, activeTask);
1075
- }
1076
- }
1077
- }
1078
- }
1079
-
1080
1031
  for (const plan of skillPlans) {
1081
1032
  if (plan.type === "copy") {
1082
1033
  actions.push(`install .agents/skills/${plan.name}`);
@@ -1098,9 +1049,6 @@ export function initProject(packageRoot, target, options = {}) {
1098
1049
  } else if (hookConflict) {
1099
1050
  backupAndReplace(target, hookDestination, sourceHook, backupRoot, actions, dryRun);
1100
1051
  }
1101
- if (retireLegacyViewer) {
1102
- backupAndRemove(target, retiredViewerDestination, backupRoot, actions, dryRun);
1103
- }
1104
1052
  if (designReferencePlan?.type === "copy") {
1105
1053
  actions.push("install ref/ui Design Reference Library");
1106
1054
  if (!dryRun) {
@@ -1200,21 +1148,6 @@ export function initProject(packageRoot, target, options = {}) {
1200
1148
  if (!dryRun) atomicWrite(manifestFile, manifestText);
1201
1149
  }
1202
1150
 
1203
- if (!dryRun && (hasLegacyRoot || hasLegacyActiveTask)) {
1204
- for (const required of [
1205
- path.join(target, WORKSPACE_CONFIG),
1206
- path.join(target, INSTALL_MANIFEST),
1207
- path.join(target, ".workflow", "tools", "state", "state.mjs"),
1208
- path.join(target, ".workflow", "tools", "hooks", "hook-event.mjs"),
1209
- ]) {
1210
- if (!fs.existsSync(required)) {
1211
- throw new Error(`Legacy migration is incomplete; preserved .ai-delivery for recovery: ${required}`);
1212
- }
1213
- }
1214
- if (hasLegacyRoot) fs.rmSync(legacyRoot, { recursive: true, force: true });
1215
- if (hasLegacyActiveTask) fs.rmSync(legacyActiveTask, { force: true });
1216
- }
1217
-
1218
1151
  return {
1219
1152
  actions: [...workspace.actions, ...actions],
1220
1153
  summary: `${dryRun ? "Dry run" : "Initialized"} ${skillNames.length} workspace-scoped AI delivery skills in ${target}`,
@@ -1456,11 +1389,9 @@ function planUpgrade(packageRoot, target, options) {
1456
1389
  validateManagedPath(target, path.join(target, managedPath));
1457
1390
  }
1458
1391
  const { manifest, manifestFile } = readInstallManifest(target);
1459
- if (!Number.isInteger(manifest.schema_version)
1460
- || manifest.schema_version < 5
1461
- || manifest.schema_version > INSTALL_MANIFEST_SCHEMA) {
1392
+ if (manifest.schema_version !== INSTALL_MANIFEST_SCHEMA) {
1462
1393
  throw new Error(
1463
- `Installation manifest schema ${manifest.schema_version} is incompatible with upgrade; run the compatible migration or repair command first.`,
1394
+ `Installation manifest schema ${manifest.schema_version} is unsupported; expected current schema ${INSTALL_MANIFEST_SCHEMA}.`,
1464
1395
  );
1465
1396
  }
1466
1397
  const comparison = comparePackageVersions(packageVersion, manifest.version);
@@ -1471,10 +1402,6 @@ function planUpgrade(packageRoot, target, options) {
1471
1402
  throw new Error(`Refusing package downgrade from ${manifest.version} to ${packageVersion}; use --force only after explicit approval.`);
1472
1403
  }
1473
1404
  const workspace = readWorkspaceConfiguration(target);
1474
- const contractRetirement = executeDeliveryStateCommand([
1475
- "contract", "retire", "--project", target, "--gate-id", "UX-LF", "--dry-run",
1476
- ], { yaml: FORMAL_STATE_YAML });
1477
- const prototypeMigration = planPrototypeMigration(target);
1478
1405
  const codeRepository = workspace.configuration.code_repository;
1479
1406
  if (["path", "repo_id", "remote", "default_branch"].some((key) =>
1480
1407
  (manifest.code_repository?.[key] ?? null) !== (codeRepository[key] ?? null))) {
@@ -1484,18 +1411,12 @@ function planUpgrade(packageRoot, target, options) {
1484
1411
  }
1485
1412
  const sources = installationSources(packageRoot);
1486
1413
  const exactAssets = managedAssetInventory(sources, manifest);
1487
- const retiredAssets = RETIRED_MANAGED_ASSETS
1488
- .filter((asset) => manifest.managed_assets?.[asset.manifest_key])
1489
- .map((asset) => ({
1490
- ...asset,
1491
- previous_digest: manifest.managed_assets[asset.manifest_key].sha256 || null,
1492
- }));
1493
1414
  const mergedAssets = upgradeMergedAssets(
1494
1415
  target,
1495
1416
  sources,
1496
1417
  { ...manifest, code_repository: codeRepository },
1497
1418
  );
1498
- for (const asset of [...exactAssets, ...retiredAssets, ...mergedAssets]) {
1419
+ for (const asset of [...exactAssets, ...mergedAssets]) {
1499
1420
  validateManagedPath(target, installPath(target, asset.path));
1500
1421
  }
1501
1422
  const additions = [];
@@ -1552,32 +1473,12 @@ function planUpgrade(packageRoot, target, options) {
1552
1473
  replacements.push({ path: asset.path, kind: "merged-file", forced: false });
1553
1474
  }
1554
1475
  }
1555
- for (const asset of retiredAssets) {
1556
- const destination = installPath(target, asset.path);
1557
- asset.destination = destination;
1558
- const currentDigest = pathDigest(destination);
1559
- asset.current_digest = currentDigest;
1560
- if (currentDigest === null) {
1561
- preserved.push({ path: asset.path, reason: "retired managed asset is already absent" });
1562
- } else if (asset.previous_digest && currentDigest === asset.previous_digest) {
1563
- removals.push({ path: asset.path, kind: asset.kind, forced: false });
1564
- } else {
1565
- conflicts.push({
1566
- path: asset.path,
1567
- reason: asset.previous_digest
1568
- ? "retired managed asset differs from the installed manifest digest"
1569
- : "installed manifest does not prove ownership of the retired managed asset",
1570
- });
1571
- if (force) removals.push({ path: asset.path, kind: asset.kind, forced: true });
1572
- }
1573
- }
1574
1476
  const preservedWorkflow = preservedWorkflowFiles(
1575
1477
  target,
1576
1478
  [
1577
1479
  ...exactAssets
1578
1480
  .filter((asset) => asset.kind !== "ensure-directory")
1579
1481
  .map((asset) => asset.path),
1580
- ...retiredAssets.map((asset) => asset.path),
1581
1482
  ...mergedAssets.map((asset) => asset.path),
1582
1483
  ],
1583
1484
  );
@@ -1599,7 +1500,6 @@ function planUpgrade(packageRoot, target, options) {
1599
1500
  codeRepository,
1600
1501
  sources,
1601
1502
  exactAssets,
1602
- retiredAssets,
1603
1503
  mergedAssets,
1604
1504
  additions,
1605
1505
  replacements,
@@ -1609,8 +1509,6 @@ function planUpgrade(packageRoot, target, options) {
1609
1509
  conflicts,
1610
1510
  backups,
1611
1511
  comparison,
1612
- contractRetirement,
1613
- prototypeMigration,
1614
1512
  };
1615
1513
  }
1616
1514
 
@@ -1704,17 +1602,6 @@ function applyUpgradePlan(target, plan, packageVersion) {
1704
1602
  apply: () => atomicWrite(asset.destination, asset.desired),
1705
1603
  });
1706
1604
  }
1707
- for (const asset of plan.retiredAssets) {
1708
- if (!changes.has(asset.path)) continue;
1709
- applyReceiptBackedAsset({
1710
- target,
1711
- upgradeRoot,
1712
- asset,
1713
- operation: "remove",
1714
- receiptAssets,
1715
- apply: () => fs.rmSync(asset.destination, { recursive: true, force: true }),
1716
- });
1717
- }
1718
1605
  const manifestRelative = INSTALL_MANIFEST.replaceAll("\\", "/");
1719
1606
  const manifestBackup = backupUpgradePath(target, upgradeRoot, manifestRelative);
1720
1607
  const nextManifest = buildInstallManifest(
@@ -1742,30 +1629,10 @@ function applyUpgradePlan(target, plan, packageVersion) {
1742
1629
  to_version: packageVersion,
1743
1630
  applied_at: new Date().toISOString(),
1744
1631
  formal_event_tree_fingerprint: formalEventFingerprint,
1745
- contract_retirement: {
1746
- gate_id: plan.contractRetirement.gate_id,
1747
- contract_version: UI_CONTRACT_VERSION,
1748
- affected_iterations: plan.contractRetirement.affected_iterations,
1749
- expected_scope_revisions: plan.contractRetirement.expected_scope_revisions,
1750
- },
1751
1632
  assets: receiptAssets,
1752
1633
  };
1753
1634
  atomicWrite(path.join(upgradeRoot, "receipt.json"), `${JSON.stringify(receipt, null, 2)}\n`);
1754
- const retirementArgs = [
1755
- "contract", "retire", "--project", target,
1756
- "--gate-id", "UX-LF",
1757
- "--actor", "system:package-upgrade",
1758
- "--reason", "prototype-first UI contract",
1759
- "--contract-version", UI_CONTRACT_VERSION,
1760
- ];
1761
- const expectedRevisions = Object.values(plan.contractRetirement.expected_scope_revisions);
1762
- if (expectedRevisions.length === 1) {
1763
- retirementArgs.push("--expected-scope-revision", String(expectedRevisions[0]));
1764
- }
1765
- const contractRetirement = executeDeliveryStateCommand(retirementArgs, {
1766
- yaml: FORMAL_STATE_YAML,
1767
- });
1768
- return { upgradeId, contractRetirement };
1635
+ return { upgradeId };
1769
1636
  } catch (error) {
1770
1637
  restoreUpgradeAssets(target, upgradeRoot, receiptAssets);
1771
1638
  fs.rmSync(upgradeRoot, { recursive: true, force: true });
@@ -1796,7 +1663,6 @@ function rollbackUpgrade(packageRoot, target, upgradeId) {
1796
1663
  const sources = installationSources(packageRoot);
1797
1664
  const allowedPaths = new Set([
1798
1665
  ...managedAssetInventory(sources).map((asset) => asset.path),
1799
- ...RETIRED_MANAGED_ASSETS.map((asset) => asset.path),
1800
1666
  ...MERGED_MANAGED_SURFACES.map((surface) => surface.path),
1801
1667
  INSTALL_MANIFEST.replaceAll("\\", "/"),
1802
1668
  ]);
@@ -1866,26 +1732,10 @@ export function upgradeProject(packageRoot, target, options = {}) {
1866
1732
  conflicts: plan.conflicts,
1867
1733
  backups: plan.backups,
1868
1734
  },
1869
- compatibility: {
1870
- installation_manifest: "compatible",
1871
- package_version: plan.comparison > 0 ? "upgrade" : plan.comparison === 0 ? "same-version repair" : "forced downgrade",
1872
- },
1873
1735
  code_repository: {
1874
1736
  path: plan.codeRepository.path,
1875
1737
  write_planned: false,
1876
1738
  },
1877
- contract_retirement: {
1878
- ...plan.contractRetirement,
1879
- contract_version: UI_CONTRACT_VERSION,
1880
- write_planned: plan.contractRetirement.affected_iterations.length > 0,
1881
- },
1882
- prototype_migration: {
1883
- ...plan.prototypeMigration,
1884
- required_follow_up: {
1885
- command: "ai-delivery migrate",
1886
- write_planned: false,
1887
- },
1888
- },
1889
1739
  };
1890
1740
  if (dryRun) return report;
1891
1741
  const blockingConflicts = plan.conflicts.filter((item) => !force || item.forceable === false);
@@ -1897,12 +1747,6 @@ export function upgradeProject(packageRoot, target, options = {}) {
1897
1747
  }
1898
1748
  const applied = applyUpgradePlan(target, plan, packageVersion);
1899
1749
  report.upgrade_id = applied.upgradeId;
1900
- report.contract_retirement = {
1901
- ...report.contract_retirement,
1902
- ...applied.contractRetirement,
1903
- contract_version: UI_CONTRACT_VERSION,
1904
- write_planned: false,
1905
- };
1906
1750
  report.applied = true;
1907
1751
  return report;
1908
1752
  }
@@ -2496,8 +2340,8 @@ export function doctorProject(target, options = {}) {
2496
2340
  });
2497
2341
  }
2498
2342
  checks.push({
2499
- ok: !fs.existsSync(path.join(target, ".ai-delivery")) && !fs.existsSync(path.join(target, LEGACY_ACTIVE_TASK)),
2500
- message: "legacy .ai-delivery paths are absent",
2343
+ ok: !fs.existsSync(path.join(target, ".ai-delivery")) && !fs.existsSync(path.join(target, ".ai-delivery-task")),
2344
+ message: "unsupported workflow paths are absent",
2501
2345
  });
2502
2346
  checks.push({ ok: fs.existsSync(path.join(target, "AGENTS.md")), message: "project AGENTS.md is present" });
2503
2347
  return { checks, ok: checks.filter((check) => check.required !== false).every((check) => check.ok) };