create-yss-spec 3.4.6 → 3.4.8

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 (342) hide show
  1. package/package.json +1 -1
  2. package/template/.agents/skills/.strategic-design-skills-manifest.json +1 -1
  3. package/template/.agents/skills/.yss-skills-manifest.json +1 -8
  4. package/template/.agents/skills/code-review/references/yss-review-standards.md +22 -0
  5. package/template/.agents/skills/formily-mode-slot-detail/SKILL.md +3 -4
  6. package/template/.agents/skills/lombok/SKILL.md +1 -1
  7. package/template/.agents/skills/mapstruct/SKILL.md +3 -1
  8. package/template/.agents/skills/yedit-table-usage/SKILL.md +2 -0
  9. package/template/.agents/skills/yss-application/references/application-layer-guide.md +7 -0
  10. package/template/.agents/skills/yss-backend-spec-review/SKILL.md +38 -0
  11. package/template/.agents/skills/yss-backend-spec-review/references/check-inputs.md +21 -0
  12. package/template/.agents/skills/yss-backend-spec-review/references/remediation-workflow.md +48 -0
  13. package/template/.agents/skills/yss-backend-spec-review/tests/routing.test.mjs +19 -0
  14. package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +6 -4
  15. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +60 -23
  16. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +6 -0
  17. package/template/.agents/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +1 -1
  18. package/template/.agents/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +4 -2
  19. package/template/.agents/skills/yss-ddd-scaffold-generator/references/engineering-baseline.md +7 -1
  20. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +6 -10
  21. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +12 -16
  22. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +36 -88
  23. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +4 -3
  24. package/template/.agents/skills/yss-design-system/SKILL.md +2 -2
  25. package/template/.agents/skills/yss-domain/references/domain-layer-guide.md +8 -1
  26. package/template/.agents/skills/yss-formily/SKILL.md +2 -2
  27. package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
  28. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +1 -1
  29. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +2 -2
  30. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +158 -0
  31. package/template/.agents/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +3 -3
  32. package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +5 -0
  33. package/template/.agents/skills/yss-hook/SKILL.md +3 -2
  34. package/template/.agents/skills/yss-implementation-contract-compiler/references/boundaries.md +6 -1
  35. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/SKILL.md +1 -1
  36. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/assets/templates/architecture-rules-test.java.template +66 -0
  37. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +4 -2
  38. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +0 -7
  39. package/template/.agents/skills/yss-mybatis/SKILL.md +4 -0
  40. package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +1 -3
  41. package/template/.agents/skills/yss-repository/references/profiles/target-domain-model.md +10 -2
  42. package/template/.agents/skills/yss-skill-source-index-refresh/references/source-map-config.md +3 -2
  43. package/template/.agents/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +3 -2
  44. package/template/.agents/skills/yss-technical-design/SKILL.md +1 -1
  45. package/template/.agents/skills/yss-technical-design/references/technical-design-contract.md +1 -1
  46. package/template/.agents/skills/yss-technical-design/tests/run-scenarios.mjs +1 -2
  47. package/template/.agents/skills/yss-ui/SKILL.md +9 -6
  48. package/template/.agents/skills/yss-ui/references/component-routing.md +11 -4
  49. package/template/.agents/skills/yss-ui-business-page-generation/SKILL.md +5 -1
  50. package/template/.agents/skills/yss-ui-business-page-generation/references/hooks-map.md +3 -2
  51. package/template/.agents/skills/yss-web-controller/references/web-adapter-layer-guide.md +8 -0
  52. package/template/.agents/skills/ytable-usage/SKILL.md +14 -7
  53. package/template/.agents/skills/ytree-usage/SKILL.md +1 -0
  54. package/template/.codex/skills/code-review/references/yss-review-standards.md +22 -0
  55. package/template/.codex/skills/formily-mode-slot-detail/SKILL.md +3 -4
  56. package/template/.codex/skills/lombok/SKILL.md +1 -1
  57. package/template/.codex/skills/mapstruct/SKILL.md +3 -1
  58. package/template/.codex/skills/yedit-table-usage/SKILL.md +2 -0
  59. package/template/.codex/skills/yss-application/references/application-layer-guide.md +7 -0
  60. package/template/.codex/skills/yss-backend-spec-review/SKILL.md +38 -0
  61. package/template/.codex/skills/yss-backend-spec-review/references/check-inputs.md +21 -0
  62. package/template/.codex/skills/yss-backend-spec-review/references/remediation-workflow.md +48 -0
  63. package/template/.codex/skills/yss-backend-spec-review/tests/routing.test.mjs +19 -0
  64. package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +6 -4
  65. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +60 -23
  66. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +6 -0
  67. package/template/.codex/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +1 -1
  68. package/template/.codex/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +4 -2
  69. package/template/.codex/skills/yss-ddd-scaffold-generator/references/engineering-baseline.md +7 -1
  70. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +6 -10
  71. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +12 -16
  72. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +36 -88
  73. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +4 -3
  74. package/template/.codex/skills/yss-design-system/SKILL.md +2 -2
  75. package/template/.codex/skills/yss-domain/references/domain-layer-guide.md +8 -1
  76. package/template/.codex/skills/yss-formily/SKILL.md +2 -2
  77. package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
  78. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +1 -1
  79. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +2 -2
  80. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +158 -0
  81. package/template/.codex/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +3 -3
  82. package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +5 -0
  83. package/template/.codex/skills/yss-hook/SKILL.md +3 -2
  84. package/template/.codex/skills/yss-implementation-contract-compiler/references/boundaries.md +6 -1
  85. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/SKILL.md +1 -1
  86. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/assets/templates/architecture-rules-test.java.template +66 -0
  87. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +4 -2
  88. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +0 -7
  89. package/template/.codex/skills/yss-mybatis/SKILL.md +4 -0
  90. package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +1 -3
  91. package/template/.codex/skills/yss-repository/references/profiles/target-domain-model.md +10 -2
  92. package/template/.codex/skills/yss-skill-source-index-refresh/references/source-map-config.md +3 -2
  93. package/template/.codex/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +3 -2
  94. package/template/.codex/skills/yss-technical-design/SKILL.md +1 -1
  95. package/template/.codex/skills/yss-technical-design/references/technical-design-contract.md +1 -1
  96. package/template/.codex/skills/yss-technical-design/tests/run-scenarios.mjs +1 -2
  97. package/template/.codex/skills/yss-ui/SKILL.md +9 -6
  98. package/template/.codex/skills/yss-ui/references/component-routing.md +11 -4
  99. package/template/.codex/skills/yss-ui-business-page-generation/SKILL.md +5 -1
  100. package/template/.codex/skills/yss-ui-business-page-generation/references/hooks-map.md +3 -2
  101. package/template/.codex/skills/yss-web-controller/references/web-adapter-layer-guide.md +8 -0
  102. package/template/.codex/skills/ytable-usage/SKILL.md +14 -7
  103. package/template/.codex/skills/ytree-usage/SKILL.md +1 -0
  104. package/template/.cursor/skills/code-review/references/yss-review-standards.md +22 -0
  105. package/template/.cursor/skills/formily-mode-slot-detail/SKILL.md +3 -4
  106. package/template/.cursor/skills/lombok/SKILL.md +1 -1
  107. package/template/.cursor/skills/mapstruct/SKILL.md +3 -1
  108. package/template/.cursor/skills/yedit-table-usage/SKILL.md +2 -0
  109. package/template/.cursor/skills/yss-application/references/application-layer-guide.md +7 -0
  110. package/template/.cursor/skills/yss-backend-spec-review/SKILL.md +38 -0
  111. package/template/.cursor/skills/yss-backend-spec-review/references/check-inputs.md +21 -0
  112. package/template/.cursor/skills/yss-backend-spec-review/references/remediation-workflow.md +48 -0
  113. package/template/.cursor/skills/yss-backend-spec-review/tests/routing.test.mjs +19 -0
  114. package/template/.cursor/skills/yss-ddd-scaffold-generator/SKILL.md +6 -4
  115. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +60 -23
  116. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +6 -0
  117. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +1 -1
  118. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +4 -2
  119. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/engineering-baseline.md +7 -1
  120. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +6 -10
  121. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +12 -16
  122. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +36 -88
  123. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +4 -3
  124. package/template/.cursor/skills/yss-design-system/SKILL.md +2 -2
  125. package/template/.cursor/skills/yss-domain/references/domain-layer-guide.md +8 -1
  126. package/template/.cursor/skills/yss-formily/SKILL.md +2 -2
  127. package/template/.cursor/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
  128. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +1 -1
  129. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +2 -2
  130. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +158 -0
  131. package/template/.cursor/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +3 -3
  132. package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +5 -0
  133. package/template/.cursor/skills/yss-hook/SKILL.md +3 -2
  134. package/template/.cursor/skills/yss-implementation-contract-compiler/references/boundaries.md +6 -1
  135. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/SKILL.md +1 -1
  136. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/assets/templates/architecture-rules-test.java.template +66 -0
  137. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +4 -2
  138. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +0 -7
  139. package/template/.cursor/skills/yss-mybatis/SKILL.md +4 -0
  140. package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +1 -3
  141. package/template/.cursor/skills/yss-repository/references/profiles/target-domain-model.md +10 -2
  142. package/template/.cursor/skills/yss-skill-source-index-refresh/references/source-map-config.md +3 -2
  143. package/template/.cursor/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +3 -2
  144. package/template/.cursor/skills/yss-technical-design/SKILL.md +1 -1
  145. package/template/.cursor/skills/yss-technical-design/references/technical-design-contract.md +1 -1
  146. package/template/.cursor/skills/yss-technical-design/tests/run-scenarios.mjs +1 -2
  147. package/template/.cursor/skills/yss-ui/SKILL.md +9 -6
  148. package/template/.cursor/skills/yss-ui/references/component-routing.md +11 -4
  149. package/template/.cursor/skills/yss-ui-business-page-generation/SKILL.md +5 -1
  150. package/template/.cursor/skills/yss-ui-business-page-generation/references/hooks-map.md +3 -2
  151. package/template/.cursor/skills/yss-web-controller/references/web-adapter-layer-guide.md +8 -0
  152. package/template/.cursor/skills/ytable-usage/SKILL.md +14 -7
  153. package/template/.cursor/skills/ytree-usage/SKILL.md +1 -0
  154. package/template/.pi/skills/code-review/references/yss-review-standards.md +22 -0
  155. package/template/.pi/skills/formily-mode-slot-detail/SKILL.md +3 -4
  156. package/template/.pi/skills/lombok/SKILL.md +1 -1
  157. package/template/.pi/skills/mapstruct/SKILL.md +3 -1
  158. package/template/.pi/skills/yedit-table-usage/SKILL.md +2 -0
  159. package/template/.pi/skills/yss-application/references/application-layer-guide.md +7 -0
  160. package/template/.pi/skills/yss-backend-spec-review/SKILL.md +38 -0
  161. package/template/.pi/skills/yss-backend-spec-review/references/check-inputs.md +21 -0
  162. package/template/.pi/skills/yss-backend-spec-review/references/remediation-workflow.md +48 -0
  163. package/template/.pi/skills/yss-backend-spec-review/tests/routing.test.mjs +19 -0
  164. package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +6 -4
  165. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +60 -23
  166. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +6 -0
  167. package/template/.pi/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +1 -1
  168. package/template/.pi/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +4 -2
  169. package/template/.pi/skills/yss-ddd-scaffold-generator/references/engineering-baseline.md +7 -1
  170. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +6 -10
  171. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +12 -16
  172. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +36 -88
  173. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +4 -3
  174. package/template/.pi/skills/yss-design-system/SKILL.md +2 -2
  175. package/template/.pi/skills/yss-domain/references/domain-layer-guide.md +8 -1
  176. package/template/.pi/skills/yss-formily/SKILL.md +2 -2
  177. package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
  178. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +1 -1
  179. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +2 -2
  180. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +158 -0
  181. package/template/.pi/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +3 -3
  182. package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +5 -0
  183. package/template/.pi/skills/yss-hook/SKILL.md +3 -2
  184. package/template/.pi/skills/yss-implementation-contract-compiler/references/boundaries.md +6 -1
  185. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/SKILL.md +1 -1
  186. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/assets/templates/architecture-rules-test.java.template +66 -0
  187. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +4 -2
  188. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +0 -7
  189. package/template/.pi/skills/yss-mybatis/SKILL.md +4 -0
  190. package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +1 -3
  191. package/template/.pi/skills/yss-repository/references/profiles/target-domain-model.md +10 -2
  192. package/template/.pi/skills/yss-skill-source-index-refresh/references/source-map-config.md +3 -2
  193. package/template/.pi/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +3 -2
  194. package/template/.pi/skills/yss-technical-design/SKILL.md +1 -1
  195. package/template/.pi/skills/yss-technical-design/references/technical-design-contract.md +1 -1
  196. package/template/.pi/skills/yss-technical-design/tests/run-scenarios.mjs +1 -2
  197. package/template/.pi/skills/yss-ui/SKILL.md +9 -6
  198. package/template/.pi/skills/yss-ui/references/component-routing.md +11 -4
  199. package/template/.pi/skills/yss-ui-business-page-generation/SKILL.md +5 -1
  200. package/template/.pi/skills/yss-ui-business-page-generation/references/hooks-map.md +3 -2
  201. package/template/.pi/skills/yss-web-controller/references/web-adapter-layer-guide.md +8 -0
  202. package/template/.pi/skills/ytable-usage/SKILL.md +14 -7
  203. package/template/.pi/skills/ytree-usage/SKILL.md +1 -0
  204. package/template/docs/agents/digital-human-roles.yaml +2 -2
  205. package/template/docs/agents/skill-migrations.md +23 -10
  206. package/template/docs/agents/yss-skill-registry.yaml +14 -73
  207. package/template/docs/engineering/backend-platforms.md +14 -0
  208. package/template/docs/process/schemas/digital-human-task-package.schema.json +657 -100
  209. package/template/docs/process/schemas/slice-implementation-contract-v3.schema.json +41 -0
  210. package/template/scripts/lib/backend-platform-provenance.mjs +1 -1
  211. package/template/scripts/lib/backend-platform-verification.mjs +2 -2
  212. package/template/scripts/lib/backend-platform.mjs +62 -0
  213. package/template/scripts/lib/backend-review.mjs +102 -0
  214. package/template/scripts/lib/first-slice-artifacts.mjs +47 -0
  215. package/template/scripts/lib/first-slice-tests.mjs +24 -0
  216. package/template/scripts/lib/lifecycle-transition.mjs +6 -0
  217. package/template/scripts/lib/maintenance-candidate.mjs +160 -0
  218. package/template/scripts/lib/skill-registry.mjs +5 -1
  219. package/template/scripts/lib/skill-supply-chain.mjs +1 -1
  220. package/template/scripts/lib/slice-execution-preflight.mjs +43 -0
  221. package/template/scripts/slice-contract +7 -3
  222. package/template/scripts/verify-backend-platform-matrix +8 -2
  223. package/template/skills-lock.json +42 -157
  224. package/template/yss-public-skills.json +5 -7
  225. package/template.manifest.json +0 -1
  226. package/template.snapshot.json +5 -5
  227. package/template/.agents/skills/component-selection-imports/SKILL.md +0 -64
  228. package/template/.agents/skills/page-form-module/SKILL.md +0 -168
  229. package/template/.agents/skills/page-list-module/SKILL.md +0 -137
  230. package/template/.agents/skills/page-skeleton/SKILL.md +0 -76
  231. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +0 -34
  232. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -75
  233. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/index.vue +0 -107
  234. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
  235. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/style.less +0 -30
  236. package/template/.agents/skills/page-skeleton/examples/StandardListPage/constant.ts +0 -28
  237. package/template/.agents/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -58
  238. package/template/.agents/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +0 -65
  239. package/template/.agents/skills/page-skeleton/examples/StandardListPage/index.vue +0 -91
  240. package/template/.agents/skills/page-skeleton/examples/StandardListPage/style.less +0 -49
  241. package/template/.agents/skills/vue3-best-practices/SKILL.md +0 -68
  242. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +0 -12
  243. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/agents/openai.yaml +0 -5
  244. package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +0 -12
  245. package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +0 -18
  246. package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +0 -9
  247. package/template/.agents/skills/yss-mvc-design/SKILL.md +0 -12
  248. package/template/.agents/skills/yss-mvc-design/agents/openai.yaml +0 -4
  249. package/template/.agents/skills/yss-mvc-design/references/mvc-design.schema.json +0 -315
  250. package/template/.agents/skills/yss-use-table-height/SKILL.md +0 -130
  251. package/template/.agents/skills/yss-use-table-height/agents/openai.yaml +0 -5
  252. package/template/.agents/skills/yss-use-table-height/references/frontend-docs.md +0 -9
  253. package/template/.agents/skills/yss-use-tree-height/SKILL.md +0 -98
  254. package/template/.agents/skills/yss-use-tree-height/agents/openai.yaml +0 -5
  255. package/template/.agents/skills/yss-use-tree-height/references/frontend-docs.md +0 -9
  256. package/template/.codex/skills/component-selection-imports/SKILL.md +0 -64
  257. package/template/.codex/skills/page-form-module/SKILL.md +0 -168
  258. package/template/.codex/skills/page-list-module/SKILL.md +0 -137
  259. package/template/.codex/skills/page-skeleton/SKILL.md +0 -76
  260. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +0 -34
  261. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -75
  262. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/index.vue +0 -107
  263. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
  264. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/style.less +0 -30
  265. package/template/.codex/skills/page-skeleton/examples/StandardListPage/constant.ts +0 -28
  266. package/template/.codex/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -58
  267. package/template/.codex/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +0 -65
  268. package/template/.codex/skills/page-skeleton/examples/StandardListPage/index.vue +0 -91
  269. package/template/.codex/skills/page-skeleton/examples/StandardListPage/style.less +0 -49
  270. package/template/.codex/skills/vue3-best-practices/SKILL.md +0 -68
  271. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +0 -12
  272. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/agents/openai.yaml +0 -5
  273. package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +0 -12
  274. package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +0 -18
  275. package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +0 -9
  276. package/template/.codex/skills/yss-mvc-design/SKILL.md +0 -12
  277. package/template/.codex/skills/yss-mvc-design/agents/openai.yaml +0 -4
  278. package/template/.codex/skills/yss-mvc-design/references/mvc-design.schema.json +0 -315
  279. package/template/.codex/skills/yss-use-table-height/SKILL.md +0 -130
  280. package/template/.codex/skills/yss-use-table-height/agents/openai.yaml +0 -5
  281. package/template/.codex/skills/yss-use-table-height/references/frontend-docs.md +0 -9
  282. package/template/.codex/skills/yss-use-tree-height/SKILL.md +0 -98
  283. package/template/.codex/skills/yss-use-tree-height/agents/openai.yaml +0 -5
  284. package/template/.codex/skills/yss-use-tree-height/references/frontend-docs.md +0 -9
  285. package/template/.cursor/skills/component-selection-imports/SKILL.md +0 -64
  286. package/template/.cursor/skills/page-form-module/SKILL.md +0 -168
  287. package/template/.cursor/skills/page-list-module/SKILL.md +0 -137
  288. package/template/.cursor/skills/page-skeleton/SKILL.md +0 -76
  289. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +0 -34
  290. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -75
  291. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/index.vue +0 -107
  292. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
  293. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/style.less +0 -30
  294. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/constant.ts +0 -28
  295. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -58
  296. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +0 -65
  297. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/index.vue +0 -91
  298. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/style.less +0 -49
  299. package/template/.cursor/skills/vue3-best-practices/SKILL.md +0 -68
  300. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +0 -12
  301. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/agents/openai.yaml +0 -5
  302. package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +0 -12
  303. package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +0 -18
  304. package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +0 -9
  305. package/template/.cursor/skills/yss-mvc-design/SKILL.md +0 -12
  306. package/template/.cursor/skills/yss-mvc-design/agents/openai.yaml +0 -4
  307. package/template/.cursor/skills/yss-mvc-design/references/mvc-design.schema.json +0 -315
  308. package/template/.cursor/skills/yss-use-table-height/SKILL.md +0 -130
  309. package/template/.cursor/skills/yss-use-table-height/agents/openai.yaml +0 -5
  310. package/template/.cursor/skills/yss-use-table-height/references/frontend-docs.md +0 -9
  311. package/template/.cursor/skills/yss-use-tree-height/SKILL.md +0 -98
  312. package/template/.cursor/skills/yss-use-tree-height/agents/openai.yaml +0 -5
  313. package/template/.cursor/skills/yss-use-tree-height/references/frontend-docs.md +0 -9
  314. package/template/.pi/skills/component-selection-imports/SKILL.md +0 -64
  315. package/template/.pi/skills/page-form-module/SKILL.md +0 -168
  316. package/template/.pi/skills/page-list-module/SKILL.md +0 -137
  317. package/template/.pi/skills/page-skeleton/SKILL.md +0 -76
  318. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +0 -34
  319. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -75
  320. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/index.vue +0 -107
  321. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
  322. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/style.less +0 -30
  323. package/template/.pi/skills/page-skeleton/examples/StandardListPage/constant.ts +0 -28
  324. package/template/.pi/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -58
  325. package/template/.pi/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +0 -65
  326. package/template/.pi/skills/page-skeleton/examples/StandardListPage/index.vue +0 -91
  327. package/template/.pi/skills/page-skeleton/examples/StandardListPage/style.less +0 -49
  328. package/template/.pi/skills/vue3-best-practices/SKILL.md +0 -68
  329. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +0 -12
  330. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/agents/openai.yaml +0 -5
  331. package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +0 -12
  332. package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +0 -18
  333. package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +0 -9
  334. package/template/.pi/skills/yss-mvc-design/SKILL.md +0 -12
  335. package/template/.pi/skills/yss-mvc-design/agents/openai.yaml +0 -4
  336. package/template/.pi/skills/yss-mvc-design/references/mvc-design.schema.json +0 -315
  337. package/template/.pi/skills/yss-use-table-height/SKILL.md +0 -130
  338. package/template/.pi/skills/yss-use-table-height/agents/openai.yaml +0 -5
  339. package/template/.pi/skills/yss-use-table-height/references/frontend-docs.md +0 -9
  340. package/template/.pi/skills/yss-use-tree-height/SKILL.md +0 -98
  341. package/template/.pi/skills/yss-use-tree-height/agents/openai.yaml +0 -5
  342. package/template/.pi/skills/yss-use-tree-height/references/frontend-docs.md +0 -9
@@ -8,33 +8,15 @@ import { fileURLToPath } from "node:url";
8
8
 
9
9
  import { run as runScaffoldVerification } from "./run_scaffold_verification.mjs";
10
10
  import { assertArchitectureAgreement } from "../../../../scripts/lib/backend-architecture.mjs";
11
- import { mvcFirstSliceProfile } from "../../../../scripts/lib/first-slice-architecture.mjs";
11
+ import { inspectSliceContract } from "../../../../scripts/lib/slice-execution-preflight.mjs";
12
+ import { selectSliceWorkUnit } from "../../../../scripts/lib/slice-contract.mjs";
13
+ import { verifyFirstSliceTests } from "../../../../scripts/lib/first-slice-tests.mjs";
14
+ import { inspectFirstSliceArtifacts } from "../../../../scripts/lib/first-slice-artifacts.mjs";
12
15
 
13
16
  const SCRIPT_DIR = path.dirname(fileURLToPath(import.meta.url));
14
17
  const REPOSITORY_ROOT = path.resolve(SCRIPT_DIR, "../../../..");
15
18
  const REQUIRED_SKILLS = ["yss-domain", "yss-application", "yss-repository", "yss-mybatis", "yss-web-controller", "yss-dto", "yss-exception", "yss-validation", "mapstruct", "lombok", "alibaba-java-code-style"];
16
19
  const REQUIRED_LAYERS = ["domain", "application", "infrastructure", "web"];
17
- const ARTIFACT_CHECKS = [
18
- ["domain-model", /-domain\/src\/main\/java\/.+\/domain\/.+\/model\/.+\.java$/],
19
- ["domain-gateway", /-domain\/src\/main\/java\/.+\/domain\/.+\/gateway\/.+Gateway\.java$/],
20
- ["domain-behavior-test", /-domain\/src\/test\/java\/.+(?:Test|Tests)\.java$/],
21
- ["application-command-or-query", /-application\/src\/main\/java\/.+\/application\/(?:command|query)\/.+\.java$/],
22
- ["application-result", /-application\/src\/main\/java\/.+\/application\/result\/.+Result\.java$/],
23
- ["application-service", /-application\/src\/main\/java\/.+\/application\/service\/.+Service\.java$/],
24
- ["application-service-implementation", /-application\/src\/main\/java\/.+\/application\/service\/impl\/.+ServiceImpl\.java$/],
25
- ["application-behavior-test", /-application\/src\/test\/java\/.+(?:Test|Tests)\.java$/],
26
- ["infrastructure-po", /-infrastructure\/src\/main\/java\/.+\/infrastructure\/persistence\/po\/.+PO\.java$/],
27
- ["infrastructure-repository", /-infrastructure\/src\/main\/java\/.+\/infrastructure\/persistence\/repository\/.+Repository\.java$/],
28
- ["infrastructure-convertor", /-infrastructure\/src\/main\/java\/.+\/infrastructure\/persistence\/convertor\/.+Convertor\.java$/],
29
- ["infrastructure-gateway-implementation", /-infrastructure\/src\/main\/java\/.+\/infrastructure\/persistence\/gateway\/.+GatewayImpl\.java$/],
30
- ["infrastructure-query-adapter", /-infrastructure\/src\/main\/java\/.+\/infrastructure\/query\/adapter\/.+QueryAdapter\.java$/],
31
- ["infrastructure-integration-test", /-infrastructure\/src\/test\/java\/.+(?:Test|Tests)\.java$/],
32
- ["web-controller", /-adapter\/.+-web\/src\/main\/java\/.+\/rest\/.+Controller\.java$/],
33
- ["web-convertor", /-adapter\/.+-web\/src\/main\/java\/.+\/rest\/convertor\/.+WebConvertor\.java$/],
34
- ["web-request", /-adapter\/.+-web\/src\/main\/java\/.+\/rest\/dto\/request\/.+Request\.java$/],
35
- ["web-response", /-adapter\/.+-web\/src\/main\/java\/.+\/rest\/dto\/response\/.+Response\.java$/],
36
- ["web-contract-test", /-adapter\/.+-web\/src\/test\/java\/.+(?:Test|Tests)\.java$/]
37
- ];
38
20
 
39
21
  const isoNow = () => new Date().toISOString();
40
22
  const sha256 = (content) => createHash("sha256").update(content).digest("hex");
@@ -62,60 +44,7 @@ async function writeJsonAtomic(target, value) {
62
44
  await writeFile(temporary, `${JSON.stringify(value, null, 2)}\n`, "utf8");
63
45
  await rename(temporary, target);
64
46
  }
65
- function invalidContractReasons(contract, requiredSkills = REQUIRED_SKILLS, requiredLayers = REQUIRED_LAYERS) {
66
- const reasons = [];
67
- if (contract.schema_version !== 2) reasons.push("slice-contract-schema");
68
- if (contract.status !== "approved") reasons.push("slice-contract-not-approved");
69
- for (const field of ["contract_id", "contract_version", "slice_id"]) if (contract[field] === undefined || contract[field] === null || contract[field] === "") reasons.push(`slice-contract-${field}-missing`);
70
- if (contract.readiness?.blockers?.length) reasons.push("slice-contract-has-blockers");
71
- if (contract.readiness?.stale_inputs?.length) reasons.push("slice-contract-has-stale-inputs");
72
- const actualSkills = new Set([...(contract.common?.required_skills ?? []), ...(contract.backend?.required_skills ?? [])]);
73
- for (const skill of requiredSkills) if (!actualSkills.has(skill)) reasons.push(`required-skill-missing:${skill}`);
74
- const actualLayers = new Set(contract.backend?.affected_layers ?? []);
75
- for (const layer of requiredLayers) if (!actualLayers.has(layer)) reasons.push(`required-layer-missing:${layer}`);
76
- if (!Array.isArray(contract.work_units) || !contract.work_units.length) reasons.push("slice-contract-work-units-missing");
77
- else for (const [index, unit] of contract.work_units.entries()) {
78
- const id = unit.id || `index-${index}`;
79
- if (unit.contract_id !== contract.contract_id) reasons.push(`work-unit-contract-id-mismatch:${id}`);
80
- if (unit.contract_version !== contract.contract_version) reasons.push(`work-unit-contract-version-mismatch:${id}`);
81
- if (!unit.work_unit?.primary_skill) reasons.push(`work-unit-primary-skill-missing:${id}`);
82
- }
83
- return reasons;
84
- }
85
- async function downstreamDrift(manifest, requiredSkills = REQUIRED_SKILLS) {
86
- const drift = [];
87
- const recordedSkills = manifest.readiness?.downstream_skills ?? {};
88
- for (const skill of requiredSkills) {
89
- const expected = recordedSkills[skill];
90
- if (typeof expected !== "string" || !/^[a-f0-9]{64}$/.test(expected)) {
91
- drift.push(`${skill}:digest-missing`);
92
- continue;
93
- }
94
- const root = path.join(REPOSITORY_ROOT, ".agents", "skills", skill);
95
- if (!await isFile(path.join(root, "SKILL.md"))) drift.push(`${skill}:unavailable`);
96
- else if (await treeDigest(root) !== expected) drift.push(`${skill}:digest-mismatch`);
97
- }
98
- const contracts = manifest.readiness?.contracts ?? {};
99
- const contractFiles = {
100
- compiler_contract: path.join(REPOSITORY_ROOT, ".agents", "skills", "yss-implementation-contract-compiler", "references", "compiler-contract.yaml")
101
- };
102
- if (manifest.architecture_family === "layered-mvc") {
103
- contractFiles.architecture_profiles = path.join(REPOSITORY_ROOT, "docs/agents/backend-architecture-profiles.md");
104
- } else if (contracts.engineering_baseline) contractFiles.engineering_baseline = path.join(REPOSITORY_ROOT, ".agents", "skills", "yss-ddd-scaffold-generator", "references", "engineering-baseline.md");
105
- else contractFiles.scaffold_parent = path.join(REPOSITORY_ROOT, ".agents", "skills", "yss-ddd-scaffold-generator", "references", "yss-backend-scaffold-parent", "SKILL.md");
106
- for (const [name, target] of Object.entries(contractFiles)) {
107
- const expected = contracts[name];
108
- if (typeof expected !== "string" || !/^[a-f0-9]{64}$/.test(expected)) {
109
- drift.push(`${name}:digest-missing`);
110
- continue;
111
- }
112
- if (!await isFile(target)) drift.push(`${name}:unavailable`);
113
- else if (sha256(await readFile(target)) !== expected) drift.push(`${name}:digest-mismatch`);
114
- }
115
- return drift;
116
- }
117
-
118
- export async function runFirstSliceVerification(projectRoot, evidenceDir, sliceContractFile, environment = process.env) {
47
+ export async function runFirstSliceVerification(projectRoot, evidenceDir, sliceContractFile, environment = process.env, options = {}) {
119
48
  projectRoot = path.resolve(projectRoot);
120
49
  evidenceDir = path.resolve(evidenceDir);
121
50
  sliceContractFile = path.resolve(sliceContractFile);
@@ -124,20 +53,33 @@ export async function runFirstSliceVerification(projectRoot, evidenceDir, sliceC
124
53
  if (!await isFile(manifestPath)) throw new Error(`missing scaffold manifest: ${manifestPath}`);
125
54
  if (!await isFile(sliceContractFile)) throw new Error(`missing Slice Implementation Contract: ${sliceContractFile}`);
126
55
  const manifest = JSON.parse(await readFile(manifestPath, "utf8"));
127
- const contract = JSON.parse(await readFile(sliceContractFile, "utf8"));
56
+ const contractRoot = path.resolve(options.contractRoot || projectRoot);
57
+ let contract, preflight;
58
+ try {
59
+ const loaded = inspectSliceContract(path.relative(contractRoot, sliceContractFile), {
60
+ root: contractRoot, approval_ref: options.approvalRef, work_unit_id: options.workUnit
61
+ });
62
+ preflight = loaded.report;
63
+ contract = selectSliceWorkUnit(loaded.contract, options.workUnit);
64
+ } catch (error) {
65
+ preflight = { execution_allowed: false, blockers: [error.message] };
66
+ contract = {};
67
+ }
128
68
  if (manifest.platform_verification === "candidate") throw new Error("backend-platform: candidate scaffold cannot become first-slice-verified");
129
- const adapter = manifest.architecture_family === "layered-mvc" ? mvcFirstSliceProfile(manifest.architecture_identity ?? {}) : { skills: REQUIRED_SKILLS, layers: REQUIRED_LAYERS, artifacts: ARTIFACT_CHECKS };
130
- const contractFailures = invalidContractReasons(contract, adapter.skills, adapter.layers);
69
+ const contractFailures = [...preflight.blockers];
70
+ if (!preflight.execution_allowed) contractFailures.push("slice-execution-not-authorized");
71
+ if (!(contract.common?.project_roots || []).some(ref => path.resolve(contractRoot, ref) === projectRoot)) contractFailures.push("slice-project-root-mismatch");
131
72
  try {
132
73
  const identity = contract.architecture_identity ?? contract.resolution?.architecture_identity;
133
- assertArchitectureAgreement(identity, { manifest });
74
+ if (identity?.source_kind !== "existing-registration") assertArchitectureAgreement(identity, { manifest });
134
75
  for (const unit of contract.work_units ?? []) assertArchitectureAgreement(identity, { work_unit: unit.architecture_identity });
135
76
  } catch (error) { contractFailures.push(`architecture-identity:${error.message}`); }
136
77
  if (![2, 3, 4].includes(manifest.schema_version) || manifest.completion_level !== "empty-scaffold-verified") contractFailures.push("scaffold-not-empty-scaffold-verified");
137
78
  if (manifest.schema_version === 3 && manifest.legacy_reconciliation?.status !== "approved") contractFailures.push("legacy-scaffold-reconciliation-required");
138
- const projectFiles = await files(projectRoot);
139
- const missingArtifacts = adapter.artifacts.filter(([, pattern]) => !projectFiles.some((file) => pattern.test(file))).map(([name]) => name);
140
- const skillDrift = await downstreamDrift(manifest, adapter.skills);
79
+ const artifacts = inspectFirstSliceArtifacts(contract, projectRoot);
80
+ const missingArtifacts = artifacts.failures;
81
+ // Generation-time Skill hashes are provenance. Current authority was checked by execution preflight.
82
+ const skillDrift = [];
141
83
  if (contractFailures.length || missingArtifacts.length || skillDrift.length) {
142
84
  const report = { verification_mode: "first-slice", project_root: projectRoot, slice_contract_ref: sliceContractFile, scaffold_manifest_ref: manifestPath, generated_at: isoNow(), status: "failed", completion_level: manifest.completion_level, contract_failures: contractFailures, missing_artifacts: missingArtifacts, downstream_skill_drift: skillDrift, commands: [] };
143
85
  await writeJsonAtomic(reportPath, report);
@@ -145,9 +87,15 @@ export async function runFirstSliceVerification(projectRoot, evidenceDir, sliceC
145
87
  }
146
88
 
147
89
  const mavenEvidence = path.join(evidenceDir, "maven");
148
- const wrapper = await runScaffoldVerification(projectRoot, mavenEvidence, environment, { firstSlice: true });
149
- const passed = wrapper.status === "passed";
150
- const report = { verification_mode: "first-slice", project_root: projectRoot, slice_contract_ref: sliceContractFile, scaffold_manifest_ref: manifestPath, generated_at: isoNow(), status: passed ? "passed" : "failed", failure_category: wrapper.failure_category, completion_level: passed ? "first-slice-verified" : manifest.completion_level, contract_failures: [], missing_artifacts: [], downstream_skill_drift: [], commands: wrapper.commands };
90
+ const startedAt = Date.now();
91
+ const wrapper = await runScaffoldVerification(projectRoot, mavenEvidence, environment, { firstSlice: true, systemProperties: artifacts.properties });
92
+ const mvc = manifest.architecture_family === "layered-mvc";
93
+ const tests = wrapper.status === "passed" ? verifyFirstSliceTests(contract, projectRoot, startedAt, {
94
+ module: `${manifest.project_name}-${mvc ? "server" : "bootstrap"}`,
95
+ type: `${manifest.base_package}.${mvc ? "architecture.LayeredMvcArchitectureTest" : "ArchitectureRulesTest"}`
96
+ }) : { status: "not-executed", failures: [], evidence: [] };
97
+ const passed = wrapper.status === "passed" && tests.status === "passed";
98
+ const report = { verification_mode: "first-slice", project_root: projectRoot, slice_contract_ref: sliceContractFile, scaffold_manifest_ref: manifestPath, generated_at: isoNow(), status: passed ? "passed" : "failed", test_execution: tests, failure_category: wrapper.failure_category || (tests.status === "failed" ? "first-slice-tests" : null), completion_level: passed ? "first-slice-verified" : manifest.completion_level, contract_failures: [], missing_artifacts: [], downstream_skill_drift: [], commands: wrapper.commands };
151
99
  await writeJsonAtomic(reportPath, report);
152
100
  if (passed) {
153
101
  manifest.completion_level = "first-slice-verified";
@@ -163,7 +111,7 @@ function parseArgs(argv) {
163
111
  const result = {};
164
112
  for (let index = 0; index < argv.length; index += 2) {
165
113
  const flag = argv[index], value = argv[index + 1];
166
- if (!["--project-root", "--evidence-dir", "--slice-contract-file"].includes(flag) || !value) throw new Error("usage: run_first_slice_verification.mjs --project-root DIR --evidence-dir DIR --slice-contract-file FILE");
114
+ if (!["--project-root", "--evidence-dir", "--slice-contract-file", "--contract-root", "--approval-ref", "--work-unit"].includes(flag) || !value) throw new Error("usage: run_first_slice_verification.mjs --project-root DIR --evidence-dir DIR --slice-contract-file FILE");
167
115
  result[flag.slice(2).replaceAll(/-([a-z])/g, (_, letter) => letter.toUpperCase())] = value;
168
116
  }
169
117
  if (!result.projectRoot || !result.evidenceDir || !result.sliceContractFile) throw new Error("project root, evidence dir, and slice contract file are required");
@@ -173,7 +121,7 @@ function parseArgs(argv) {
173
121
  async function main() {
174
122
  try {
175
123
  const args = parseArgs(process.argv.slice(2));
176
- const report = await runFirstSliceVerification(args.projectRoot, args.evidenceDir, args.sliceContractFile);
124
+ const report = await runFirstSliceVerification(args.projectRoot, args.evidenceDir, args.sliceContractFile, process.env, args);
177
125
  process.stdout.write(`${report.status}: ${path.join(path.resolve(args.evidenceDir), "first-slice-verification.json")}\n`);
178
126
  return report.status === "passed" ? 0 : 1;
179
127
  } catch (error) {
@@ -62,7 +62,7 @@ function validateManifest(manifest) {
62
62
  if (manifest.schema_version === 4 ? manifest.current_version !== true : manifest.current_version !== manifest.contract_version) throw new Error("脚手架生成元数据清单不是当前合同版本");
63
63
  if (JSON.stringify(manifest.verification_commands) !== JSON.stringify(COMMANDS)) throw new Error("脚手架生成元数据清单验证命令不符合固定合同");
64
64
  }
65
- export async function run(projectRoot, evidenceDir, environment = process.env, { timeoutMs = 0, signal, platformOptions = {}, firstSlice = false } = {}) {
65
+ export async function run(projectRoot, evidenceDir, environment = process.env, { timeoutMs = 0, signal, platformOptions = {}, firstSlice = false, systemProperties = {} } = {}) {
66
66
  const wrapper = path.join(projectRoot, "mvnw"), manifestPath = path.join(projectRoot, ".yss", "scaffold-generation.json");
67
67
  if (!await isFile(wrapper)) throw new Error(`项目根目录缺少 Maven wrapper: ${wrapper}`);
68
68
  if (!await isFile(manifestPath)) throw new Error(`项目根目录缺少脚手架生成元数据清单: ${manifestPath}`);
@@ -114,13 +114,14 @@ export async function run(projectRoot, evidenceDir, environment = process.env, {
114
114
  const stderrPath = path.join(evidenceDir, `mvnw-${phase}.stderr.log`);
115
115
  const startedAt = isoNow();
116
116
  const started = process.hrtime.bigint();
117
- const execution = await runCommand(wrapper, [phase], { cwd: projectRoot, env: environment, timeoutMs, signal, stdoutFile: stdoutPath, stderrFile: stderrPath, secrets: [environment.MAVEN_REPO_USERNAME, environment.MAVEN_REPO_PASSWORD], progress: true });
117
+ const args = [phase, ...Object.entries(systemProperties).map(([key, value]) => `-D${key}=${value}`)];
118
+ const execution = await runCommand(wrapper, args, { cwd: projectRoot, env: environment, timeoutMs, signal, stdoutFile: stdoutPath, stderrFile: stderrPath, secrets: [environment.MAVEN_REPO_USERNAME, environment.MAVEN_REPO_PASSWORD], progress: true });
118
119
  const outcome = { ...execution, exitCode: execution.status };
119
120
  const durationMs = Number(process.hrtime.bigint() - started) / 1e6;
120
121
  await writeText(stdoutPath, redactSecrets(outcome.stdout, environment));
121
122
  await writeText(stderrPath, redactSecrets(outcome.stderr, environment));
122
123
  commands.push({
123
- command: `./mvnw ${phase}`,
124
+ command: `./mvnw ${args.join(" ")}`,
124
125
  phase,
125
126
  exit_code: outcome.exitCode,
126
127
  failure_category: outcome.termination || classifyFailure(phase, outcome),
@@ -26,7 +26,7 @@ description: Use when YSS 产品设计系统与 Ant Design 企业级 UI 风格
26
26
  2. 读取已有资产:先读根 `DESIGN.md`,再读 `docs/design/design.md` 和 Token 派生快照,最后按任务读取相关 Spec、交互说明、状态矩阵、OpenAPI Draft、现有页面代码。
27
27
  3. 按设计系统基线约束输出或修改产物:颜色、排版、间距、圆角、动效、组件、状态、响应式。
28
28
  4. 若是产品设计阶段,先使用 `yss-prototype-stage`;规范直出由 YSS HTML adapter 执行;存在已选视觉稿时条件使用 `product-design:index`,其他 Agent 交付等价证据。
29
- 5. 若是前端实现阶段,配合 `yss-ui`、`yss-ui-business-page-generation`、`component-selection-imports`、`yss-formily` 及实际命中的组件专项,但本技能负责风格与体验一致性门禁。
29
+ 5. 若是前端实现阶段,配合 `yss-ui`、`yss-ui-business-page-generation`、`yss-formily` 及实际命中的组件专项,但本技能负责风格与体验一致性门禁。
30
30
  6. 若发现视觉 Token 或组件变体不足,先更新根 `DESIGN.md` 并重新生成投影;只有治理、流程或验收说明不足时才更新 `docs/design/design.md`。
31
31
 
32
32
  ## 核心基线
@@ -89,7 +89,7 @@ description: Use when YSS 产品设计系统与 Ant Design 企业级 UI 风格
89
89
  | 低保真线框或流程图 | 语义草图或 HTML;设计工具按需使用 |
90
90
  | 前端页面实现 | `yss-ui` / `yss-ui-business-page-generation` |
91
91
  | 表单 schema | `yss-formily` |
92
- | YTable / YTree / 高度自适应 | `ytable-usage` / `ytree-usage` / `yss-use-table-height` / `yss-use-tree-height` |
92
+ | YTable / YEditTable / YTree / 高度自适应 | `ytable-usage` / `yedit-table-usage` / `ytree-usage` |
93
93
  | 原型交接前的六轴 QA | 规范直出由 YSS adapter 按 design-contract 验收;独立视觉稿才条件使用 design-qa 比对,项目 Token 优先 |
94
94
  | 原型渲染适配 | `yss-prototype-stage/references/product-design-adapter.md`;H1/H2 统一 HTML 交付、分别验证视觉与可操作流程;不得调用 `yss-ui` |
95
95
  | API 契约 / 接入 | `yss-openapi-governance` / `yss-api-integration` |
@@ -62,7 +62,7 @@ public interface QualityTemplateGateway {
62
62
  - `*VO`、`PageResult`、Repository PO。
63
63
  - MyBatis、Spring MVC、Jackson、Swagger 类型。
64
64
 
65
- 分页、列表和投影查询由 Application Query Port 定义,Infrastructure 实现。
65
+ 展示分页、列表和投影查询由 Application Query Port 定义,Infrastructure 实现。
66
66
 
67
67
  ## 5. Domain Error
68
68
 
@@ -99,3 +99,10 @@ Web Exception Translator 再将它映射为批准的状态码、错误码和消
99
99
  - 返回 YSS Skill Execution Result,包含 Domain 文件、行为测试、ArchUnit 结果及实际 `./mvnw ...` 证据。
100
100
  - 新聚合、不变量、状态机或跨上下文影响进入 `new_impacts` 并暂停。
101
101
  - 检测到旧架构时返回 `unsupported`;如需现代化,退出 scaffold 工作流并单独立项评估。
102
+
103
+ ## 聚合创建与重建
104
+
105
+ - 创建入口执行当前创建规则;持久化重建入口恢复已批准状态并校验结构不变量,不重复发送创建事件、生成身份或执行外部调用。两者不得通过公开任意 setter 混为一体。
106
+ - 值对象按值相等;聚合按稳定身份相等。集合对外只读,修改经业务方法;Java 8 使用普通类与防御性复制,不从示例推导 record 等高版本语法。
107
+ - 领域错误携带稳定标识与参数;公开消息和 HTTP 状态由 Web 翻译。测试通过公开行为覆盖非法状态、重复动作和重建后语义一致性。
108
+ - 为业务决策加载一个或一组聚合仍可使用 Domain Gateway;展示列表、分页、排序、统计和投影走 Application Query Port。返回 List 本身不是违规,须按调用目的判定。
@@ -18,10 +18,10 @@ description: 路由 YSS UI 业务页面中的 YFormily 场景;当查询、编
18
18
  | 字段显隐、值联动、异步 effects、跨字段副作用 | `formily-linkage-effects` |
19
19
  | 新增、编辑、查看模式,详情插槽或 disabled 规则 | `formily-mode-slot-detail` |
20
20
  | 分步录入、跨步骤校验、步骤状态 | `formily-step-flow` |
21
- | Modal / Drawer 的打开、回填、保存、关闭和回退 | `page-form-module` |
21
+ | Modal / Drawer 的打开、回填、保存、关闭和回退 | `yss-ui-business-page-generation` 负责页面容器编排,并加载 `formily-foundation` 与实际命中的模式/联动专项 |
22
22
  | 从自然语言、截图或 Figma 生成 schema | `yss-formily-schema-generator` |
23
23
 
24
- 一个任务可以同时加载多个专项 Skill。`page-form-module` 只在页面容器生命周期命中时加载,不作为本技能的固定依赖。
24
+ 一个任务可以同时加载多个专项 Skill。页面容器生命周期不是本技能的固定依赖;仅当任务是完整业务页面或弹层闭环时加载 `yss-ui-business-page-generation`。
25
25
 
26
26
  ## 边界
27
27
 
@@ -71,7 +71,7 @@ packages/package.json
71
71
  - 不携带 Data Quality 业务页面、默认管理员、生产接口、私网 Postman 同步、部署凭证或残缺 JSP 命令;当前支持 Qiankun 与 standalone,JSP 不在可用基线内。
72
72
  - 不得把 `apps/frontend/` 容器根登记为项目根;Harness 内每个前端项目必须有独立的 `apps/frontend/<project>/` 路径。
73
73
  - 不把模板示例页面当作业务功能交付。
74
- - 生成后仍需使用 `yss-ui-business-page-generation`、`component-selection-imports`、`yss-api-integration` 以及实际命中的表格、树、Formily 等专项 skill 实现业务页面。
74
+ - 生成后仍需使用 `yss-ui`、`yss-ui-business-page-generation`、`yss-api-integration` 以及实际命中的表格、树、Formily 等专项 skill 实现业务页面。
75
75
 
76
76
  ## Output
77
77
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Data Quality v1 通用骨架:Vue 3 / Ant Design Vue 4 / YSS UI,默认浅色、14px 正文、32px 控件。`packages/` 是应用根。YSS 按需注册,新增页面再按实现合同引入表格或表单组件。骨架不含业务页面、用户权限、生产 API 地址或部署凭证。
4
4
 
5
- 使用 Node >=22.12、pnpm 10.15、TypeScript5.9.3;在用户级 npm 配置中设置企业 @yss-ui registry 和认证,然后运行 `pnpm install --frozen-lockfile`。检查使用 `pnpm lint:check`、`pnpm type-check`、`pnpm build` 和 `pnpm build:standalone`。
5
+ 使用 Node >=22.12、pnpm 12.4.2、TypeScript5.9.3;在用户级 npm 配置中设置企业 @yss-ui registry 和认证,然后运行 `pnpm install --frozen-lockfile`。检查使用 `pnpm lint:check`、`pnpm type-check`、`pnpm build` 和 `pnpm build:standalone`。
6
6
 
7
7
  `pnpm dev` 独立预览;Qiankun 注册名为 `__MICROAPP_NAME__`、默认激活路由 `__BASE_ROUTE__`,门户传入 `container` / `routerBase` / `bridgeVersion: 1` / `themeConfig.mode`。资源部署路径由 `VITE_PUBLIC_BASE` 明确设置,不能从路由猜测。复制 `packages/.env.example` 到 `.env.local` 配置本地代理。
8
8
 
@@ -2,10 +2,10 @@
2
2
  "name": "__APP_NAME__",
3
3
  "private": true,
4
4
  "type": "module",
5
- "packageManager": "pnpm@10.15.0",
5
+ "packageManager": "pnpm@12.4.2",
6
6
  "engines": {
7
7
  "node": ">=22.12.0",
8
- "pnpm": ">=10.15.0 <11"
8
+ "pnpm": ">=12.4.2 <13"
9
9
  },
10
10
  "scripts": {
11
11
  "dev": "pnpm -C packages dev",
@@ -1,3 +1,161 @@
1
+ ---
2
+ lockfileVersion: '9.0'
3
+
4
+ importers:
5
+
6
+ .:
7
+ configDependencies: {}
8
+ packageManagerDependencies:
9
+ pnpm:
10
+ specifier: 12.4.2
11
+ version: 12.4.2
12
+
13
+ packages:
14
+
15
+ '@pnpm/exe.android-arm64@12.4.2':
16
+ resolution: {integrity: sha512-E255MbcQ0V1577M2BV0ajWuP7KmTPYA0jqZnk3rK6Lq3kTvZWulMMb7iqRmnLsQbyWTkMEB2CfyM70loVDA8xg==}
17
+ cpu: [arm64]
18
+ os: [android]
19
+
20
+ '@pnpm/exe.android-x64@12.4.2':
21
+ resolution: {integrity: sha512-J1pSeCUwuKxMG70ZzpWn8JzElxiEa8NN/3N0SlZRtU2xbztChaJCKF3HaBNIj9yPfeofWzJo/lwNvDDjraQuZw==}
22
+ cpu: [x64]
23
+ os: [android]
24
+
25
+ '@pnpm/exe.darwin-arm64@12.4.2':
26
+ resolution: {integrity: sha512-A0WDo8iErfZBXgrLseQxw8i8Y9ctUpOEl/Uu+cubnTzpD8tT9ykIB548L8YTM2WD4OS+ZOHSxy8aGZcvKq8PaQ==}
27
+ cpu: [arm64]
28
+ os: [darwin]
29
+
30
+ '@pnpm/exe.darwin-x64@12.4.2':
31
+ resolution: {integrity: sha512-MSgJdovBWHcb5DEOvfPH9yNi/T5O1Xa4ess+E1ESGo/5yuty7S4JoiIjami+fsNXfnoQMlwsMUqYU4zAvBcNCw==}
32
+ cpu: [x64]
33
+ os: [darwin]
34
+
35
+ '@pnpm/exe.freebsd-x64@12.4.2':
36
+ resolution: {integrity: sha512-h2YumlQSNvgbRPv+RXwABohX65f9bOBZn+jMIt7bFDISZPCzQ+Nvpt6Awbp4ip5PwQgYxbu5iREJ1fHE39Fm8A==}
37
+ cpu: [x64]
38
+ os: [freebsd]
39
+
40
+ '@pnpm/exe.linux-arm64-musl@12.4.2':
41
+ resolution: {integrity: sha512-LwSEtSEDTv6S51YLs3YvSkPyun/QmfMic1UGICUkPWFu6ByP43RdMlkKvmVkfGhAYCpnxO057vrmyJqtfZrPCA==}
42
+ cpu: [arm64]
43
+ os: [linux]
44
+ libc: [musl]
45
+
46
+ '@pnpm/exe.linux-arm64@12.4.2':
47
+ resolution: {integrity: sha512-2dSiDXyhx+RTHsewxex8f/jVjqQXWJ2oow4kCVHEWdZKeBpgMxvZ6fHkTAUBJXgqhbKIDHvuNlZBP7gJfUWL5A==}
48
+ cpu: [arm64]
49
+ os: [linux]
50
+ libc: [glibc]
51
+
52
+ '@pnpm/exe.linux-ppc64@12.4.2':
53
+ resolution: {integrity: sha512-8Itc+jQk+MTz04LS9D1RcH+VctAWmzM4l1cJQ+Sx7pAJNo7EKHdRMbC0Tok1jyQ7eEHNJZD5EleYneZqWfZM+g==}
54
+ cpu: [ppc64]
55
+ os: [linux]
56
+ libc: [glibc]
57
+
58
+ '@pnpm/exe.linux-riscv64@12.4.2':
59
+ resolution: {integrity: sha512-hleOeqhTVpH+z9RVMGnxvU4ZnrkBUClWjCbHD9u6kwyqhGSpevoU1wTGish+CBRhmIgMAy9pAfFpqhbAKOKNfw==}
60
+ cpu: [riscv64]
61
+ os: [linux]
62
+ libc: [glibc]
63
+
64
+ '@pnpm/exe.linux-s390x@12.4.2':
65
+ resolution: {integrity: sha512-LAsQRRdP9aToENR6dtcIJ9l+e1zMYOX0tQcLGpRyLPVBQcYRLlvAPcmDshsiIHQjp05SDa9FI0czX1ZQ1a7a/A==}
66
+ cpu: [s390x]
67
+ os: [linux]
68
+ libc: [glibc]
69
+
70
+ '@pnpm/exe.linux-x64-musl@12.4.2':
71
+ resolution: {integrity: sha512-kzfzH2/0BWdTABK14Yj5a1xsdkTEQUp2eXEPNakaD9jKL025lq3hyaKHIz/gIZaPDMe/1bFFK/En4ztFlbBJxw==}
72
+ cpu: [x64]
73
+ os: [linux]
74
+ libc: [musl]
75
+
76
+ '@pnpm/exe.linux-x64@12.4.2':
77
+ resolution: {integrity: sha512-/pbt0UVTa8NMDhzOWLQRfZ6G9ROKXlJPZtx845BqyWfc7hCrWXhTLBd70yO2y8+E+IWN3oHM1s/JsIQNGk1yvg==}
78
+ cpu: [x64]
79
+ os: [linux]
80
+ libc: [glibc]
81
+
82
+ '@pnpm/exe.win32-arm64@12.4.2':
83
+ resolution: {integrity: sha512-PsW19e4dAUNpZ0cS9flaxFuAmpt2dKlH/Vvi8TZ4qyJjjQzue/CEsWm+6wKVP4CJ7IT8RdL4qh+soOPWIgF2Zw==}
84
+ cpu: [arm64]
85
+ os: [win32]
86
+
87
+ '@pnpm/exe.win32-x64@12.4.2':
88
+ resolution: {integrity: sha512-+xGoeE0g55ztWvl8i5QqdmNfW3nIrTVcoQrNshEOwxthm9Ag48oXton3uxOA3/SANyz5AXexEjj2KO20NnOrEw==}
89
+ cpu: [x64]
90
+ os: [win32]
91
+
92
+ pnpm@12.4.2:
93
+ resolution: {integrity: sha512-CK3GYTGAJ1x8ntraOdzwjJxhrU5+rzMKTzRh8QKw+QdCNFTRF/mOctR/7wYWBwZE17/8lzpqV/UJCm18NosHyQ==}
94
+ engines: {node: '>=18.*'}
95
+ hasBin: true
96
+
97
+ snapshots:
98
+
99
+ '@pnpm/exe.android-arm64@12.4.2':
100
+ optional: true
101
+
102
+ '@pnpm/exe.android-x64@12.4.2':
103
+ optional: true
104
+
105
+ '@pnpm/exe.darwin-arm64@12.4.2':
106
+ optional: true
107
+
108
+ '@pnpm/exe.darwin-x64@12.4.2':
109
+ optional: true
110
+
111
+ '@pnpm/exe.freebsd-x64@12.4.2':
112
+ optional: true
113
+
114
+ '@pnpm/exe.linux-arm64-musl@12.4.2':
115
+ optional: true
116
+
117
+ '@pnpm/exe.linux-arm64@12.4.2':
118
+ optional: true
119
+
120
+ '@pnpm/exe.linux-ppc64@12.4.2':
121
+ optional: true
122
+
123
+ '@pnpm/exe.linux-riscv64@12.4.2':
124
+ optional: true
125
+
126
+ '@pnpm/exe.linux-s390x@12.4.2':
127
+ optional: true
128
+
129
+ '@pnpm/exe.linux-x64-musl@12.4.2':
130
+ optional: true
131
+
132
+ '@pnpm/exe.linux-x64@12.4.2':
133
+ optional: true
134
+
135
+ '@pnpm/exe.win32-arm64@12.4.2':
136
+ optional: true
137
+
138
+ '@pnpm/exe.win32-x64@12.4.2':
139
+ optional: true
140
+
141
+ pnpm@12.4.2:
142
+ optionalDependencies:
143
+ '@pnpm/exe.android-arm64': 12.4.2
144
+ '@pnpm/exe.android-x64': 12.4.2
145
+ '@pnpm/exe.darwin-arm64': 12.4.2
146
+ '@pnpm/exe.darwin-x64': 12.4.2
147
+ '@pnpm/exe.freebsd-x64': 12.4.2
148
+ '@pnpm/exe.linux-arm64': 12.4.2
149
+ '@pnpm/exe.linux-arm64-musl': 12.4.2
150
+ '@pnpm/exe.linux-ppc64': 12.4.2
151
+ '@pnpm/exe.linux-riscv64': 12.4.2
152
+ '@pnpm/exe.linux-s390x': 12.4.2
153
+ '@pnpm/exe.linux-x64': 12.4.2
154
+ '@pnpm/exe.linux-x64-musl': 12.4.2
155
+ '@pnpm/exe.win32-arm64': 12.4.2
156
+ '@pnpm/exe.win32-x64': 12.4.2
157
+
158
+ ---
1
159
  lockfileVersion: '9.0'
2
160
 
3
161
  settings:
@@ -17,10 +17,10 @@
17
17
  ".gitignore": "sha256:fb8288522033f645a728dfb53cef24a11824bdbec858b93279d4809924b4539d",
18
18
  ".npmrc.example": "sha256:cee4433295152854b58babea9072215a2d84b8de086d218b15ffb7e84f1fe9e1",
19
19
  "DESIGN.md": "sha256:e84a6c175840efe9663a2d0aba37f5635c053f47452bb146d1025d65665b1bec",
20
- "README.md": "sha256:6d8ed1aed45267f3c581733a7d12b0b891dc94c800d1416a0b172355031b4b96",
20
+ "README.md": "sha256:745bd31b3397876fc239bde12378bc265a1a8d1626159f188de76873951d471a",
21
21
  "micro-config.json": "sha256:8266b0eb806696d6bb2023a0d1e72113cdffc355bb0fafd8b2095d727f827711",
22
22
  "orval.config.ts": "sha256:d918458e4ee972ae94740899dd15701530bdc31fd758240fc00e96aba3ba9b3a",
23
- "package.json": "sha256:29cd516ba688ae3a3625b4f3a3921c47825134cff27622732ef942c4129c7222",
23
+ "package.json": "sha256:51a73185fac255062e4f3eaa415017f9c9886d5e3aac4ff483694c49ae810ba7",
24
24
  "packages/.env.development": "sha256:e698b56d83ad282c221e2c8067bc4e3e90789c610fd31da2489bd3ac2d8efc5f",
25
25
  "packages/.env.example": "sha256:b8cf60af269af3f4dc3c167df88045af949683b302bd9b77e50fb77fa1adf81f",
26
26
  "packages/.env.production": "sha256:b0a96ab02559a99fc95c37b967f604675686c8de336731a1721d54f43b047249",
@@ -43,7 +43,7 @@
43
43
  "packages/src/views/Welcome.vue": "sha256:0498edee6e25b45644a2d12c6fded1e3c0fda830c9196d4fc5389b94fb1a0e0d",
44
44
  "packages/tsconfig.json": "sha256:40e27bb07cd4ae8c0c636b5d9581fe378d00e21acb28423cc2a08bfa1a67c11f",
45
45
  "packages/vite.config.ts": "sha256:d3c1775bdca54e1b0f2b267a7dae992cc61836891588e93e02caa49184cb2ab2",
46
- "pnpm-lock.yaml": "sha256:dd05bbc9c948cb47de017fa215806d04f0f9f143d3c953b43076a62e5fd85d9b",
46
+ "pnpm-lock.yaml": "sha256:ddab6b19cb74c769ba1cd3854d3eb0649843e8136811b7cbf2800c3084f73949",
47
47
  "pnpm-workspace.yaml": "sha256:d5cdbd2e0a167297976d11695d1593a4e71694ed462120569e20e98fd9c63fbe"
48
48
  }
49
49
  }
@@ -66,6 +66,11 @@ const saveBundle = () => writeFileSync(contractFile, JSON.stringify(bundle));
66
66
  saveBundle();
67
67
  const bundled = generate({ contractFile, outputDir: bundle.target_output_dir });
68
68
  assert.equal(bundled.template.checkout, undefined);
69
+ const bundledPackage = JSON.parse(readFileSync(path.join(bundle.target_output_dir, 'package.json')));
70
+ assert.equal(bundledPackage.packageManager, 'pnpm@12.4.2');
71
+ assert.equal(bundledPackage.engines.node, '>=22.12.0');
72
+ assert.equal(bundledPackage.engines.pnpm, '>=12.4.2 <13');
73
+ assert.match(readFileSync(path.join(bundle.target_output_dir, 'README.md'), 'utf8'), /pnpm 12\.4\.2/);
69
74
  assert.equal(JSON.parse(readFileSync(path.join(bundle.target_output_dir, 'packages/package.json'))).dependencies['ant-design-vue'], '4.2.6');
70
75
  assert.equal(JSON.parse(readFileSync(path.join(bundle.target_output_dir, 'packages/src/config/theme.json'))).algorithm, 'default');
71
76
  for (const forbidden of ['.npmrc', 'node_modules', '.git', 'packages/src/views/datasource/index.vue', 'scripts/sync-openapi.js']) assert.equal(existsSync(path.join(bundle.target_output_dir, forbidden)), false, forbidden);
@@ -13,7 +13,7 @@ description: Use when YSS Vue 页面涉及 vue-hooks-plus/useRequest、分页、
13
13
  - Vue Hooks Plus `useRequest`: `https://inhiblabcore.github.io/vue-hooks-plus/zh/hooks/useRequest/quick-start`
14
14
  - Local reference index: `references/frontend-docs.md`
15
15
 
16
- 本技能负责请求执行、分页/筛选参数、选择状态、响应映射和页面级调度。接口导入与 Orval mutator 使用 `yss-api-integration`;页面布局和组件选型从 `yss-ui` 路由到 `page-skeleton`、`component-selection-imports` 及具体组件 Skill;高度计算分别使用 `yss-use-table-height` 或 `yss-use-tree-height`。
16
+ 本技能负责请求执行、分页/筛选参数、选择状态、响应映射、异步竞态和页面级调度。接口导入与 Orval mutator 使用 `yss-api-integration`;页面布局和组件选型从 `yss-ui` 路由到 `yss-ui-business-page-generation` 及具体组件 Skill;表格和树高度分别服从 `ytable-usage`、`yedit-table-usage`、`ytree-usage`。
17
17
 
18
18
  官方 `@yss-ui/hooks` 当前公开 `useFullscreen`、`useTreeHeight`、`useTableHeight`、`useLoading`、`usePollingTask` 与 `useUrlState`。`useRequest`、防抖、缓存或重试不属于这套公开 YSS Hooks 契约。仅当项目已批准 `vue-hooks-plus` 及其具体版本时,才可使用第 3 节的 `useRequest`;不得把它命名或包装成 YSS 官方 API。
19
19
 
@@ -34,6 +34,7 @@ description: Use when YSS Vue 页面涉及 vue-hooks-plus/useRequest、分页、
34
34
  - 将请求执行、参数合并、响应映射与数据竞争处理放在 `hooks/useXxx.ts`;页面只保留布局、事件绑定和渲染。
35
35
  - 以业务域划分 Hook,而不是为每个微小工具函数各建一个 Hook。
36
36
  - 每个对外动作都必须有明确的 loading、成功、失败和数据陈旧策略;不要把这些分支留给模板或页面组件。
37
+ - 组件内不直接修改 `props`;双向绑定使用 `emit('update:xxx')`。模板不承载复杂业务表达式,优先下沉 `computed` 或业务 Hook;避免无边界的深层 `watch`,只观察明确依赖源。
37
38
 
38
39
  ## 2. 列表 / 分页 Hook
39
40
 
@@ -185,7 +186,7 @@ const polling = usePollingTask(async ({ isCurrent, signal }) => {
185
186
 
186
187
  - `useUrlState()`:返回扁平字符串 `state`、`setState`、`clearKeys`、`clearState`。`setState` 合并状态,`undefined`、`null`、空字符串删除键。默认 `mode: 'replace'`、`strategy: 'history'`;需要路由守卫或导航语义时用 `strategy: 'router'`。
187
188
  - `useFullscreen(target, options?)`:返回 `isFullscreen`、`enterFullscreen`、`exitFullscreen`、`toggleFullscreen`、`isEnabled`。浏览器真全屏需要用户手势;`pageFullscreen` 是 CSS 模拟全屏,可配置 `className`、`zIndex`,并可用 `escTip` 控制提示。
188
- - `useTreeHeight` 与 `useTableHeight` 通过 `ResizeObserver` 计算可用高度。树的 `extraOffset` 仅用于 YTree 内置 `filterable` 搜索区;表格可配置 `boundaryRef` 避免尺寸反馈循环,并可扣除分页、工具栏或新增按钮高度。具体布局约束交由 `yss-use-tree-height` / `yss-use-table-height`。
189
+ - `useTreeHeight` 与 `useTableHeight` 通过 `ResizeObserver` 计算可用高度。树的 `extraOffset` 仅用于 YTree 内置 `filterable` 搜索区;表格可配置 `boundaryRef` 避免尺寸反馈循环,并可扣除分页、工具栏或新增按钮高度。具体布局约束交由 `ytree-usage` / `ytable-usage` / `yedit-table-usage`。
189
190
 
190
191
  ## 8. 返回契约与自检
191
192
 
@@ -18,6 +18,7 @@
18
18
 
19
19
  | Capability | Primary skill | Task modes |
20
20
  | --- | --- | --- |
21
+ | `governance.backend-spec-conformance` | `yss-backend-spec-review` | `guidance`, `troubleshooting`, `review-input` |
21
22
  | `writing.lifecycle-document` | `i-have-adhd` | `guidance` |
22
23
  | `architecture.technical-design` | `yss-technical-design` | `guidance`, `integration`, `review-input` |
23
24
  | `architecture.mvc-design` | `yss-technical-design` | `guidance`, `integration`, `review-input` |
@@ -57,6 +58,7 @@
57
58
 
58
59
  | Recipe | Capabilities |
59
60
  | --- | --- |
61
+ | `backend.spec-conformance` | `governance.backend-spec-conformance`, `quality.java-code-style` |
60
62
  | `backend.ddd-domain-behavior` | `layer.domain`, `layer.application`, `quality.java-code-style` |
61
63
  | `backend.ddd-persistence-mybatis` | `layer.persistence`, `framework.mybatis`, `codegen.mapstruct`, `codegen.lombok`, `quality.java-code-style` |
62
64
  | `backend.ddd-http-api` | `layer.web-adapter`, `contract.dto-wire`, `contract.request-validation`, `contract.error-mapping`, `codegen.mapstruct`, `codegen.lombok`, `quality.java-code-style` |
@@ -106,6 +108,9 @@
106
108
 
107
109
  | Skill | Dependency | Type | Condition |
108
110
  | --- | --- | --- | --- |
111
+ | `yss-backend-spec-review` | `alibaba-java-code-style` | `context-required` | — |
112
+ | `yss-backend-spec-review` | `yss-implementation-contract-compiler` | `coordination-only` | — |
113
+ | `yss-backend-spec-review` | `code-review` | `review-only` | — |
109
114
  | `prototype-review` | `i-have-adhd` | `context-conditional` | `lifecycle-document-output` |
110
115
  | `yss-implementation-contract-compiler` | `i-have-adhd` | `context-conditional` | `lifecycle-document-output` |
111
116
  | `yss-openapi-governance` | `i-have-adhd` | `context-conditional` | `lifecycle-document-output` |
@@ -150,7 +155,7 @@
150
155
  | `yss-validation` | `yss-exception` | `component-dependency` | — |
151
156
  | `yss-security-algorithm` | `yss-exception` | `component-dependency` | — |
152
157
  | `yss-exception` | `yss-dto` | `context-required` | — |
153
- | `yss-ui-business-page-generation` | `component-selection-imports` | `context-conditional` | `components` |
158
+ | `yss-ui-business-page-generation` | `yss-ui` | `context-required` | — |
154
159
  | `yss-ui-business-page-generation` | `yss-hook` | `context-conditional` | `hooks` |
155
160
  | `yss-ui-business-page-generation` | `yss-formily` | `context-conditional` | `form` |
156
161
  | `yss-ui-business-page-generation` | `yss-api-integration` | `context-conditional` | `api` |
@@ -70,7 +70,7 @@ node scripts/generate_and_verify_scaffold.mjs \
70
70
  ## 硬约束
71
71
 
72
72
  - 新生成只接受包含 API Contract Decision 的统一 schema v4;缺 API 字段的预发布 v4 不得静默接受。验证器可只读检查历史 Manifest v3,恢复必须另行完成所有权审计、技术/数据/API 设计补齐与当前批准。历史 v2/v3 均不用于新生成。
73
- - `architecture_family` 必须为 `layered-mvc`,`generator_skill` 必须为本 skill。历史 `yss-mvc-data-analysis-project-initializer` 合同必须返回 `skill-deprecated`、标记 `stale` 并重编译,不自动替换或继承批准。
73
+ - `architecture_family` 必须为 `layered-mvc`,`generator_skill` 必须为本 skill。旧数据分析初始化合同必须标记 `stale` 并按 `mvc-data-analysis-v1` Profile 重编译,不自动替换或继承批准。
74
74
  - 目标存在、`--force`、旧项目迁移、模板升级均为 `unsupported`。
75
75
  - Harness 内只允许以 `apps/backend/` 为输出父容器;外部实现仓库使用已登记真实路径。
76
76
  - 不生成业务示例。健康检查、上下文加载测试和架构测试只能验证机械工程能力,不定义用户可见 API。