create-yss-spec 2.2.9 → 2.2.10

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 (580) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/template/.agents/mcp_config.json +8 -0
  4. package/template/.agents/rules/yss-ai-skills.md +3 -1
  5. package/template/.agents/skills/.yss-skills-manifest.json +51 -25
  6. package/template/.agents/skills/code-review/references/yss-review-standards.md +3 -3
  7. package/template/.agents/skills/component-selection-imports/SKILL.md +2 -2
  8. package/template/.agents/skills/frontend-commit/SKILL.md +1 -1
  9. package/template/.agents/skills/yss-api-integration/SKILL.md +85 -339
  10. package/template/.agents/skills/yss-application/SKILL.md +7 -5
  11. package/template/.agents/skills/yss-application/references/application-layer-guide.md +60 -105
  12. package/template/.agents/skills/yss-components/SKILL.md +1 -1
  13. package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +27 -13
  14. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/config/application-local.yml.template +8 -0
  15. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +2 -3
  16. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +36 -0
  17. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/java/bootstrap-application.java.template +15 -0
  18. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/adapter-pom.xml.template +3 -3
  19. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +13 -4
  20. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +24 -4
  21. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/domain-pom.xml.template +6 -20
  22. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/infrastructure-pom.xml.template +26 -6
  23. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +70 -10
  24. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +24 -10
  25. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/maven.config +2 -3
  26. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/settings.xml +18 -105
  27. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.properties +4 -2
  28. package/template/.agents/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +78 -156
  29. package/template/.agents/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +83 -389
  30. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +20 -188
  31. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +41 -122
  32. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +191 -0
  33. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +126 -0
  34. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +139 -42
  35. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +87 -7
  36. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +322 -12
  37. package/template/.agents/skills/yss-design-system/SKILL.md +2 -2
  38. package/template/.agents/skills/yss-design-system/references/design-system.md +2 -2
  39. package/template/.agents/skills/yss-domain/SKILL.md +3 -3
  40. package/template/.agents/skills/yss-domain/references/domain-layer-guide.md +61 -236
  41. package/template/.agents/skills/yss-dto/SKILL.md +5 -5
  42. package/template/.agents/skills/yss-dto/references/README.md +2 -2
  43. package/template/.agents/skills/yss-dto/references/openapi-wire-profile.yaml +3 -3
  44. package/template/.agents/skills/yss-exception/SKILL.md +2 -0
  45. package/template/.agents/skills/yss-formily/SKILL.md +1 -1
  46. package/template/.agents/skills/yss-mybatis/SKILL.md +2 -2
  47. package/template/.agents/skills/yss-page-module-development/SKILL.md +2 -0
  48. package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +42 -11
  49. package/template/.agents/skills/yss-repository/SKILL.md +7 -5
  50. package/template/.agents/skills/yss-repository/references/infrastructure-layer-guide.md +70 -155
  51. package/template/.agents/skills/yss-router/references/router-contract.yaml +41 -7
  52. package/template/.agents/skills/yss-ui/SKILL.md +6 -5
  53. package/template/.agents/skills/yss-ui/references/component-routing.md +1 -1
  54. package/template/.agents/skills/yss-ui-business-page-generation/SKILL.md +159 -0
  55. package/template/.agents/skills/yss-ui-business-page-generation/references/component-map.md +39 -0
  56. package/template/.agents/skills/yss-ui-business-page-generation/references/hooks-map.md +70 -0
  57. package/template/.agents/skills/yss-ui-business-page-generation/references/utils-map.md +51 -0
  58. package/template/.agents/skills/yss-use-table-height/SKILL.md +78 -297
  59. package/template/.agents/skills/yss-use-tree-height/SKILL.md +51 -393
  60. package/template/.agents/skills/yss-web-controller/SKILL.md +12 -11
  61. package/template/.agents/skills/yss-web-controller/assets/templates/Controller.java.template +15 -16
  62. package/template/.agents/skills/yss-web-controller/assets/templates/WebConvertor.java.template +21 -11
  63. package/template/{.claude/skills/yss-web-controller/assets/templates/domain/dto/cmd/AddCmd.java.template → .agents/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template} +7 -11
  64. package/template/.agents/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +24 -0
  65. package/template/.agents/skills/yss-web-controller/assets/templates/web/dto/Response.java.template +18 -0
  66. package/template/.agents/skills/yss-web-controller/assets/templates/{domain/dto/cmd/AddCmd.java.template → web/dto/UpdateRequest.java.template} +7 -11
  67. package/template/.agents/skills/yss-web-controller/references/web-adapter-layer-guide.md +61 -145
  68. package/template/.agents/skills/yss-web-controller/scripts/generate_controller.mjs +45 -17
  69. package/template/.agents/skills/yss-web-controller/scripts/generate_controller.test.mjs +44 -3
  70. package/template/.claude/skills/code-review/references/yss-review-standards.md +3 -3
  71. package/template/.claude/skills/component-selection-imports/SKILL.md +2 -2
  72. package/template/.claude/skills/frontend-commit/SKILL.md +1 -1
  73. package/template/.claude/skills/yss-api-integration/SKILL.md +85 -339
  74. package/template/.claude/skills/yss-application/SKILL.md +7 -5
  75. package/template/.claude/skills/yss-application/references/application-layer-guide.md +60 -105
  76. package/template/.claude/skills/yss-components/SKILL.md +1 -1
  77. package/template/.claude/skills/yss-ddd-scaffold-generator/SKILL.md +27 -13
  78. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/config/application-local.yml.template +8 -0
  79. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +2 -3
  80. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +36 -0
  81. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/java/bootstrap-application.java.template +15 -0
  82. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/pom/adapter-pom.xml.template +3 -3
  83. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +13 -4
  84. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +24 -4
  85. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/pom/domain-pom.xml.template +6 -20
  86. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/pom/infrastructure-pom.xml.template +26 -6
  87. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +70 -10
  88. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +24 -10
  89. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/maven.config +2 -3
  90. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/settings.xml +18 -105
  91. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.properties +4 -2
  92. package/template/.claude/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +78 -156
  93. package/template/.claude/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +83 -389
  94. package/template/.claude/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +20 -188
  95. package/template/.claude/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +41 -122
  96. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +191 -0
  97. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +126 -0
  98. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +139 -42
  99. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +87 -7
  100. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +322 -12
  101. package/template/.claude/skills/yss-design-system/SKILL.md +2 -2
  102. package/template/.claude/skills/yss-design-system/references/design-system.md +2 -2
  103. package/template/.claude/skills/yss-domain/SKILL.md +3 -3
  104. package/template/.claude/skills/yss-domain/references/domain-layer-guide.md +61 -236
  105. package/template/.claude/skills/yss-dto/SKILL.md +5 -5
  106. package/template/.claude/skills/yss-dto/references/README.md +2 -2
  107. package/template/.claude/skills/yss-dto/references/openapi-wire-profile.yaml +3 -3
  108. package/template/.claude/skills/yss-exception/SKILL.md +2 -0
  109. package/template/.claude/skills/yss-formily/SKILL.md +1 -1
  110. package/template/.claude/skills/yss-mybatis/SKILL.md +2 -2
  111. package/template/.claude/skills/yss-page-module-development/SKILL.md +2 -0
  112. package/template/.claude/skills/yss-product-lifecycle/references/orchestration-contract.yaml +42 -11
  113. package/template/.claude/skills/yss-repository/SKILL.md +7 -5
  114. package/template/.claude/skills/yss-repository/references/infrastructure-layer-guide.md +70 -155
  115. package/template/.claude/skills/yss-router/references/router-contract.yaml +41 -7
  116. package/template/.claude/skills/yss-ui/SKILL.md +6 -5
  117. package/template/.claude/skills/yss-ui/references/component-routing.md +1 -1
  118. package/template/.claude/skills/yss-ui-business-page-generation/SKILL.md +159 -0
  119. package/template/.claude/skills/yss-ui-business-page-generation/references/component-map.md +39 -0
  120. package/template/.claude/skills/yss-ui-business-page-generation/references/hooks-map.md +70 -0
  121. package/template/.claude/skills/yss-ui-business-page-generation/references/utils-map.md +51 -0
  122. package/template/.claude/skills/yss-use-table-height/SKILL.md +78 -297
  123. package/template/.claude/skills/yss-use-tree-height/SKILL.md +51 -393
  124. package/template/.claude/skills/yss-web-controller/SKILL.md +12 -11
  125. package/template/.claude/skills/yss-web-controller/assets/templates/Controller.java.template +15 -16
  126. package/template/.claude/skills/yss-web-controller/assets/templates/WebConvertor.java.template +21 -11
  127. package/template/{.codex/skills/yss-web-controller/assets/templates/domain/dto/cmd/AddCmd.java.template → .claude/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template} +7 -11
  128. package/template/.claude/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +24 -0
  129. package/template/.claude/skills/yss-web-controller/assets/templates/web/dto/Response.java.template +18 -0
  130. package/template/{.cursor/skills/yss-web-controller/assets/templates/domain/dto/cmd/AddCmd.java.template → .claude/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template} +7 -11
  131. package/template/.claude/skills/yss-web-controller/references/web-adapter-layer-guide.md +61 -145
  132. package/template/.claude/skills/yss-web-controller/scripts/generate_controller.mjs +45 -17
  133. package/template/.claude/skills/yss-web-controller/scripts/generate_controller.test.mjs +44 -3
  134. package/template/.codex/skills/code-review/references/yss-review-standards.md +3 -3
  135. package/template/.codex/skills/component-selection-imports/SKILL.md +2 -2
  136. package/template/.codex/skills/frontend-commit/SKILL.md +1 -1
  137. package/template/.codex/skills/yss-api-integration/SKILL.md +85 -339
  138. package/template/.codex/skills/yss-application/SKILL.md +7 -5
  139. package/template/.codex/skills/yss-application/references/application-layer-guide.md +60 -105
  140. package/template/.codex/skills/yss-components/SKILL.md +1 -1
  141. package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +27 -13
  142. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/config/application-local.yml.template +8 -0
  143. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +2 -3
  144. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +36 -0
  145. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/java/bootstrap-application.java.template +15 -0
  146. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/adapter-pom.xml.template +3 -3
  147. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +13 -4
  148. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +24 -4
  149. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/domain-pom.xml.template +6 -20
  150. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/infrastructure-pom.xml.template +26 -6
  151. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +70 -10
  152. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +24 -10
  153. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/maven.config +2 -3
  154. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/settings.xml +18 -105
  155. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.properties +4 -2
  156. package/template/.codex/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +78 -156
  157. package/template/.codex/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +83 -389
  158. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +20 -188
  159. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +41 -122
  160. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +191 -0
  161. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +126 -0
  162. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +139 -42
  163. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +87 -7
  164. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +322 -12
  165. package/template/.codex/skills/yss-design-system/SKILL.md +2 -2
  166. package/template/.codex/skills/yss-design-system/references/design-system.md +2 -2
  167. package/template/.codex/skills/yss-domain/SKILL.md +3 -3
  168. package/template/.codex/skills/yss-domain/references/domain-layer-guide.md +61 -236
  169. package/template/.codex/skills/yss-dto/SKILL.md +5 -5
  170. package/template/.codex/skills/yss-dto/references/README.md +2 -2
  171. package/template/.codex/skills/yss-dto/references/openapi-wire-profile.yaml +3 -3
  172. package/template/.codex/skills/yss-exception/SKILL.md +2 -0
  173. package/template/.codex/skills/yss-formily/SKILL.md +1 -1
  174. package/template/.codex/skills/yss-mybatis/SKILL.md +2 -2
  175. package/template/.codex/skills/yss-page-module-development/SKILL.md +2 -0
  176. package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +42 -11
  177. package/template/.codex/skills/yss-repository/SKILL.md +7 -5
  178. package/template/.codex/skills/yss-repository/references/infrastructure-layer-guide.md +70 -155
  179. package/template/.codex/skills/yss-router/references/router-contract.yaml +41 -7
  180. package/template/.codex/skills/yss-ui/SKILL.md +6 -5
  181. package/template/.codex/skills/yss-ui/references/component-routing.md +1 -1
  182. package/template/.codex/skills/yss-ui-business-page-generation/SKILL.md +159 -0
  183. package/template/.codex/skills/yss-ui-business-page-generation/references/component-map.md +39 -0
  184. package/template/.codex/skills/yss-ui-business-page-generation/references/hooks-map.md +70 -0
  185. package/template/.codex/skills/yss-ui-business-page-generation/references/utils-map.md +51 -0
  186. package/template/.codex/skills/yss-use-table-height/SKILL.md +78 -297
  187. package/template/.codex/skills/yss-use-tree-height/SKILL.md +51 -393
  188. package/template/.codex/skills/yss-web-controller/SKILL.md +12 -11
  189. package/template/.codex/skills/yss-web-controller/assets/templates/Controller.java.template +15 -16
  190. package/template/.codex/skills/yss-web-controller/assets/templates/WebConvertor.java.template +21 -11
  191. package/template/.codex/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +19 -0
  192. package/template/.codex/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +24 -0
  193. package/template/.codex/skills/yss-web-controller/assets/templates/web/dto/Response.java.template +18 -0
  194. package/template/.codex/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +19 -0
  195. package/template/.codex/skills/yss-web-controller/references/web-adapter-layer-guide.md +61 -145
  196. package/template/.codex/skills/yss-web-controller/scripts/generate_controller.mjs +45 -17
  197. package/template/.codex/skills/yss-web-controller/scripts/generate_controller.test.mjs +44 -3
  198. package/template/.cursor/mcp.json +8 -0
  199. package/template/.cursor/skills/code-review/references/yss-review-standards.md +3 -3
  200. package/template/.cursor/skills/component-selection-imports/SKILL.md +2 -2
  201. package/template/.cursor/skills/frontend-commit/SKILL.md +1 -1
  202. package/template/.cursor/skills/yss-api-integration/SKILL.md +85 -339
  203. package/template/.cursor/skills/yss-application/SKILL.md +7 -5
  204. package/template/.cursor/skills/yss-application/references/application-layer-guide.md +60 -105
  205. package/template/.cursor/skills/yss-components/SKILL.md +1 -1
  206. package/template/.cursor/skills/yss-ddd-scaffold-generator/SKILL.md +27 -13
  207. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/config/application-local.yml.template +8 -0
  208. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +2 -3
  209. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +36 -0
  210. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/java/bootstrap-application.java.template +15 -0
  211. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/adapter-pom.xml.template +3 -3
  212. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +13 -4
  213. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +24 -4
  214. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/domain-pom.xml.template +6 -20
  215. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/infrastructure-pom.xml.template +26 -6
  216. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +70 -10
  217. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +24 -10
  218. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/maven.config +2 -3
  219. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/settings.xml +18 -105
  220. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.properties +4 -2
  221. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +78 -156
  222. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +83 -389
  223. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +20 -188
  224. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +41 -122
  225. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +191 -0
  226. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +126 -0
  227. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +139 -42
  228. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +87 -7
  229. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +322 -12
  230. package/template/.cursor/skills/yss-design-system/SKILL.md +2 -2
  231. package/template/.cursor/skills/yss-design-system/references/design-system.md +2 -2
  232. package/template/.cursor/skills/yss-domain/SKILL.md +3 -3
  233. package/template/.cursor/skills/yss-domain/references/domain-layer-guide.md +61 -236
  234. package/template/.cursor/skills/yss-dto/SKILL.md +5 -5
  235. package/template/.cursor/skills/yss-dto/references/README.md +2 -2
  236. package/template/.cursor/skills/yss-dto/references/openapi-wire-profile.yaml +3 -3
  237. package/template/.cursor/skills/yss-exception/SKILL.md +2 -0
  238. package/template/.cursor/skills/yss-formily/SKILL.md +1 -1
  239. package/template/.cursor/skills/yss-mybatis/SKILL.md +2 -2
  240. package/template/.cursor/skills/yss-page-module-development/SKILL.md +2 -0
  241. package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +42 -11
  242. package/template/.cursor/skills/yss-repository/SKILL.md +7 -5
  243. package/template/.cursor/skills/yss-repository/references/infrastructure-layer-guide.md +70 -155
  244. package/template/.cursor/skills/yss-router/references/router-contract.yaml +41 -7
  245. package/template/.cursor/skills/yss-ui/SKILL.md +6 -5
  246. package/template/.cursor/skills/yss-ui/references/component-routing.md +1 -1
  247. package/template/.cursor/skills/yss-ui-business-page-generation/SKILL.md +159 -0
  248. package/template/.cursor/skills/yss-ui-business-page-generation/references/component-map.md +39 -0
  249. package/template/.cursor/skills/yss-ui-business-page-generation/references/hooks-map.md +70 -0
  250. package/template/.cursor/skills/yss-ui-business-page-generation/references/utils-map.md +51 -0
  251. package/template/.cursor/skills/yss-use-table-height/SKILL.md +78 -297
  252. package/template/.cursor/skills/yss-use-tree-height/SKILL.md +51 -393
  253. package/template/.cursor/skills/yss-web-controller/SKILL.md +12 -11
  254. package/template/.cursor/skills/yss-web-controller/assets/templates/Controller.java.template +15 -16
  255. package/template/.cursor/skills/yss-web-controller/assets/templates/WebConvertor.java.template +21 -11
  256. package/template/.cursor/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +19 -0
  257. package/template/.cursor/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +24 -0
  258. package/template/.cursor/skills/yss-web-controller/assets/templates/web/dto/Response.java.template +18 -0
  259. package/template/.cursor/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +19 -0
  260. package/template/.cursor/skills/yss-web-controller/references/web-adapter-layer-guide.md +61 -145
  261. package/template/.cursor/skills/yss-web-controller/scripts/generate_controller.mjs +45 -17
  262. package/template/.cursor/skills/yss-web-controller/scripts/generate_controller.test.mjs +44 -3
  263. package/template/.cursorrules +9 -5
  264. package/template/.gemini/settings.json +8 -0
  265. package/template/.hermes/skills/code-review/references/yss-review-standards.md +3 -3
  266. package/template/.hermes/skills/component-selection-imports/SKILL.md +2 -2
  267. package/template/.hermes/skills/frontend-commit/SKILL.md +1 -1
  268. package/template/.hermes/skills/yss-api-integration/SKILL.md +85 -339
  269. package/template/.hermes/skills/yss-application/SKILL.md +7 -5
  270. package/template/.hermes/skills/yss-application/references/application-layer-guide.md +60 -105
  271. package/template/.hermes/skills/yss-components/SKILL.md +1 -1
  272. package/template/.hermes/skills/yss-ddd-scaffold-generator/SKILL.md +27 -13
  273. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/config/application-local.yml.template +8 -0
  274. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +2 -3
  275. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +36 -0
  276. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/java/bootstrap-application.java.template +15 -0
  277. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/adapter-pom.xml.template +3 -3
  278. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +13 -4
  279. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +24 -4
  280. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/domain-pom.xml.template +6 -20
  281. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/infrastructure-pom.xml.template +26 -6
  282. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +70 -10
  283. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +24 -10
  284. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/maven.config +2 -3
  285. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/settings.xml +18 -105
  286. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.properties +4 -2
  287. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +78 -156
  288. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +83 -389
  289. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +20 -188
  290. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +41 -122
  291. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +191 -0
  292. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +126 -0
  293. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +139 -42
  294. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +87 -7
  295. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +322 -12
  296. package/template/.hermes/skills/yss-design-system/SKILL.md +2 -2
  297. package/template/.hermes/skills/yss-design-system/references/design-system.md +2 -2
  298. package/template/.hermes/skills/yss-domain/SKILL.md +3 -3
  299. package/template/.hermes/skills/yss-domain/references/domain-layer-guide.md +61 -236
  300. package/template/.hermes/skills/yss-dto/SKILL.md +5 -5
  301. package/template/.hermes/skills/yss-dto/references/README.md +2 -2
  302. package/template/.hermes/skills/yss-dto/references/openapi-wire-profile.yaml +3 -3
  303. package/template/.hermes/skills/yss-exception/SKILL.md +2 -0
  304. package/template/.hermes/skills/yss-formily/SKILL.md +1 -1
  305. package/template/.hermes/skills/yss-mybatis/SKILL.md +2 -2
  306. package/template/.hermes/skills/yss-page-module-development/SKILL.md +2 -0
  307. package/template/.hermes/skills/yss-product-lifecycle/references/orchestration-contract.yaml +42 -11
  308. package/template/.hermes/skills/yss-repository/SKILL.md +7 -5
  309. package/template/.hermes/skills/yss-repository/references/infrastructure-layer-guide.md +70 -155
  310. package/template/.hermes/skills/yss-router/references/router-contract.yaml +41 -7
  311. package/template/.hermes/skills/yss-ui/SKILL.md +6 -5
  312. package/template/.hermes/skills/yss-ui/references/component-routing.md +1 -1
  313. package/template/.hermes/skills/yss-ui-business-page-generation/SKILL.md +159 -0
  314. package/template/.hermes/skills/yss-ui-business-page-generation/references/component-map.md +39 -0
  315. package/template/.hermes/skills/yss-ui-business-page-generation/references/hooks-map.md +70 -0
  316. package/template/.hermes/skills/yss-ui-business-page-generation/references/utils-map.md +51 -0
  317. package/template/.hermes/skills/yss-use-table-height/SKILL.md +78 -297
  318. package/template/.hermes/skills/yss-use-tree-height/SKILL.md +51 -393
  319. package/template/.hermes/skills/yss-web-controller/SKILL.md +12 -11
  320. package/template/.hermes/skills/yss-web-controller/assets/templates/Controller.java.template +15 -16
  321. package/template/.hermes/skills/yss-web-controller/assets/templates/WebConvertor.java.template +21 -11
  322. package/template/.hermes/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +19 -0
  323. package/template/.hermes/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +24 -0
  324. package/template/.hermes/skills/yss-web-controller/assets/templates/web/dto/Response.java.template +18 -0
  325. package/template/.hermes/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +19 -0
  326. package/template/.hermes/skills/yss-web-controller/references/web-adapter-layer-guide.md +61 -145
  327. package/template/.hermes/skills/yss-web-controller/scripts/generate_controller.mjs +45 -17
  328. package/template/.hermes/skills/yss-web-controller/scripts/generate_controller.test.mjs +44 -3
  329. package/template/.kiro/settings/mcp.json +8 -0
  330. package/template/.mcp.json +8 -0
  331. package/template/.pi/skills/code-review/references/yss-review-standards.md +3 -3
  332. package/template/.pi/skills/component-selection-imports/SKILL.md +2 -2
  333. package/template/.pi/skills/frontend-commit/SKILL.md +1 -1
  334. package/template/.pi/skills/yss-api-integration/SKILL.md +85 -339
  335. package/template/.pi/skills/yss-application/SKILL.md +7 -5
  336. package/template/.pi/skills/yss-application/references/application-layer-guide.md +60 -105
  337. package/template/.pi/skills/yss-components/SKILL.md +1 -1
  338. package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +27 -13
  339. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/config/application-local.yml.template +8 -0
  340. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +2 -3
  341. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +36 -0
  342. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/java/bootstrap-application.java.template +15 -0
  343. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/adapter-pom.xml.template +3 -3
  344. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +13 -4
  345. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +24 -4
  346. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/domain-pom.xml.template +6 -20
  347. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/infrastructure-pom.xml.template +26 -6
  348. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +70 -10
  349. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +24 -10
  350. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/maven.config +2 -3
  351. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/settings.xml +18 -105
  352. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.properties +4 -2
  353. package/template/.pi/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +78 -156
  354. package/template/.pi/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +83 -389
  355. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +20 -188
  356. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +41 -122
  357. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +191 -0
  358. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +126 -0
  359. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +139 -42
  360. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +87 -7
  361. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +322 -12
  362. package/template/.pi/skills/yss-design-system/SKILL.md +2 -2
  363. package/template/.pi/skills/yss-design-system/references/design-system.md +2 -2
  364. package/template/.pi/skills/yss-domain/SKILL.md +3 -3
  365. package/template/.pi/skills/yss-domain/references/domain-layer-guide.md +61 -236
  366. package/template/.pi/skills/yss-dto/SKILL.md +5 -5
  367. package/template/.pi/skills/yss-dto/references/README.md +2 -2
  368. package/template/.pi/skills/yss-dto/references/openapi-wire-profile.yaml +3 -3
  369. package/template/.pi/skills/yss-exception/SKILL.md +2 -0
  370. package/template/.pi/skills/yss-formily/SKILL.md +1 -1
  371. package/template/.pi/skills/yss-mybatis/SKILL.md +2 -2
  372. package/template/.pi/skills/yss-page-module-development/SKILL.md +2 -0
  373. package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +42 -11
  374. package/template/.pi/skills/yss-repository/SKILL.md +7 -5
  375. package/template/.pi/skills/yss-repository/references/infrastructure-layer-guide.md +70 -155
  376. package/template/.pi/skills/yss-router/references/router-contract.yaml +41 -7
  377. package/template/.pi/skills/yss-ui/SKILL.md +6 -5
  378. package/template/.pi/skills/yss-ui/references/component-routing.md +1 -1
  379. package/template/.pi/skills/yss-ui-business-page-generation/SKILL.md +159 -0
  380. package/template/.pi/skills/yss-ui-business-page-generation/references/component-map.md +39 -0
  381. package/template/.pi/skills/yss-ui-business-page-generation/references/hooks-map.md +70 -0
  382. package/template/.pi/skills/yss-ui-business-page-generation/references/utils-map.md +51 -0
  383. package/template/.pi/skills/yss-use-table-height/SKILL.md +78 -297
  384. package/template/.pi/skills/yss-use-tree-height/SKILL.md +51 -393
  385. package/template/.pi/skills/yss-web-controller/SKILL.md +12 -11
  386. package/template/.pi/skills/yss-web-controller/assets/templates/Controller.java.template +15 -16
  387. package/template/.pi/skills/yss-web-controller/assets/templates/WebConvertor.java.template +21 -11
  388. package/template/.pi/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +19 -0
  389. package/template/.pi/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +24 -0
  390. package/template/.pi/skills/yss-web-controller/assets/templates/web/dto/Response.java.template +18 -0
  391. package/template/.pi/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +19 -0
  392. package/template/.pi/skills/yss-web-controller/references/web-adapter-layer-guide.md +61 -145
  393. package/template/.pi/skills/yss-web-controller/scripts/generate_controller.mjs +45 -17
  394. package/template/.pi/skills/yss-web-controller/scripts/generate_controller.test.mjs +44 -3
  395. package/template/.qoder/skills/code-review/references/yss-review-standards.md +3 -3
  396. package/template/.qoder/skills/component-selection-imports/SKILL.md +2 -2
  397. package/template/.qoder/skills/frontend-commit/SKILL.md +1 -1
  398. package/template/.qoder/skills/yss-api-integration/SKILL.md +85 -339
  399. package/template/.qoder/skills/yss-application/SKILL.md +7 -5
  400. package/template/.qoder/skills/yss-application/references/application-layer-guide.md +60 -105
  401. package/template/.qoder/skills/yss-components/SKILL.md +1 -1
  402. package/template/.qoder/skills/yss-ddd-scaffold-generator/SKILL.md +27 -13
  403. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/config/application-local.yml.template +8 -0
  404. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +2 -3
  405. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +36 -0
  406. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/java/bootstrap-application.java.template +15 -0
  407. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/pom/adapter-pom.xml.template +3 -3
  408. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +13 -4
  409. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +24 -4
  410. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/pom/domain-pom.xml.template +6 -20
  411. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/pom/infrastructure-pom.xml.template +26 -6
  412. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +70 -10
  413. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +24 -10
  414. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/maven.config +2 -3
  415. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/settings.xml +18 -105
  416. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.properties +4 -2
  417. package/template/.qoder/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +78 -156
  418. package/template/.qoder/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +83 -389
  419. package/template/.qoder/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +20 -188
  420. package/template/.qoder/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +41 -122
  421. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +191 -0
  422. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +126 -0
  423. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +139 -42
  424. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +87 -7
  425. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +322 -12
  426. package/template/.qoder/skills/yss-design-system/SKILL.md +2 -2
  427. package/template/.qoder/skills/yss-design-system/references/design-system.md +2 -2
  428. package/template/.qoder/skills/yss-domain/SKILL.md +3 -3
  429. package/template/.qoder/skills/yss-domain/references/domain-layer-guide.md +61 -236
  430. package/template/.qoder/skills/yss-dto/SKILL.md +5 -5
  431. package/template/.qoder/skills/yss-dto/references/README.md +2 -2
  432. package/template/.qoder/skills/yss-dto/references/openapi-wire-profile.yaml +3 -3
  433. package/template/.qoder/skills/yss-exception/SKILL.md +2 -0
  434. package/template/.qoder/skills/yss-formily/SKILL.md +1 -1
  435. package/template/.qoder/skills/yss-mybatis/SKILL.md +2 -2
  436. package/template/.qoder/skills/yss-page-module-development/SKILL.md +2 -0
  437. package/template/.qoder/skills/yss-product-lifecycle/references/orchestration-contract.yaml +42 -11
  438. package/template/.qoder/skills/yss-repository/SKILL.md +7 -5
  439. package/template/.qoder/skills/yss-repository/references/infrastructure-layer-guide.md +70 -155
  440. package/template/.qoder/skills/yss-router/references/router-contract.yaml +41 -7
  441. package/template/.qoder/skills/yss-ui/SKILL.md +6 -5
  442. package/template/.qoder/skills/yss-ui/references/component-routing.md +1 -1
  443. package/template/.qoder/skills/yss-ui-business-page-generation/SKILL.md +159 -0
  444. package/template/.qoder/skills/yss-ui-business-page-generation/references/component-map.md +39 -0
  445. package/template/.qoder/skills/yss-ui-business-page-generation/references/hooks-map.md +70 -0
  446. package/template/.qoder/skills/yss-ui-business-page-generation/references/utils-map.md +51 -0
  447. package/template/.qoder/skills/yss-use-table-height/SKILL.md +78 -297
  448. package/template/.qoder/skills/yss-use-tree-height/SKILL.md +51 -393
  449. package/template/.qoder/skills/yss-web-controller/SKILL.md +12 -11
  450. package/template/.qoder/skills/yss-web-controller/assets/templates/Controller.java.template +15 -16
  451. package/template/.qoder/skills/yss-web-controller/assets/templates/WebConvertor.java.template +21 -11
  452. package/template/.qoder/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +19 -0
  453. package/template/.qoder/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +24 -0
  454. package/template/.qoder/skills/yss-web-controller/assets/templates/web/dto/Response.java.template +18 -0
  455. package/template/.qoder/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +19 -0
  456. package/template/.qoder/skills/yss-web-controller/references/web-adapter-layer-guide.md +61 -145
  457. package/template/.qoder/skills/yss-web-controller/scripts/generate_controller.mjs +45 -17
  458. package/template/.qoder/skills/yss-web-controller/scripts/generate_controller.test.mjs +44 -3
  459. package/template/.trae/skills/code-review/references/yss-review-standards.md +3 -3
  460. package/template/.trae/skills/component-selection-imports/SKILL.md +2 -2
  461. package/template/.trae/skills/frontend-commit/SKILL.md +1 -1
  462. package/template/.trae/skills/yss-api-integration/SKILL.md +85 -339
  463. package/template/.trae/skills/yss-application/SKILL.md +7 -5
  464. package/template/.trae/skills/yss-application/references/application-layer-guide.md +60 -105
  465. package/template/.trae/skills/yss-components/SKILL.md +1 -1
  466. package/template/.trae/skills/yss-ddd-scaffold-generator/SKILL.md +27 -13
  467. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/config/application-local.yml.template +8 -0
  468. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +2 -3
  469. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +36 -0
  470. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/java/bootstrap-application.java.template +15 -0
  471. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/pom/adapter-pom.xml.template +3 -3
  472. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +13 -4
  473. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +24 -4
  474. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/pom/domain-pom.xml.template +6 -20
  475. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/pom/infrastructure-pom.xml.template +26 -6
  476. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +70 -10
  477. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +24 -10
  478. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/maven.config +2 -3
  479. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/settings.xml +18 -105
  480. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.properties +4 -2
  481. package/template/.trae/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +78 -156
  482. package/template/.trae/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +83 -389
  483. package/template/.trae/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +20 -188
  484. package/template/.trae/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +41 -122
  485. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +191 -0
  486. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +126 -0
  487. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +139 -42
  488. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +87 -7
  489. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +322 -12
  490. package/template/.trae/skills/yss-design-system/SKILL.md +2 -2
  491. package/template/.trae/skills/yss-design-system/references/design-system.md +2 -2
  492. package/template/.trae/skills/yss-domain/SKILL.md +3 -3
  493. package/template/.trae/skills/yss-domain/references/domain-layer-guide.md +61 -236
  494. package/template/.trae/skills/yss-dto/SKILL.md +5 -5
  495. package/template/.trae/skills/yss-dto/references/README.md +2 -2
  496. package/template/.trae/skills/yss-dto/references/openapi-wire-profile.yaml +3 -3
  497. package/template/.trae/skills/yss-exception/SKILL.md +2 -0
  498. package/template/.trae/skills/yss-formily/SKILL.md +1 -1
  499. package/template/.trae/skills/yss-mybatis/SKILL.md +2 -2
  500. package/template/.trae/skills/yss-page-module-development/SKILL.md +2 -0
  501. package/template/.trae/skills/yss-product-lifecycle/references/orchestration-contract.yaml +42 -11
  502. package/template/.trae/skills/yss-repository/SKILL.md +7 -5
  503. package/template/.trae/skills/yss-repository/references/infrastructure-layer-guide.md +70 -155
  504. package/template/.trae/skills/yss-router/references/router-contract.yaml +41 -7
  505. package/template/.trae/skills/yss-ui/SKILL.md +6 -5
  506. package/template/.trae/skills/yss-ui/references/component-routing.md +1 -1
  507. package/template/.trae/skills/yss-ui-business-page-generation/SKILL.md +159 -0
  508. package/template/.trae/skills/yss-ui-business-page-generation/references/component-map.md +39 -0
  509. package/template/.trae/skills/yss-ui-business-page-generation/references/hooks-map.md +70 -0
  510. package/template/.trae/skills/yss-ui-business-page-generation/references/utils-map.md +51 -0
  511. package/template/.trae/skills/yss-use-table-height/SKILL.md +78 -297
  512. package/template/.trae/skills/yss-use-tree-height/SKILL.md +51 -393
  513. package/template/.trae/skills/yss-web-controller/SKILL.md +12 -11
  514. package/template/.trae/skills/yss-web-controller/assets/templates/Controller.java.template +15 -16
  515. package/template/.trae/skills/yss-web-controller/assets/templates/WebConvertor.java.template +21 -11
  516. package/template/.trae/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +19 -0
  517. package/template/.trae/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +24 -0
  518. package/template/.trae/skills/yss-web-controller/assets/templates/web/dto/Response.java.template +18 -0
  519. package/template/.trae/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +19 -0
  520. package/template/.trae/skills/yss-web-controller/references/web-adapter-layer-guide.md +61 -145
  521. package/template/.trae/skills/yss-web-controller/scripts/generate_controller.mjs +45 -17
  522. package/template/.trae/skills/yss-web-controller/scripts/generate_controller.test.mjs +44 -3
  523. package/template/.vscode/mcp.json +8 -0
  524. package/template/README.md +3 -0
  525. package/template/docs/agents/digital-human-roles.yaml +1 -1
  526. package/template/docs/agents/skills-maintenance.md +7 -4
  527. package/template/docs/agents/yss-skill-registry.yaml +7 -1
  528. package/template/docs/agents/yss-ui-skills-integration.md +24 -0
  529. package/template/docs/process/template-verification-profiles.yaml +11 -0
  530. package/template/docs/templates/implementation-routing-template.md +5 -3
  531. package/template/docs/templates/review-report-template.md +2 -2
  532. package/template/docs/user-guide/yss-ui-mcp.md +43 -0
  533. package/template/scripts/lib/scenario-checks.mjs +3 -3
  534. package/template/scripts/lib/skill-governance.mjs +36 -2
  535. package/template/scripts/lib/skill-registry.mjs +2 -1
  536. package/template/scripts/lib/skill-supply-chain.mjs +72 -1
  537. package/template/scripts/verify-scaffold-generator-scenarios +150 -44
  538. package/template/scripts/verify-skill-governance +1 -1
  539. package/template/scripts/verify-upstream-skill-source +38 -3
  540. package/template/scripts/verify-yss-dto-openapi-profile +4 -2
  541. package/template/skills-lock.json +159 -84
  542. package/template/yss-public-skills.json +2 -0
  543. package/template.manifest.json +4 -0
  544. package/template.snapshot.json +5 -5
  545. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/config/parent-pom.xml.template +0 -84
  546. package/template/.agents/skills/yss-web-controller/assets/templates/domain/dto/cmd/UpdateCmd.java.template +0 -23
  547. package/template/.agents/skills/yss-web-controller/assets/templates/domain/dto/query/PageQuery.java.template +0 -21
  548. package/template/.agents/skills/yss-web-controller/assets/templates/domain/vo/VO.java.template +0 -20
  549. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/config/parent-pom.xml.template +0 -84
  550. package/template/.claude/skills/yss-web-controller/assets/templates/domain/dto/cmd/UpdateCmd.java.template +0 -23
  551. package/template/.claude/skills/yss-web-controller/assets/templates/domain/dto/query/PageQuery.java.template +0 -21
  552. package/template/.claude/skills/yss-web-controller/assets/templates/domain/vo/VO.java.template +0 -20
  553. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/config/parent-pom.xml.template +0 -84
  554. package/template/.codex/skills/yss-web-controller/assets/templates/domain/dto/cmd/UpdateCmd.java.template +0 -23
  555. package/template/.codex/skills/yss-web-controller/assets/templates/domain/dto/query/PageQuery.java.template +0 -21
  556. package/template/.codex/skills/yss-web-controller/assets/templates/domain/vo/VO.java.template +0 -20
  557. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/config/parent-pom.xml.template +0 -84
  558. package/template/.cursor/skills/yss-web-controller/assets/templates/domain/dto/cmd/UpdateCmd.java.template +0 -23
  559. package/template/.cursor/skills/yss-web-controller/assets/templates/domain/dto/query/PageQuery.java.template +0 -21
  560. package/template/.cursor/skills/yss-web-controller/assets/templates/domain/vo/VO.java.template +0 -20
  561. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/config/parent-pom.xml.template +0 -84
  562. package/template/.hermes/skills/yss-web-controller/assets/templates/domain/dto/cmd/AddCmd.java.template +0 -23
  563. package/template/.hermes/skills/yss-web-controller/assets/templates/domain/dto/cmd/UpdateCmd.java.template +0 -23
  564. package/template/.hermes/skills/yss-web-controller/assets/templates/domain/dto/query/PageQuery.java.template +0 -21
  565. package/template/.hermes/skills/yss-web-controller/assets/templates/domain/vo/VO.java.template +0 -20
  566. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/config/parent-pom.xml.template +0 -84
  567. package/template/.pi/skills/yss-web-controller/assets/templates/domain/dto/cmd/AddCmd.java.template +0 -23
  568. package/template/.pi/skills/yss-web-controller/assets/templates/domain/dto/cmd/UpdateCmd.java.template +0 -23
  569. package/template/.pi/skills/yss-web-controller/assets/templates/domain/dto/query/PageQuery.java.template +0 -21
  570. package/template/.pi/skills/yss-web-controller/assets/templates/domain/vo/VO.java.template +0 -20
  571. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/config/parent-pom.xml.template +0 -84
  572. package/template/.qoder/skills/yss-web-controller/assets/templates/domain/dto/cmd/AddCmd.java.template +0 -23
  573. package/template/.qoder/skills/yss-web-controller/assets/templates/domain/dto/cmd/UpdateCmd.java.template +0 -23
  574. package/template/.qoder/skills/yss-web-controller/assets/templates/domain/dto/query/PageQuery.java.template +0 -21
  575. package/template/.qoder/skills/yss-web-controller/assets/templates/domain/vo/VO.java.template +0 -20
  576. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/config/parent-pom.xml.template +0 -84
  577. package/template/.trae/skills/yss-web-controller/assets/templates/domain/dto/cmd/AddCmd.java.template +0 -23
  578. package/template/.trae/skills/yss-web-controller/assets/templates/domain/dto/cmd/UpdateCmd.java.template +0 -23
  579. package/template/.trae/skills/yss-web-controller/assets/templates/domain/dto/query/PageQuery.java.template +0 -21
  580. package/template/.trae/skills/yss-web-controller/assets/templates/domain/vo/VO.java.template +0 -20
@@ -0,0 +1,19 @@
1
+ package ${base_package}.rest.dto.request;
2
+
3
+ import com.yss.cloud.dto.CommandDTO;
4
+ import lombok.Getter;
5
+ import lombok.Setter;
6
+ import ${validation_namespace}.validation.constraints.NotBlank;
7
+ import ${validation_namespace}.validation.constraints.NotNull;
8
+ import java.util.Date;
9
+ import java.math.BigDecimal;
10
+ import java.time.LocalDateTime;
11
+ import java.time.LocalDate;
12
+
13
+ /** ${domain_desc}新增请求。字段来自批准的 OpenAPI allowlist。 */
14
+ @Getter
15
+ @Setter
16
+ public class ${domain_class}CreateRequest extends CommandDTO {
17
+
18
+ ${field_declarations}
19
+ }
@@ -0,0 +1,24 @@
1
+ package ${base_package}.rest.dto.request;
2
+
3
+ import com.yss.cloud.dto.QueryDTO;
4
+ import lombok.Getter;
5
+ import lombok.Setter;
6
+ import java.util.Date;
7
+ import java.math.BigDecimal;
8
+ import java.time.LocalDateTime;
9
+ import java.time.LocalDate;
10
+
11
+ /**
12
+ * ${domain_desc}分页请求。仅暴露已冻结的 HTTP 查询字段。
13
+ */
14
+ @Getter
15
+ @Setter
16
+ public class ${domain_class}PageRequest extends QueryDTO {
17
+ private int pageIndex = 1;
18
+ private int pageSize = 20;
19
+ private String orderBy;
20
+ private String orderDirection;
21
+ private String groupBy;
22
+
23
+ ${field_declarations}
24
+ }
@@ -0,0 +1,18 @@
1
+ package ${base_package}.rest.dto.response;
2
+
3
+ import lombok.Getter;
4
+ import lombok.Setter;
5
+ import java.io.Serializable;
6
+ import java.util.Date;
7
+ import java.math.BigDecimal;
8
+ import java.time.LocalDateTime;
9
+ import java.time.LocalDate;
10
+
11
+ /** ${domain_desc}公开响应。字段来自批准的 OpenAPI allowlist。 */
12
+ @Getter
13
+ @Setter
14
+ public class ${domain_class}Response implements Serializable {
15
+ private static final long serialVersionUID = 1L;
16
+
17
+ ${field_declarations}
18
+ }
@@ -0,0 +1,19 @@
1
+ package ${base_package}.rest.dto.request;
2
+
3
+ import com.yss.cloud.dto.CommandDTO;
4
+ import lombok.Getter;
5
+ import lombok.Setter;
6
+ import ${validation_namespace}.validation.constraints.NotBlank;
7
+ import ${validation_namespace}.validation.constraints.NotNull;
8
+ import java.util.Date;
9
+ import java.math.BigDecimal;
10
+ import java.time.LocalDateTime;
11
+ import java.time.LocalDate;
12
+
13
+ /** ${domain_desc}更新请求。字段来自批准的 OpenAPI allowlist。 */
14
+ @Getter
15
+ @Setter
16
+ public class ${domain_class}UpdateRequest extends CommandDTO {
17
+
18
+ ${field_declarations}
19
+ }
@@ -1,168 +1,84 @@
1
- 本技能为开发 YSS 服务的**Web 适配器层**(REST API)提供指导和框架。
2
- Web 适配器负责通过 HTTP 公开业务功能、处理输入验证和格式化响应。
1
+ # YSS Web Adapter Target Profile 指南
3
2
 
4
- ## 1. 核心职责 (Core Responsibilities)
3
+ Web Adapter 负责 HTTP 边界、Wire DTO、校验、YSS Result 包装、WebConvertor 和异常翻译。它只调用 Application,不直接访问 Domain Gateway、Repository 或 PO。
5
4
 
6
- - **Request Handling**: Map HTTP requests (GET, POST, PUT, DELETE) to Java methods.
7
- - **Input Validation**: Validate request bodies and parameters using JSR-303/380 annotations (`@Valid`, `@NotNull`, etc.).
8
- - **Response Formatting**: Wrap business results into standard `Result` objects (`SingleResult`, `PageResult`, `MultiResult`).
9
- - **Orchestration Delegation**: Delegate business logic to the **Application Service**. Simple queries can be delegated directly to the **Domain Gateway** (CQRS pattern).
10
-
11
- ## 2. 代码结构 (Code Structure)
12
-
13
- Web Adapters are typically located in the `bootstrap` module or a dedicated `web` module.
5
+ ## 1. 包结构
14
6
 
7
+ ```text
8
+ {base_package}.rest
9
+ ├── dto
10
+ │ ├── request
11
+ │ └── response
12
+ ├── convertor
13
+ ├── exception
14
+ └── *Controller.java
15
15
  ```
16
- com.yss.{module}.rest
17
- ├── {Domain}Controller.java # Main REST Controller
18
- └── {Domain}ReportController.java # Optional: For reporting/stats APIs
19
- ```
20
-
21
- ## 3. 开发规范 (Development Guidelines)
22
-
23
- ### 3.1 Controller 定义
24
-
25
- - **注解**: 使用 `@RestController`。
26
- - **路径**: `@RequestMapping("/api/{module}/{domain}")` (e.g., `/api/quality/rule`).
27
- - **依赖注入**: 使用 Lombok `@RequiredArgsConstructor` 进行构造器注入。
28
- - **命名**: `{Domain}Controller` (e.g., `QualityRuleController`).
29
-
30
- ### 3.2 依赖注入原则
31
16
 
32
- - **写操作/复杂逻辑**: 必须注入 **Application Service** (`XxxService`)。
33
- - **读操作 (Query)**: 允许直接注入 **Domain Gateway** (`XxxGateway`) 以减少样板代码 (CQRS)。
17
+ DTO 固定属于 Web module。独立 client module 与把 client DTO 放进 Domain module 均为 `unsupported`;如未来确需发布复用制品,必须另行设计并批准新的 Target Profile,不能由当前脚手架推断或回退。
34
18
 
35
- ### 3.3 参数与响应
19
+ ## 2. Wire 合同
36
20
 
37
- - **Command (写)**: 使用 `@PostMapping`/`@PutMapping` + `@RequestBody` + `{Domain}Cmd` 对象。
38
- - **Query (读)**: 使用 `@PostMapping` (for complex search) + `@RequestBody` + `{Domain}Page/Query` 对象。
39
- - **Wrapper**:
40
- - `SingleResult<T>`: 单个对象或基本类型。
41
- - `MultiResult<T>`: 列表。
42
- - `PageResult<T>`: 分页数据。
43
- - **Validation**: 必须在参数前添加 `@Valid` 注解。
21
+ - Request/Response 字段必须来自冻结 OpenAPI 和批准 allowlist。
22
+ - 数据库 metadata 只补充 Java 类型候选,不能自行扩大公开字段。
23
+ - Web Page Request 不继承含内部协作字段的 `PageQuery`;只暴露批准的 `pageIndex/pageSize/orderBy/orderDirection/groupBy` 及业务查询字段。
24
+ - `orderBy` / `groupBy` 必须在 Application/Infrastructure 映射到数据库列白名单。
25
+ - `offset`、`needTotalCount`、`tempTotalCount` 禁止进入 HTTP 绑定面。
44
26
 
45
- ### 3.4 异常处理
46
-
47
- - **不要**在 Controller 中捕获通用异常 (`Exception`)。
48
- - 让全局异常处理器 (`GlobalExceptionHandler`) 统一处理运行时异常。
49
- - 仅在需要特定 HTTP 状态码转换时捕获特定异常。
50
-
51
- ## 4. 代码示例 (Code Examples)
52
-
53
- ### 4.1 标准 CRUD Controller
27
+ ## 3. Controller
54
28
 
55
29
  ```java
56
- package com.yss.{module}.rest;
57
-
58
- import com.yss.cloud.dto.result.MultiResult;
59
- import com.yss.cloud.dto.result.PageResult;
60
- import com.yss.cloud.dto.result.SingleResult;
61
- import com.yss.{module}.client.dto.cmd.{Domain}AddCmd;
62
- import com.yss.{module}.client.dto.cmd.{Domain}UpdateCmd;
63
- import com.yss.{module}.client.dto.cmd.{Domain}StatusCmd;
64
- import com.yss.{module}.client.dto.query.{Domain}Page;
65
- import com.yss.{module}.client.vo.{Domain}VO;
66
- import com.yss.{module}.core.service.{Domain}Service;
67
- // Optional: Import Gateway for direct queries
68
- // import com.yss.{module}.domain.gateway.{Domain}Gateway;
69
- import lombok.RequiredArgsConstructor;
70
- import org.springframework.web.bind.annotation.*;
71
-
72
- import javax.validation.Valid;
73
-
74
- /**
75
- * {Domain} 管理控制器
76
- *
77
- * @author {User}
78
- */
79
30
  @RestController
80
- @RequestMapping("/api/{module}/{domain-path}")
31
+ @RequestMapping("/api/quality/quality-rule")
81
32
  @RequiredArgsConstructor
82
- public class {Domain}Controller {
83
-
84
- private final {Domain}Service {domainVar}Service;
85
- // private final {Domain}Gateway {domainVar}Gateway; // For CQRS if needed
86
-
87
- /**
88
- * 分页查询 {Domain}
89
- *
90
- * @param query 查询条件
91
- * @return 分页结果
92
- */
93
- @PostMapping("/page")
94
- public PageResult<{Domain}VO> page(@Valid @RequestBody {Domain}Page query) {
95
- return {domainVar}Service.page(query);
96
- }
97
-
98
- /**
99
- * 根据ID查询详情
100
- *
101
- * @param id 主键ID
102
- * @return 详情对象
103
- */
104
- @GetMapping("/detail/{id}")
105
- public SingleResult<{Domain}VO> detail(@PathVariable String id) {
106
- return SingleResult.of({domainVar}Service.detail(id));
107
- }
33
+ @Tag(name = "质量规则管理")
34
+ public class QualityRuleController {
35
+ private final QualityRuleService service;
36
+ private final QualityRuleWebConvertor webConvertor;
108
37
 
109
- /**
110
- * 新增 {Domain}
111
- *
112
- * @param cmd 新增命令
113
- * @return 新增结果 (通常是ID或完整对象)
114
- */
115
38
  @PostMapping
116
- public SingleResult<Long> add(@Valid @RequestBody {Domain}AddCmd cmd) {
117
- return SingleResult.of({domainVar}Service.add(cmd));
118
- }
119
-
120
- /**
121
- * 更新 {Domain}
122
- *
123
- * @param cmd 更新命令
124
- * @return 更新结果
125
- */
126
- @PutMapping
127
- public SingleResult<Boolean> update(@Valid @RequestBody {Domain}UpdateCmd cmd) {
128
- {domainVar}Service.update(cmd);
129
- return SingleResult.of(true);
130
- }
131
-
132
- /**
133
- * 状态变更 (启用/禁用)
134
- *
135
- * @param cmd 状态命令
136
- * @return 变更后的状态
137
- */
138
- @PostMapping("/enabled")
139
- public SingleResult<Integer> switchStatus(@Valid @RequestBody {Domain}StatusCmd cmd) {
140
- {domainVar}Service.switchStatus(cmd);
141
- return SingleResult.of(cmd.getStatus());
39
+ public SingleResult<Long> create(@Valid @RequestBody QualityRuleCreateRequest request) {
40
+ return SingleResult.of(service.create(webConvertor.toCreateCommand(request)));
142
41
  }
143
42
  }
144
43
  ```
145
44
 
146
- ### 4.2 复杂业务操作示例
45
+ - 只使用 OpenAPI 3 `io.swagger.v3.oas.annotations`;Swagger 2 为 `unsupported`,不存在 legacy Profile。
46
+ - Controller 不捕获通用 `Exception`,不写业务规则,不手工执行持久化分页。
47
+ - Controller seam 只出现 Web Request/Response 和 Application Service。
48
+
49
+ ## 4. WebConvertor
147
50
 
148
51
  ```java
149
- /**
150
- * 执行业务操作 (e.g. 立即运行检查)
151
- *
152
- * @param cmd 执行命令
153
- * @return 执行结果ID
154
- */
155
- @PostMapping("/execute")
156
- public SingleResult<String> execute(@Valid @RequestBody {Domain}ExecuteCmd cmd) {
157
- // 调用 Service 处理复杂业务逻辑
158
- return SingleResult.of(
159
- {domainVar}Service.execute(cmd)
160
- );
161
- }
52
+ @Mapper(componentModel = "spring")
53
+ public interface QualityRuleWebConvertor {
54
+ QualityRuleCreateCommand toCreateCommand(QualityRuleCreateRequest source);
55
+ QualityRuleResponse toResponse(QualityRuleResult source);
56
+ }
162
57
  ```
163
58
 
164
- ## 5. 阶段 7 合同
59
+ - 使用构造器注入,不定义静态 `INSTANCE`。
60
+ - Request → Application Command/Query;Application Result → Response。
61
+ - 不导入 Domain Model 或 Repository PO。
62
+ - 父 POM 必须配置 MapStruct processor、Lombok 与 `lombok-mapstruct-binding`,验证生成实现真实编译。
63
+
64
+ ## 5. Exception Translator
65
+
66
+ - Domain/Application 错误经专门 Translator 映射为冻结 API 的 HTTP status、YSS error code 和消毒后的公开消息。
67
+ - known business、known system、unknown/runtime 三类都必须有 MockMvc/HTTP contract test。
68
+ - unknown/runtime 保留内部 cause/stack 用于日志,但公开响应禁止返回 `getLocalizedMessage()`。
69
+ - 复用 YSS global handler 前必须实测 auto-configuration 和 precedence;未经验证不能仅凭依赖存在宣称生效。
70
+
71
+ ## 6. 生成门禁
72
+
73
+ - `generate_controller.mjs` 必须消费 `status=approved` 的 Web generation contract。
74
+ - 合同必须声明 `base_package`、`module_name`、`domain_segment`、`target-domain-model`、平台/validation Profile、`dto_placement=web`、OpenAPI Freeze 引用和每张表的 create/update/query/response allowlist;CLI 身份必须逐项匹配。
75
+ - 生成器是 initialize-only,必须在写入前规划全部目标;任一文件已存在或传入 `--force` 时整体阻断,不允许“跳过已有文件后继续生成”的部分成功。
76
+ - 权限、校验语义、异常行为和复杂查询仍使用 `behavior-tdd`,不能由 metadata 猜测。
77
+
78
+ ## 7. 验证
165
79
 
166
- - 只消费冻结 OpenAPI/no-impact record 和批准合同;Controller 不得穿透 Application/Domain 边界。
167
- - Controller/DTO/Convertor 骨架可受控生成;权限、校验、错误映射和接口行为使用 `behavior-tdd`。
168
- - 返回统一 `YSS Skill Execution Result`,包含代码、契约/API 测试、实际验证和新增 API/权限影响。
80
+ - Controller 只依赖 Application。
81
+ - WebConvertor 无 Domain/Infrastructure import,并由 Spring 注入。
82
+ - Wire forbidden fields 无法绑定。
83
+ - OpenAPI 3 注解、YSS Result wrapper、Validation namespace 与平台 Profile 一致。
84
+ - 执行项目根 `./mvnw test/package`,并保留 HTTP/serialization/exception 证据。
@@ -4,18 +4,22 @@ import path from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
 
6
6
  const TYPE_MAPPING = { bigint: "Long", int: "Integer", integer: "Integer", smallint: "Integer", tinyint: "Integer", number: "Long", numeric: "BigDecimal", decimal: "BigDecimal", float: "Float", double: "Double", real: "Float", varchar: "String", varchar2: "String", nvarchar2: "String", char: "String", nchar: "String", text: "String", clob: "String", nclob: "String", date: "LocalDateTime", datetime: "LocalDateTime", timestamp: "LocalDateTime", "timestamp with time zone": "LocalDateTime", boolean: "Boolean", bool: "Boolean", bit: "Boolean", json: "String", jsonb: "String", uuid: "String" };
7
- const required = ["metadata-file", "base-package", "module-name", "domain-segment"];
8
- const valued = new Set([...required, "output-dir", "domain-project-dir", "web-project-dir", "domain-output-dir", "web-output-dir", "author", "application-service-package", "validation-namespace"]);
7
+ const PLATFORM_VALIDATION_NAMESPACES = {
8
+ "spring-boot-2.7-jdk8": "javax",
9
+ "spring-boot-3-jdk17": "jakarta"
10
+ };
11
+ const required = ["metadata-file", "contract-file", "base-package", "module-name", "domain-segment"];
12
+ const valued = new Set([...required, "output-dir", "web-project-dir", "web-output-dir", "author", "application-service-package", "validation-namespace"]);
9
13
 
10
14
  function usage() {
11
- return "Usage: node generate_controller.mjs --metadata-file FILE --base-package PACKAGE --module-name NAME --domain-segment SEGMENT [--output-dir DIR] [--domain-project-dir DIR] [--web-project-dir DIR] [--domain-output-dir DIR] [--web-output-dir DIR] [--author NAME] [--force] [--application-service-package PACKAGE] [--validation-namespace javax|jakarta]";
15
+ return "Usage: node generate_controller.mjs --metadata-file FILE --contract-file FILE --base-package PACKAGE --module-name NAME --domain-segment SEGMENT [--output-dir DIR] [--web-project-dir DIR] [--web-output-dir DIR] [--author NAME] [--application-service-package PACKAGE] [--validation-namespace javax|jakarta]";
12
16
  }
13
17
  export function parseArgs(argv) {
14
18
  const args = { "output-dir": "./output", author: "System", "validation-namespace": "javax", force: false };
15
19
  for (let index = 0; index < argv.length; index += 1) {
16
20
  const token = argv[index];
17
21
  if (token === "--help" || token === "-h") return { help: true };
18
- if (token === "--force") { args.force = true; continue; }
22
+ if (token === "--force") throw new Error("unsupported: initialize-only Web 生成禁止 --force、已有目标覆盖和旧项目迁移");
19
23
  if (!token.startsWith("--") || !valued.has(token.slice(2))) throw new Error(`unrecognized argument: ${token}`);
20
24
  const value = argv[++index];
21
25
  if (!value || value.startsWith("--")) throw new Error(`argument ${token} requires a value`);
@@ -32,9 +36,11 @@ const packagePath = (value) => value.replaceAll(".", path.sep);
32
36
  const ensureSubdir = (root, name) => path.basename(path.normalize(root)) === name ? root : path.join(root, name);
33
37
  const javaType = (sqlType = "") => TYPE_MAPPING[sqlType.toLowerCase().split("(")[0]] || "String";
34
38
 
35
- function fields(columns, { skipPk = false, command = false, skipAudit = true } = {}) {
36
- const audit = new Set(["create_time", "update_time", "create_by", "update_by", "deleted", "version"]);
37
- return columns.filter((column) => !(skipPk && column.primary) && !(skipAudit && audit.has(String(column.name).toLowerCase()))).map((column) => {
39
+ function fields(columns, selected, { command = false } = {}) {
40
+ const byName = new Map(columns.map((column) => [String(column.name), column]));
41
+ return selected.map((field) => {
42
+ const column = byName.get(field);
43
+ if (!column) throw new Error(`approved field is absent from metadata: ${field}`);
38
44
  const type = javaType(column.sql_type);
39
45
  const name = lowerCamel(column.name);
40
46
  const comment = column.comment || "";
@@ -48,30 +54,52 @@ async function exists(target) { try { await access(target); return true; } catch
48
54
 
49
55
  export async function generate(args, logger = console) {
50
56
  if (!await exists(args["metadata-file"])) throw new Error(`Metadata file not found: ${args["metadata-file"]}`);
57
+ if (!await exists(args["contract-file"])) throw new Error(`Contract file not found: ${args["contract-file"]}`);
51
58
  let metadata;
52
59
  try { metadata = JSON.parse(await readFile(args["metadata-file"], "utf8")); } catch (error) { throw new Error(`Error reading metadata file: ${error.message}`); }
60
+ let contract;
61
+ try { contract = JSON.parse(await readFile(args["contract-file"], "utf8")); } catch (error) { throw new Error(`Error reading contract file: ${error.message}`); }
62
+ if (contract.schema_version !== 1 || contract.status !== "approved") throw new Error("web generation contract must be schema_version=1 and approved");
63
+ if (contract.architecture_profile !== "target-domain-model" || contract.dto_placement !== "web") throw new Error("web generation only supports target-domain-model with dto_placement=web");
64
+ if (!contract.openapi_freeze_ref || !contract.fields || typeof contract.fields !== "object") throw new Error("approved web generation contract requires openapi_freeze_ref and fields");
65
+ if (!contract.base_package || !contract.module_name || !contract.domain_segment) throw new Error("approved web generation contract requires base_package, module_name, and domain_segment");
66
+ if (contract.base_package !== args["base-package"] || contract.module_name !== args["module-name"] || contract.domain_segment !== args["domain-segment"]) throw new Error("CLI generation identity does not match the approved web generation contract");
67
+ if (!(contract.platform_profile in PLATFORM_VALIDATION_NAMESPACES)) throw new Error("unsupported platform_profile in approved web generation contract");
68
+ if (PLATFORM_VALIDATION_NAMESPACES[contract.platform_profile] !== contract.validation_namespace) throw new Error("platform_profile and validation_namespace are inconsistent");
69
+ if (contract.validation_namespace !== args["validation-namespace"]) throw new Error("--validation-namespace must match the approved web generation contract");
53
70
  const tables = metadata.tables || [];
54
71
  if (!tables.length) { logger.warn("Warning: No tables found in metadata."); return []; }
55
72
  const scriptDir = path.dirname(fileURLToPath(import.meta.url));
56
73
  const templatesDir = path.resolve(scriptDir, "../assets/templates");
57
74
  const template = async (name) => { const target = path.join(templatesDir, name); if (!await exists(target)) throw new Error(`Template not found: ${target}`); return readFile(target, "utf8"); };
58
- const templates = Object.fromEntries(await Promise.all(["Controller.java.template", "WebConvertor.java.template", "domain/vo/VO.java.template", "domain/dto/cmd/AddCmd.java.template", "domain/dto/cmd/UpdateCmd.java.template", "domain/dto/query/PageQuery.java.template"].map(async (name) => [name, await template(name)])));
75
+ const templateNames = ["Controller.java.template", "WebConvertor.java.template", "web/dto/Response.java.template", "web/dto/CreateRequest.java.template", "web/dto/UpdateRequest.java.template", "web/dto/PageRequest.java.template"];
76
+ const templates = Object.fromEntries(await Promise.all(templateNames.map(async (name) => [name, await template(name)])));
59
77
  const basePath = packagePath(args["base-package"]);
60
- const domainBase = args["domain-output-dir"] || (args["domain-project-dir"] ? path.join(args["domain-project-dir"], "src", "main", "java", basePath) : path.join(args["output-dir"], basePath));
61
78
  const webBase = args["web-output-dir"] || (args["web-project-dir"] ? path.join(args["web-project-dir"], "src", "main", "java", basePath) : path.join(args["output-dir"], basePath));
62
- const domainRoot = ensureSubdir(domainBase, "client");
63
79
  const webRoot = ensureSubdir(webBase, "rest");
64
- const written = [];
65
- const write = async (target, contents) => { await mkdir(path.dirname(target), { recursive: true }); if (!await exists(target) || args.force) { await writeFile(target, contents, "utf8"); logger.log(`Generated: ${target}`); written.push(target); } else logger.log(`Skipped (exists): ${target}`); };
80
+ const planned = [];
81
+ const plan = (target, contents) => planned.push({ target, contents });
66
82
  for (const table of tables) {
67
83
  const domainClass = pascal(table.table_name); const domainVar = lowerCamel(table.table_name); const domainDesc = String(table.table_comment || domainClass).trim().replaceAll("\n", " ");
84
+ const approvedFields = contract.fields[table.table_name];
85
+ if (!approvedFields || ["create", "update", "query", "response"].some((name) => !Array.isArray(approvedFields[name]))) throw new Error(`approved web field contract is missing for table: ${table.table_name}`);
68
86
  const applicationPackage = args["application-service-package"] || `${args["base-package"]}.application.service`;
69
- const context = { base_package: args["base-package"], module_name: args["module-name"], domain_class: domainClass, domain_var: domainVar, domain_desc: domainDesc, domain_url_path: kebab(table.table_name), domain_pkg_name: args["domain-segment"], author: args.author, dto_imports: [`import ${args["base-package"]}.client.dto.cmd.${domainClass}AddCmd;`, `import ${args["base-package"]}.client.dto.cmd.${domainClass}UpdateCmd;`, `import ${args["base-package"]}.client.dto.query.${domainClass}PageQuery;`, `import ${args["base-package"]}.client.vo.${domainClass}VO;`].join("\n"), application_service_import: `import ${applicationPackage}.${domainClass}Service;`, domain_import: `import ${args["base-package"]}.domain.${args["domain-segment"]}.model.${domainClass};`, web_convertor_import: `import ${args["base-package"]}.rest.convertor.${domainClass}WebConvertor;`, web_convertor_class: `${domainClass}WebConvertor`, application_service_field: `private final ${domainClass}Service ${domainVar}Service;`, query_call: `${domainVar}Service.page(query)`, detail_call: `${domainVar}Service.detail(id)`, add_call: `${domainVar}Service.add(cmd)`, update_call: `${domainVar}Service.update(cmd)`, delete_call: `${domainVar}Service.delete(id)`, vo_class: `${domainClass}VO`, add_cmd_class: `${domainClass}AddCmd`, update_cmd_class: `${domainClass}UpdateCmd`, query_class: `${domainClass}PageQuery`, validation_namespace: args["validation-namespace"] };
70
- await write(path.join(webRoot, `${domainClass}Controller.java`), render(templates["Controller.java.template"], context));
71
- await write(path.join(webRoot, "convertor", `${domainClass}WebConvertor.java`), render(templates["WebConvertor.java.template"], context));
72
- for (const [templateName, target, declaration] of [["domain/vo/VO.java.template", path.join(domainRoot, "vo", `${domainClass}VO.java`), fields(table.columns || [], { skipAudit: false })], ["domain/dto/cmd/AddCmd.java.template", path.join(domainRoot, "dto/cmd", `${domainClass}AddCmd.java`), fields(table.columns || [], { skipPk: true, command: true })], ["domain/dto/cmd/UpdateCmd.java.template", path.join(domainRoot, "dto/cmd", `${domainClass}UpdateCmd.java`), fields(table.columns || [], { command: true })], ["domain/dto/query/PageQuery.java.template", path.join(domainRoot, "dto/query", `${domainClass}PageQuery.java`), fields(table.columns || [])]]) await write(target, render(templates[templateName], { ...context, field_declarations: declaration }));
87
+ const context = { base_package: args["base-package"], module_name: args["module-name"], domain_class: domainClass, domain_var: domainVar, domain_desc: domainDesc, domain_url_path: kebab(table.table_name), domain_pkg_name: args["domain-segment"], author: args.author, dto_imports: [`import ${args["base-package"]}.rest.dto.request.${domainClass}CreateRequest;`, `import ${args["base-package"]}.rest.dto.request.${domainClass}UpdateRequest;`, `import ${args["base-package"]}.rest.dto.request.${domainClass}PageRequest;`, `import ${args["base-package"]}.rest.dto.response.${domainClass}Response;`].join("\n"), application_type_imports: [`import ${args["base-package"]}.application.command.${domainClass}CreateCommand;`, `import ${args["base-package"]}.application.command.${domainClass}UpdateCommand;`, `import ${args["base-package"]}.application.query.${domainClass}PageQuery;`, `import ${args["base-package"]}.application.result.${domainClass}Result;`].join("\n"), application_service_import: `import ${applicationPackage}.${domainClass}Service;`, web_convertor_import: `import ${args["base-package"]}.rest.convertor.${domainClass}WebConvertor;`, web_convertor_class: `${domainClass}WebConvertor`, application_service_field: `private final ${domainClass}Service ${domainVar}Service;`, query_call: `${domainVar}Service.page(webConvertor.toPageQuery(request))`, detail_call: `${domainVar}Service.detail(id)`, add_call: `${domainVar}Service.add(webConvertor.toCreateCommand(request))`, update_call: `${domainVar}Service.update(webConvertor.toUpdateCommand(request))`, delete_call: `${domainVar}Service.delete(id)`, response_class: `${domainClass}Response`, create_request_class: `${domainClass}CreateRequest`, update_request_class: `${domainClass}UpdateRequest`, page_request_class: `${domainClass}PageRequest`, validation_namespace: args["validation-namespace"] };
88
+ plan(path.join(webRoot, `${domainClass}Controller.java`), render(templates["Controller.java.template"], context));
89
+ plan(path.join(webRoot, "convertor", `${domainClass}WebConvertor.java`), render(templates["WebConvertor.java.template"], context));
90
+ for (const [templateName, target, declaration] of [["web/dto/Response.java.template", path.join(webRoot, "dto", "response", `${domainClass}Response.java`), fields(table.columns || [], approvedFields.response)], ["web/dto/CreateRequest.java.template", path.join(webRoot, "dto", "request", `${domainClass}CreateRequest.java`), fields(table.columns || [], approvedFields.create, { command: true })], ["web/dto/UpdateRequest.java.template", path.join(webRoot, "dto", "request", `${domainClass}UpdateRequest.java`), fields(table.columns || [], approvedFields.update, { command: true })], ["web/dto/PageRequest.java.template", path.join(webRoot, "dto", "request", `${domainClass}PageRequest.java`), fields(table.columns || [], approvedFields.query)]]) plan(target, render(templates[templateName], { ...context, field_declarations: declaration }));
73
91
  }
74
- return written;
92
+ const targets = planned.map(({ target }) => target);
93
+ if (new Set(targets).size !== targets.length) throw new Error("approved metadata produces duplicate target files");
94
+ const existing = [];
95
+ for (const target of targets) if (await exists(target)) existing.push(target);
96
+ if (existing.length) throw new Error(`initialize-only Web generation refuses existing targets: ${existing.join(", ")}`);
97
+ for (const { target, contents } of planned) {
98
+ await mkdir(path.dirname(target), { recursive: true });
99
+ await writeFile(target, contents, "utf8");
100
+ logger.log(`Generated: ${target}`);
101
+ }
102
+ return targets;
75
103
  }
76
104
  async function main() { try { const args = parseArgs(process.argv.slice(2)); if (args.help) { console.log(usage()); return; } await generate(args); } catch (error) { console.error(`Error: ${error.message}`); process.exitCode = 1; } }
77
105
  if (process.argv[1] === fileURLToPath(import.meta.url)) await main();
@@ -1,5 +1,5 @@
1
1
  import assert from "node:assert/strict";
2
- import { mkdtemp, readFile, writeFile } from "node:fs/promises";
2
+ import { mkdir, mkdtemp, readFile, writeFile } from "node:fs/promises";
3
3
  import { tmpdir } from "node:os";
4
4
  import path from "node:path";
5
5
  import test from "node:test";
@@ -8,12 +8,53 @@ import { generate, parseArgs } from "./generate_controller.mjs";
8
8
  test("generates application-service controller with requested validation profile", async () => {
9
9
  const root = await mkdtemp(path.join(tmpdir(), "yss-controller-"));
10
10
  const metadata = path.join(root, "metadata.json");
11
+ const contract = path.join(root, "web-contract.json");
11
12
  await writeFile(metadata, JSON.stringify({ tables: [{ table_name: "quality_rule", table_comment: "质量规则", columns: [{ name: "id", sql_type: "bigint", primary: true, nullable: false }, { name: "rule_name", sql_type: "varchar(64)", nullable: false }] }] }));
12
- await generate(parseArgs(["--metadata-file", metadata, "--base-package", "com.yss.demo", "--module-name", "demo", "--domain-segment", "quality", "--output-dir", path.join(root, "out"), "--application-service-package", "com.yss.demo.application.service", "--validation-namespace", "jakarta"]), { log() {}, warn() {} });
13
+ await writeFile(contract, JSON.stringify({ schema_version: 1, status: "approved", base_package: "com.yss.demo", module_name: "demo", domain_segment: "quality", architecture_profile: "target-domain-model", platform_profile: "spring-boot-3-jdk17", validation_namespace: "jakarta", dto_placement: "web", openapi_freeze_ref: "openapi://quality-rule@1", fields: { quality_rule: { create: ["rule_name"], update: ["id", "rule_name"], query: ["rule_name"], response: ["id", "rule_name"] } } }));
14
+ await generate(parseArgs(["--metadata-file", metadata, "--contract-file", contract, "--base-package", "com.yss.demo", "--module-name", "demo", "--domain-segment", "quality", "--output-dir", path.join(root, "out"), "--application-service-package", "com.yss.demo.application.service", "--validation-namespace", "jakarta"]), { log() {}, warn() {} });
13
15
  const controller = await readFile(path.join(root, "out", "com", "yss", "demo", "rest", "QualityRuleController.java"), "utf8");
16
+ const convertor = await readFile(path.join(root, "out", "com", "yss", "demo", "rest", "convertor", "QualityRuleWebConvertor.java"), "utf8");
17
+ const createRequest = await readFile(path.join(root, "out", "com", "yss", "demo", "rest", "dto", "request", "QualityRuleCreateRequest.java"), "utf8");
14
18
  assert.match(controller, /import com\.yss\.demo\.application\.service\.QualityRuleService;/);
15
19
  assert.match(controller, /import jakarta\.validation\.Valid;/);
16
- assert.doesNotMatch(controller, /Gateway/);
20
+ assert.match(controller, /webConvertor\.toCreateCommand\(request\)/);
21
+ assert.match(convertor, /@Mapper\(componentModel = "spring"\)/);
22
+ assert.match(convertor, /application\.command\.QualityRuleCreateCommand/);
23
+ assert.match(convertor, /application\.result\.QualityRuleResult/);
24
+ assert.doesNotMatch(`${controller}\n${convertor}`, /Gateway|\.domain\.|Mappers\.getMapper|INSTANCE/);
25
+ assert.match(createRequest, /private String ruleName;/);
26
+ assert.doesNotMatch(createRequest, /private Long id;|@Data/);
17
27
  });
18
28
 
19
29
  test("rejects missing required CLI arguments", () => assert.throws(() => parseArgs(["--module-name", "demo"]), /required/));
30
+
31
+ test("requires an approved target-profile field contract and refuses force overwrite", async () => {
32
+ const root = await mkdtemp(path.join(tmpdir(), "yss-controller-contract-"));
33
+ const metadata = path.join(root, "metadata.json");
34
+ const contract = path.join(root, "web-contract.json");
35
+ await writeFile(metadata, JSON.stringify({ tables: [{ table_name: "quality_rule", columns: [{ name: "id", sql_type: "bigint", primary: true, nullable: false }] }] }));
36
+ await writeFile(contract, JSON.stringify({ schema_version: 1, status: "draft", base_package: "com.yss.demo", module_name: "demo", domain_segment: "quality", architecture_profile: "target-domain-model", platform_profile: "spring-boot-2.7-jdk8", validation_namespace: "javax", dto_placement: "web", openapi_freeze_ref: "openapi://quality-rule@1", fields: { quality_rule: { create: [], update: ["id"], query: [], response: ["id"] } } }));
37
+ const base = ["--metadata-file", metadata, "--contract-file", contract, "--base-package", "com.yss.demo", "--module-name", "demo", "--domain-segment", "quality", "--output-dir", path.join(root, "out")];
38
+ await assert.rejects(() => generate(parseArgs(base), { log() {}, warn() {} }), /approved/);
39
+ await writeFile(contract, JSON.stringify({ schema_version: 1, status: "approved", base_package: "com.yss.demo", module_name: "demo", domain_segment: "quality", architecture_profile: "target-domain-model", platform_profile: "spring-boot-2.7-jdk8", validation_namespace: "javax", dto_placement: "web", openapi_freeze_ref: "openapi://quality-rule@1", fields: { quality_rule: { create: [], update: ["id"], query: [], response: ["id"] } } }));
40
+ await writeFile(contract, JSON.stringify({ schema_version: 1, status: "approved", base_package: "com.yss.demo", module_name: "demo", domain_segment: "quality", architecture_profile: "target-domain-model", platform_profile: "spring-boot-3-jdk17", validation_namespace: "javax", dto_placement: "web", openapi_freeze_ref: "openapi://quality-rule@1", fields: { quality_rule: { create: [], update: ["id"], query: [], response: ["id"] } } }));
41
+ await assert.rejects(() => generate(parseArgs(base), { log() {}, warn() {} }), /platform_profile and validation_namespace/);
42
+ assert.throws(() => parseArgs([...base, "--force"]), /initialize-only/);
43
+ });
44
+
45
+ test("binds generation identity to the approved contract and fails before writing when any target exists", async () => {
46
+ const root = await mkdtemp(path.join(tmpdir(), "yss-controller-initialize-only-"));
47
+ const metadata = path.join(root, "metadata.json");
48
+ const contract = path.join(root, "web-contract.json");
49
+ const output = path.join(root, "out");
50
+ await writeFile(metadata, JSON.stringify({ tables: [{ table_name: "quality_rule", columns: [{ name: "id", sql_type: "bigint", nullable: false }] }] }));
51
+ await writeFile(contract, JSON.stringify({ schema_version: 1, status: "approved", base_package: "com.yss.demo", module_name: "demo", domain_segment: "quality", architecture_profile: "target-domain-model", platform_profile: "spring-boot-2.7-jdk8", validation_namespace: "javax", dto_placement: "web", openapi_freeze_ref: "openapi://quality-rule@1", fields: { quality_rule: { create: [], update: ["id"], query: [], response: ["id"] } } }));
52
+ const args = ["--metadata-file", metadata, "--contract-file", contract, "--base-package", "com.yss.demo", "--module-name", "demo", "--domain-segment", "quality", "--output-dir", output];
53
+ await assert.rejects(() => generate(parseArgs(args.map((value) => value === "demo" ? "other" : value)), { log() {}, warn() {} }), /approved web generation contract/);
54
+ const existing = path.join(output, "com/yss/demo/rest/QualityRuleController.java");
55
+ await mkdir(path.dirname(existing), { recursive: true });
56
+ await writeFile(existing, "user-owned\n");
57
+ await assert.rejects(() => generate(parseArgs(args), { log() {}, warn() {} }), /initialize-only/);
58
+ assert.equal(await readFile(existing, "utf8"), "user-owned\n");
59
+ await assert.rejects(() => readFile(path.join(output, "com/yss/demo/rest/convertor/QualityRuleWebConvertor.java"), "utf8"), /ENOENT/);
60
+ });
@@ -0,0 +1,8 @@
1
+ {
2
+ "servers": {
3
+ "yss-ui": {
4
+ "command": "npx",
5
+ "args": ["-y", "@yss-ui/mcp"]
6
+ }
7
+ }
8
+ }
@@ -48,6 +48,8 @@
48
48
 
49
49
  YSS skills 的公开发布投影维护在 [iloveZzz/yss-spec-dev-skills](https://github.com/iloveZzz/yss-spec-dev-skills),发布清单和导出命令见 [skills 维护说明](./docs/agents/skills-maintenance.md)。
50
50
 
51
+ YSS UI 组件知识同时通过项目级 MCP 配置提供;支持的客户端、Codex 全局安装和自检方法见 [YSS UI MCP 接入](./docs/user-guide/yss-ui-mcp.md)。
52
+
51
53
  ## 模板初始化 CLI
52
54
 
53
55
  `create-yss-spec` 的目标维护位置是独立 GitHub 仓库 [iloveZzz/create-yss-spec](https://github.com/iloveZzz/create-yss-spec)。本仓库不再包含 CLI 源码、测试、发布配置或开发过程记录。CLI 的使用方法已经合并到统一用户手册:
@@ -113,6 +115,7 @@ scripts/verify-template-fast
113
115
  | [docs/process/implementation-repo-integration.md](./docs/process/implementation-repo-integration.md) | 外部前端 / 后端实现仓库接入与跨仓库切片绑定 |
114
116
  | [docs/agents/README.md](./docs/agents/README.md) | Agent 协作文档目录说明 |
115
117
  | [docs/agents/skills-maintenance.md](./docs/agents/skills-maintenance.md) | Agent skills 安装与维护 |
118
+ | [docs/user-guide/yss-ui-mcp.md](./docs/user-guide/yss-ui-mcp.md) | YSS UI MCP 项目配置、全局安装边界与自检 |
116
119
  | [docs/discovery/IDEATION.md](./docs/discovery/IDEATION.md) | 机会构想方法 |
117
120
  | [docs/architecture/README.md](./docs/architecture/README.md) | 架构设计 + 审查清单 |
118
121
  | [docs/testing/README.md](./docs/testing/README.md) | 测试策略 |
@@ -137,7 +137,7 @@ roles:
137
137
  title: YSS 前端工程师
138
138
  stages: [stage.product-design, stage.system-data-engineering, stage.ticket-formalization, stage.vertical-slice-implementation, stage.verification-release-retrospective]
139
139
  draft_artifact_ids: [artifact.frontend-implementation-plan]
140
- core_skills: [yss-ui, yss-page-module-development, yss-components, yss-formily, formily-foundation, formily-linkage-effects, formily-mode-slot-detail, formily-step-flow, ytable-usage, ytree-usage, yedit-table-usage, yss-api-integration, yss-hook, theme-token-usage, page-skeleton, page-list-module, page-form-module, component-selection-imports, vue3-best-practices, tdd]
140
+ core_skills: [yss-ui, yss-ui-business-page-generation, yss-page-module-development, yss-components, yss-formily, formily-foundation, formily-linkage-effects, formily-mode-slot-detail, formily-step-flow, ytable-usage, ytree-usage, yedit-table-usage, yss-api-integration, yss-hook, theme-token-usage, page-skeleton, page-list-module, page-form-module, component-selection-imports, vue3-best-practices, tdd]
141
141
  forbidden_skills: [yss-domain, yss-application, yss-repository, yss-mybatis, yss-web-controller, yss-ddd-scaffold-generator, java-backend-commit]
142
142
  description: >-
143
143
  Own Vue page modules, frontend tests, and frontend_implementation_plan.
@@ -18,6 +18,7 @@
18
18
  | `mattpocock/skills` | `0ab1b63a410a03d3627979a109c8695de27af954` / `skills/engineering` 及锁文件记录的关联路径 | 通用工程流程及关联 skills |
19
19
  | `anthropics/knowledge-work-plugins` | `sales/skills/competitive-intelligence` | 竞品与市场事实研究 |
20
20
  | `tt-a1i/archify` | `199360cc6687a7857b54dd188d4922b09e466a4b` / `archify` | 条件式、可验证的技术架构图;YSS 适配见 `docs/agents/archify-integration.md` |
21
+ | `iloveZzz/yss-ui` | `.agents/skills/.yss-skills-manifest.json` 锁定的 revision / `packages/skills` | 22 个 `categories.app` 业务前端 skills;排除组件库内部 `categories.library` 和后端提交 skill,适配见 `docs/agents/yss-ui-skills-integration.md` |
21
22
  | 项目本地 | `.agents/skills` 或平台专属 root | YSS 适配与项目治理 skills |
22
23
 
23
24
  `skills-lock.json` 是技能清单、来源、上游哈希、当前有效内容哈希和投影目标的权威记录:
@@ -44,10 +45,11 @@
44
45
  scripts/update-skill-lock
45
46
  ```
46
47
 
47
- 若来源来自可访问的 Matt checkout,还应显式校验锁定 revision 与每个上游目录哈希:
48
+ 若来源来自可访问的上游 checkout,还应显式校验锁定 revision 与每个上游目录哈希:
48
49
 
49
50
  ```bash
50
- scripts/verify-upstream-skill-source --source-root <matt-skills-checkout>
51
+ scripts/verify-upstream-skill-source --source=mattpocock/skills --source-root <matt-skills-checkout>
52
+ scripts/verify-upstream-skill-source --source=iloveZzz/yss-ui --source-root <yss-ui-checkout>
51
53
  ```
52
54
 
53
55
  新增共享 skill 时先显式登记:`scripts/update-skill-lock --add=<skill-name>`;新增平台专属 skill 使用 `scripts/update-skill-lock --add-platform=<root>:<skill-name>`。脚本不会把工作区中偶然出现的未跟踪目录自动纳入发布清单。
@@ -74,8 +76,9 @@
74
76
  ```bash
75
77
  scripts/sync-skills --check
76
78
  scripts/update-skill-lock --check
77
- # 可选:对照锁文件中的 mattpocock/skills revision 与上游目录哈希
78
- scripts/verify-upstream-skill-source --source-root <matt-skills-checkout>
79
+ # 可选:对照锁文件中的 source revision 与上游目录哈希
80
+ scripts/verify-upstream-skill-source --source=mattpocock/skills --source-root <matt-skills-checkout>
81
+ scripts/verify-upstream-skill-source --source=iloveZzz/yss-ui --source-root <yss-ui-checkout>
79
82
  ```
80
83
 
81
84
  前者检查所有共享投影是否指向或匹配权威内容,后者检查 `skills-lock.json` 是否与当前完整目录树一致。过时技能不会保留兼容别名;旧 skill 名称和入口按 [`docs/agents/skill-migrations.md`](./skill-migrations.md) 一次性迁移,项目文件升级由 `create-yss-spec attach` / `sync` 处理。
@@ -447,7 +447,7 @@ skills:
447
447
  layer: specialist
448
448
  maturity: supported
449
449
  instance_default_discoverable: false
450
- aliases: [page-module-development, yss-ui-business-page-generation]
450
+ aliases: [page-module-development]
451
451
  impacts: [frontend]
452
452
  - id: yss-product-lifecycle
453
453
  layer: core
@@ -503,6 +503,12 @@ skills:
503
503
  instance_default_discoverable: false
504
504
  aliases: []
505
505
  impacts: [frontend]
506
+ - id: yss-ui-business-page-generation
507
+ layer: specialist
508
+ maturity: supported
509
+ instance_default_discoverable: false
510
+ aliases: []
511
+ impacts: [frontend]
506
512
  - id: yss-up-springboot3
507
513
  layer: specialist
508
514
  maturity: supported
@@ -0,0 +1,24 @@
1
+ # YSS UI 前端 Skills 集成合同
2
+
3
+ 本模板以 `iloveZzz/yss-ui` 的 `packages/skills` 为上游来源,以 `.agents/skills/.yss-skills-manifest.json` 冻结来源 revision、包版本、目录映射和上游树哈希。`.agents/skills` 仍是模板内跨 Agent 共享内容的唯一权威目录;其他 Agent root 只接收生成投影。
4
+
5
+ ## 范围
6
+
7
+ - 只集成 yss-ui `skills.config.json` 中 `categories.app` 的业务项目 skills,并排除后端 `java-backend-commit`,当前共 22 个。
8
+ - `categories.library` 的 10 个组件库内部维护 skills 全部不进入模板;该分组同时位于上游 `excludeFromDefaultSync`。
9
+ - `api-integration`、`page-module-development`、`use-table-height`、`use-tree-height` 在模板中分别映射为 `yss-api-integration`、`yss-page-module-development`、`yss-use-table-height`、`yss-use-tree-height`,旧名称只作为 registry alias。
10
+ - `java-backend-commit` 明确不属于本合同;其内容、路由与锁定信息不随本前端同步更新。
11
+ - 允许模板基于生命周期、组件路由和证据门禁做受控适配;适配后的 `effectiveHash` 与上游 `upstreamHash` 同时进入 `skills-lock.json`。
12
+
13
+ ## 更新步骤
14
+
15
+ 1. 在临时 checkout 中确认 `iloveZzz/yss-ui` 的目标 revision,并更新 `.agents/skills/.yss-skills-manifest.json`。
16
+ 2. 将新增或替换内容只写入 `.agents/skills/<canonical-name>`,不得直接编辑平台投影。
17
+ 3. 新增 skill 使用 `scripts/update-skill-lock --add=<canonical-name>` 显式登记。
18
+ 4. 运行 `scripts/sync-skills` 与 `scripts/update-skill-lock`。
19
+ 5. 使用 `scripts/verify-upstream-skill-source --source=iloveZzz/yss-ui --source-root=<checkout>` 验证 revision、清单和树哈希。
20
+ 6. 执行 `scripts/verify-template-fast`;首次冻结或正式发布前执行 `scripts/verify-template`。
21
+
22
+ ## MCP
23
+
24
+ 项目级 MCP 配置路径和容器字段同样由 manifest 固定,配置内容必须使用 `npx -y @yss-ui/mcp`。需要全局配置的运行时只提供人工安装说明,模板不得自动修改用户主目录。