create-yss-spec 3.3.8 → 3.4.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 (628) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/template/.agents/skills/.strategic-design-skills-manifest.json +3 -13
  4. package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +3 -3
  5. package/template/.agents/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +1 -1
  6. package/template/.agents/skills/yss-ddd-scaffold-generator/references/layer-skill-routing.md +18 -0
  7. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  8. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +13 -4
  9. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +9 -8
  10. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +2 -1
  11. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +6 -4
  12. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +108 -12
  13. package/template/.agents/skills/yss-design-system/SKILL.md +19 -19
  14. package/template/.agents/skills/yss-design-system/references/data-quality-theme.md +13 -0
  15. package/template/.agents/skills/yss-design-system/references/design-qa-theme.md +3 -1
  16. package/template/.agents/skills/yss-design-system/references/design-system.md +7 -9
  17. package/template/.agents/skills/yss-formily/SKILL.md +21 -258
  18. package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +17 -13
  19. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.eslintrc.cjs +1 -0
  20. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.npmrc.example +2 -0
  21. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/DESIGN.md +264 -0
  22. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +13 -0
  23. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/__yss_dotfile__.gitignore +6 -0
  24. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/micro-config.json +5 -0
  25. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/orval.config.ts +2 -0
  26. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +30 -0
  27. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.development +1 -0
  28. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.example +5 -0
  29. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production +1 -0
  30. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production.standalone +1 -0
  31. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/index.html +2 -0
  32. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/package.json +34 -0
  33. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/public/favicon.svg +1 -0
  34. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/App.vue +15 -0
  35. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/api/mutator.ts +7 -0
  36. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/components/ThemeScope.vue +11 -0
  37. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/config/theme.json +41 -0
  38. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/env.d.ts +1 -0
  39. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/main.ts +40 -0
  40. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/router/index.ts +8 -0
  41. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/store/theme.ts +37 -0
  42. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/styles/index.less +6 -0
  43. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/types/microAppBridge.ts +28 -0
  44. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/utils/microAppRouterBridge.ts +266 -0
  45. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/NotFound.vue +1 -0
  46. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/Welcome.vue +1 -0
  47. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/tsconfig.json +23 -0
  48. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/vite.config.ts +16 -0
  49. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +9026 -0
  50. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-workspace.yaml +7 -0
  51. package/template/.agents/skills/yss-frontend-scaffold-generator/references/data-quality-baseline.md +17 -0
  52. package/template/.agents/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +49 -0
  53. package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +41 -13
  54. package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/refresh_baseline.mjs +29 -0
  55. package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +5 -1
  56. package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +32 -0
  57. package/template/.agents/skills/yss-hook/SKILL.md +1 -1
  58. package/template/.agents/skills/yss-implementation-contract-compiler/SKILL.md +1 -1
  59. package/template/.agents/skills/yss-implementation-contract-compiler/references/boundaries.md +5 -3
  60. package/template/.agents/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +13 -5
  61. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
  62. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +1 -1
  63. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +12 -8
  64. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  65. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +97 -9
  66. package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +2 -2
  67. package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +1 -1
  68. package/template/.agents/skills/yss-openapi-governance/SKILL.md +2 -0
  69. package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +43 -15
  70. package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +2 -2
  71. package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +1 -1
  72. package/template/.agents/skills/yss-prototype-stage/SKILL.md +12 -8
  73. package/template/.agents/skills/yss-prototype-stage/assets/antd-authoring/package.json +16 -0
  74. package/template/.agents/skills/yss-prototype-stage/assets/antd-authoring/pnpm-lock.yaml +1678 -0
  75. package/template/.agents/skills/yss-prototype-stage/assets/antd-authoring/workbench.jsx +23 -0
  76. package/template/.agents/skills/yss-prototype-stage/assets/native-workbench/app.js +20 -0
  77. package/template/.agents/skills/yss-prototype-stage/assets/native-workbench/index.html +11 -0
  78. package/template/.agents/skills/yss-prototype-stage/assets/native-workbench/styles.css +28 -0
  79. package/template/.agents/skills/yss-prototype-stage/assets/offline-html/app.js +50 -0
  80. package/template/.agents/skills/yss-prototype-stage/assets/offline-html/index.html +38 -0
  81. package/template/.agents/skills/yss-prototype-stage/assets/offline-html/scenarios.js +7 -0
  82. package/template/.agents/skills/yss-prototype-stage/assets/offline-html/styles.css +20 -0
  83. package/template/.agents/skills/yss-prototype-stage/references/antd-component-catalog.json +736 -0
  84. package/template/.agents/skills/yss-prototype-stage/references/antd-integration.md +61 -0
  85. package/template/.agents/skills/yss-prototype-stage/references/html-prototype-practices.md +14 -0
  86. package/template/.agents/skills/yss-prototype-stage/references/product-design-adapter.md +28 -51
  87. package/template/.agents/skills/yss-prototype-stage/references/prototype-profile-routing.md +15 -4
  88. package/template/.agents/skills/yss-prototype-stage/scripts/build-antd-prototype.mjs +71 -0
  89. package/template/.agents/skills/yss-prototype-stage/scripts/collect-antd-reference.mjs +26 -0
  90. package/template/.agents/skills/yss-prototype-stage/scripts/offline-html.mjs +121 -0
  91. package/template/.agents/skills/yss-prototype-stage/scripts/prototype-contract.mjs +52 -143
  92. package/template/.agents/skills/yss-prototype-stage/tests/antd-reference.test.mjs +24 -0
  93. package/template/.agents/skills/yss-prototype-stage/tests/browser-smoke.mjs +77 -0
  94. package/template/.agents/skills/yss-prototype-stage/tests/run-scenarios.mjs +73 -26
  95. package/template/.agents/skills/yss-prototype-stage/tests/workbench-smoke.mjs +57 -0
  96. package/template/.agents/skills/yss-skill-source-index-refresh/references/source-map-config.md +0 -1
  97. package/template/.agents/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +0 -1
  98. package/template/.agents/skills/yss-tactical-design/SKILL.md +1 -1
  99. package/template/.agents/skills/yss-ui/SKILL.md +3 -2
  100. package/template/.agents/skills/yss-ui/references/component-routing.md +11 -10
  101. package/template/.agents/skills/yss-ui/references/specialized-components.md +52 -0
  102. package/template/.agents/skills/yss-web-controller/scripts/generate_controller.mjs +4 -3
  103. package/template/.agents/skills/yss-web-controller/scripts/generate_controller.test.mjs +1 -1
  104. package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +3 -3
  105. package/template/.codex/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +1 -1
  106. package/template/.codex/skills/yss-ddd-scaffold-generator/references/layer-skill-routing.md +18 -0
  107. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  108. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +13 -4
  109. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +9 -8
  110. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +2 -1
  111. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +6 -4
  112. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +108 -12
  113. package/template/.codex/skills/yss-design-system/SKILL.md +19 -19
  114. package/template/.codex/skills/yss-design-system/references/data-quality-theme.md +13 -0
  115. package/template/.codex/skills/yss-design-system/references/design-qa-theme.md +3 -1
  116. package/template/.codex/skills/yss-design-system/references/design-system.md +7 -9
  117. package/template/.codex/skills/yss-formily/SKILL.md +21 -258
  118. package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +17 -13
  119. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.eslintrc.cjs +1 -0
  120. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.npmrc.example +2 -0
  121. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/DESIGN.md +264 -0
  122. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +13 -0
  123. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/__yss_dotfile__.gitignore +6 -0
  124. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/micro-config.json +5 -0
  125. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/orval.config.ts +2 -0
  126. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +30 -0
  127. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.development +1 -0
  128. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.example +5 -0
  129. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production +1 -0
  130. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production.standalone +1 -0
  131. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/index.html +2 -0
  132. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/package.json +34 -0
  133. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/public/favicon.svg +1 -0
  134. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/App.vue +15 -0
  135. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/api/mutator.ts +7 -0
  136. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/components/ThemeScope.vue +11 -0
  137. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/config/theme.json +41 -0
  138. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/env.d.ts +1 -0
  139. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/main.ts +40 -0
  140. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/router/index.ts +8 -0
  141. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/store/theme.ts +37 -0
  142. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/styles/index.less +6 -0
  143. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/types/microAppBridge.ts +28 -0
  144. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/utils/microAppRouterBridge.ts +266 -0
  145. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/NotFound.vue +1 -0
  146. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/Welcome.vue +1 -0
  147. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/tsconfig.json +23 -0
  148. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/vite.config.ts +16 -0
  149. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +9026 -0
  150. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-workspace.yaml +7 -0
  151. package/template/.codex/skills/yss-frontend-scaffold-generator/references/data-quality-baseline.md +17 -0
  152. package/template/.codex/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +49 -0
  153. package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +41 -13
  154. package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/refresh_baseline.mjs +29 -0
  155. package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +5 -1
  156. package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +32 -0
  157. package/template/.codex/skills/yss-hook/SKILL.md +1 -1
  158. package/template/.codex/skills/yss-implementation-contract-compiler/SKILL.md +1 -1
  159. package/template/.codex/skills/yss-implementation-contract-compiler/references/boundaries.md +5 -3
  160. package/template/.codex/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +13 -5
  161. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
  162. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +1 -1
  163. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +12 -8
  164. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  165. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +97 -9
  166. package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +2 -2
  167. package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +1 -1
  168. package/template/.codex/skills/yss-openapi-governance/SKILL.md +2 -0
  169. package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +43 -15
  170. package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +2 -2
  171. package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +1 -1
  172. package/template/.codex/skills/yss-prototype-stage/SKILL.md +12 -8
  173. package/template/.codex/skills/yss-prototype-stage/assets/antd-authoring/package.json +16 -0
  174. package/template/.codex/skills/yss-prototype-stage/assets/antd-authoring/pnpm-lock.yaml +1678 -0
  175. package/template/.codex/skills/yss-prototype-stage/assets/antd-authoring/workbench.jsx +23 -0
  176. package/template/.codex/skills/yss-prototype-stage/assets/native-workbench/app.js +20 -0
  177. package/template/.codex/skills/yss-prototype-stage/assets/native-workbench/index.html +11 -0
  178. package/template/.codex/skills/yss-prototype-stage/assets/native-workbench/styles.css +28 -0
  179. package/template/.codex/skills/yss-prototype-stage/assets/offline-html/app.js +50 -0
  180. package/template/.codex/skills/yss-prototype-stage/assets/offline-html/index.html +38 -0
  181. package/template/.codex/skills/yss-prototype-stage/assets/offline-html/scenarios.js +7 -0
  182. package/template/.codex/skills/yss-prototype-stage/assets/offline-html/styles.css +20 -0
  183. package/template/.codex/skills/yss-prototype-stage/references/antd-component-catalog.json +736 -0
  184. package/template/.codex/skills/yss-prototype-stage/references/antd-integration.md +61 -0
  185. package/template/.codex/skills/yss-prototype-stage/references/html-prototype-practices.md +14 -0
  186. package/template/.codex/skills/yss-prototype-stage/references/product-design-adapter.md +28 -51
  187. package/template/.codex/skills/yss-prototype-stage/references/prototype-profile-routing.md +15 -4
  188. package/template/.codex/skills/yss-prototype-stage/scripts/build-antd-prototype.mjs +71 -0
  189. package/template/.codex/skills/yss-prototype-stage/scripts/collect-antd-reference.mjs +26 -0
  190. package/template/.codex/skills/yss-prototype-stage/scripts/offline-html.mjs +121 -0
  191. package/template/.codex/skills/yss-prototype-stage/scripts/prototype-contract.mjs +52 -143
  192. package/template/.codex/skills/yss-prototype-stage/tests/antd-reference.test.mjs +24 -0
  193. package/template/.codex/skills/yss-prototype-stage/tests/browser-smoke.mjs +77 -0
  194. package/template/.codex/skills/yss-prototype-stage/tests/run-scenarios.mjs +73 -26
  195. package/template/.codex/skills/yss-prototype-stage/tests/workbench-smoke.mjs +57 -0
  196. package/template/.codex/skills/yss-skill-source-index-refresh/references/source-map-config.md +0 -1
  197. package/template/.codex/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +0 -1
  198. package/template/.codex/skills/yss-tactical-design/SKILL.md +1 -1
  199. package/template/.codex/skills/yss-ui/SKILL.md +3 -2
  200. package/template/.codex/skills/yss-ui/references/component-routing.md +11 -10
  201. package/template/.codex/skills/yss-ui/references/specialized-components.md +52 -0
  202. package/template/.codex/skills/yss-web-controller/scripts/generate_controller.mjs +4 -3
  203. package/template/.codex/skills/yss-web-controller/scripts/generate_controller.test.mjs +1 -1
  204. package/template/.cursor/skills/yss-ddd-scaffold-generator/SKILL.md +3 -3
  205. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +1 -1
  206. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/layer-skill-routing.md +18 -0
  207. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  208. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +13 -4
  209. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +9 -8
  210. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +2 -1
  211. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +6 -4
  212. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +108 -12
  213. package/template/.cursor/skills/yss-design-system/SKILL.md +19 -19
  214. package/template/.cursor/skills/yss-design-system/references/data-quality-theme.md +13 -0
  215. package/template/.cursor/skills/yss-design-system/references/design-qa-theme.md +3 -1
  216. package/template/.cursor/skills/yss-design-system/references/design-system.md +7 -9
  217. package/template/.cursor/skills/yss-formily/SKILL.md +21 -258
  218. package/template/.cursor/skills/yss-frontend-scaffold-generator/SKILL.md +17 -13
  219. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.eslintrc.cjs +1 -0
  220. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.npmrc.example +2 -0
  221. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/DESIGN.md +264 -0
  222. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +13 -0
  223. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/__yss_dotfile__.gitignore +6 -0
  224. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/micro-config.json +5 -0
  225. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/orval.config.ts +2 -0
  226. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +30 -0
  227. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.development +1 -0
  228. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.example +5 -0
  229. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production +1 -0
  230. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production.standalone +1 -0
  231. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/index.html +2 -0
  232. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/package.json +34 -0
  233. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/public/favicon.svg +1 -0
  234. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/App.vue +15 -0
  235. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/api/mutator.ts +7 -0
  236. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/components/ThemeScope.vue +11 -0
  237. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/config/theme.json +41 -0
  238. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/env.d.ts +1 -0
  239. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/main.ts +40 -0
  240. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/router/index.ts +8 -0
  241. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/store/theme.ts +37 -0
  242. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/styles/index.less +6 -0
  243. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/types/microAppBridge.ts +28 -0
  244. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/utils/microAppRouterBridge.ts +266 -0
  245. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/NotFound.vue +1 -0
  246. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/Welcome.vue +1 -0
  247. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/tsconfig.json +23 -0
  248. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/vite.config.ts +16 -0
  249. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +9026 -0
  250. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-workspace.yaml +7 -0
  251. package/template/.cursor/skills/yss-frontend-scaffold-generator/references/data-quality-baseline.md +17 -0
  252. package/template/.cursor/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +49 -0
  253. package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +41 -13
  254. package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/refresh_baseline.mjs +29 -0
  255. package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +5 -1
  256. package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +32 -0
  257. package/template/.cursor/skills/yss-hook/SKILL.md +1 -1
  258. package/template/.cursor/skills/yss-implementation-contract-compiler/SKILL.md +1 -1
  259. package/template/.cursor/skills/yss-implementation-contract-compiler/references/boundaries.md +5 -3
  260. package/template/.cursor/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +13 -5
  261. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
  262. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +1 -1
  263. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +12 -8
  264. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  265. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +97 -9
  266. package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +2 -2
  267. package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +1 -1
  268. package/template/.cursor/skills/yss-openapi-governance/SKILL.md +2 -0
  269. package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +43 -15
  270. package/template/.cursor/skills/yss-product-lifecycle/references/orchestration.md +2 -2
  271. package/template/.cursor/skills/yss-product-lifecycle/references/state-model.md +1 -1
  272. package/template/.cursor/skills/yss-prototype-stage/SKILL.md +12 -8
  273. package/template/.cursor/skills/yss-prototype-stage/assets/antd-authoring/package.json +16 -0
  274. package/template/.cursor/skills/yss-prototype-stage/assets/antd-authoring/pnpm-lock.yaml +1678 -0
  275. package/template/.cursor/skills/yss-prototype-stage/assets/antd-authoring/workbench.jsx +23 -0
  276. package/template/.cursor/skills/yss-prototype-stage/assets/native-workbench/app.js +20 -0
  277. package/template/.cursor/skills/yss-prototype-stage/assets/native-workbench/index.html +11 -0
  278. package/template/.cursor/skills/yss-prototype-stage/assets/native-workbench/styles.css +28 -0
  279. package/template/.cursor/skills/yss-prototype-stage/assets/offline-html/app.js +50 -0
  280. package/template/.cursor/skills/yss-prototype-stage/assets/offline-html/index.html +38 -0
  281. package/template/.cursor/skills/yss-prototype-stage/assets/offline-html/scenarios.js +7 -0
  282. package/template/.cursor/skills/yss-prototype-stage/assets/offline-html/styles.css +20 -0
  283. package/template/.cursor/skills/yss-prototype-stage/references/antd-component-catalog.json +736 -0
  284. package/template/.cursor/skills/yss-prototype-stage/references/antd-integration.md +61 -0
  285. package/template/.cursor/skills/yss-prototype-stage/references/html-prototype-practices.md +14 -0
  286. package/template/.cursor/skills/yss-prototype-stage/references/product-design-adapter.md +28 -51
  287. package/template/.cursor/skills/yss-prototype-stage/references/prototype-profile-routing.md +15 -4
  288. package/template/.cursor/skills/yss-prototype-stage/scripts/build-antd-prototype.mjs +71 -0
  289. package/template/.cursor/skills/yss-prototype-stage/scripts/collect-antd-reference.mjs +26 -0
  290. package/template/.cursor/skills/yss-prototype-stage/scripts/offline-html.mjs +121 -0
  291. package/template/.cursor/skills/yss-prototype-stage/scripts/prototype-contract.mjs +52 -143
  292. package/template/.cursor/skills/yss-prototype-stage/tests/antd-reference.test.mjs +24 -0
  293. package/template/.cursor/skills/yss-prototype-stage/tests/browser-smoke.mjs +77 -0
  294. package/template/.cursor/skills/yss-prototype-stage/tests/run-scenarios.mjs +73 -26
  295. package/template/.cursor/skills/yss-prototype-stage/tests/workbench-smoke.mjs +57 -0
  296. package/template/.cursor/skills/yss-skill-source-index-refresh/references/source-map-config.md +0 -1
  297. package/template/.cursor/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +0 -1
  298. package/template/.cursor/skills/yss-tactical-design/SKILL.md +1 -1
  299. package/template/.cursor/skills/yss-ui/SKILL.md +3 -2
  300. package/template/.cursor/skills/yss-ui/references/component-routing.md +11 -10
  301. package/template/.cursor/skills/yss-ui/references/specialized-components.md +52 -0
  302. package/template/.cursor/skills/yss-web-controller/scripts/generate_controller.mjs +4 -3
  303. package/template/.cursor/skills/yss-web-controller/scripts/generate_controller.test.mjs +1 -1
  304. package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +3 -3
  305. package/template/.pi/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +1 -1
  306. package/template/.pi/skills/yss-ddd-scaffold-generator/references/layer-skill-routing.md +18 -0
  307. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  308. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +13 -4
  309. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +9 -8
  310. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +2 -1
  311. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +6 -4
  312. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +108 -12
  313. package/template/.pi/skills/yss-design-system/SKILL.md +19 -19
  314. package/template/.pi/skills/yss-design-system/references/data-quality-theme.md +13 -0
  315. package/template/.pi/skills/yss-design-system/references/design-qa-theme.md +3 -1
  316. package/template/.pi/skills/yss-design-system/references/design-system.md +7 -9
  317. package/template/.pi/skills/yss-formily/SKILL.md +21 -258
  318. package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +17 -13
  319. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.eslintrc.cjs +1 -0
  320. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.npmrc.example +2 -0
  321. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/DESIGN.md +264 -0
  322. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +13 -0
  323. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/__yss_dotfile__.gitignore +6 -0
  324. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/micro-config.json +5 -0
  325. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/orval.config.ts +2 -0
  326. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +30 -0
  327. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.development +1 -0
  328. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.example +5 -0
  329. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production +1 -0
  330. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production.standalone +1 -0
  331. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/index.html +2 -0
  332. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/package.json +34 -0
  333. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/public/favicon.svg +1 -0
  334. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/App.vue +15 -0
  335. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/api/mutator.ts +7 -0
  336. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/components/ThemeScope.vue +11 -0
  337. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/config/theme.json +41 -0
  338. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/env.d.ts +1 -0
  339. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/main.ts +40 -0
  340. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/router/index.ts +8 -0
  341. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/store/theme.ts +37 -0
  342. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/styles/index.less +6 -0
  343. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/types/microAppBridge.ts +28 -0
  344. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/utils/microAppRouterBridge.ts +266 -0
  345. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/NotFound.vue +1 -0
  346. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/Welcome.vue +1 -0
  347. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/tsconfig.json +23 -0
  348. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/vite.config.ts +16 -0
  349. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +9026 -0
  350. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-workspace.yaml +7 -0
  351. package/template/.pi/skills/yss-frontend-scaffold-generator/references/data-quality-baseline.md +17 -0
  352. package/template/.pi/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +49 -0
  353. package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +41 -13
  354. package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/refresh_baseline.mjs +29 -0
  355. package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +5 -1
  356. package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +32 -0
  357. package/template/.pi/skills/yss-hook/SKILL.md +1 -1
  358. package/template/.pi/skills/yss-implementation-contract-compiler/SKILL.md +1 -1
  359. package/template/.pi/skills/yss-implementation-contract-compiler/references/boundaries.md +5 -3
  360. package/template/.pi/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +13 -5
  361. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
  362. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +1 -1
  363. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +12 -8
  364. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  365. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +97 -9
  366. package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +2 -2
  367. package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +1 -1
  368. package/template/.pi/skills/yss-openapi-governance/SKILL.md +2 -0
  369. package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +43 -15
  370. package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +2 -2
  371. package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +1 -1
  372. package/template/.pi/skills/yss-prototype-stage/SKILL.md +12 -8
  373. package/template/.pi/skills/yss-prototype-stage/assets/antd-authoring/package.json +16 -0
  374. package/template/.pi/skills/yss-prototype-stage/assets/antd-authoring/pnpm-lock.yaml +1678 -0
  375. package/template/.pi/skills/yss-prototype-stage/assets/antd-authoring/workbench.jsx +23 -0
  376. package/template/.pi/skills/yss-prototype-stage/assets/native-workbench/app.js +20 -0
  377. package/template/.pi/skills/yss-prototype-stage/assets/native-workbench/index.html +11 -0
  378. package/template/.pi/skills/yss-prototype-stage/assets/native-workbench/styles.css +28 -0
  379. package/template/.pi/skills/yss-prototype-stage/assets/offline-html/app.js +50 -0
  380. package/template/.pi/skills/yss-prototype-stage/assets/offline-html/index.html +38 -0
  381. package/template/.pi/skills/yss-prototype-stage/assets/offline-html/scenarios.js +7 -0
  382. package/template/.pi/skills/yss-prototype-stage/assets/offline-html/styles.css +20 -0
  383. package/template/.pi/skills/yss-prototype-stage/references/antd-component-catalog.json +736 -0
  384. package/template/.pi/skills/yss-prototype-stage/references/antd-integration.md +61 -0
  385. package/template/.pi/skills/yss-prototype-stage/references/html-prototype-practices.md +14 -0
  386. package/template/.pi/skills/yss-prototype-stage/references/product-design-adapter.md +28 -51
  387. package/template/.pi/skills/yss-prototype-stage/references/prototype-profile-routing.md +15 -4
  388. package/template/.pi/skills/yss-prototype-stage/scripts/build-antd-prototype.mjs +71 -0
  389. package/template/.pi/skills/yss-prototype-stage/scripts/collect-antd-reference.mjs +26 -0
  390. package/template/.pi/skills/yss-prototype-stage/scripts/offline-html.mjs +121 -0
  391. package/template/.pi/skills/yss-prototype-stage/scripts/prototype-contract.mjs +52 -143
  392. package/template/.pi/skills/yss-prototype-stage/tests/antd-reference.test.mjs +24 -0
  393. package/template/.pi/skills/yss-prototype-stage/tests/browser-smoke.mjs +77 -0
  394. package/template/.pi/skills/yss-prototype-stage/tests/run-scenarios.mjs +73 -26
  395. package/template/.pi/skills/yss-prototype-stage/tests/workbench-smoke.mjs +57 -0
  396. package/template/.pi/skills/yss-skill-source-index-refresh/references/source-map-config.md +0 -1
  397. package/template/.pi/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +0 -1
  398. package/template/.pi/skills/yss-tactical-design/SKILL.md +1 -1
  399. package/template/.pi/skills/yss-ui/SKILL.md +3 -2
  400. package/template/.pi/skills/yss-ui/references/component-routing.md +11 -10
  401. package/template/.pi/skills/yss-ui/references/specialized-components.md +52 -0
  402. package/template/.pi/skills/yss-web-controller/scripts/generate_controller.mjs +4 -3
  403. package/template/.pi/skills/yss-web-controller/scripts/generate_controller.test.mjs +1 -1
  404. package/template/CONTEXT.md +1 -0
  405. package/template/DESIGN.md +31 -14
  406. package/template/__yss_dotfile__.gitignore +4 -0
  407. package/template/docs/agents/digital-human-roles.yaml +4 -4
  408. package/template/docs/agents/skill-migrations.md +15 -2
  409. package/template/docs/agents/yss-skill-registry.yaml +6 -40
  410. package/template/docs/design/README.md +4 -4
  411. package/template/docs/design/design-system-sync.yaml +2 -1
  412. package/template/docs/design/design.md +23 -31
  413. package/template/docs/design/preview-dark.html +3 -3
  414. package/template/docs/design/preview.css +1 -1
  415. package/template/docs/design/preview.html +2 -2
  416. package/template/docs/design/templates/interaction-spec-template.md +2 -2
  417. package/template/docs/design/templates/prototype-evidence-template.yaml +18 -22
  418. package/template/docs/design/templates/prototype-review-checklist.md +3 -1
  419. package/template/docs/design/templates/state-matrix-template.md +1 -1
  420. package/template/docs/design/templates/visual-baseline-template.yaml +3 -2
  421. package/template/docs/design/tokens/.design-md-projection.json +7 -7
  422. package/template/docs/design/tokens/theme.json +16 -10
  423. package/template/docs/design/tokens/tokens.compact.json +521 -237
  424. package/template/docs/design/tokens/tokens.dark.json +527 -240
  425. package/template/docs/design/tokens/tokens.default.json +513 -235
  426. package/template/docs/design/tokens/variables.css +67 -65
  427. package/template/docs/design/tokens/variables.dark.css +41 -41
  428. package/template/docs/process/delivery-preflight.md +1 -1
  429. package/template/docs/process/frontend-backend-delivery.md +2 -1
  430. package/template/docs/process/lifecycle-registry-baseline.json +1 -1
  431. package/template/docs/process/lifecycle-registry.yaml +5 -5
  432. package/template/docs/process/schemas/api-contract-decision.schema.json +74 -0
  433. package/template/docs/process/schemas/data-architecture-decision.schema.json +34 -0
  434. package/template/docs/process/schemas/implementation-repository-preparation-result.schema.json +80 -24
  435. package/template/docs/process/schemas/project-scaffold-contract.schema.json +85 -11
  436. package/template/docs/process/schemas/strategic-design-handoff.schema.json +296 -107
  437. package/template/docs/process/schemas/strategic-handoff-delivery-verification.schema.json +19 -0
  438. package/template/docs/process/schemas/strategic-handoff-delivery.schema.json +84 -0
  439. package/template/docs/process/schemas/strategic-handoff-import-receipt-v3.schema.json +42 -0
  440. package/template/docs/process/strategic-handoff-package.md +26 -9
  441. package/template/docs/user-guide//350/256/276/345/244/207/345/200/237/347/224/250/350/264/257/347/251/277/346/241/210/344/276/213.md +1 -1
  442. package/template/scripts/audit-legacy-backend-scaffold +29 -0
  443. package/template/scripts/lib/api-contract-decision.mjs +49 -0
  444. package/template/scripts/lib/api-contract-decision.test.mjs +69 -0
  445. package/template/scripts/lib/backend-scaffold-prerequisites.mjs +123 -0
  446. package/template/scripts/lib/legacy-backend-scaffold-audit.mjs +87 -0
  447. package/template/scripts/lib/legacy-backend-scaffold-audit.test.mjs +64 -0
  448. package/template/scripts/lib/lifecycle-transition.mjs +153 -5
  449. package/template/scripts/lib/openapi-draft-validation.mjs +111 -0
  450. package/template/scripts/lib/skill-registry.mjs +17 -3
  451. package/template/scripts/lib/skill-supply-chain.mjs +12 -1
  452. package/template/scripts/lib/strategic-feedback.mjs +2 -2
  453. package/template/scripts/lib/strategic-handoff-consumption.mjs +2 -2
  454. package/template/scripts/lib/strategic-handoff.mjs +77 -3
  455. package/template/scripts/strategic-handoff +6 -4
  456. package/template/scripts/verify-openapi-draft-validation-record +10 -129
  457. package/template/scripts/verify-strategic-context-import +12 -14
  458. package/template/skills-lock.json +22 -77
  459. package/template/yss-public-skills.json +0 -6
  460. package/template.snapshot.json +8 -4
  461. package/template/.agents/skills/yss-antd-design/SKILL.md +0 -35
  462. package/template/.agents/skills/yss-antd-design/references/boundaries.md +0 -30
  463. package/template/.agents/skills/yss-antd-design/references/cli-matrix.md +0 -38
  464. package/template/.agents/skills/yss-antd-design/references/evidence.md +0 -35
  465. package/template/.agents/skills/yss-antd-design/scripts/validate-frontmatter.mjs +0 -46
  466. package/template/.agents/skills/yss-antd-design/scripts/validate-frontmatter.test.mjs +0 -27
  467. package/template/.agents/skills/yss-antdv-next-design/SKILL.md +0 -48
  468. package/template/.agents/skills/yss-antdv-next-design/references/boundaries.md +0 -25
  469. package/template/.agents/skills/yss-antdv-next-design/references/cli-matrix.md +0 -34
  470. package/template/.agents/skills/yss-antdv-next-design/references/fact-pack.md +0 -38
  471. package/template/.agents/skills/yss-antdv-next-design/scripts/collect-antdv-next-facts.mjs +0 -213
  472. package/template/.agents/skills/yss-antdv-next-design/scripts/validate-fact-pack.mjs +0 -168
  473. package/template/.agents/skills/yss-antdv-next-design/tests/run-scenarios.mjs +0 -139
  474. package/template/.agents/skills/yss-components/SKILL.md +0 -386
  475. package/template/.agents/skills/yss-components/agents/openai.yaml +0 -5
  476. package/template/.agents/skills/yss-components/references/frontend-docs.md +0 -9
  477. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +0 -31
  478. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/agents/openai.yaml +0 -5
  479. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/SKILL.md +0 -8
  480. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/agents/openai.yaml +0 -5
  481. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/SKILL.md +0 -8
  482. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/agents/openai.yaml +0 -5
  483. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/SKILL.md +0 -8
  484. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/agents/openai.yaml +0 -5
  485. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/SKILL.md +0 -8
  486. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/agents/openai.yaml +0 -5
  487. package/template/.agents/skills/yss-mvc-scaffold-generator/SKILL.md +0 -8
  488. package/template/.agents/skills/yss-mvc-scaffold-generator/agents/openai.yaml +0 -4
  489. package/template/.agents/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +0 -50
  490. package/template/.agents/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +0 -42
  491. package/template/.agents/skills/yss-mvc-scaffold-generator/references/architecture.md +0 -28
  492. package/template/.agents/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt +0 -137
  493. package/template/.agents/skills/yss-mvc-scaffold-generator/references/history/generate_project.test.mjs.txt +0 -341
  494. package/template/.agents/skills/yss-mvc-scaffold-generator/references/history/skill.md +0 -87
  495. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +0 -3
  496. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +0 -9
  497. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +0 -74
  498. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.test.mjs +0 -36
  499. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +0 -114
  500. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +0 -90
  501. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +0 -54
  502. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +0 -103
  503. package/template/.codex/skills/yss-antd-design/SKILL.md +0 -35
  504. package/template/.codex/skills/yss-antd-design/references/boundaries.md +0 -30
  505. package/template/.codex/skills/yss-antd-design/references/cli-matrix.md +0 -38
  506. package/template/.codex/skills/yss-antd-design/references/evidence.md +0 -35
  507. package/template/.codex/skills/yss-antd-design/scripts/validate-frontmatter.mjs +0 -46
  508. package/template/.codex/skills/yss-antd-design/scripts/validate-frontmatter.test.mjs +0 -27
  509. package/template/.codex/skills/yss-antdv-next-design/SKILL.md +0 -48
  510. package/template/.codex/skills/yss-antdv-next-design/references/boundaries.md +0 -25
  511. package/template/.codex/skills/yss-antdv-next-design/references/cli-matrix.md +0 -34
  512. package/template/.codex/skills/yss-antdv-next-design/references/fact-pack.md +0 -38
  513. package/template/.codex/skills/yss-antdv-next-design/scripts/collect-antdv-next-facts.mjs +0 -213
  514. package/template/.codex/skills/yss-antdv-next-design/scripts/validate-fact-pack.mjs +0 -168
  515. package/template/.codex/skills/yss-antdv-next-design/tests/run-scenarios.mjs +0 -139
  516. package/template/.codex/skills/yss-components/SKILL.md +0 -386
  517. package/template/.codex/skills/yss-components/agents/openai.yaml +0 -5
  518. package/template/.codex/skills/yss-components/references/frontend-docs.md +0 -9
  519. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +0 -31
  520. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/agents/openai.yaml +0 -5
  521. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/SKILL.md +0 -8
  522. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/agents/openai.yaml +0 -5
  523. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/SKILL.md +0 -8
  524. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/agents/openai.yaml +0 -5
  525. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/SKILL.md +0 -8
  526. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/agents/openai.yaml +0 -5
  527. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/SKILL.md +0 -8
  528. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/agents/openai.yaml +0 -5
  529. package/template/.codex/skills/yss-mvc-scaffold-generator/SKILL.md +0 -8
  530. package/template/.codex/skills/yss-mvc-scaffold-generator/agents/openai.yaml +0 -4
  531. package/template/.codex/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +0 -50
  532. package/template/.codex/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +0 -42
  533. package/template/.codex/skills/yss-mvc-scaffold-generator/references/architecture.md +0 -28
  534. package/template/.codex/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt +0 -137
  535. package/template/.codex/skills/yss-mvc-scaffold-generator/references/history/generate_project.test.mjs.txt +0 -341
  536. package/template/.codex/skills/yss-mvc-scaffold-generator/references/history/skill.md +0 -87
  537. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +0 -3
  538. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +0 -9
  539. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +0 -74
  540. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.test.mjs +0 -36
  541. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +0 -114
  542. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +0 -90
  543. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +0 -54
  544. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +0 -103
  545. package/template/.cursor/skills/yss-antd-design/SKILL.md +0 -35
  546. package/template/.cursor/skills/yss-antd-design/references/boundaries.md +0 -30
  547. package/template/.cursor/skills/yss-antd-design/references/cli-matrix.md +0 -38
  548. package/template/.cursor/skills/yss-antd-design/references/evidence.md +0 -35
  549. package/template/.cursor/skills/yss-antd-design/scripts/validate-frontmatter.mjs +0 -46
  550. package/template/.cursor/skills/yss-antd-design/scripts/validate-frontmatter.test.mjs +0 -27
  551. package/template/.cursor/skills/yss-antdv-next-design/SKILL.md +0 -48
  552. package/template/.cursor/skills/yss-antdv-next-design/references/boundaries.md +0 -25
  553. package/template/.cursor/skills/yss-antdv-next-design/references/cli-matrix.md +0 -34
  554. package/template/.cursor/skills/yss-antdv-next-design/references/fact-pack.md +0 -38
  555. package/template/.cursor/skills/yss-antdv-next-design/scripts/collect-antdv-next-facts.mjs +0 -213
  556. package/template/.cursor/skills/yss-antdv-next-design/scripts/validate-fact-pack.mjs +0 -168
  557. package/template/.cursor/skills/yss-antdv-next-design/tests/run-scenarios.mjs +0 -139
  558. package/template/.cursor/skills/yss-components/SKILL.md +0 -386
  559. package/template/.cursor/skills/yss-components/agents/openai.yaml +0 -5
  560. package/template/.cursor/skills/yss-components/references/frontend-docs.md +0 -9
  561. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +0 -31
  562. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/agents/openai.yaml +0 -5
  563. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/SKILL.md +0 -8
  564. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/agents/openai.yaml +0 -5
  565. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/SKILL.md +0 -8
  566. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/agents/openai.yaml +0 -5
  567. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/SKILL.md +0 -8
  568. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/agents/openai.yaml +0 -5
  569. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/SKILL.md +0 -8
  570. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/agents/openai.yaml +0 -5
  571. package/template/.cursor/skills/yss-mvc-scaffold-generator/SKILL.md +0 -8
  572. package/template/.cursor/skills/yss-mvc-scaffold-generator/agents/openai.yaml +0 -4
  573. package/template/.cursor/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +0 -50
  574. package/template/.cursor/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +0 -42
  575. package/template/.cursor/skills/yss-mvc-scaffold-generator/references/architecture.md +0 -28
  576. package/template/.cursor/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt +0 -137
  577. package/template/.cursor/skills/yss-mvc-scaffold-generator/references/history/generate_project.test.mjs.txt +0 -341
  578. package/template/.cursor/skills/yss-mvc-scaffold-generator/references/history/skill.md +0 -87
  579. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +0 -3
  580. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +0 -9
  581. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +0 -74
  582. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.test.mjs +0 -36
  583. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +0 -114
  584. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +0 -90
  585. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +0 -54
  586. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +0 -103
  587. package/template/.pi/skills/yss-antd-design/SKILL.md +0 -35
  588. package/template/.pi/skills/yss-antd-design/references/boundaries.md +0 -30
  589. package/template/.pi/skills/yss-antd-design/references/cli-matrix.md +0 -38
  590. package/template/.pi/skills/yss-antd-design/references/evidence.md +0 -35
  591. package/template/.pi/skills/yss-antd-design/scripts/validate-frontmatter.mjs +0 -46
  592. package/template/.pi/skills/yss-antd-design/scripts/validate-frontmatter.test.mjs +0 -27
  593. package/template/.pi/skills/yss-antdv-next-design/SKILL.md +0 -48
  594. package/template/.pi/skills/yss-antdv-next-design/references/boundaries.md +0 -25
  595. package/template/.pi/skills/yss-antdv-next-design/references/cli-matrix.md +0 -34
  596. package/template/.pi/skills/yss-antdv-next-design/references/fact-pack.md +0 -38
  597. package/template/.pi/skills/yss-antdv-next-design/scripts/collect-antdv-next-facts.mjs +0 -213
  598. package/template/.pi/skills/yss-antdv-next-design/scripts/validate-fact-pack.mjs +0 -168
  599. package/template/.pi/skills/yss-antdv-next-design/tests/run-scenarios.mjs +0 -139
  600. package/template/.pi/skills/yss-components/SKILL.md +0 -386
  601. package/template/.pi/skills/yss-components/agents/openai.yaml +0 -5
  602. package/template/.pi/skills/yss-components/references/frontend-docs.md +0 -9
  603. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +0 -31
  604. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/agents/openai.yaml +0 -5
  605. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/SKILL.md +0 -8
  606. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/agents/openai.yaml +0 -5
  607. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/SKILL.md +0 -8
  608. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/agents/openai.yaml +0 -5
  609. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/SKILL.md +0 -8
  610. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/agents/openai.yaml +0 -5
  611. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/SKILL.md +0 -8
  612. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/agents/openai.yaml +0 -5
  613. package/template/.pi/skills/yss-mvc-scaffold-generator/SKILL.md +0 -8
  614. package/template/.pi/skills/yss-mvc-scaffold-generator/agents/openai.yaml +0 -4
  615. package/template/.pi/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +0 -50
  616. package/template/.pi/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +0 -42
  617. package/template/.pi/skills/yss-mvc-scaffold-generator/references/architecture.md +0 -28
  618. package/template/.pi/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt +0 -137
  619. package/template/.pi/skills/yss-mvc-scaffold-generator/references/history/generate_project.test.mjs.txt +0 -341
  620. package/template/.pi/skills/yss-mvc-scaffold-generator/references/history/skill.md +0 -87
  621. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +0 -3
  622. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +0 -9
  623. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +0 -74
  624. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.test.mjs +0 -36
  625. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +0 -114
  626. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +0 -90
  627. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +0 -54
  628. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +0 -103
@@ -20,6 +20,18 @@ const SOURCE_SCHEMAS = new Map([
20
20
  ]);
21
21
  const CAPABILITIES=['backend-technical-design','frontend-engineering-design','delivery-coordination'];
22
22
 
23
+ function deliveryReadme(handoff) {
24
+ const sources=Object.entries(handoff.source).sort(([a],[b])=>a.localeCompare(b)).map(([key,value])=>`- \`${key}\`: \`${value.persisted_ref}\` (${value.version}, ${value.digest})`);
25
+ const routes=handoff.consumer_routes.map(route=>`- \`${route.capability}\`: \`${route.activation}\` (${route.route_id})`);
26
+ const questions=handoff.tactical_design_questions.length?handoff.tactical_design_questions.map((_,index)=>`- tactical-design-question-${index+1}`).join('\n'):'- 无';
27
+ const deferred=handoff.deferred_decisions_and_ownership.length?handoff.deferred_decisions_and_ownership.map(item=>`- ${item.decision_id||item.id||'deferred-decision'} / ${item.owner||'owner-unset'}`).join('\n'):'- 无';
28
+ return `# 战略交接快照包\n\n此目录是由 Handoff v5 确定性生成的不可变研发交付件。业务正文保留在 \`payload/\`,本页只提供接收导航。\n\n## 范围\n\n- Handoff: \`${handoff.handoff_id}\`\n- Version: \`${handoff.handoff_version}\`\n- Schema: \`5\`\n\n## 来源资产\n\n${sources.join('\n')}\n\n## 消费者路线\n\n${routes.join('\n')}\n\n## 待决问题索引\n\n${questions}\n\n## 延期决定索引\n\n${deferred}\n\n## 接收命令\n\n\`\`\`bash\nscripts/strategic-handoff import --bundle <delivery-dir> --target-root <implementation-repository>\n\`\`\`\n`;
29
+ }
30
+
31
+ function isDeliveryDirectory(input) {
32
+ return existsSync(input) && lstatSync(input).isDirectory() && existsSync(path.join(input,'delivery-record.json'));
33
+ }
34
+
23
35
  function versionSchema(version, schemas, label) {
24
36
  ensure(schemas.has(version), `${label} 未知 schema_version: ${String(version)};支持版本: ${[...schemas.keys()].join(', ')};请使用显式迁移器升级`);
25
37
  return schemas.get(version);
@@ -294,6 +306,7 @@ export async function exportBundle({sourceRoot,handoffRef,output,zip=false,previ
294
306
  put('indexes/rules.json',Buffer.from(json(current.indexes.rules)));
295
307
  put('indexes/scenarios.json',Buffer.from(json(current.indexes.scenarios)));
296
308
  put('indexes/changes.json',Buffer.from(json({previous_bundle:previousBundle,...compareIndexes(current.indexes,prior?.indexes)})));
309
+ if(current.handoff.schema_version===5)put('README.md',Buffer.from(deliveryReadme(current.handoff)));
297
310
  if(prior){put('indexes/previous-manifest.json',Buffer.from(json(prior.manifest)));put('indexes/previous-rules.json',prior.rulesBytes);put('indexes/previous-scenarios.json',prior.scenariosBytes);}
298
311
  const body={schema_version:1,bundle_id:current.handoff.handoff_id,version:current.handoff.handoff_version,handoff_ref:handoffRef,previous_bundle:previousBundle,files:entries.sort((a,b)=>a.path.localeCompare(b.path))};
299
312
  const manifest={...body,bundle_digest:digest(body)};write(staging,'manifest.json',json(manifest));
@@ -306,9 +319,68 @@ export async function exportBundle({sourceRoot,handoffRef,output,zip=false,previ
306
319
  return {result:'exported',bundle_id:manifest.bundle_id,version:manifest.version,bundle_digest:manifest.bundle_digest,output:target,...(zip?{zip:`${target}.zip`,zip_sha256:hash(readFileSync(`${target}.zip`))}:{})};
307
320
  } finally {rmSync(staging,{recursive:true,force:true});rmSync(`${staging}.zip`,{force:true});}
308
321
  }
322
+
323
+ export async function openDelivery(input, action) {
324
+ const root=path.resolve(input);
325
+ ensure(isDeliveryDirectory(root),'交付目录缺少 delivery-record.json');
326
+ ensure(!lstatSync(root).isSymbolicLink(),'交付目录不能是 symlink');
327
+ const recordBytes=readFileSync(safe(root,'delivery-record.json'));
328
+ const record=parse(recordBytes);schema(record,'docs/process/schemas/strategic-handoff-delivery.schema.json');
329
+ const verification=read(safe(root,record.verification_ref));schema(verification,'docs/process/schemas/strategic-handoff-delivery-verification.schema.json');
330
+ const packageRoot=safe(root,record.package_ref);
331
+ ensure(lstatSync(packageRoot).isDirectory()&&!lstatSync(packageRoot).isSymbolicLink(),'package_ref 必须指向普通目录');
332
+ if(record.zip){const archiveRef=safe(root,record.zip.ref);ensure(lstatSync(archiveRef).isFile()&&hash(readFileSync(archiveRef))===record.zip.sha256,'ZIP 摘要不一致');}
333
+ else ensure(!existsSync(path.join(root,'package.zip')),'未登记的 package.zip');
334
+ const allowed=new Set(['delivery-record.json','verification.json',...(record.zip?['package.zip']:[])]);
335
+ for(const ref of files(root))ensure(ref.startsWith('package/')||allowed.has(ref),`交付目录存在未登记文件: ${ref}`);
336
+ return openBundle(packageRoot,async bundle=>{
337
+ ensure(record.handoff.id===bundle.manifest.bundle_id&&record.handoff.version===bundle.manifest.version&&record.handoff.schema_version===bundle.handoff.schema_version,'delivery record 的 Handoff 身份不一致');
338
+ ensure(record.bundle_digest===bundle.manifest.bundle_digest&&record.manifest_ref==='package/manifest.json','delivery record 的包摘要或清单引用不一致');
339
+ ensure(verification.bundle_digest===bundle.manifest.bundle_digest&&verification.package_ref===record.package_ref&&verification.manifest_ref===record.manifest_ref&&verification.exit_code===0&&verification.result==='verified','delivery verification 与包不一致');
340
+ const handoffEntry=bundle.manifest.files.find(file=>file.original_ref===record.handoff.ref);
341
+ ensure(handoffEntry&&handoffEntry.sha256===record.handoff.sha256,'delivery record 的 Handoff 源摘要不一致');
342
+ const sourceAssets=Object.entries(bundle.handoff.source).sort(([a],[b])=>a.localeCompare(b)).map(([sourceKey,value])=>({source_key:sourceKey,id:value.id||value.baseline_id,version:value.version,ref:value.persisted_ref,digest:value.digest}));
343
+ ensure(own(sourceAssets,record.source_assets),'delivery record 的来源资产不一致');
344
+ ensure(own(bundle.handoff.consumer_routes.map(({route_id,capability,activation})=>({route_id,capability,activation})),record.consumer_routes),'delivery record 的消费者路由不一致');
345
+ const previous=bundle.manifest.previous_bundle?{handoff_id:bundle.manifest.previous_bundle.bundle_id,version:bundle.manifest.previous_bundle.version,bundle_digest:bundle.manifest.previous_bundle.digest}:null;
346
+ ensure(own(previous,record.previous_delivery),'delivery record 的上一版本身份不一致');
347
+ return action({...bundle,deliveryRoot:root,packageRoot,record,recordBytes,verification});
348
+ });
349
+ }
350
+
351
+ export async function finalizeDelivery({sourceRoot,handoffRef,zip=false,previous}) {
352
+ const root=project(sourceRoot);parseContextContract({root});relative(handoffRef);
353
+ const current=await inspectSource(root,handoffRef);
354
+ ensure(current.handoff.schema_version===5,'migration-required: v3/v4 只允许历史 verify/import;修改或重新交付必须迁移到 Handoff v5 并重新批准');
355
+ const delivery=path.join(root,'docs/deliveries/strategic',current.handoff.handoff_id,current.handoff.handoff_version);
356
+ const parent=path.dirname(delivery);mkdirSync(parent,{recursive:true});
357
+ let previousPackage=previous;
358
+ if(previous&&isDeliveryDirectory(path.resolve(previous)))previousPackage=await openDelivery(path.resolve(previous),value=>value.packageRoot);
359
+ const stage=mkdtempSync(path.join(parent,'.delivery-staging-'));
360
+ try {
361
+ const exported=await exportBundle({sourceRoot:root,handoffRef,output:path.join(stage,'package'),zip,previous:previousPackage});
362
+ const handoffEntry=await openBundle(path.join(stage,'package'),bundle=>bundle.manifest.files.find(file=>file.original_ref===handoffRef));
363
+ ensure(handoffEntry,'交付包缺少 Handoff 源文件');
364
+ const verification={schema_version:1,kind:'strategic-delivery-verification-v1',result:'verified',command:`scripts/strategic-handoff verify --bundle docs/deliveries/strategic/${current.handoff.handoff_id}/${current.handoff.handoff_version}`,exit_code:0,executed_at:new Date().toISOString(),package_ref:'package',manifest_ref:'package/manifest.json',bundle_digest:exported.bundle_digest};
365
+ schema(verification,'docs/process/schemas/strategic-handoff-delivery-verification.schema.json');write(stage,'verification.json',json(verification));
366
+ const sourceAssets=Object.entries(current.handoff.source).sort(([a],[b])=>a.localeCompare(b)).map(([sourceKey,value])=>({source_key:sourceKey,id:value.id||value.baseline_id,version:value.version,ref:value.persisted_ref,digest:value.digest}));
367
+ const previousDelivery=await openBundle(path.join(stage,'package'),bundle=>bundle.manifest.previous_bundle?{handoff_id:bundle.manifest.previous_bundle.bundle_id,version:bundle.manifest.previous_bundle.version,bundle_digest:bundle.manifest.previous_bundle.digest}:null);
368
+ const record={schema_version:1,kind:'strategic-handoff-delivery-v1',status:'packaged',handoff:{id:current.handoff.handoff_id,version:current.handoff.handoff_version,ref:handoffRef,sha256:handoffEntry.sha256,schema_version:5},source_assets:sourceAssets,package_ref:'package',manifest_ref:'package/manifest.json',bundle_digest:exported.bundle_digest,verification_ref:'verification.json',consumer_routes:current.handoff.consumer_routes.map(({route_id,capability,activation})=>({route_id,capability,activation})),...(zip?{zip:{ref:'package.zip',sha256:exported.zip_sha256}}:{}),previous_delivery:previousDelivery};
369
+ schema(record,'docs/process/schemas/strategic-handoff-delivery.schema.json');write(stage,'delivery-record.json',json(record));
370
+ await openDelivery(stage,()=>null);
371
+ if(existsSync(delivery)){
372
+ const existing=await openDelivery(delivery,value=>value.record);
373
+ ensure(existing.bundle_digest===record.bundle_digest&&existing.handoff.sha256===record.handoff.sha256,'delivery-version-conflict: 同 Handoff ID/version 已存在不同内容;请提升 handoff_version 并重新批准');
374
+ return {result:'already-packaged',handoff_id:record.handoff.id,version:record.handoff.version,bundle_digest:record.bundle_digest,delivery};
375
+ }
376
+ renameSync(stage,delivery);
377
+ return {result:'packaged',handoff_id:record.handoff.id,version:record.handoff.version,bundle_digest:record.bundle_digest,delivery,...(zip?{zip:path.join(delivery,'package.zip'),zip_sha256:record.zip.sha256}:{})};
378
+ } finally {rmSync(stage,{recursive:true,force:true});}
379
+ }
309
380
  export async function importBundle({bundle,targetRoot}) {
310
381
  const target=project(targetRoot);const context=parseContextContract({root:target});
311
- return openBundle(bundle,async b=>{
382
+ const open=isDeliveryDirectory(path.resolve(bundle))?action=>openDelivery(path.resolve(bundle),action):action=>openBundle(bundle,action);
383
+ return open(async b=>{
312
384
  const rel=`docs/handoffs/${b.manifest.bundle_id}/${b.manifest.version}`,dest=safe(target,rel,{missing:true});
313
385
  if(existsSync(dest)) {
314
386
  const receipt=read(safe(dest,'import-receipt.json'));
@@ -347,8 +419,10 @@ export async function importBundle({bundle,targetRoot}) {
347
419
  if(route.activation!=='not-applicable'&&route.capability==='delivery-coordination')artifactRefs.push(`${rel}/consumer-status-index-draft.json`);
348
420
  return {route_id:route.route_id,capability:route.capability,activation:route.activation,artifact_refs:artifactRefs};
349
421
  });
350
- receipt={schema_version:2,bundle_id:b.manifest.bundle_id,version:b.manifest.version,bundle_digest:b.manifest.bundle_digest,package_ref:`${rel}/package`,target_context_digest:context.document_digest,target_profile_id:profile?.profile_id||'yss-full-lifecycle',selected_consumer_capabilities:capabilities,routes:routeRecords,status:'pending-context-reconciliation'};
351
- schema(receipt,'docs/process/schemas/strategic-handoff-import-receipt.schema.json');
422
+ const fromDelivery=Boolean(b.recordBytes);
423
+ if(fromDelivery)write(stage,'source-delivery-record.json',b.recordBytes);
424
+ receipt={schema_version:fromDelivery?3:2,bundle_id:b.manifest.bundle_id,version:b.manifest.version,bundle_digest:b.manifest.bundle_digest,package_ref:`${rel}/package`,...(fromDelivery?{source_delivery_record_ref:`${rel}/source-delivery-record.json`,source_delivery_record_sha256:hash(b.recordBytes),ready_for_agent:false}:{}),target_context_digest:context.document_digest,target_profile_id:profile?.profile_id||'yss-full-lifecycle',selected_consumer_capabilities:capabilities,routes:routeRecords,status:'pending-context-reconciliation'};
425
+ schema(receipt,fromDelivery?'docs/process/schemas/strategic-handoff-import-receipt-v3.schema.json':'docs/process/schemas/strategic-handoff-import-receipt.schema.json');
352
426
  write(stage,'import-receipt.json',json(receipt));
353
427
  write(stage,'context-reconciliation-draft.json',json({schema_version:2,status:'draft',import_receipt_ref:`${rel}/import-receipt.json`,target_context_digest:context.document_digest,route_ids:selected.map(route=>route.route_id),terms}));
354
428
  write(stage,'upstream-change-impact.json',json({schema_version:2,previous_bundle:b.manifest.previous_bundle,routes:selected.map(route=>({route_id:route.route_id,capability:route.capability,activation:route.activation,changed_source_ids:[...b.changes.updated,...b.changes.removed],added_source_ids:b.changes.added,status:'requires-lifecycle-reconciliation'})),policy:'mark-only-known-dependent-contracts-stale; unknown-dependency-or-design-basis-change-blocks-all'}));
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { parseArgs } from 'node:util';
3
3
  import path from 'node:path';
4
- import { exportBundle, openBundle, importBundle } from './lib/strategic-handoff.mjs';
4
+ import { existsSync } from 'node:fs';
5
+ import { exportBundle, finalizeDelivery, openBundle, openDelivery, importBundle } from './lib/strategic-handoff.mjs';
5
6
  import { read, safe, ensure } from './lib/strategic-handoff-io.mjs';
6
7
 
7
8
  async function preflightExport(values) {
@@ -21,9 +22,10 @@ try {
21
22
  const {values,positionals}=parseArgs({allowPositionals:true,strict:true,options:{'source-root':{type:'string'},handoff:{type:'string'},output:{type:'string'},zip:{type:'boolean'},previous:{type:'string'},bundle:{type:'string'},'target-root':{type:'string'},'preflight-input':{type:'string'}}});
22
23
  const [command]=positionals;
23
24
  let result;
24
- if(command==='export'&&values['source-root']&&values.handoff&&values.output){await preflightExport(values);result=await exportBundle({sourceRoot:values['source-root'],handoffRef:values.handoff,output:values.output,zip:values.zip,previous:values.previous});}
25
- else if(command==='verify'&&values.bundle)result=await openBundle(path.resolve(values.bundle),b=>({result:'verified',bundle_id:b.manifest.bundle_id,version:b.manifest.version,bundle_digest:b.manifest.bundle_digest,rules:b.indexes.rules.length,scenarios:b.indexes.scenarios.length}));
25
+ if(command==='finalize'&&values['source-root']&&values.handoff){await preflightExport(values);result=await finalizeDelivery({sourceRoot:values['source-root'],handoffRef:values.handoff,zip:values.zip,previous:values.previous});}
26
+ else if(command==='export'&&values['source-root']&&values.handoff&&values.output){const sourceRoot=path.resolve(values['source-root']),handoff=read(safe(sourceRoot,values.handoff));ensure(handoff.schema_version===5,'migration-required: v3/v4 不再创建新 export;请迁移到 Handoff v5、重新批准并使用 finalize');await preflightExport(values);result=await exportBundle({sourceRoot:sourceRoot,handoffRef:values.handoff,output:values.output,zip:values.zip,previous:values.previous});}
27
+ else if(command==='verify'&&values.bundle){const input=path.resolve(values.bundle),action=b=>({result:'verified',bundle_id:b.manifest.bundle_id,version:b.manifest.version,bundle_digest:b.manifest.bundle_digest,rules:b.indexes.rules.length,scenarios:b.indexes.scenarios.length});result=existsSync(path.join(input,'delivery-record.json'))?await openDelivery(input,action):await openBundle(input,action);}
26
28
  else if(command==='import'&&values.bundle&&values['target-root'])result=await importBundle({bundle:path.resolve(values.bundle),targetRoot:values['target-root']});
27
- else throw new TypeError('用法: strategic-handoff export --source-root <repo> --handoff <relative-file> --output <new-dir> [--preflight-input <file>] [--zip] [--previous <bundle>] | verify --bundle <dir|zip> | import --bundle <dir|zip> --target-root <repo>');
29
+ else throw new TypeError('用法: strategic-handoff finalize --source-root <repo> --handoff <relative-file> [--preflight-input <file>] [--previous <delivery-or-package>] [--zip] | verify --bundle <delivery-dir|package-dir|zip> | import --bundle <delivery-dir|package-dir|zip> --target-root <repo>');
28
30
  process.stdout.write(`${JSON.stringify(result,null,2)}\n`);
29
31
  }catch(error){process.stderr.write(`${JSON.stringify({result:'blocked',error:error.message,...(error.preflight?{preflight:error.preflight}:{})})}\n`);process.exitCode=1;}
@@ -1,144 +1,25 @@
1
1
  #!/usr/bin/env node
2
- import { createHash } from "node:crypto";
3
- import { existsSync, lstatSync, readFileSync, realpathSync } from "node:fs";
4
2
  import path from "node:path";
5
3
  import { parseArgs } from "node:util";
6
4
  import { fileURLToPath } from "node:url";
7
- import { parseAllDocuments, parseDocument } from "./vendor/yaml.mjs";
8
- import { validateJsonSchema } from "./lib/json-schema.mjs";
5
+ import { validateOpenApiDraftValidationRecord } from "./lib/openapi-draft-validation.mjs";
9
6
 
10
7
  const templateRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
11
- const schemaPath = path.join(templateRoot, "docs/process/schemas/openapi-draft-validation-record.schema.json");
12
- const methods = new Set(["get", "put", "post", "delete", "options", "head", "patch", "trace"]);
13
-
14
- function ensure(condition, message) {
15
- if (!condition) throw new TypeError(message);
16
- }
17
-
18
- function resolveSafe(root, reference) {
19
- ensure(typeof reference === "string" && reference.length > 0, "引用不能为空");
20
- ensure(!path.isAbsolute(reference) && !reference.includes("\\") && !reference.split("/").includes(".."), `引用必须位于项目内: ${reference}`);
21
- const target = path.resolve(root, reference);
22
- ensure(target === root || target.startsWith(`${root}${path.sep}`), `引用越出项目根: ${reference}`);
23
- ensure(existsSync(target), `引用不可读取: ${reference}`);
24
- ensure(!lstatSync(target).isSymbolicLink(), `引用不能是 symlink: ${reference}`);
25
- return target;
26
- }
27
-
28
- function parseOne(file, label) {
29
- const source = readFileSync(file, "utf8");
30
- const documents = parseAllDocuments(source, { uniqueKeys: true, maxAliasCount: 0 });
31
- ensure(documents.length === 1, `${label} 必须是单一 YAML document`);
32
- ensure(!documents[0].errors.length, `${label} YAML 无效: ${documents[0].errors[0]?.message}`);
33
- return documents[0].toJS({ maxAliasCount: 0 });
34
- }
35
-
36
- function pointer(value, fragment, reference) {
37
- if (!fragment || fragment === "#") return value;
38
- ensure(fragment.startsWith("#/"), `仅支持 JSON Pointer fragment: ${reference}`);
39
- return fragment.slice(2).split("/").reduce((current, part) => {
40
- const key = decodeURIComponent(part).replaceAll("~1", "/").replaceAll("~0", "~");
41
- ensure(current && Object.hasOwn(current, key), `$ref 无法解析: ${reference}`);
42
- return current[key];
43
- }, value);
44
- }
45
-
46
- function verifyReferences(rootDocument, draftFile) {
47
- const apiRoot = realpathSync(path.dirname(draftFile));
48
- const cache = new Map([[realpathSync(draftFile), rootDocument]]);
49
- const active = new Set();
50
-
51
- function load(reference, ownerFile) {
52
- ensure(!/^[a-z][a-z0-9+.-]*:/i.test(reference) && !path.isAbsolute(reference), `$ref 禁止远程或绝对路径: ${reference}`);
53
- const [filePart, fragment = ""] = reference.split("#", 2);
54
- const targetFile = filePart ? path.resolve(path.dirname(ownerFile), filePart) : ownerFile;
55
- ensure(existsSync(targetFile), `$ref 文件不存在: ${reference}`);
56
- const realTarget = realpathSync(targetFile);
57
- ensure(realTarget === apiRoot || realTarget.startsWith(`${apiRoot}${path.sep}`), `$ref 越出 feature API 目录: ${reference}`);
58
- if (!cache.has(realTarget)) cache.set(realTarget, parseOne(realTarget, `$ref ${reference}`));
59
- return { value: pointer(cache.get(realTarget), fragment ? `#${fragment}` : "", reference), file: realTarget };
60
- }
61
-
62
- function walk(value, ownerFile) {
63
- if (!value || typeof value !== "object") return;
64
- if (typeof value.$ref === "string") {
65
- const key = `${ownerFile}|${value.$ref}`;
66
- if (active.has(key)) return;
67
- active.add(key);
68
- const resolved = load(value.$ref, ownerFile);
69
- walk(resolved.value, resolved.file);
70
- active.delete(key);
71
- }
72
- for (const child of Object.values(value)) walk(child, ownerFile);
73
- }
74
- walk(rootDocument, realpathSync(draftFile));
75
- return (reference, ownerFile = realpathSync(draftFile)) => load(reference, ownerFile);
76
- }
77
-
78
- function verifyOperations(document, resolveReference) {
79
- const operationIds = new Set();
80
- for (const [route, pathItem] of Object.entries(document.paths ?? {})) {
81
- if (!pathItem || typeof pathItem !== "object") continue;
82
- const placeholders = [...route.matchAll(/\{([^}]+)\}/g)].map((match) => match[1]);
83
- for (const [method, operation] of Object.entries(pathItem)) {
84
- if (!methods.has(method) || !operation || typeof operation !== "object") continue;
85
- ensure(typeof operation.operationId === "string" && operation.operationId.length > 0, `${method.toUpperCase()} ${route} 缺少 operationId`);
86
- ensure(!operationIds.has(operation.operationId), `operationId 重复: ${operation.operationId}`);
87
- operationIds.add(operation.operationId);
88
- const parameters = [...(pathItem.parameters ?? []), ...(operation.parameters ?? [])].map((item) =>
89
- typeof item?.$ref === "string" ? resolveReference(item.$ref).value : item
90
- );
91
- for (const name of placeholders) {
92
- const parameter = parameters.find((item) => item?.in === "path" && item?.name === name);
93
- ensure(parameter && parameter.required === true, `${method.toUpperCase()} ${route} 缺少 required path parameter: ${name}`);
94
- }
95
- }
96
- }
97
- }
98
8
 
99
9
  try {
100
10
  const { values, positionals } = parseArgs({
101
11
  options: { "allow-template": { type: "boolean" }, root: { type: "string", default: templateRoot } },
102
12
  allowPositionals: true,
103
- strict: true
13
+ strict: true,
104
14
  });
105
- ensure(positionals.length === 1, "用法: scripts/verify-openapi-draft-validation-record [--allow-template] [--root <project>] <record.yaml>");
106
- const root = path.resolve(values.root);
107
- const recordFile = path.resolve(positionals[0]);
108
- const recordDocument = parseDocument(readFileSync(recordFile, "utf8"), { uniqueKeys: true, maxAliasCount: 0 });
109
- ensure(!recordDocument.errors.length, `validation record YAML 无效: ${recordDocument.errors[0]?.message}`);
110
- const record = recordDocument.toJS({ maxAliasCount: 0 });
111
- validateJsonSchema(record, schemaPath, { cwd: templateRoot, label: "OpenAPI Draft validation record schema" });
112
-
113
- if (values["allow-template"]) {
114
- ensure(record.template === true, "--allow-template 只接受模板记录");
115
- process.stdout.write("OpenAPI Draft validation record 模板验证通过\n");
116
- process.exit(0);
117
- }
118
-
119
- ensure(record.template === false, "正式 validation record 必须设置 template: false");
120
- ensure(record.status === "passed", "正式 validation record 必须达到 status: passed");
121
- ensure(record.toolchain.exit_code === 0, "Redocly lint 必须以退出码 0 完成");
122
- ensure(Object.values(record.checks).every((result) => result === "passed"), "所有结构与 lint checks 必须为 passed");
123
- ensure(record.toolchain.command === `pnpm exec redocly lint ${record.draft.ref}`, "lint command 必须精确指向当前 Draft");
124
-
125
- const draftFile = resolveSafe(root, record.draft.ref);
126
- const lockfile = resolveSafe(root, record.toolchain.lockfile_ref);
127
- resolveSafe(root, record.toolchain.evidence_ref);
128
- const draftBytes = readFileSync(draftFile);
129
- const actualDigest = `sha256:${createHash("sha256").update(draftBytes).digest("hex")}`;
130
- ensure(actualDigest === record.draft.sha256, `Draft SHA-256 不匹配: record=${record.draft.sha256}, actual=${actualDigest}`);
131
- const lock = readFileSync(lockfile, "utf8");
132
- const version = record.toolchain.version.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
133
- const lockedPackage = new RegExp(`['\"]?@redocly/cli@${version}(?:['\":\\s(]|$)`).test(lock)
134
- || new RegExp(`['\"]?@redocly/cli['\"]?:[\\s\\S]{0,240}?\\n\\s+version:\\s*['\"]?${version}(?:\\(|['\"\\s]|$)`).test(lock);
135
- ensure(lockedPackage, "pnpm lockfile 未绑定记录中的 @redocly/cli 版本");
136
-
137
- const draft = parseOne(draftFile, "OpenAPI Draft");
138
- ensure(draft?.openapi === "3.1.0" && record.draft.oas_version === draft.openapi, "OpenAPI Draft 必须为 OAS 3.1.0");
139
- const resolveReference = verifyReferences(draft, draftFile);
140
- verifyOperations(draft, resolveReference);
141
- process.stdout.write(`OpenAPI Draft validation record 验证通过: ${record.draft.sha256}\n`);
15
+ if (positionals.length !== 1) throw new TypeError("用法: scripts/verify-openapi-draft-validation-record [--allow-template] [--root <project>] <record.yaml>");
16
+ const result = validateOpenApiDraftValidationRecord(path.resolve(positionals[0]), {
17
+ root: path.resolve(values.root),
18
+ allowTemplate: values["allow-template"] === true,
19
+ });
20
+ process.stdout.write(result.template
21
+ ? "OpenAPI Draft validation record 模板验证通过\n"
22
+ : `OpenAPI Draft validation record 验证通过: ${result.record.draft.sha256}\n`);
142
23
  } catch (error) {
143
24
  process.stderr.write(`OpenAPI Draft validation record 验证失败: ${error.message}\n`);
144
25
  process.exitCode = 1;
@@ -1,15 +1,19 @@
1
1
  #!/usr/bin/env node
2
- import { existsSync, readFileSync } from "node:fs";
2
+ import { readFileSync } from "node:fs";
3
3
  import path from "node:path";
4
4
  import { spawnSync } from "node:child_process";
5
5
  import { parseArgs } from "node:util";
6
6
  import { fileURLToPath } from "node:url";
7
7
  import { parseDocument } from "./vendor/yaml.mjs";
8
8
  import { parseContextContract } from "./lib/context-contract.mjs";
9
- import { validateVisualBaseline } from "../.agents/skills/yss-prototype-stage/scripts/visual-baseline-contract.mjs";
9
+ import { validateHandoffUiBaseline } from "./lib/ui-baseline.mjs";
10
10
 
11
11
  const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
12
- const schemaPath = path.join(repoRoot, "docs/process/schemas/strategic-design-handoff.schema.json");
12
+ const schemaPaths = new Map([
13
+ [3, "docs/process/schemas/strategic-design-handoff-v3.schema.json"],
14
+ [4, "docs/process/schemas/strategic-design-handoff-v4.schema.json"],
15
+ [5, "docs/process/schemas/strategic-design-handoff-v5.schema.json"],
16
+ ]);
13
17
  const pythonValidator = String.raw`
14
18
  import json, sys
15
19
  from jsonschema import Draft202012Validator
@@ -33,19 +37,13 @@ try {
33
37
  if (positionals.length !== 1 || !values.reconciliation) throw new TypeError("用法: scripts/verify-strategic-context-import --root <target-repo> --reconciliation <record> <handoff.yaml|json>");
34
38
  const root = path.resolve(values.root);
35
39
  const handoff = parseFile(path.resolve(positionals[0]));
36
- if ([1, 2].includes(handoff.schema_version)) throw new TypeError(`migration-required: Strategic Design Handoff v${handoff.schema_version} 是只读历史资产;在途 UI 交接必须升级 v3 并携带 Visual Baseline`);
40
+ if ([1, 2].includes(handoff.schema_version)) throw new TypeError(`migration-required: Strategic Design Handoff v${handoff.schema_version} 是只读历史资产;修改或重新交付必须升级 Handoff v5 并重新批准`);
41
+ const schemaRef = schemaPaths.get(handoff.schema_version);
42
+ if (!schemaRef) throw new TypeError(`migration-required: 未知 Strategic Design Handoff schema_version ${String(handoff.schema_version)};支持历史 v3/v4 与当前 v5`);
43
+ const schemaPath = path.join(repoRoot, schemaRef);
37
44
  const schemaResult = spawnSync("python3", ["-c", pythonValidator, schemaPath], { encoding: "utf8", input: JSON.stringify(handoff) });
38
45
  if (schemaResult.status !== 0) throw new TypeError(`${schemaResult.stdout}${schemaResult.stderr}`.trim());
39
- const baselineRef = handoff.source.visual_baseline_ref;
40
- const bundleRoot = path.resolve(root, baselineRef.persisted_ref);
41
- const manifestPath = path.resolve(bundleRoot, baselineRef.manifest_ref);
42
- if (!manifestPath.startsWith(`${bundleRoot}${path.sep}`) || !existsSync(manifestPath)) throw new TypeError("Strategic Design Handoff 的 Visual Baseline manifest 不可读或越界");
43
- const baseline = parseFile(manifestPath);
44
- const baselineResult = await validateVisualBaseline(baseline, { bundleRoot });
45
- if (baselineResult.errors.length) throw new TypeError(`Visual Baseline 无效: ${baselineResult.errors.join("; ")}`);
46
- if (baseline.baseline_id !== baselineRef.baseline_id || baseline.version !== baselineRef.version || baseline.bundle.digest !== baselineRef.digest) throw new TypeError("Strategic Design Handoff 的 Visual Baseline 身份、版本或 digest 不一致");
47
- const actualCaseIds = baseline.cases.map((item) => item.case_id).sort();
48
- if (JSON.stringify(actualCaseIds) !== JSON.stringify([...baselineRef.case_ids].sort())) throw new TypeError("Strategic Design Handoff 的 Visual Baseline case_ids 不一致");
46
+ await validateHandoffUiBaseline(root, handoff);
49
47
  const reconciliationResult = spawnSync(process.execPath, [path.join(repoRoot, "scripts/verify-context-reconciliation"), "--root", root, path.resolve(values.reconciliation)], { cwd: repoRoot, encoding: "utf8" });
50
48
  if (reconciliationResult.status !== 0) throw new TypeError(reconciliationResult.stderr.trim());
51
49
  const target = parseContextContract({ root });
@@ -18,7 +18,7 @@
18
18
  "revision": "c4d958f18cc947cb91cbe1bd48783fa4601cc18f"
19
19
  },
20
20
  "iloveZzz/yss-harness-design-agent": {
21
- "revision": "b7947298f74510861a36caedda4e77d03df35569"
21
+ "revision": "e5cc1b2b9a99297b475551174057dbeb1d5f1a24"
22
22
  },
23
23
  "ayghri/i-have-adhd": {
24
24
  "revision": "7b9069b39972e269e61bd95c2f66ebb90cac6a02"
@@ -481,7 +481,7 @@
481
481
  "sourceType": "git-submodule",
482
482
  "skillPath": ".agents/skills/prototype-review/SKILL.md",
483
483
  "effectiveHash": "df6f131bef0f52a96d307d98ab42d74888a9b72c5508911b5622913b334e8eab",
484
- "sourceRevision": "b7947298f74510861a36caedda4e77d03df35569",
484
+ "sourceRevision": "e5cc1b2b9a99297b475551174057dbeb1d5f1a24",
485
485
  "upstreamHash": "9206df8b6c555c1af1351e425c5ec99ec2a40263c6861607f1418b9c520873ab",
486
486
  "adaptationRef": "docs/agents/strategic-design-skills-integration.md",
487
487
  "targets": [
@@ -696,36 +696,6 @@
696
696
  ".pi/skills"
697
697
  ]
698
698
  },
699
- "yss-antd-design": {
700
- "source": "iloveZzz/yss-harness-design-agent",
701
- "sourceType": "git-submodule",
702
- "skillPath": ".agents/skills/yss-antd-design/SKILL.md",
703
- "effectiveHash": "92739eb34352fd70fbb52f4d9d6c6ac09aa02bc0155a4bd812a98cd5f933ff70",
704
- "sourceRevision": "b7947298f74510861a36caedda4e77d03df35569",
705
- "upstreamHash": "08ce99d45586d5ea19e25fdd9e9a6ede16e66f18992b70b87e0cd23f92343b16",
706
- "adaptationRef": "docs/agents/strategic-design-skills-integration.md",
707
- "targets": [
708
- ".agents/skills",
709
- ".codex/skills",
710
- ".cursor/skills",
711
- ".pi/skills"
712
- ]
713
- },
714
- "yss-antdv-next-design": {
715
- "source": "iloveZzz/yss-harness-design-agent",
716
- "sourceType": "git-submodule",
717
- "skillPath": ".agents/skills/yss-antdv-next-design/SKILL.md",
718
- "effectiveHash": "c7c07c5dc3716f578904559473d43d92878aa25a6a45c8827e288f0242d42b75",
719
- "sourceRevision": "b7947298f74510861a36caedda4e77d03df35569",
720
- "upstreamHash": "2942ed52dd58a38e51f09eb11254809334aeaed08f21cd081f09f35e6647a68c",
721
- "adaptationRef": "docs/agents/strategic-design-skills-integration.md",
722
- "targets": [
723
- ".agents/skills",
724
- ".codex/skills",
725
- ".cursor/skills",
726
- ".pi/skills"
727
- ]
728
- },
729
699
  "yss-api-integration": {
730
700
  "source": "iloveZzz/yss-ui",
731
701
  "sourceType": "github",
@@ -777,23 +747,11 @@
777
747
  ".pi/skills"
778
748
  ]
779
749
  },
780
- "yss-components": {
781
- "source": "project",
782
- "sourceType": "local",
783
- "skillPath": ".agents/skills/yss-components/SKILL.md",
784
- "effectiveHash": "37cdd0a21338c3a9dd0c5e11788aa4f522eb1a0777c7311a446c122f6ecbc5f9",
785
- "targets": [
786
- ".agents/skills",
787
- ".codex/skills",
788
- ".cursor/skills",
789
- ".pi/skills"
790
- ]
791
- },
792
750
  "yss-ddd-scaffold-generator": {
793
751
  "source": "project",
794
752
  "sourceType": "local",
795
753
  "skillPath": ".agents/skills/yss-ddd-scaffold-generator/SKILL.md",
796
- "effectiveHash": "ab1bd70b73a148d57a8e3f88e9a94be57b81f59bbfb81849e6e1dba16bfc7e16",
754
+ "effectiveHash": "36067afa5f048a3af0420d86e7dc2f9ea1e32d3de1c99dd31eb477ee77f718fa",
797
755
  "targets": [
798
756
  ".agents/skills",
799
757
  ".codex/skills",
@@ -805,9 +763,9 @@
805
763
  "source": "iloveZzz/yss-harness-design-agent",
806
764
  "sourceType": "git-submodule",
807
765
  "skillPath": ".agents/skills/yss-design-system/SKILL.md",
808
- "effectiveHash": "e69597b8b6a5ce4de5bd40f67630443b8176202f6b028b2ce146a2a1d062816f",
809
- "sourceRevision": "b7947298f74510861a36caedda4e77d03df35569",
810
- "upstreamHash": "90aaf06b2514353152464a4d032076fa9d5ef56272d8ad526f5544f3c22a2b00",
766
+ "effectiveHash": "c5c023813042472030cecca187c222257151dd5554655a6bdcdd757bc2a516c7",
767
+ "sourceRevision": "e5cc1b2b9a99297b475551174057dbeb1d5f1a24",
768
+ "upstreamHash": "c917ecf40a67c52f0fa7894fbdfbf827cc1ed6aff1037be2911377387fede1a0",
811
769
  "adaptationRef": "docs/agents/strategic-design-skills-integration.md",
812
770
  "targets": [
813
771
  ".agents/skills",
@@ -880,7 +838,7 @@
880
838
  "source": "iloveZzz/yss-ui",
881
839
  "sourceType": "github",
882
840
  "skillPath": "packages/skills/yss-formily/SKILL.md",
883
- "effectiveHash": "63c07b8968b0d61a5ec03b30b85ee725c3adc78ae326b1d137b1a1565f8351d4",
841
+ "effectiveHash": "78ff1a1b6b720f0c3c85c57d145471ac49b01b4aa2df2f24420863d8ae1764d4",
884
842
  "sourceRevision": "c4d958f18cc947cb91cbe1bd48783fa4601cc18f",
885
843
  "upstreamHash": "f30e312a632c592c9050d00c35c22f2dc032658e6d9fdd6e2b5dc4ac0ea970c8",
886
844
  "adaptationRef": "docs/agents/yss-ui-skills-integration.md",
@@ -907,7 +865,7 @@
907
865
  "source": "project",
908
866
  "sourceType": "local",
909
867
  "skillPath": ".agents/skills/yss-frontend-scaffold-generator/SKILL.md",
910
- "effectiveHash": "2f829e4e2a9cb42e123e8de37fe812bc65eef1308758e077b52f0698de9b68ab",
868
+ "effectiveHash": "4db10d9240f5ba97312e0afca807b654368dbee0df62396b135e58d1965694d9",
911
869
  "targets": [
912
870
  ".agents/skills",
913
871
  ".codex/skills",
@@ -919,7 +877,7 @@
919
877
  "source": "project",
920
878
  "sourceType": "local",
921
879
  "skillPath": ".agents/skills/yss-hook/SKILL.md",
922
- "effectiveHash": "77740f75587c2978b72b3651693e4c630aecd62ff757ad50e630a5a4c5b05d49",
880
+ "effectiveHash": "326e418d71870f0079658e2fd51fba65ab734facd64d194be585bf10bf960422",
923
881
  "targets": [
924
882
  ".agents/skills",
925
883
  ".codex/skills",
@@ -931,7 +889,7 @@
931
889
  "source": "project",
932
890
  "sourceType": "local",
933
891
  "skillPath": ".agents/skills/yss-implementation-contract-compiler/SKILL.md",
934
- "effectiveHash": "7697e5d2dfc3b2cbf09b56c2bfac3ed63686508173986b5d19512ef4e3192a5b",
892
+ "effectiveHash": "f4a96ee28a8a9f98d03b8bc264ef1202796b25fcbf0d474a50ee3ec745060fb3",
935
893
  "targets": [
936
894
  ".agents/skills",
937
895
  ".codex/skills",
@@ -943,7 +901,7 @@
943
901
  "source": "project",
944
902
  "sourceType": "local",
945
903
  "skillPath": ".agents/skills/yss-layered-mvc-scaffold-generator/SKILL.md",
946
- "effectiveHash": "50d0f704326fc523c29f4b728c08148cde372c674b9e8686829bee3e74b66fdc",
904
+ "effectiveHash": "562cee54e4b83ca014049540b8998149026290f283c2ba2aaec39d37ae88e457",
947
905
  "targets": [
948
906
  ".agents/skills",
949
907
  ".codex/skills",
@@ -955,7 +913,7 @@
955
913
  "source": "project",
956
914
  "sourceType": "local",
957
915
  "skillPath": ".agents/skills/yss-mvc-data-analysis-project-initializer/SKILL.md",
958
- "effectiveHash": "9066e52ea188f5ec6765bb7fe1096f84577c9b1d1abf90e2fafd7e25d35e1a58",
916
+ "effectiveHash": "5d8711cc0b7fa5ccacbabc0916c7ef11bb82075db8b08260f08221c0cf91895c",
959
917
  "targets": [
960
918
  ".agents/skills",
961
919
  ".codex/skills",
@@ -975,18 +933,6 @@
975
933
  ".pi/skills"
976
934
  ]
977
935
  },
978
- "yss-mvc-scaffold-generator": {
979
- "source": "project",
980
- "sourceType": "local",
981
- "skillPath": ".agents/skills/yss-mvc-scaffold-generator/SKILL.md",
982
- "effectiveHash": "0c25a113567f2589e06cbba0e361e1c159f6286beae1ec9d2e27104ef3ef52ad",
983
- "targets": [
984
- ".agents/skills",
985
- ".codex/skills",
986
- ".cursor/skills",
987
- ".pi/skills"
988
- ]
989
- },
990
936
  "yss-mybatis": {
991
937
  "source": "project",
992
938
  "sourceType": "local",
@@ -1015,7 +961,7 @@
1015
961
  "source": "project",
1016
962
  "sourceType": "local",
1017
963
  "skillPath": ".agents/skills/yss-openapi-governance/SKILL.md",
1018
- "effectiveHash": "e33980c3964c4749ef900c7c27ee683ad4e5ff285e9adf234bc82687304dee30",
964
+ "effectiveHash": "39f6b613b91875ec3394fc2e4e6f623f49c3833e30cff3be05cf857f5d192b01",
1019
965
  "targets": [
1020
966
  ".agents/skills",
1021
967
  ".codex/skills",
@@ -1027,7 +973,7 @@
1027
973
  "source": "project",
1028
974
  "sourceType": "local",
1029
975
  "skillPath": ".agents/skills/yss-product-lifecycle/SKILL.md",
1030
- "effectiveHash": "1364bc3f4541427a47444dd2e0aa4500ed6cbe6519dfc48efc580a22c3001892",
976
+ "effectiveHash": "60e4bd2be607b470316330b3e7e5aebe62fe25c1139e34089d8d989166776349",
1031
977
  "targets": [
1032
978
  ".agents/skills",
1033
979
  ".codex/skills",
@@ -1039,10 +985,9 @@
1039
985
  "source": "iloveZzz/yss-harness-design-agent",
1040
986
  "sourceType": "git-submodule",
1041
987
  "skillPath": ".agents/skills/yss-prototype-stage/SKILL.md",
1042
- "effectiveHash": "ebfdc89f7feb70ff5995132cbe5574ca680a433115ebe59c342ad6309c5a8ed6",
1043
- "sourceRevision": "b7947298f74510861a36caedda4e77d03df35569",
1044
- "upstreamHash": "4bb0ba6cdbbbd1a3b89e97d94a7b0829c9282e21c8ce9e4bfda6e69a8714bc6d",
1045
- "adaptationRef": "docs/agents/strategic-design-skills-integration.md",
988
+ "effectiveHash": "8256a1edfeb203f4de27d190210b0ba5593f8f74e0f3655b62b146daff2105a8",
989
+ "sourceRevision": "e5cc1b2b9a99297b475551174057dbeb1d5f1a24",
990
+ "upstreamHash": "8256a1edfeb203f4de27d190210b0ba5593f8f74e0f3655b62b146daff2105a8",
1046
991
  "targets": [
1047
992
  ".agents/skills",
1048
993
  ".codex/skills",
@@ -1105,7 +1050,7 @@
1105
1050
  "source": "project",
1106
1051
  "sourceType": "local",
1107
1052
  "skillPath": ".agents/skills/yss-skill-source-index-refresh/SKILL.md",
1108
- "effectiveHash": "96ff974a0f7b3db8de09680daf9ecada94dd19f608341dcc85a32d40c02591b0",
1053
+ "effectiveHash": "8635080a3322c2f18d3f314aab1aa034a6987b28eeecb3cb0c15767969add09f",
1109
1054
  "targets": [
1110
1055
  ".agents/skills",
1111
1056
  ".codex/skills",
@@ -1118,7 +1063,7 @@
1118
1063
  "sourceType": "git-submodule",
1119
1064
  "skillPath": ".agents/skills/yss-stage-decision/SKILL.md",
1120
1065
  "effectiveHash": "ada584c7b996439a47e24153e156c38198f60f3f84250cd37aea6e2a118131aa",
1121
- "sourceRevision": "b7947298f74510861a36caedda4e77d03df35569",
1066
+ "sourceRevision": "e5cc1b2b9a99297b475551174057dbeb1d5f1a24",
1122
1067
  "upstreamHash": "8752a1ed6903bd20c33e21b521d52bd4f7a0662b1d25e00152b60ba38333c93b",
1123
1068
  "adaptationRef": "docs/agents/strategic-design-skills-integration.md",
1124
1069
  "targets": [
@@ -1132,7 +1077,7 @@
1132
1077
  "source": "project",
1133
1078
  "sourceType": "local",
1134
1079
  "skillPath": ".agents/skills/yss-tactical-design/SKILL.md",
1135
- "effectiveHash": "2ffb26709fd68184e0fe8f724318dc748fc479dcf52af236fe63f49a17540bfa",
1080
+ "effectiveHash": "4229d14cd6a5d354db8e88752f4ce050482421720c95b97506a00df42bc371e3",
1136
1081
  "targets": [
1137
1082
  ".agents/skills",
1138
1083
  ".codex/skills",
@@ -1156,7 +1101,7 @@
1156
1101
  "source": "project",
1157
1102
  "sourceType": "local",
1158
1103
  "skillPath": ".agents/skills/yss-ui/SKILL.md",
1159
- "effectiveHash": "3140934bcd219ba05581530e0c4465cf700bd2059f596798975a8145b8e84083",
1104
+ "effectiveHash": "215cc4a7ae029d3b2d92ab849176fe6c45c57f3e452e53217d8fdee3eaf1f106",
1160
1105
  "targets": [
1161
1106
  ".agents/skills",
1162
1107
  ".codex/skills",
@@ -1249,7 +1194,7 @@
1249
1194
  "source": "project",
1250
1195
  "sourceType": "local",
1251
1196
  "skillPath": ".agents/skills/yss-web-controller/SKILL.md",
1252
- "effectiveHash": "63192f78bcc7fe099cd856552ff2899453c1aeafd17203099694c25d425f4797",
1197
+ "effectiveHash": "6f8082793d3de76eb3cd42a8fa0c62c94361c34f739ceb9601e77d2cf7dfa7e0",
1253
1198
  "targets": [
1254
1199
  ".agents/skills",
1255
1200
  ".codex/skills",
@@ -3,13 +3,10 @@
3
3
  "repository": "iloveZzz/yss-spec-dev-skills",
4
4
  "canonical_root": ".agents/skills",
5
5
  "skills": [
6
- "yss-antd-design",
7
- "yss-antdv-next-design",
8
6
  "yss-api-integration",
9
7
  "yss-audit-log",
10
8
  "yss-application",
11
9
  "yss-cache",
12
- "yss-components",
13
10
  "yss-ddd-scaffold-generator",
14
11
  "yss-design-system",
15
12
  "yss-distributed-id",
@@ -69,9 +66,6 @@
69
66
  "title": "前端",
70
67
  "description": "用于 YSS Vue、Formily、页面模块和 UI 实现的技能。",
71
68
  "skills": [
72
- "yss-antd-design",
73
- "yss-antdv-next-design",
74
- "yss-components",
75
69
  "yss-design-system",
76
70
  "yss-formily",
77
71
  "yss-formily-schema-generator",