create-yss-spec 2.2.9 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (763) 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/ask-matt/SKILL.md +1 -1
  7. package/template/.agents/skills/code-review/references/yss-review-standards.md +3 -3
  8. package/template/.agents/skills/component-selection-imports/SKILL.md +2 -2
  9. package/template/.agents/skills/frontend-commit/SKILL.md +1 -1
  10. package/template/.agents/skills/wayfinder/SKILL.md +2 -2
  11. package/template/.agents/skills/yss-api-integration/SKILL.md +85 -339
  12. package/template/.agents/skills/yss-application/SKILL.md +7 -5
  13. package/template/.agents/skills/yss-application/references/application-layer-guide.md +60 -105
  14. package/template/.agents/skills/yss-components/SKILL.md +1 -1
  15. package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +39 -14
  16. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/config/application-local.yml.template +8 -0
  17. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +2 -3
  18. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +36 -0
  19. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/java/bootstrap-application.java.template +15 -0
  20. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/adapter-pom.xml.template +3 -3
  21. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +13 -4
  22. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +24 -4
  23. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/domain-pom.xml.template +6 -20
  24. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/infrastructure-pom.xml.template +26 -6
  25. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +70 -10
  26. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +24 -10
  27. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/maven.config +2 -3
  28. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/settings.xml +18 -105
  29. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.properties +4 -2
  30. package/template/.agents/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +78 -156
  31. package/template/.agents/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +90 -385
  32. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +20 -188
  33. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +42 -122
  34. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +225 -0
  35. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +164 -0
  36. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +126 -0
  37. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +153 -42
  38. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +172 -0
  39. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +87 -7
  40. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +335 -12
  41. package/template/.agents/skills/yss-design-system/SKILL.md +2 -2
  42. package/template/.agents/skills/yss-design-system/references/design-system.md +2 -2
  43. package/template/.agents/skills/yss-domain/SKILL.md +5 -4
  44. package/template/.agents/skills/yss-domain/agents/openai.yaml +2 -2
  45. package/template/.agents/skills/yss-domain/references/domain-layer-guide.md +62 -235
  46. package/template/.agents/skills/yss-dto/SKILL.md +11 -5
  47. package/template/.agents/skills/yss-dto/references/README.md +2 -2
  48. package/template/.agents/skills/yss-dto/references/openapi-wire-profile.yaml +9 -3
  49. package/template/.agents/skills/yss-exception/SKILL.md +2 -0
  50. package/template/.agents/skills/yss-formily/SKILL.md +1 -1
  51. package/template/.agents/skills/yss-mybatis/SKILL.md +2 -2
  52. package/template/.agents/skills/yss-page-module-development/SKILL.md +2 -0
  53. package/template/.agents/skills/yss-product-lifecycle/SKILL.md +1 -1
  54. package/template/.agents/skills/yss-product-lifecycle/references/matt-yss-adapter.md +2 -2
  55. package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +54 -21
  56. package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +2 -2
  57. package/template/.agents/skills/yss-repository/SKILL.md +19 -15
  58. package/template/.agents/skills/yss-repository/agents/openai.yaml +2 -2
  59. package/template/.agents/skills/yss-repository/references/infrastructure-layer-guide.md +70 -155
  60. package/template/.agents/skills/yss-research/SKILL.md +73 -0
  61. package/template/.agents/skills/yss-research/agents/openai.yaml +3 -0
  62. package/template/.agents/skills/yss-research/assets/evidence-template.yaml +68 -0
  63. package/template/.agents/skills/yss-research/assets/research-brief-template.md +36 -0
  64. package/template/.agents/skills/yss-research/references/evidence-contract.md +42 -0
  65. package/template/.agents/skills/yss-research/scripts/validate-research-package.mjs +128 -0
  66. package/template/.agents/skills/yss-research/tests/run-scenarios.mjs +81 -0
  67. package/template/.agents/skills/yss-router/references/router-contract.yaml +48 -10
  68. package/template/.agents/skills/yss-stage-decision/SKILL.md +2 -1
  69. package/template/.agents/skills/yss-ui/SKILL.md +6 -5
  70. package/template/.agents/skills/yss-ui/references/component-routing.md +1 -1
  71. package/template/.agents/skills/yss-ui-business-page-generation/SKILL.md +159 -0
  72. package/template/.agents/skills/yss-ui-business-page-generation/references/component-map.md +39 -0
  73. package/template/.agents/skills/yss-ui-business-page-generation/references/hooks-map.md +70 -0
  74. package/template/.agents/skills/yss-ui-business-page-generation/references/utils-map.md +51 -0
  75. package/template/.agents/skills/yss-use-table-height/SKILL.md +78 -297
  76. package/template/.agents/skills/yss-use-tree-height/SKILL.md +51 -393
  77. package/template/.agents/skills/yss-web-controller/SKILL.md +26 -19
  78. package/template/.agents/skills/yss-web-controller/agents/openai.yaml +2 -2
  79. package/template/.agents/skills/yss-web-controller/assets/templates/Controller.java.template +21 -22
  80. package/template/.agents/skills/yss-web-controller/assets/templates/WebConvertor.java.template +19 -12
  81. package/template/.agents/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +19 -0
  82. package/template/.agents/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +21 -0
  83. package/template/.agents/skills/yss-web-controller/assets/templates/web/dto/Response.java.template +18 -0
  84. package/template/.agents/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +19 -0
  85. package/template/.agents/skills/yss-web-controller/references/web-adapter-layer-guide.md +63 -145
  86. package/template/.agents/skills/yss-web-controller/references/web-generation-contract.schema.json +97 -0
  87. package/template/.agents/skills/yss-web-controller/scripts/generate_controller.mjs +168 -19
  88. package/template/.agents/skills/yss-web-controller/scripts/generate_controller.test.mjs +144 -7
  89. package/template/.claude/skills/ask-matt/SKILL.md +1 -1
  90. package/template/.claude/skills/code-review/references/yss-review-standards.md +3 -3
  91. package/template/.claude/skills/component-selection-imports/SKILL.md +2 -2
  92. package/template/.claude/skills/frontend-commit/SKILL.md +1 -1
  93. package/template/.claude/skills/wayfinder/SKILL.md +2 -2
  94. package/template/.claude/skills/yss-api-integration/SKILL.md +85 -339
  95. package/template/.claude/skills/yss-application/SKILL.md +7 -5
  96. package/template/.claude/skills/yss-application/references/application-layer-guide.md +60 -105
  97. package/template/.claude/skills/yss-components/SKILL.md +1 -1
  98. package/template/.claude/skills/yss-ddd-scaffold-generator/SKILL.md +39 -14
  99. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/config/application-local.yml.template +8 -0
  100. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +2 -3
  101. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +36 -0
  102. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/java/bootstrap-application.java.template +15 -0
  103. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/pom/adapter-pom.xml.template +3 -3
  104. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +13 -4
  105. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +24 -4
  106. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/pom/domain-pom.xml.template +6 -20
  107. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/pom/infrastructure-pom.xml.template +26 -6
  108. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +70 -10
  109. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +24 -10
  110. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/maven.config +2 -3
  111. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/settings.xml +18 -105
  112. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.properties +4 -2
  113. package/template/.claude/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +78 -156
  114. package/template/.claude/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +90 -385
  115. package/template/.claude/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +20 -188
  116. package/template/.claude/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +42 -122
  117. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +225 -0
  118. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +164 -0
  119. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +126 -0
  120. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +153 -42
  121. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +172 -0
  122. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +87 -7
  123. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +335 -12
  124. package/template/.claude/skills/yss-design-system/SKILL.md +2 -2
  125. package/template/.claude/skills/yss-design-system/references/design-system.md +2 -2
  126. package/template/.claude/skills/yss-domain/SKILL.md +5 -4
  127. package/template/.claude/skills/yss-domain/agents/openai.yaml +2 -2
  128. package/template/.claude/skills/yss-domain/references/domain-layer-guide.md +62 -235
  129. package/template/.claude/skills/yss-dto/SKILL.md +11 -5
  130. package/template/.claude/skills/yss-dto/references/README.md +2 -2
  131. package/template/.claude/skills/yss-dto/references/openapi-wire-profile.yaml +9 -3
  132. package/template/.claude/skills/yss-exception/SKILL.md +2 -0
  133. package/template/.claude/skills/yss-formily/SKILL.md +1 -1
  134. package/template/.claude/skills/yss-mybatis/SKILL.md +2 -2
  135. package/template/.claude/skills/yss-page-module-development/SKILL.md +2 -0
  136. package/template/.claude/skills/yss-product-lifecycle/SKILL.md +1 -1
  137. package/template/.claude/skills/yss-product-lifecycle/references/matt-yss-adapter.md +2 -2
  138. package/template/.claude/skills/yss-product-lifecycle/references/orchestration-contract.yaml +54 -21
  139. package/template/.claude/skills/yss-product-lifecycle/references/orchestration.md +2 -2
  140. package/template/.claude/skills/yss-repository/SKILL.md +19 -15
  141. package/template/.claude/skills/yss-repository/agents/openai.yaml +2 -2
  142. package/template/.claude/skills/yss-repository/references/infrastructure-layer-guide.md +70 -155
  143. package/template/.claude/skills/yss-research/SKILL.md +73 -0
  144. package/template/.claude/skills/yss-research/agents/openai.yaml +3 -0
  145. package/template/.claude/skills/yss-research/assets/evidence-template.yaml +68 -0
  146. package/template/.claude/skills/yss-research/assets/research-brief-template.md +36 -0
  147. package/template/.claude/skills/yss-research/references/evidence-contract.md +42 -0
  148. package/template/.claude/skills/yss-research/scripts/validate-research-package.mjs +128 -0
  149. package/template/.claude/skills/yss-research/tests/run-scenarios.mjs +81 -0
  150. package/template/.claude/skills/yss-router/references/router-contract.yaml +48 -10
  151. package/template/.claude/skills/yss-stage-decision/SKILL.md +2 -1
  152. package/template/.claude/skills/yss-ui/SKILL.md +6 -5
  153. package/template/.claude/skills/yss-ui/references/component-routing.md +1 -1
  154. package/template/.claude/skills/yss-ui-business-page-generation/SKILL.md +159 -0
  155. package/template/.claude/skills/yss-ui-business-page-generation/references/component-map.md +39 -0
  156. package/template/.claude/skills/yss-ui-business-page-generation/references/hooks-map.md +70 -0
  157. package/template/.claude/skills/yss-ui-business-page-generation/references/utils-map.md +51 -0
  158. package/template/.claude/skills/yss-use-table-height/SKILL.md +78 -297
  159. package/template/.claude/skills/yss-use-tree-height/SKILL.md +51 -393
  160. package/template/.claude/skills/yss-web-controller/SKILL.md +26 -19
  161. package/template/.claude/skills/yss-web-controller/agents/openai.yaml +2 -2
  162. package/template/.claude/skills/yss-web-controller/assets/templates/Controller.java.template +21 -22
  163. package/template/.claude/skills/yss-web-controller/assets/templates/WebConvertor.java.template +19 -12
  164. package/template/.claude/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +19 -0
  165. package/template/.claude/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +21 -0
  166. package/template/.claude/skills/yss-web-controller/assets/templates/web/dto/Response.java.template +18 -0
  167. package/template/.claude/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +19 -0
  168. package/template/.claude/skills/yss-web-controller/references/web-adapter-layer-guide.md +63 -145
  169. package/template/.claude/skills/yss-web-controller/references/web-generation-contract.schema.json +97 -0
  170. package/template/.claude/skills/yss-web-controller/scripts/generate_controller.mjs +168 -19
  171. package/template/.claude/skills/yss-web-controller/scripts/generate_controller.test.mjs +144 -7
  172. package/template/.codex/skills/ask-matt/SKILL.md +1 -1
  173. package/template/.codex/skills/code-review/references/yss-review-standards.md +3 -3
  174. package/template/.codex/skills/component-selection-imports/SKILL.md +2 -2
  175. package/template/.codex/skills/frontend-commit/SKILL.md +1 -1
  176. package/template/.codex/skills/product-design/package.json +4 -2
  177. package/template/.codex/skills/product-design/skills/research/SKILL.md +22 -0
  178. package/template/.codex/skills/product-design/skills/research/assets/evidence-template.yaml +65 -0
  179. package/template/.codex/skills/product-design/skills/research/assets/research-brief-template.md +33 -0
  180. package/template/.codex/skills/product-design/skills/research/references/evidence-audited.md +80 -0
  181. package/template/.codex/skills/product-design/skills/research/scripts/validate-research-package.mjs +149 -0
  182. package/template/.codex/skills/product-design/skills/research/tests/run-scenarios.mjs +72 -0
  183. package/template/.codex/skills/wayfinder/SKILL.md +2 -2
  184. package/template/.codex/skills/yss-api-integration/SKILL.md +85 -339
  185. package/template/.codex/skills/yss-application/SKILL.md +7 -5
  186. package/template/.codex/skills/yss-application/references/application-layer-guide.md +60 -105
  187. package/template/.codex/skills/yss-components/SKILL.md +1 -1
  188. package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +39 -14
  189. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/config/application-local.yml.template +8 -0
  190. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +2 -3
  191. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +36 -0
  192. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/java/bootstrap-application.java.template +15 -0
  193. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/adapter-pom.xml.template +3 -3
  194. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +13 -4
  195. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +24 -4
  196. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/domain-pom.xml.template +6 -20
  197. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/infrastructure-pom.xml.template +26 -6
  198. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +70 -10
  199. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +24 -10
  200. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/maven.config +2 -3
  201. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/settings.xml +18 -105
  202. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.properties +4 -2
  203. package/template/.codex/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +78 -156
  204. package/template/.codex/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +90 -385
  205. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +20 -188
  206. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +42 -122
  207. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +225 -0
  208. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +164 -0
  209. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +126 -0
  210. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +153 -42
  211. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +172 -0
  212. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +87 -7
  213. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +335 -12
  214. package/template/.codex/skills/yss-design-system/SKILL.md +2 -2
  215. package/template/.codex/skills/yss-design-system/references/design-system.md +2 -2
  216. package/template/.codex/skills/yss-domain/SKILL.md +5 -4
  217. package/template/.codex/skills/yss-domain/agents/openai.yaml +2 -2
  218. package/template/.codex/skills/yss-domain/references/domain-layer-guide.md +62 -235
  219. package/template/.codex/skills/yss-dto/SKILL.md +11 -5
  220. package/template/.codex/skills/yss-dto/references/README.md +2 -2
  221. package/template/.codex/skills/yss-dto/references/openapi-wire-profile.yaml +9 -3
  222. package/template/.codex/skills/yss-exception/SKILL.md +2 -0
  223. package/template/.codex/skills/yss-formily/SKILL.md +1 -1
  224. package/template/.codex/skills/yss-mybatis/SKILL.md +2 -2
  225. package/template/.codex/skills/yss-page-module-development/SKILL.md +2 -0
  226. package/template/.codex/skills/yss-product-lifecycle/SKILL.md +1 -1
  227. package/template/.codex/skills/yss-product-lifecycle/references/matt-yss-adapter.md +2 -2
  228. package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +54 -21
  229. package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +2 -2
  230. package/template/.codex/skills/yss-repository/SKILL.md +19 -15
  231. package/template/.codex/skills/yss-repository/agents/openai.yaml +2 -2
  232. package/template/.codex/skills/yss-repository/references/infrastructure-layer-guide.md +70 -155
  233. package/template/.codex/skills/yss-research/SKILL.md +73 -0
  234. package/template/.codex/skills/yss-research/agents/openai.yaml +3 -0
  235. package/template/.codex/skills/yss-research/assets/evidence-template.yaml +68 -0
  236. package/template/.codex/skills/yss-research/assets/research-brief-template.md +36 -0
  237. package/template/.codex/skills/yss-research/references/evidence-contract.md +42 -0
  238. package/template/.codex/skills/yss-research/scripts/validate-research-package.mjs +128 -0
  239. package/template/.codex/skills/yss-research/tests/run-scenarios.mjs +81 -0
  240. package/template/.codex/skills/yss-router/references/router-contract.yaml +48 -10
  241. package/template/.codex/skills/yss-stage-decision/SKILL.md +2 -1
  242. package/template/.codex/skills/yss-ui/SKILL.md +6 -5
  243. package/template/.codex/skills/yss-ui/references/component-routing.md +1 -1
  244. package/template/.codex/skills/yss-ui-business-page-generation/SKILL.md +159 -0
  245. package/template/.codex/skills/yss-ui-business-page-generation/references/component-map.md +39 -0
  246. package/template/.codex/skills/yss-ui-business-page-generation/references/hooks-map.md +70 -0
  247. package/template/.codex/skills/yss-ui-business-page-generation/references/utils-map.md +51 -0
  248. package/template/.codex/skills/yss-use-table-height/SKILL.md +78 -297
  249. package/template/.codex/skills/yss-use-tree-height/SKILL.md +51 -393
  250. package/template/.codex/skills/yss-web-controller/SKILL.md +26 -19
  251. package/template/.codex/skills/yss-web-controller/agents/openai.yaml +2 -2
  252. package/template/.codex/skills/yss-web-controller/assets/templates/Controller.java.template +21 -22
  253. package/template/.codex/skills/yss-web-controller/assets/templates/WebConvertor.java.template +19 -12
  254. package/template/.codex/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +19 -0
  255. package/template/.codex/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +21 -0
  256. package/template/.codex/skills/yss-web-controller/assets/templates/web/dto/Response.java.template +18 -0
  257. package/template/.codex/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +19 -0
  258. package/template/.codex/skills/yss-web-controller/references/web-adapter-layer-guide.md +63 -145
  259. package/template/.codex/skills/yss-web-controller/references/web-generation-contract.schema.json +97 -0
  260. package/template/.codex/skills/yss-web-controller/scripts/generate_controller.mjs +168 -19
  261. package/template/.codex/skills/yss-web-controller/scripts/generate_controller.test.mjs +144 -7
  262. package/template/.cursor/mcp.json +8 -0
  263. package/template/.cursor/skills/ask-matt/SKILL.md +1 -1
  264. package/template/.cursor/skills/code-review/references/yss-review-standards.md +3 -3
  265. package/template/.cursor/skills/component-selection-imports/SKILL.md +2 -2
  266. package/template/.cursor/skills/frontend-commit/SKILL.md +1 -1
  267. package/template/.cursor/skills/wayfinder/SKILL.md +2 -2
  268. package/template/.cursor/skills/yss-api-integration/SKILL.md +85 -339
  269. package/template/.cursor/skills/yss-application/SKILL.md +7 -5
  270. package/template/.cursor/skills/yss-application/references/application-layer-guide.md +60 -105
  271. package/template/.cursor/skills/yss-components/SKILL.md +1 -1
  272. package/template/.cursor/skills/yss-ddd-scaffold-generator/SKILL.md +39 -14
  273. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/config/application-local.yml.template +8 -0
  274. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +2 -3
  275. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +36 -0
  276. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/java/bootstrap-application.java.template +15 -0
  277. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/adapter-pom.xml.template +3 -3
  278. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +13 -4
  279. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +24 -4
  280. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/domain-pom.xml.template +6 -20
  281. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/infrastructure-pom.xml.template +26 -6
  282. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +70 -10
  283. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +24 -10
  284. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/maven.config +2 -3
  285. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/settings.xml +18 -105
  286. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.properties +4 -2
  287. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +78 -156
  288. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +90 -385
  289. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +20 -188
  290. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +42 -122
  291. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +225 -0
  292. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +164 -0
  293. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +126 -0
  294. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +153 -42
  295. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +172 -0
  296. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +87 -7
  297. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +335 -12
  298. package/template/.cursor/skills/yss-design-system/SKILL.md +2 -2
  299. package/template/.cursor/skills/yss-design-system/references/design-system.md +2 -2
  300. package/template/.cursor/skills/yss-domain/SKILL.md +5 -4
  301. package/template/.cursor/skills/yss-domain/agents/openai.yaml +2 -2
  302. package/template/.cursor/skills/yss-domain/references/domain-layer-guide.md +62 -235
  303. package/template/.cursor/skills/yss-dto/SKILL.md +11 -5
  304. package/template/.cursor/skills/yss-dto/references/README.md +2 -2
  305. package/template/.cursor/skills/yss-dto/references/openapi-wire-profile.yaml +9 -3
  306. package/template/.cursor/skills/yss-exception/SKILL.md +2 -0
  307. package/template/.cursor/skills/yss-formily/SKILL.md +1 -1
  308. package/template/.cursor/skills/yss-mybatis/SKILL.md +2 -2
  309. package/template/.cursor/skills/yss-page-module-development/SKILL.md +2 -0
  310. package/template/.cursor/skills/yss-product-lifecycle/SKILL.md +1 -1
  311. package/template/.cursor/skills/yss-product-lifecycle/references/matt-yss-adapter.md +2 -2
  312. package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +54 -21
  313. package/template/.cursor/skills/yss-product-lifecycle/references/orchestration.md +2 -2
  314. package/template/.cursor/skills/yss-repository/SKILL.md +19 -15
  315. package/template/.cursor/skills/yss-repository/agents/openai.yaml +2 -2
  316. package/template/.cursor/skills/yss-repository/references/infrastructure-layer-guide.md +70 -155
  317. package/template/.cursor/skills/yss-research/SKILL.md +73 -0
  318. package/template/.cursor/skills/yss-research/agents/openai.yaml +3 -0
  319. package/template/.cursor/skills/yss-research/assets/evidence-template.yaml +68 -0
  320. package/template/.cursor/skills/yss-research/assets/research-brief-template.md +36 -0
  321. package/template/.cursor/skills/yss-research/references/evidence-contract.md +42 -0
  322. package/template/.cursor/skills/yss-research/scripts/validate-research-package.mjs +128 -0
  323. package/template/.cursor/skills/yss-research/tests/run-scenarios.mjs +81 -0
  324. package/template/.cursor/skills/yss-router/references/router-contract.yaml +48 -10
  325. package/template/.cursor/skills/yss-stage-decision/SKILL.md +2 -1
  326. package/template/.cursor/skills/yss-ui/SKILL.md +6 -5
  327. package/template/.cursor/skills/yss-ui/references/component-routing.md +1 -1
  328. package/template/.cursor/skills/yss-ui-business-page-generation/SKILL.md +159 -0
  329. package/template/.cursor/skills/yss-ui-business-page-generation/references/component-map.md +39 -0
  330. package/template/.cursor/skills/yss-ui-business-page-generation/references/hooks-map.md +70 -0
  331. package/template/.cursor/skills/yss-ui-business-page-generation/references/utils-map.md +51 -0
  332. package/template/.cursor/skills/yss-use-table-height/SKILL.md +78 -297
  333. package/template/.cursor/skills/yss-use-tree-height/SKILL.md +51 -393
  334. package/template/.cursor/skills/yss-web-controller/SKILL.md +26 -19
  335. package/template/.cursor/skills/yss-web-controller/agents/openai.yaml +2 -2
  336. package/template/.cursor/skills/yss-web-controller/assets/templates/Controller.java.template +21 -22
  337. package/template/.cursor/skills/yss-web-controller/assets/templates/WebConvertor.java.template +19 -12
  338. package/template/.cursor/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +19 -0
  339. package/template/.cursor/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +21 -0
  340. package/template/.cursor/skills/yss-web-controller/assets/templates/web/dto/Response.java.template +18 -0
  341. package/template/.cursor/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +19 -0
  342. package/template/.cursor/skills/yss-web-controller/references/web-adapter-layer-guide.md +63 -145
  343. package/template/.cursor/skills/yss-web-controller/references/web-generation-contract.schema.json +97 -0
  344. package/template/.cursor/skills/yss-web-controller/scripts/generate_controller.mjs +168 -19
  345. package/template/.cursor/skills/yss-web-controller/scripts/generate_controller.test.mjs +144 -7
  346. package/template/.cursorrules +9 -5
  347. package/template/.gemini/settings.json +8 -0
  348. package/template/.hermes/skills/ask-matt/SKILL.md +1 -1
  349. package/template/.hermes/skills/code-review/references/yss-review-standards.md +3 -3
  350. package/template/.hermes/skills/component-selection-imports/SKILL.md +2 -2
  351. package/template/.hermes/skills/frontend-commit/SKILL.md +1 -1
  352. package/template/.hermes/skills/wayfinder/SKILL.md +2 -2
  353. package/template/.hermes/skills/yss-api-integration/SKILL.md +85 -339
  354. package/template/.hermes/skills/yss-application/SKILL.md +7 -5
  355. package/template/.hermes/skills/yss-application/references/application-layer-guide.md +60 -105
  356. package/template/.hermes/skills/yss-components/SKILL.md +1 -1
  357. package/template/.hermes/skills/yss-ddd-scaffold-generator/SKILL.md +39 -14
  358. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/config/application-local.yml.template +8 -0
  359. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +2 -3
  360. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +36 -0
  361. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/java/bootstrap-application.java.template +15 -0
  362. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/adapter-pom.xml.template +3 -3
  363. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +13 -4
  364. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +24 -4
  365. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/domain-pom.xml.template +6 -20
  366. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/infrastructure-pom.xml.template +26 -6
  367. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +70 -10
  368. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +24 -10
  369. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/maven.config +2 -3
  370. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/settings.xml +18 -105
  371. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.properties +4 -2
  372. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +78 -156
  373. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +90 -385
  374. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +20 -188
  375. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +42 -122
  376. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +225 -0
  377. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +164 -0
  378. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +126 -0
  379. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +153 -42
  380. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +172 -0
  381. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +87 -7
  382. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +335 -12
  383. package/template/.hermes/skills/yss-design-system/SKILL.md +2 -2
  384. package/template/.hermes/skills/yss-design-system/references/design-system.md +2 -2
  385. package/template/.hermes/skills/yss-domain/SKILL.md +5 -4
  386. package/template/.hermes/skills/yss-domain/agents/openai.yaml +2 -2
  387. package/template/.hermes/skills/yss-domain/references/domain-layer-guide.md +62 -235
  388. package/template/.hermes/skills/yss-dto/SKILL.md +11 -5
  389. package/template/.hermes/skills/yss-dto/references/README.md +2 -2
  390. package/template/.hermes/skills/yss-dto/references/openapi-wire-profile.yaml +9 -3
  391. package/template/.hermes/skills/yss-exception/SKILL.md +2 -0
  392. package/template/.hermes/skills/yss-formily/SKILL.md +1 -1
  393. package/template/.hermes/skills/yss-mybatis/SKILL.md +2 -2
  394. package/template/.hermes/skills/yss-page-module-development/SKILL.md +2 -0
  395. package/template/.hermes/skills/yss-product-lifecycle/SKILL.md +1 -1
  396. package/template/.hermes/skills/yss-product-lifecycle/references/matt-yss-adapter.md +2 -2
  397. package/template/.hermes/skills/yss-product-lifecycle/references/orchestration-contract.yaml +54 -21
  398. package/template/.hermes/skills/yss-product-lifecycle/references/orchestration.md +2 -2
  399. package/template/.hermes/skills/yss-repository/SKILL.md +19 -15
  400. package/template/.hermes/skills/yss-repository/agents/openai.yaml +2 -2
  401. package/template/.hermes/skills/yss-repository/references/infrastructure-layer-guide.md +70 -155
  402. package/template/.hermes/skills/yss-research/SKILL.md +73 -0
  403. package/template/.hermes/skills/yss-research/agents/openai.yaml +3 -0
  404. package/template/.hermes/skills/yss-research/assets/evidence-template.yaml +68 -0
  405. package/template/.hermes/skills/yss-research/assets/research-brief-template.md +36 -0
  406. package/template/.hermes/skills/yss-research/references/evidence-contract.md +42 -0
  407. package/template/.hermes/skills/yss-research/scripts/validate-research-package.mjs +128 -0
  408. package/template/.hermes/skills/yss-research/tests/run-scenarios.mjs +81 -0
  409. package/template/.hermes/skills/yss-router/references/router-contract.yaml +48 -10
  410. package/template/.hermes/skills/yss-stage-decision/SKILL.md +2 -1
  411. package/template/.hermes/skills/yss-ui/SKILL.md +6 -5
  412. package/template/.hermes/skills/yss-ui/references/component-routing.md +1 -1
  413. package/template/.hermes/skills/yss-ui-business-page-generation/SKILL.md +159 -0
  414. package/template/.hermes/skills/yss-ui-business-page-generation/references/component-map.md +39 -0
  415. package/template/.hermes/skills/yss-ui-business-page-generation/references/hooks-map.md +70 -0
  416. package/template/.hermes/skills/yss-ui-business-page-generation/references/utils-map.md +51 -0
  417. package/template/.hermes/skills/yss-use-table-height/SKILL.md +78 -297
  418. package/template/.hermes/skills/yss-use-tree-height/SKILL.md +51 -393
  419. package/template/.hermes/skills/yss-web-controller/SKILL.md +26 -19
  420. package/template/.hermes/skills/yss-web-controller/agents/openai.yaml +2 -2
  421. package/template/.hermes/skills/yss-web-controller/assets/templates/Controller.java.template +21 -22
  422. package/template/.hermes/skills/yss-web-controller/assets/templates/WebConvertor.java.template +19 -12
  423. package/template/.hermes/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +19 -0
  424. package/template/.hermes/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +21 -0
  425. package/template/.hermes/skills/yss-web-controller/assets/templates/web/dto/Response.java.template +18 -0
  426. package/template/.hermes/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +19 -0
  427. package/template/.hermes/skills/yss-web-controller/references/web-adapter-layer-guide.md +63 -145
  428. package/template/.hermes/skills/yss-web-controller/references/web-generation-contract.schema.json +97 -0
  429. package/template/.hermes/skills/yss-web-controller/scripts/generate_controller.mjs +168 -19
  430. package/template/.hermes/skills/yss-web-controller/scripts/generate_controller.test.mjs +144 -7
  431. package/template/.kiro/settings/mcp.json +8 -0
  432. package/template/.mcp.json +8 -0
  433. package/template/.pi/skills/ask-matt/SKILL.md +1 -1
  434. package/template/.pi/skills/code-review/references/yss-review-standards.md +3 -3
  435. package/template/.pi/skills/component-selection-imports/SKILL.md +2 -2
  436. package/template/.pi/skills/frontend-commit/SKILL.md +1 -1
  437. package/template/.pi/skills/wayfinder/SKILL.md +2 -2
  438. package/template/.pi/skills/yss-api-integration/SKILL.md +85 -339
  439. package/template/.pi/skills/yss-application/SKILL.md +7 -5
  440. package/template/.pi/skills/yss-application/references/application-layer-guide.md +60 -105
  441. package/template/.pi/skills/yss-components/SKILL.md +1 -1
  442. package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +39 -14
  443. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/config/application-local.yml.template +8 -0
  444. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +2 -3
  445. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +36 -0
  446. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/java/bootstrap-application.java.template +15 -0
  447. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/adapter-pom.xml.template +3 -3
  448. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +13 -4
  449. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +24 -4
  450. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/domain-pom.xml.template +6 -20
  451. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/infrastructure-pom.xml.template +26 -6
  452. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +70 -10
  453. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +24 -10
  454. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/maven.config +2 -3
  455. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/settings.xml +18 -105
  456. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.properties +4 -2
  457. package/template/.pi/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +78 -156
  458. package/template/.pi/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +90 -385
  459. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +20 -188
  460. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +42 -122
  461. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +225 -0
  462. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +164 -0
  463. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +126 -0
  464. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +153 -42
  465. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +172 -0
  466. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +87 -7
  467. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +335 -12
  468. package/template/.pi/skills/yss-design-system/SKILL.md +2 -2
  469. package/template/.pi/skills/yss-design-system/references/design-system.md +2 -2
  470. package/template/.pi/skills/yss-domain/SKILL.md +5 -4
  471. package/template/.pi/skills/yss-domain/agents/openai.yaml +2 -2
  472. package/template/.pi/skills/yss-domain/references/domain-layer-guide.md +62 -235
  473. package/template/.pi/skills/yss-dto/SKILL.md +11 -5
  474. package/template/.pi/skills/yss-dto/references/README.md +2 -2
  475. package/template/.pi/skills/yss-dto/references/openapi-wire-profile.yaml +9 -3
  476. package/template/.pi/skills/yss-exception/SKILL.md +2 -0
  477. package/template/.pi/skills/yss-formily/SKILL.md +1 -1
  478. package/template/.pi/skills/yss-mybatis/SKILL.md +2 -2
  479. package/template/.pi/skills/yss-page-module-development/SKILL.md +2 -0
  480. package/template/.pi/skills/yss-product-lifecycle/SKILL.md +1 -1
  481. package/template/.pi/skills/yss-product-lifecycle/references/matt-yss-adapter.md +2 -2
  482. package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +54 -21
  483. package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +2 -2
  484. package/template/.pi/skills/yss-repository/SKILL.md +19 -15
  485. package/template/.pi/skills/yss-repository/agents/openai.yaml +2 -2
  486. package/template/.pi/skills/yss-repository/references/infrastructure-layer-guide.md +70 -155
  487. package/template/.pi/skills/yss-research/SKILL.md +73 -0
  488. package/template/.pi/skills/yss-research/agents/openai.yaml +3 -0
  489. package/template/.pi/skills/yss-research/assets/evidence-template.yaml +68 -0
  490. package/template/.pi/skills/yss-research/assets/research-brief-template.md +36 -0
  491. package/template/.pi/skills/yss-research/references/evidence-contract.md +42 -0
  492. package/template/.pi/skills/yss-research/scripts/validate-research-package.mjs +128 -0
  493. package/template/.pi/skills/yss-research/tests/run-scenarios.mjs +81 -0
  494. package/template/.pi/skills/yss-router/references/router-contract.yaml +48 -10
  495. package/template/.pi/skills/yss-stage-decision/SKILL.md +2 -1
  496. package/template/.pi/skills/yss-ui/SKILL.md +6 -5
  497. package/template/.pi/skills/yss-ui/references/component-routing.md +1 -1
  498. package/template/.pi/skills/yss-ui-business-page-generation/SKILL.md +159 -0
  499. package/template/.pi/skills/yss-ui-business-page-generation/references/component-map.md +39 -0
  500. package/template/.pi/skills/yss-ui-business-page-generation/references/hooks-map.md +70 -0
  501. package/template/.pi/skills/yss-ui-business-page-generation/references/utils-map.md +51 -0
  502. package/template/.pi/skills/yss-use-table-height/SKILL.md +78 -297
  503. package/template/.pi/skills/yss-use-tree-height/SKILL.md +51 -393
  504. package/template/.pi/skills/yss-web-controller/SKILL.md +26 -19
  505. package/template/.pi/skills/yss-web-controller/agents/openai.yaml +2 -2
  506. package/template/.pi/skills/yss-web-controller/assets/templates/Controller.java.template +21 -22
  507. package/template/.pi/skills/yss-web-controller/assets/templates/WebConvertor.java.template +19 -12
  508. package/template/.pi/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +19 -0
  509. package/template/.pi/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +21 -0
  510. package/template/.pi/skills/yss-web-controller/assets/templates/web/dto/Response.java.template +18 -0
  511. package/template/.pi/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +19 -0
  512. package/template/.pi/skills/yss-web-controller/references/web-adapter-layer-guide.md +63 -145
  513. package/template/.pi/skills/yss-web-controller/references/web-generation-contract.schema.json +97 -0
  514. package/template/.pi/skills/yss-web-controller/scripts/generate_controller.mjs +168 -19
  515. package/template/.pi/skills/yss-web-controller/scripts/generate_controller.test.mjs +144 -7
  516. package/template/.qoder/skills/ask-matt/SKILL.md +1 -1
  517. package/template/.qoder/skills/code-review/references/yss-review-standards.md +3 -3
  518. package/template/.qoder/skills/component-selection-imports/SKILL.md +2 -2
  519. package/template/.qoder/skills/frontend-commit/SKILL.md +1 -1
  520. package/template/.qoder/skills/wayfinder/SKILL.md +2 -2
  521. package/template/.qoder/skills/yss-api-integration/SKILL.md +85 -339
  522. package/template/.qoder/skills/yss-application/SKILL.md +7 -5
  523. package/template/.qoder/skills/yss-application/references/application-layer-guide.md +60 -105
  524. package/template/.qoder/skills/yss-components/SKILL.md +1 -1
  525. package/template/.qoder/skills/yss-ddd-scaffold-generator/SKILL.md +39 -14
  526. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/config/application-local.yml.template +8 -0
  527. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +2 -3
  528. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +36 -0
  529. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/java/bootstrap-application.java.template +15 -0
  530. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/pom/adapter-pom.xml.template +3 -3
  531. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +13 -4
  532. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +24 -4
  533. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/pom/domain-pom.xml.template +6 -20
  534. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/pom/infrastructure-pom.xml.template +26 -6
  535. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +70 -10
  536. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +24 -10
  537. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/maven.config +2 -3
  538. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/settings.xml +18 -105
  539. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.properties +4 -2
  540. package/template/.qoder/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +78 -156
  541. package/template/.qoder/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +90 -385
  542. package/template/.qoder/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +20 -188
  543. package/template/.qoder/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +42 -122
  544. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +225 -0
  545. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +164 -0
  546. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +126 -0
  547. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +153 -42
  548. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +172 -0
  549. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +87 -7
  550. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +335 -12
  551. package/template/.qoder/skills/yss-design-system/SKILL.md +2 -2
  552. package/template/.qoder/skills/yss-design-system/references/design-system.md +2 -2
  553. package/template/.qoder/skills/yss-domain/SKILL.md +5 -4
  554. package/template/.qoder/skills/yss-domain/agents/openai.yaml +2 -2
  555. package/template/.qoder/skills/yss-domain/references/domain-layer-guide.md +62 -235
  556. package/template/.qoder/skills/yss-dto/SKILL.md +11 -5
  557. package/template/.qoder/skills/yss-dto/references/README.md +2 -2
  558. package/template/.qoder/skills/yss-dto/references/openapi-wire-profile.yaml +9 -3
  559. package/template/.qoder/skills/yss-exception/SKILL.md +2 -0
  560. package/template/.qoder/skills/yss-formily/SKILL.md +1 -1
  561. package/template/.qoder/skills/yss-mybatis/SKILL.md +2 -2
  562. package/template/.qoder/skills/yss-page-module-development/SKILL.md +2 -0
  563. package/template/.qoder/skills/yss-product-lifecycle/SKILL.md +1 -1
  564. package/template/.qoder/skills/yss-product-lifecycle/references/matt-yss-adapter.md +2 -2
  565. package/template/.qoder/skills/yss-product-lifecycle/references/orchestration-contract.yaml +54 -21
  566. package/template/.qoder/skills/yss-product-lifecycle/references/orchestration.md +2 -2
  567. package/template/.qoder/skills/yss-repository/SKILL.md +19 -15
  568. package/template/.qoder/skills/yss-repository/agents/openai.yaml +2 -2
  569. package/template/.qoder/skills/yss-repository/references/infrastructure-layer-guide.md +70 -155
  570. package/template/.qoder/skills/yss-research/SKILL.md +73 -0
  571. package/template/.qoder/skills/yss-research/agents/openai.yaml +3 -0
  572. package/template/.qoder/skills/yss-research/assets/evidence-template.yaml +68 -0
  573. package/template/.qoder/skills/yss-research/assets/research-brief-template.md +36 -0
  574. package/template/.qoder/skills/yss-research/references/evidence-contract.md +42 -0
  575. package/template/.qoder/skills/yss-research/scripts/validate-research-package.mjs +128 -0
  576. package/template/.qoder/skills/yss-research/tests/run-scenarios.mjs +81 -0
  577. package/template/.qoder/skills/yss-router/references/router-contract.yaml +48 -10
  578. package/template/.qoder/skills/yss-stage-decision/SKILL.md +2 -1
  579. package/template/.qoder/skills/yss-ui/SKILL.md +6 -5
  580. package/template/.qoder/skills/yss-ui/references/component-routing.md +1 -1
  581. package/template/.qoder/skills/yss-ui-business-page-generation/SKILL.md +159 -0
  582. package/template/.qoder/skills/yss-ui-business-page-generation/references/component-map.md +39 -0
  583. package/template/.qoder/skills/yss-ui-business-page-generation/references/hooks-map.md +70 -0
  584. package/template/.qoder/skills/yss-ui-business-page-generation/references/utils-map.md +51 -0
  585. package/template/.qoder/skills/yss-use-table-height/SKILL.md +78 -297
  586. package/template/.qoder/skills/yss-use-tree-height/SKILL.md +51 -393
  587. package/template/.qoder/skills/yss-web-controller/SKILL.md +26 -19
  588. package/template/.qoder/skills/yss-web-controller/agents/openai.yaml +2 -2
  589. package/template/.qoder/skills/yss-web-controller/assets/templates/Controller.java.template +21 -22
  590. package/template/.qoder/skills/yss-web-controller/assets/templates/WebConvertor.java.template +19 -12
  591. package/template/.qoder/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +19 -0
  592. package/template/.qoder/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +21 -0
  593. package/template/.qoder/skills/yss-web-controller/assets/templates/web/dto/Response.java.template +18 -0
  594. package/template/.qoder/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +19 -0
  595. package/template/.qoder/skills/yss-web-controller/references/web-adapter-layer-guide.md +63 -145
  596. package/template/.qoder/skills/yss-web-controller/references/web-generation-contract.schema.json +97 -0
  597. package/template/.qoder/skills/yss-web-controller/scripts/generate_controller.mjs +168 -19
  598. package/template/.qoder/skills/yss-web-controller/scripts/generate_controller.test.mjs +144 -7
  599. package/template/.trae/skills/ask-matt/SKILL.md +1 -1
  600. package/template/.trae/skills/code-review/references/yss-review-standards.md +3 -3
  601. package/template/.trae/skills/component-selection-imports/SKILL.md +2 -2
  602. package/template/.trae/skills/frontend-commit/SKILL.md +1 -1
  603. package/template/.trae/skills/wayfinder/SKILL.md +2 -2
  604. package/template/.trae/skills/yss-api-integration/SKILL.md +85 -339
  605. package/template/.trae/skills/yss-application/SKILL.md +7 -5
  606. package/template/.trae/skills/yss-application/references/application-layer-guide.md +60 -105
  607. package/template/.trae/skills/yss-components/SKILL.md +1 -1
  608. package/template/.trae/skills/yss-ddd-scaffold-generator/SKILL.md +39 -14
  609. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/config/application-local.yml.template +8 -0
  610. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +2 -3
  611. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +36 -0
  612. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/java/bootstrap-application.java.template +15 -0
  613. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/pom/adapter-pom.xml.template +3 -3
  614. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +13 -4
  615. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +24 -4
  616. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/pom/domain-pom.xml.template +6 -20
  617. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/pom/infrastructure-pom.xml.template +26 -6
  618. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +70 -10
  619. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +24 -10
  620. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/maven.config +2 -3
  621. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/settings.xml +18 -105
  622. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.properties +4 -2
  623. package/template/.trae/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +78 -156
  624. package/template/.trae/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +90 -385
  625. package/template/.trae/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +20 -188
  626. package/template/.trae/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +42 -122
  627. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +225 -0
  628. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +164 -0
  629. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +126 -0
  630. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +153 -42
  631. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +172 -0
  632. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +87 -7
  633. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +335 -12
  634. package/template/.trae/skills/yss-design-system/SKILL.md +2 -2
  635. package/template/.trae/skills/yss-design-system/references/design-system.md +2 -2
  636. package/template/.trae/skills/yss-domain/SKILL.md +5 -4
  637. package/template/.trae/skills/yss-domain/agents/openai.yaml +2 -2
  638. package/template/.trae/skills/yss-domain/references/domain-layer-guide.md +62 -235
  639. package/template/.trae/skills/yss-dto/SKILL.md +11 -5
  640. package/template/.trae/skills/yss-dto/references/README.md +2 -2
  641. package/template/.trae/skills/yss-dto/references/openapi-wire-profile.yaml +9 -3
  642. package/template/.trae/skills/yss-exception/SKILL.md +2 -0
  643. package/template/.trae/skills/yss-formily/SKILL.md +1 -1
  644. package/template/.trae/skills/yss-mybatis/SKILL.md +2 -2
  645. package/template/.trae/skills/yss-page-module-development/SKILL.md +2 -0
  646. package/template/.trae/skills/yss-product-lifecycle/SKILL.md +1 -1
  647. package/template/.trae/skills/yss-product-lifecycle/references/matt-yss-adapter.md +2 -2
  648. package/template/.trae/skills/yss-product-lifecycle/references/orchestration-contract.yaml +54 -21
  649. package/template/.trae/skills/yss-product-lifecycle/references/orchestration.md +2 -2
  650. package/template/.trae/skills/yss-repository/SKILL.md +19 -15
  651. package/template/.trae/skills/yss-repository/agents/openai.yaml +2 -2
  652. package/template/.trae/skills/yss-repository/references/infrastructure-layer-guide.md +70 -155
  653. package/template/.trae/skills/yss-research/SKILL.md +73 -0
  654. package/template/.trae/skills/yss-research/agents/openai.yaml +3 -0
  655. package/template/.trae/skills/yss-research/assets/evidence-template.yaml +68 -0
  656. package/template/.trae/skills/yss-research/assets/research-brief-template.md +36 -0
  657. package/template/.trae/skills/yss-research/references/evidence-contract.md +42 -0
  658. package/template/.trae/skills/yss-research/scripts/validate-research-package.mjs +128 -0
  659. package/template/.trae/skills/yss-research/tests/run-scenarios.mjs +81 -0
  660. package/template/.trae/skills/yss-router/references/router-contract.yaml +48 -10
  661. package/template/.trae/skills/yss-stage-decision/SKILL.md +2 -1
  662. package/template/.trae/skills/yss-ui/SKILL.md +6 -5
  663. package/template/.trae/skills/yss-ui/references/component-routing.md +1 -1
  664. package/template/.trae/skills/yss-ui-business-page-generation/SKILL.md +159 -0
  665. package/template/.trae/skills/yss-ui-business-page-generation/references/component-map.md +39 -0
  666. package/template/.trae/skills/yss-ui-business-page-generation/references/hooks-map.md +70 -0
  667. package/template/.trae/skills/yss-ui-business-page-generation/references/utils-map.md +51 -0
  668. package/template/.trae/skills/yss-use-table-height/SKILL.md +78 -297
  669. package/template/.trae/skills/yss-use-tree-height/SKILL.md +51 -393
  670. package/template/.trae/skills/yss-web-controller/SKILL.md +26 -19
  671. package/template/.trae/skills/yss-web-controller/agents/openai.yaml +2 -2
  672. package/template/.trae/skills/yss-web-controller/assets/templates/Controller.java.template +21 -22
  673. package/template/.trae/skills/yss-web-controller/assets/templates/WebConvertor.java.template +19 -12
  674. package/template/.trae/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +19 -0
  675. package/template/.trae/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +21 -0
  676. package/template/.trae/skills/yss-web-controller/assets/templates/web/dto/Response.java.template +18 -0
  677. package/template/.trae/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +19 -0
  678. package/template/.trae/skills/yss-web-controller/references/web-adapter-layer-guide.md +63 -145
  679. package/template/.trae/skills/yss-web-controller/references/web-generation-contract.schema.json +97 -0
  680. package/template/.trae/skills/yss-web-controller/scripts/generate_controller.mjs +168 -19
  681. package/template/.trae/skills/yss-web-controller/scripts/generate_controller.test.mjs +144 -7
  682. package/template/.vscode/mcp.json +8 -0
  683. package/template/AGENTS.md +2 -2
  684. package/template/CONTEXT.md +1 -1
  685. package/template/README.md +3 -0
  686. package/template/docs/agents/digital-human-roles.yaml +3 -3
  687. package/template/docs/agents/skills-maintenance.md +7 -4
  688. package/template/docs/agents/yss-skill-registry.yaml +25 -4
  689. package/template/docs/agents/yss-ui-skills-integration.md +24 -0
  690. package/template/docs/process/MATT-POCOCK-ENGINEERING-SKILLS.md +1 -0
  691. package/template/docs/process/template-verification-profiles.yaml +11 -0
  692. package/template/docs/templates/implementation-routing-template.md +5 -3
  693. package/template/docs/templates/review-report-template.md +2 -2
  694. package/template/docs/user-guide/yss-ui-mcp.md +43 -0
  695. package/template/docs/user-guide//347/224/250/346/210/267/346/211/213/345/206/214.md +1 -1
  696. package/template/scripts/lib/scenario-checks.mjs +11 -7
  697. package/template/scripts/lib/skill-governance.mjs +36 -2
  698. package/template/scripts/lib/skill-registry.mjs +51 -6
  699. package/template/scripts/lib/skill-supply-chain.mjs +75 -3
  700. package/template/scripts/verify-scaffold-generator-scenarios +150 -44
  701. package/template/scripts/verify-skill-governance +1 -1
  702. package/template/scripts/verify-upstream-skill-source +38 -3
  703. package/template/scripts/verify-yss-dto-openapi-profile +12 -2
  704. package/template/skills-lock.json +182 -107
  705. package/template/yss-public-skills.json +2 -0
  706. package/template.manifest.json +4 -0
  707. package/template.snapshot.json +5 -5
  708. package/template/.agents/skills/research/SKILL.md +0 -12
  709. package/template/.agents/skills/research/agents/openai.yaml +0 -3
  710. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/config/parent-pom.xml.template +0 -84
  711. package/template/.agents/skills/yss-web-controller/assets/templates/domain/dto/cmd/AddCmd.java.template +0 -23
  712. package/template/.agents/skills/yss-web-controller/assets/templates/domain/dto/cmd/UpdateCmd.java.template +0 -23
  713. package/template/.agents/skills/yss-web-controller/assets/templates/domain/dto/query/PageQuery.java.template +0 -21
  714. package/template/.agents/skills/yss-web-controller/assets/templates/domain/vo/VO.java.template +0 -20
  715. package/template/.claude/skills/research/SKILL.md +0 -12
  716. package/template/.claude/skills/research/agents/openai.yaml +0 -3
  717. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/config/parent-pom.xml.template +0 -84
  718. package/template/.claude/skills/yss-web-controller/assets/templates/domain/dto/cmd/AddCmd.java.template +0 -23
  719. package/template/.claude/skills/yss-web-controller/assets/templates/domain/dto/cmd/UpdateCmd.java.template +0 -23
  720. package/template/.claude/skills/yss-web-controller/assets/templates/domain/dto/query/PageQuery.java.template +0 -21
  721. package/template/.claude/skills/yss-web-controller/assets/templates/domain/vo/VO.java.template +0 -20
  722. package/template/.codex/skills/research/SKILL.md +0 -12
  723. package/template/.codex/skills/research/agents/openai.yaml +0 -3
  724. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/config/parent-pom.xml.template +0 -84
  725. package/template/.codex/skills/yss-web-controller/assets/templates/domain/dto/cmd/AddCmd.java.template +0 -23
  726. package/template/.codex/skills/yss-web-controller/assets/templates/domain/dto/cmd/UpdateCmd.java.template +0 -23
  727. package/template/.codex/skills/yss-web-controller/assets/templates/domain/dto/query/PageQuery.java.template +0 -21
  728. package/template/.codex/skills/yss-web-controller/assets/templates/domain/vo/VO.java.template +0 -20
  729. package/template/.cursor/skills/research/SKILL.md +0 -12
  730. package/template/.cursor/skills/research/agents/openai.yaml +0 -3
  731. package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/config/parent-pom.xml.template +0 -84
  732. package/template/.cursor/skills/yss-web-controller/assets/templates/domain/dto/cmd/AddCmd.java.template +0 -23
  733. package/template/.cursor/skills/yss-web-controller/assets/templates/domain/dto/cmd/UpdateCmd.java.template +0 -23
  734. package/template/.cursor/skills/yss-web-controller/assets/templates/domain/dto/query/PageQuery.java.template +0 -21
  735. package/template/.cursor/skills/yss-web-controller/assets/templates/domain/vo/VO.java.template +0 -20
  736. package/template/.hermes/skills/research/SKILL.md +0 -12
  737. package/template/.hermes/skills/research/agents/openai.yaml +0 -3
  738. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/config/parent-pom.xml.template +0 -84
  739. package/template/.hermes/skills/yss-web-controller/assets/templates/domain/dto/cmd/AddCmd.java.template +0 -23
  740. package/template/.hermes/skills/yss-web-controller/assets/templates/domain/dto/cmd/UpdateCmd.java.template +0 -23
  741. package/template/.hermes/skills/yss-web-controller/assets/templates/domain/dto/query/PageQuery.java.template +0 -21
  742. package/template/.hermes/skills/yss-web-controller/assets/templates/domain/vo/VO.java.template +0 -20
  743. package/template/.pi/skills/research/SKILL.md +0 -12
  744. package/template/.pi/skills/research/agents/openai.yaml +0 -3
  745. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/config/parent-pom.xml.template +0 -84
  746. package/template/.pi/skills/yss-web-controller/assets/templates/domain/dto/cmd/AddCmd.java.template +0 -23
  747. package/template/.pi/skills/yss-web-controller/assets/templates/domain/dto/cmd/UpdateCmd.java.template +0 -23
  748. package/template/.pi/skills/yss-web-controller/assets/templates/domain/dto/query/PageQuery.java.template +0 -21
  749. package/template/.pi/skills/yss-web-controller/assets/templates/domain/vo/VO.java.template +0 -20
  750. package/template/.qoder/skills/research/SKILL.md +0 -12
  751. package/template/.qoder/skills/research/agents/openai.yaml +0 -3
  752. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/config/parent-pom.xml.template +0 -84
  753. package/template/.qoder/skills/yss-web-controller/assets/templates/domain/dto/cmd/AddCmd.java.template +0 -23
  754. package/template/.qoder/skills/yss-web-controller/assets/templates/domain/dto/cmd/UpdateCmd.java.template +0 -23
  755. package/template/.qoder/skills/yss-web-controller/assets/templates/domain/dto/query/PageQuery.java.template +0 -21
  756. package/template/.qoder/skills/yss-web-controller/assets/templates/domain/vo/VO.java.template +0 -20
  757. package/template/.trae/skills/research/SKILL.md +0 -12
  758. package/template/.trae/skills/research/agents/openai.yaml +0 -3
  759. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/config/parent-pom.xml.template +0 -84
  760. package/template/.trae/skills/yss-web-controller/assets/templates/domain/dto/cmd/AddCmd.java.template +0 -23
  761. package/template/.trae/skills/yss-web-controller/assets/templates/domain/dto/cmd/UpdateCmd.java.template +0 -23
  762. package/template/.trae/skills/yss-web-controller/assets/templates/domain/dto/query/PageQuery.java.template +0 -21
  763. package/template/.trae/skills/yss-web-controller/assets/templates/domain/vo/VO.java.template +0 -20
@@ -1,21 +1,29 @@
1
1
  #!/usr/bin/env node
2
- import { access, mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { createHash } from "node:crypto";
3
+ import { constants, access, copyFile, mkdir, mkdtemp, readFile, rm, unlink, writeFile } from "node:fs/promises";
4
+ import { tmpdir } from "node:os";
3
5
  import path from "node:path";
4
6
  import { fileURLToPath } from "node:url";
5
7
 
8
+ import { parseDocument } from "../../../../scripts/vendor/yaml.mjs";
9
+
6
10
  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"]);
11
+ const PLATFORM_VALIDATION_NAMESPACES = {
12
+ "spring-boot-2.7-jdk8": "javax",
13
+ "spring-boot-3-jdk17": "jakarta"
14
+ };
15
+ const required = ["metadata-file", "contract-file", "dto-wire-profile-file", "base-package", "module-name", "domain-segment"];
16
+ const valued = new Set([...required, "output-dir", "web-project-dir", "web-output-dir", "author", "application-service-package", "validation-namespace", "scaffold-manifest-file"]);
9
17
 
10
18
  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]";
19
+ return "Usage: node generate_controller.mjs --metadata-file FILE --contract-file FILE --dto-wire-profile-file FILE --base-package PACKAGE --module-name NAME --domain-segment SEGMENT [--output-dir DIR] [--web-project-dir DIR] [--web-output-dir DIR] [--scaffold-manifest-file FILE] [--author NAME] [--application-service-package PACKAGE] [--validation-namespace javax|jakarta]";
12
20
  }
13
21
  export function parseArgs(argv) {
14
22
  const args = { "output-dir": "./output", author: "System", "validation-namespace": "javax", force: false };
15
23
  for (let index = 0; index < argv.length; index += 1) {
16
24
  const token = argv[index];
17
25
  if (token === "--help" || token === "-h") return { help: true };
18
- if (token === "--force") { args.force = true; continue; }
26
+ if (token === "--force") throw new Error("unsupported: initialize-only Web 生成禁止 --force、已有目标覆盖和旧项目迁移");
19
27
  if (!token.startsWith("--") || !valued.has(token.slice(2))) throw new Error(`unrecognized argument: ${token}`);
20
28
  const value = argv[++index];
21
29
  if (!value || value.startsWith("--")) throw new Error(`argument ${token} requires a value`);
@@ -32,9 +40,11 @@ const packagePath = (value) => value.replaceAll(".", path.sep);
32
40
  const ensureSubdir = (root, name) => path.basename(path.normalize(root)) === name ? root : path.join(root, name);
33
41
  const javaType = (sqlType = "") => TYPE_MAPPING[sqlType.toLowerCase().split("(")[0]] || "String";
34
42
 
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) => {
43
+ function fields(columns, selected, { command = false } = {}) {
44
+ const byName = new Map(columns.map((column) => [String(column.name), column]));
45
+ return selected.map((field) => {
46
+ const column = byName.get(field);
47
+ if (!column) throw new Error(`approved field is absent from metadata: ${field}`);
38
48
  const type = javaType(column.sql_type);
39
49
  const name = lowerCamel(column.name);
40
50
  const comment = column.comment || "";
@@ -45,33 +55,172 @@ function fields(columns, { skipPk = false, command = false, skipAudit = true } =
45
55
  }
46
56
  function render(template, context) { return template.replace(/\$(?:\{([A-Za-z_][A-Za-z0-9_]*)\}|([A-Za-z_][A-Za-z0-9_]*))/g, (_, braced, plain) => { const key = braced || plain; if (!(key in context)) throw new Error(`missing template field: ${key}`); return context[key]; }); }
47
57
  async function exists(target) { try { await access(target); return true; } catch { return false; } }
58
+ const present = (value) => value !== undefined && value !== null && value !== "";
59
+ function within(root, target) {
60
+ const relative = path.relative(path.resolve(root), path.resolve(target));
61
+ return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
62
+ }
63
+ function simpleJavaName(javaType) {
64
+ return javaType.replace(/<.*$/, "").split(".").at(-1);
65
+ }
66
+ function paginationFields(selected, dtoProfile) {
67
+ const definitions = dtoProfile.page_query.fields;
68
+ const unique = [...new Set(selected)];
69
+ const unsupported = unique.filter((name) => !(name in definitions) || dtoProfile.page_query.forbidden_client_fields.includes(name));
70
+ if (unsupported.length) throw new Error(`unsupported pagination fields: ${unsupported.join(", ")}`);
71
+ return unique.map((name) => {
72
+ const definition = definitions[name];
73
+ const wireType = definition.wire_types.find((item) => item !== "null");
74
+ const javaType = wireType === "integer" ? (definition.nullable ? "Integer" : "int") : wireType === "string" ? "String" : null;
75
+ if (!javaType) throw new Error(`unsupported yss-dto pagination wire type for ${name}: ${definition.wire_types.join(", ")}`);
76
+ const annotation = definition.enum?.length
77
+ ? ` @Pattern(regexp = "${definition.enum.join("|")}", message = "${name} must be one of ${definition.enum.join(", ")}")\n`
78
+ : "";
79
+ const initializer = definition.default === undefined ? "" : ` = ${typeof definition.default === "string" ? JSON.stringify(definition.default) : definition.default}`;
80
+ return `${annotation} private ${javaType} ${name}${initializer};`;
81
+ }).join("\n");
82
+ }
83
+
84
+ async function loadDtoWireProfile(contract, args) {
85
+ const profilePath = path.resolve(args["dto-wire-profile-file"]);
86
+ if (profilePath !== path.resolve(contract.dto_wire_profile_ref ?? "")) throw new Error("--dto-wire-profile-file does not match the approved Web generation contract");
87
+ if (!await exists(profilePath)) throw new Error(`yss-dto wire profile not found: ${profilePath}`);
88
+ const source = await readFile(profilePath);
89
+ const digest = createHash("sha256").update(source).digest("hex");
90
+ if (digest !== contract.dto_wire_profile_digest) throw new Error("yss-dto wire profile digest does not match the approved Web generation contract");
91
+ const document = parseDocument(source.toString("utf8"), { maxAliasCount: 0, uniqueKeys: true });
92
+ if (document.errors.length) throw new Error(`invalid yss-dto wire profile: ${document.errors[0].message}`);
93
+ const profile = document.toJS({ maxAliasCount: 0 });
94
+ if (profile?.schema_version !== 1 || profile?.kind !== "yss-dto-openapi-wire-profile") throw new Error("unsupported yss-dto wire profile");
95
+ const resultPackage = profile.canonical?.java_package;
96
+ const pageResult = profile.wrappers?.PageResult;
97
+ const singleResult = profile.wrappers?.SingleResult;
98
+ const commandDtoType = profile.request_bases?.command?.java_type;
99
+ const queryDtoType = profile.request_bases?.query?.java_type;
100
+ if (![resultPackage, pageResult?.java_type, singleResult?.java_type, commandDtoType, queryDtoType].every(present)) throw new Error("incomplete yss-dto wire profile type mapping");
101
+ if (![pageResult.java_type, singleResult.java_type].every((type) => type.startsWith(`${resultPackage}.`))) throw new Error("yss-dto result wrapper package is inconsistent");
102
+ if (!profile.page_query?.fields || !Array.isArray(profile.page_query?.forbidden_client_fields)) throw new Error("incomplete yss-dto page_query mapping");
103
+ const factory = pageResult.java_factory;
104
+ const singleFactory = singleResult.java_factory;
105
+ const javaIdentifier = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
106
+ if (!javaIdentifier.test(factory?.method ?? "") || !Array.isArray(factory.arguments) || !factory.arguments.length) throw new Error("incomplete yss-dto PageResult factory mapping");
107
+ if (!javaIdentifier.test(singleFactory?.method ?? "") || JSON.stringify(singleFactory.arguments) !== JSON.stringify(["data"])) throw new Error("incomplete yss-dto SingleResult factory mapping");
108
+ const expressionByArgument = { data: "toResponses(source.getData())", totalCount: "source.getTotalCount()", pageSize: "source.getPageSize()", pageIndex: "source.getPageIndex()" };
109
+ const unsupportedArguments = factory.arguments.filter((name) => !(name in expressionByArgument));
110
+ if (unsupportedArguments.length) throw new Error(`unsupported yss-dto PageResult factory arguments: ${unsupportedArguments.join(", ")}`);
111
+ return {
112
+ profile,
113
+ resultPackage,
114
+ pageResultType: pageResult.java_type.replace(/<.*$/, ""),
115
+ singleResultType: singleResult.java_type.replace(/<.*$/, ""),
116
+ pageResultFactoryMethod: factory.method,
117
+ singleResultFactoryMethod: singleFactory.method,
118
+ commandDtoType,
119
+ queryDtoType,
120
+ pageResultFactoryArguments: factory.arguments.map((name, index) => ` ${expressionByArgument[name]}${index < factory.arguments.length - 1 ? "," : ""}`).join("\n")
121
+ };
122
+ }
123
+
124
+ async function validateContract(contract, args) {
125
+ if (contract.schema_version !== 2) throw new Error(`web generation contract schema_version=${contract.schema_version} is unsupported; only schema_version=2 is accepted`);
126
+ if (contract.status !== "approved") throw new Error("web generation contract must be approved");
127
+ const requiredFields = ["contract_id", "contract_version", "current_version", "slice_id", "integration_mode", "implementation_project_root", "base_package", "module_name", "domain_segment", "application_service_package", "architecture_profile", "platform_profile", "validation_namespace", "dto_placement", "dto_wire_profile_ref", "dto_wire_profile_digest", "openapi_freeze_ref", "fields", "allowed_write_paths", "expected_evidence_files", "verification_commands"];
128
+ const missing = requiredFields.filter((name) => !present(contract[name]));
129
+ if (missing.length) throw new Error(`approved web generation contract is incomplete: ${missing.join(", ")}`);
130
+ if (contract.current_version !== contract.contract_version) throw new Error("web generation contract is not the current approved version");
131
+ if (!Number.isInteger(contract.contract_version) || contract.contract_version < 1) throw new Error("web generation contract_version must be a positive integer");
132
+ if (!["existing-project", "scaffold-v2"].includes(contract.integration_mode)) throw new Error("unsupported web generation integration_mode");
133
+ if (!["allowed_write_paths", "expected_evidence_files", "verification_commands"].every((name) => Array.isArray(contract[name]) && contract[name].length)) throw new Error("web generation contract requires non-empty allowed_write_paths, expected_evidence_files, and verification_commands");
134
+ 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");
135
+ 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");
136
+ const applicationPackage = args["application-service-package"] || `${args["base-package"]}.application.service`;
137
+ if (contract.application_service_package !== applicationPackage) throw new Error("--application-service-package does not match the approved web generation contract");
138
+ if (!(contract.platform_profile in PLATFORM_VALIDATION_NAMESPACES)) throw new Error("unsupported platform_profile in approved web generation contract");
139
+ if (PLATFORM_VALIDATION_NAMESPACES[contract.platform_profile] !== contract.validation_namespace) throw new Error("platform_profile and validation_namespace are inconsistent");
140
+ if (contract.validation_namespace !== args["validation-namespace"]) throw new Error("--validation-namespace must match the approved web generation contract");
141
+
142
+ const implementationRoot = path.resolve(contract.implementation_project_root);
143
+ if (contract.integration_mode === "existing-project") {
144
+ if (args["scaffold-manifest-file"] || present(contract.scaffold_manifest_ref)) throw new Error("existing-project Web generation must not claim a scaffold manifest");
145
+ return { applicationPackage, implementationRoot };
146
+ }
147
+
148
+ if (!args["scaffold-manifest-file"] || !present(contract.scaffold_manifest_ref)) throw new Error("scaffold-v2 Web generation requires --scaffold-manifest-file and scaffold_manifest_ref");
149
+ const manifestPath = path.resolve(args["scaffold-manifest-file"]);
150
+ if (manifestPath !== path.resolve(contract.scaffold_manifest_ref)) throw new Error("--scaffold-manifest-file does not match the approved web generation contract");
151
+ if (!await exists(manifestPath)) throw new Error(`scaffold manifest not found: ${manifestPath}`);
152
+ const manifest = JSON.parse(await readFile(manifestPath, "utf8"));
153
+ if (manifest.schema_version !== 2) throw new Error("scaffold manifest must use schema_version=2");
154
+ if (!["empty-scaffold-verified", "first-slice-verified"].includes(manifest.completion_level)) throw new Error("scaffold manifest must be empty-scaffold-verified before Web generation");
155
+ const scaffoldRoot = path.dirname(path.dirname(manifestPath));
156
+ if (implementationRoot !== scaffoldRoot) throw new Error("implementation_project_root does not match the scaffold manifest project root");
157
+ const expectedWebProject = path.join(scaffoldRoot, `${manifest.project_name}-adapter`, `${manifest.project_name}-web`);
158
+ if (!args["web-project-dir"] || path.resolve(args["web-project-dir"]) !== expectedWebProject) throw new Error("--web-project-dir does not match the scaffold manifest project layout");
159
+ const profilePairs = [["architecture", "architecture_profile"], ["platform", "platform_profile"], ["validation_namespace", "validation_namespace"], ["dto_placement", "dto_placement"]];
160
+ for (const [manifestField, contractField] of profilePairs) {
161
+ if (manifest.profiles?.[manifestField] !== contract[contractField]) throw new Error(`scaffold manifest ${manifestField} profile does not match the approved Web contract`);
162
+ }
163
+ if (manifest.base_package !== contract.base_package) throw new Error("scaffold manifest base_package does not match the approved Web contract");
164
+ return { applicationPackage, implementationRoot };
165
+ }
48
166
 
49
167
  export async function generate(args, logger = console) {
50
168
  if (!await exists(args["metadata-file"])) throw new Error(`Metadata file not found: ${args["metadata-file"]}`);
169
+ if (!await exists(args["contract-file"])) throw new Error(`Contract file not found: ${args["contract-file"]}`);
51
170
  let metadata;
52
171
  try { metadata = JSON.parse(await readFile(args["metadata-file"], "utf8")); } catch (error) { throw new Error(`Error reading metadata file: ${error.message}`); }
172
+ let contract;
173
+ try { contract = JSON.parse(await readFile(args["contract-file"], "utf8")); } catch (error) { throw new Error(`Error reading contract file: ${error.message}`); }
174
+ const { applicationPackage, implementationRoot } = await validateContract(contract, args);
175
+ const dto = await loadDtoWireProfile(contract, args);
53
176
  const tables = metadata.tables || [];
54
177
  if (!tables.length) { logger.warn("Warning: No tables found in metadata."); return []; }
55
178
  const scriptDir = path.dirname(fileURLToPath(import.meta.url));
56
179
  const templatesDir = path.resolve(scriptDir, "../assets/templates");
57
180
  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)])));
181
+ 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"];
182
+ const templates = Object.fromEntries(await Promise.all(templateNames.map(async (name) => [name, await template(name)])));
59
183
  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
184
  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
185
  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}`); };
186
+ const planned = [];
187
+ const plan = (target, contents) => planned.push({ target, contents });
66
188
  for (const table of tables) {
67
189
  const domainClass = pascal(table.table_name); const domainVar = lowerCamel(table.table_name); const domainDesc = String(table.table_comment || domainClass).trim().replaceAll("\n", " ");
68
- 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 }));
190
+ const approvedFields = contract.fields[table.table_name];
191
+ if (!approvedFields || ["create", "update", "query", "pagination", "response"].some((name) => !Array.isArray(approvedFields[name]))) throw new Error(`approved web field contract is missing create/update/query/pagination/response allowlists for table: ${table.table_name}`);
192
+ 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"], result_package: dto.resultPackage, page_result_type: dto.pageResultType, page_result_simple_name: simpleJavaName(dto.pageResultType), page_result_factory_method: dto.pageResultFactoryMethod, single_result_type: dto.singleResultType, single_result_simple_name: simpleJavaName(dto.singleResultType), single_result_factory_method: dto.singleResultFactoryMethod, command_dto_type: dto.commandDtoType, command_dto_simple_name: simpleJavaName(dto.commandDtoType), query_dto_type: dto.queryDtoType, query_dto_simple_name: simpleJavaName(dto.queryDtoType), page_result_factory_arguments: dto.pageResultFactoryArguments };
193
+ plan(path.join(webRoot, `${domainClass}Controller.java`), render(templates["Controller.java.template"], context));
194
+ plan(path.join(webRoot, "convertor", `${domainClass}WebConvertor.java`), render(templates["WebConvertor.java.template"], context));
195
+ 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, pagination_field_declarations: paginationFields(approvedFields.pagination, dto.profile) }));
196
+ }
197
+ const targets = planned.map(({ target }) => target);
198
+ if (new Set(targets).size !== targets.length) throw new Error("approved metadata produces duplicate target files");
199
+ const existing = [];
200
+ for (const target of targets) if (await exists(target)) existing.push(target);
201
+ if (existing.length) throw new Error(`initialize-only Web generation refuses existing targets: ${existing.join(", ")}`);
202
+ const allowedRoots = contract.allowed_write_paths.map((item) => path.resolve(implementationRoot, String(item)));
203
+ const outside = targets.filter((target) => !allowedRoots.some((root) => within(root, target)));
204
+ if (outside.length) throw new Error(`planned Web targets are outside allowed_write_paths: ${outside.join(", ")}`);
205
+ const staging = await mkdtemp(path.join(tmpdir(), "yss-web-generation-"));
206
+ const created = [];
207
+ try {
208
+ for (const [index, { contents }] of planned.entries()) await writeFile(path.join(staging, String(index)), contents, "utf8");
209
+ for (const [index, { target }] of planned.entries()) {
210
+ await mkdir(path.dirname(target), { recursive: true });
211
+ await copyFile(path.join(staging, String(index)), target, constants.COPYFILE_EXCL);
212
+ created.push(target);
213
+ logger.log(`Generated: ${target}`);
214
+ }
215
+ } catch (error) {
216
+ for (const target of created.reverse()) {
217
+ try { await unlink(target); } catch (cleanupError) { if (cleanupError.code !== "ENOENT") error.cleanupError = cleanupError.message; }
218
+ }
219
+ throw error;
220
+ } finally {
221
+ await rm(staging, { recursive: true, force: true });
73
222
  }
74
- return written;
223
+ return targets;
75
224
  }
76
225
  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
226
  if (process.argv[1] === fileURLToPath(import.meta.url)) await main();
@@ -1,19 +1,156 @@
1
1
  import assert from "node:assert/strict";
2
- import { mkdtemp, readFile, writeFile } from "node:fs/promises";
2
+ import { createHash } from "node:crypto";
3
+ import { mkdir, mkdtemp, readFile, writeFile } from "node:fs/promises";
3
4
  import { tmpdir } from "node:os";
4
5
  import path from "node:path";
5
6
  import test from "node:test";
7
+ import { fileURLToPath } from "node:url";
6
8
  import { generate, parseArgs } from "./generate_controller.mjs";
7
9
 
8
- test("generates application-service controller with requested validation profile", async () => {
10
+ const scripts = path.dirname(fileURLToPath(import.meta.url));
11
+ const dtoWireProfileFile = path.resolve(scripts, "../../yss-dto/references/openapi-wire-profile.yaml");
12
+ const dtoWireProfileDigest = createHash("sha256").update(await readFile(dtoWireProfileFile)).digest("hex");
13
+
14
+ const metadataValue = {
15
+ tables: [{
16
+ table_name: "quality_rule",
17
+ table_comment: "质量规则",
18
+ columns: [
19
+ { name: "id", sql_type: "bigint", primary: true, nullable: false },
20
+ { name: "rule_name", sql_type: "varchar(64)", nullable: false }
21
+ ]
22
+ }]
23
+ };
24
+
25
+ function webContract(root, overrides = {}) {
26
+ return {
27
+ schema_version: 2,
28
+ contract_id: "slice-quality-web-1",
29
+ contract_version: 1,
30
+ current_version: 1,
31
+ slice_id: "quality-rule-create",
32
+ status: "approved",
33
+ integration_mode: "existing-project",
34
+ implementation_project_root: root,
35
+ base_package: "com.yss.demo",
36
+ module_name: "demo",
37
+ domain_segment: "quality",
38
+ application_service_package: "com.yss.demo.application.service",
39
+ architecture_profile: "target-domain-model",
40
+ platform_profile: "spring-boot-3-jdk17",
41
+ validation_namespace: "jakarta",
42
+ dto_placement: "web",
43
+ dto_wire_profile_ref: dtoWireProfileFile,
44
+ dto_wire_profile_digest: dtoWireProfileDigest,
45
+ openapi_freeze_ref: "openapi://quality-rule@1",
46
+ allowed_write_paths: [root],
47
+ expected_evidence_files: ["evidence/web-generation.json"],
48
+ verification_commands: ["./mvnw test", "./mvnw package"],
49
+ fields: {
50
+ quality_rule: {
51
+ create: ["rule_name"],
52
+ update: ["id", "rule_name"],
53
+ query: ["rule_name"],
54
+ pagination: ["pageIndex", "pageSize"],
55
+ response: ["id", "rule_name"]
56
+ }
57
+ },
58
+ ...overrides
59
+ };
60
+ }
61
+
62
+ async function fixture(overrides = {}) {
9
63
  const root = await mkdtemp(path.join(tmpdir(), "yss-controller-"));
10
64
  const metadata = path.join(root, "metadata.json");
11
- 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
- const controller = await readFile(path.join(root, "out", "com", "yss", "demo", "rest", "QualityRuleController.java"), "utf8");
65
+ const contract = path.join(root, "web-contract.json");
66
+ const output = path.join(root, "out");
67
+ await writeFile(metadata, JSON.stringify(metadataValue));
68
+ await writeFile(contract, JSON.stringify(webContract(root, overrides)));
69
+ const args = ["--metadata-file", metadata, "--contract-file", contract, "--dto-wire-profile-file", dtoWireProfileFile, "--base-package", "com.yss.demo", "--module-name", "demo", "--domain-segment", "quality", "--output-dir", output, "--application-service-package", "com.yss.demo.application.service", "--validation-namespace", overrides.validation_namespace ?? "jakarta"];
70
+ return { root, metadata, contract, output, args };
71
+ }
72
+
73
+ test("generates approved standalone Web code and exposes only approved pagination fields", async () => {
74
+ const data = await fixture();
75
+ await generate(parseArgs(data.args), { log() {}, warn() {} });
76
+ const rest = path.join(data.output, "com", "yss", "demo", "rest");
77
+ const controller = await readFile(path.join(rest, "QualityRuleController.java"), "utf8");
78
+ const convertor = await readFile(path.join(rest, "convertor", "QualityRuleWebConvertor.java"), "utf8");
79
+ const createRequest = await readFile(path.join(rest, "dto", "request", "QualityRuleCreateRequest.java"), "utf8");
80
+ const pageRequest = await readFile(path.join(rest, "dto", "request", "QualityRulePageRequest.java"), "utf8");
14
81
  assert.match(controller, /import com\.yss\.demo\.application\.service\.QualityRuleService;/);
82
+ assert.match(controller, /SingleResult\.of\(/);
15
83
  assert.match(controller, /import jakarta\.validation\.Valid;/);
16
- assert.doesNotMatch(controller, /Gateway/);
84
+ assert.match(convertor, /@Mapper\(componentModel = "spring"\)/);
85
+ assert.match(convertor, /PageResult\.of\(\s*toResponses\(source\.getData\(\)\),\s*source\.getTotalCount\(\),\s*source\.getPageSize\(\),\s*source\.getPageIndex\(\)/s);
86
+ assert.doesNotMatch(`${controller}\n${convertor}`, /Gateway|\.domain\.|Mappers\.getMapper|INSTANCE/);
87
+ assert.match(createRequest, /private String ruleName;/);
88
+ assert.doesNotMatch(createRequest, /private Long id;|@Data/);
89
+ assert.match(pageRequest, /private int pageIndex = 1;/);
90
+ assert.match(pageRequest, /private int pageSize = 10;/);
91
+ assert.doesNotMatch(pageRequest, /orderBy|orderDirection|groupBy|offset|needTotalCount|tempTotalCount|extends PageQuery/);
17
92
  });
18
93
 
19
- test("rejects missing required CLI arguments", () => assert.throws(() => parseArgs(["--module-name", "demo"]), /required/));
94
+ test("rejects a yss-dto wire profile whose digest differs from the approved contract", async () => {
95
+ const data = await fixture({ dto_wire_profile_digest: "0".repeat(64) });
96
+ await assert.rejects(() => generate(parseArgs(data.args), { log() {}, warn() {} }), /yss-dto wire profile digest/);
97
+ });
98
+
99
+ test("rejects missing CLI arguments, schema v1, draft contracts, and inconsistent platform profiles", async () => {
100
+ assert.throws(() => parseArgs(["--module-name", "demo"]), /required/);
101
+ const v1 = await fixture({ schema_version: 1 });
102
+ await assert.rejects(() => generate(parseArgs(v1.args), { log() {}, warn() {} }), /schema_version=1.*unsupported/);
103
+ const draft = await fixture({ status: "draft" });
104
+ await assert.rejects(() => generate(parseArgs(draft.args), { log() {}, warn() {} }), /approved/);
105
+ const mismatch = await fixture({ platform_profile: "spring-boot-3-jdk17", validation_namespace: "javax" });
106
+ await assert.rejects(() => generate(parseArgs(mismatch.args), { log() {}, warn() {} }), /platform_profile and validation_namespace/);
107
+ assert.throws(() => parseArgs([...draft.args, "--force"]), /initialize-only/);
108
+ });
109
+
110
+ test("binds identity and every target to the approved write scope before writing", async () => {
111
+ const data = await fixture();
112
+ await assert.rejects(() => generate(parseArgs(data.args.map((value) => value === "demo" ? "other" : value)), { log() {}, warn() {} }), /approved web generation contract/);
113
+ await writeFile(data.contract, JSON.stringify(webContract(data.root, { allowed_write_paths: [path.join(data.root, "different-root")] })));
114
+ await assert.rejects(() => generate(parseArgs(data.args), { log() {}, warn() {} }), /allowed_write_paths/);
115
+ await writeFile(data.contract, JSON.stringify(webContract(data.root)));
116
+ const existing = path.join(data.output, "com/yss/demo/rest/QualityRuleController.java");
117
+ await mkdir(path.dirname(existing), { recursive: true });
118
+ await writeFile(existing, "user-owned\n");
119
+ await assert.rejects(() => generate(parseArgs(data.args), { log() {}, warn() {} }), /initialize-only/);
120
+ assert.equal(await readFile(existing, "utf8"), "user-owned\n");
121
+ await assert.rejects(() => readFile(path.join(data.output, "com/yss/demo/rest/convertor/QualityRuleWebConvertor.java"), "utf8"), /ENOENT/);
122
+ });
123
+
124
+ test("scaffold-v2 mode requires an empty-scaffold-verified manifest with matching profile and project layout", async () => {
125
+ const data = await fixture({ platform_profile: "spring-boot-2.7-jdk8", validation_namespace: "javax" });
126
+ const projectRoot = path.join(data.root, "demo-service");
127
+ const webProject = path.join(projectRoot, "demo-service-adapter", "demo-service-web");
128
+ const manifest = path.join(projectRoot, ".yss", "scaffold-generation.json");
129
+ await mkdir(path.dirname(manifest), { recursive: true });
130
+ await writeFile(manifest, JSON.stringify({ schema_version: 2, project_name: "demo-service", base_package: "com.yss.demo", completion_level: "empty-scaffold-verified", profiles: { architecture: "target-domain-model", platform: "spring-boot-2.7-jdk8", validation_namespace: "javax", dto_placement: "web" } }));
131
+ const contractValue = webContract(projectRoot, {
132
+ integration_mode: "scaffold-v2",
133
+ implementation_project_root: projectRoot,
134
+ scaffold_manifest_ref: manifest,
135
+ platform_profile: "spring-boot-3-jdk17",
136
+ validation_namespace: "jakarta",
137
+ allowed_write_paths: [path.join(webProject, "src/main/java/com/yss/demo/rest")]
138
+ });
139
+ await writeFile(data.contract, JSON.stringify(contractValue));
140
+ const args = ["--metadata-file", data.metadata, "--contract-file", data.contract, "--dto-wire-profile-file", dtoWireProfileFile, "--scaffold-manifest-file", manifest, "--base-package", "com.yss.demo", "--module-name", "demo", "--domain-segment", "quality", "--web-project-dir", webProject, "--application-service-package", "com.yss.demo.application.service", "--validation-namespace", "jakarta"];
141
+ await assert.rejects(() => generate(parseArgs(args), { log() {}, warn() {} }), /scaffold manifest.*platform/i);
142
+ contractValue.platform_profile = "spring-boot-2.7-jdk8";
143
+ contractValue.validation_namespace = "javax";
144
+ await writeFile(data.contract, JSON.stringify(contractValue));
145
+ await generate(parseArgs(args.map((value) => value === "jakarta" ? "javax" : value)), { log() {}, warn() {} });
146
+ });
147
+
148
+ test("rolls back files written before a filesystem failure", async () => {
149
+ const data = await fixture();
150
+ const rest = path.join(data.output, "com/yss/demo/rest");
151
+ await mkdir(rest, { recursive: true });
152
+ await writeFile(path.join(rest, "convertor"), "blocking-file\n");
153
+ await assert.rejects(() => generate(parseArgs(data.args), { log() {}, warn() {} }));
154
+ await assert.rejects(() => readFile(path.join(rest, "QualityRuleController.java"), "utf8"), /ENOENT/);
155
+ assert.equal(await readFile(path.join(rest, "convertor"), "utf8"), "blocking-file\n");
156
+ });
@@ -84,7 +84,7 @@ Off the main flow entirely.
84
84
  - **`/grilling`** — the interview primitive itself: rounds, the frontier, facts are the agent's job and decisions are yours. `/grill-me` and `/grill-with-docs` are the two named ways in, and `/triage`, `/wayfinder` and `/improve-codebase-architecture` all run it internally. Reach for it directly only when you want the interview with no wrapper around it.
85
85
  - **`/resolving-merge-conflicts`** — work an in-progress merge or rebase conflict hunk by hunk, resolving by **intent** traced to each side's primary source rather than by picking lines, then finish the operation. It never runs `--abort`. Standalone and off every flow: reach for it when you are already mid-conflict.
86
86
  - **`/prototype`** — a small, throwaway program that answers one design question: does this state model feel right, or what should this UI look like. Throwaway is a constraint on how the code is written, not a promise to destroy it: the answer folds into the real code, and the prototype itself is kept as a **primary source** on a `prototype/<name>` branch out of main, pointed at from the implementation issue. It's the detour in step 2 of the main flow, but reach for it any time a design question is hard to settle on paper.
87
- - **`/research`** — delegate reading legwork to a **background agent**: it investigates a question against **primary sources**, then leaves a cited Markdown file in the repo. Keep working while it reads. The file it produces is something to take *into* the main flow at `/grill-with-docs` — research feeds the thinking, it doesn't replace it.
87
+ - **`/yss-research`** — investigate technical or strategy evidence using `technical-evidence` / `strategy-evidence` and `quick` / `evidence-audited` modes. Use a background agent when the runtime supports it and parallel reading is useful; delegation is not a trust guarantee. The old `/research` name is a deprecated alias. Research feeds `/grill-with-docs` and lifecycle decisions; it does not approve them.
88
88
  - **`/to-questionnaire`** — when the thing blocking you isn't in your head or the codebase but in **someone else's**, this writes them a questionnaire to fill in. It's the inverse of `/grill-me`: instead of interviewing you about the subject, it interviews you about the **send** — who it's going to, what you need back — and aims the questions at the gap. What comes back is material for `/grill-with-docs` or `/to-spec`.
89
89
  - **`/wait-what`** — the corrective for a message that didn't land. Use it mid-conversation, inside any other skill, and the agent re-pitches what it just said with the context you were missing, in plain English, using the `CONTEXT.md` vocabulary. It works after the fact; `/grill-with-docs` is the upfront cure, because a shared language agreed early is what stops the jargon arriving at all.
90
90
  - **`/teach`** — learn a concept over multiple sessions, using the current directory as a stateful workspace.
@@ -12,10 +12,10 @@
12
12
  2. Slice Implementation Contract 的 `required_skills`:对每个技能读取 `.agents/skills/<id>/SKILL.md` 及该 skill 指明的 references。
13
13
  3. 影响面专项检查输入(与合同并集,不得互相替代):
14
14
  - 后端:`alibaba-java-code-style`、`yss-domain`、`yss-application`、`yss-repository`、`yss-web-controller`、`yss-dto`、`mapstruct`、`lombok`
15
- - UI:`yss-ui`、`yss-design-system`、`yss-page-module-development`
15
+ - UI:`yss-ui`、`yss-design-system`、`yss-ui-business-page-generation`、`yss-page-module-development`
16
16
  4. 报告模板中的后端 / 前端门禁表。空着的适用行视为 `missing_evidence`。
17
17
 
18
- YSS 页面模块约定(YTable、YssFormily、页面骨架等)走 Standards,不并入 UI fidelity。UI fidelity 只核原型与状态矩阵。
18
+ YSS 页面模块约定(YTable、YFormily、页面骨架等)走 Standards,不并入 UI fidelity。UI fidelity 只核原型与状态矩阵。
19
19
 
20
20
  审查者只读这些 skill,不得用它们写实现路径。`role.test-engineer` 任务包禁止 `implement` 与脚手架生成器。
21
21
 
@@ -51,4 +51,4 @@ YSS 页面模块约定(YTable、YssFormily、页面骨架等)走 Standards
51
51
  | `violation`、机器检查失败、适用行空白、`missing_evidence` | 实现者在**原合同允许路径**内修复;任何修复使候选失效,必须重新捕获并重跑 Standards、Spec、UI fidelity(若命中)和 fresh verification |
52
52
  | `drift`、`new_impacts`、`required_skills` 与真实影响不一致 | 合同标 `stale`,回 Router 或更早生命周期阶段;禁止在旧合同上继续编码 |
53
53
 
54
- `not-applicable` 仅当影响面未命中。命中后的 mandatory 不得豁免;只允许修复,或写完整 `seam-deferred`(风险、责任人、后续 Ticket、验证计划、目标版本或发布日期)。禁止为日常 Alibaba / YSS 新增生物人豁免门禁;安全 / 公共 API 仍走既有 `TODO-HUMAN-REVIEW` 与生物人门禁。
54
+ `not-applicable` 仅当影响面未命中。命中后的 mandatory 不得豁免;只允许修复,或写完整 `seam-deferred`(风险、责任人、后续 Ticket、验证计划、目标版本或发布日期)。禁止为日常 Alibaba / YSS 新增生物人豁免门禁;安全 / 公共 API 仍走既有 `TODO-HUMAN-REVIEW` 与生物人门禁。
@@ -19,8 +19,8 @@ description: 指导 YSS UI 业务页面、CRUD、列表页、表单页和组件
19
19
 
20
20
  1. 当前会话可用 yss-ui MCP 时,先用 `list_components` 确认组件、Hook 或 Utils 是否真实存在,再用 `get_component_docs` 确认名称、导出包、Props、Events 和 Slots,不只看 demo 标签名。
21
21
  2. `get_component_docs` 未命中时,先用 `search_docs` 和 `list_components` 校正别名与归属,不得立即判定为未封装。
22
- 3. MCP 工具不可用、调用失败或校正后仍无结果时,读取当前上下文中的最新 `llms-full.txt`;上下文没有时读取 `http://192.168.164.27:3200/llms-full.txt`。
23
- 4. 必要时读取 `../yss-page-module-development/references/component-map.md`、`hooks-map.md`、`utils-map.md` 快速缩小范围;文档与当前项目依赖版本不一致时,最终以当前源码和可编译导出为准。
22
+ 3. MCP 工具不可用、调用失败或校正后仍无结果时,读取当前上下文或文档站的最新 `llms-full.txt`。
23
+ 4. 必要时读取 `../yss-ui-business-page-generation/references/component-map.md`、`hooks-map.md`、`utils-map.md` 快速缩小范围;文档与当前项目依赖版本不一致时,最终以当前源码和可编译导出为准。
24
24
  5. 已导出的 YSS 能力优先从 `@yss-ui/components`、`@yss-ui/hooks`、`@yss-ui/utils` 导入;确认未封装后才从 `ant-design-vue` 导入原组件。
25
25
  6. 若文档与导出源码不一致,记录差异并按当前仓库可编译的导出处理,不猜测 API。
26
26
 
@@ -14,7 +14,7 @@ description: 分析并提交 Vue、React、TypeScript、JavaScript、Vite、微
14
14
 
15
15
  ## 不适用场景
16
16
 
17
- - yss-ui 组件库仓库自身的提交与发版:使用 `../commit-linting/SKILL.md`。
17
+ - yss-ui 组件库仓库自身的提交与发版:回到 yss-ui 源仓库使用其 `categories.library` 提交流程;该类 skill 不随业务模板分发。
18
18
  - Java、Spring Boot、Maven、Gradle 后端仓库:使用 `../java-backend-commit/SKILL.md`。
19
19
  - 仅请求代码实现,不涉及提交信息或 `git commit` 操作。
20
20
  - 无代码改动,或改动内容与提交请求不匹配。
@@ -1,11 +1,13 @@
1
1
  {
2
2
  "name": "product-design",
3
- "version": "0.1.41",
3
+ "version": "0.1.42",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "The Product Design plugin is built for turning early ideas into prototypes teams can review. It starts design and build work by confirming the brief, then helps teams explore product directions, audit user flows, prototype from a live URL, and make static screenshots interactive.",
7
7
  "repository": "https://github.com/openai/role-specific-plugins/tree/main/plugins/product-design",
8
8
  "scripts": {
9
- "prototype:bootstrap": "node scripts/bootstrap-prototype.mjs"
9
+ "prototype:bootstrap": "node scripts/bootstrap-prototype.mjs",
10
+ "research:test": "node skills/research/tests/run-scenarios.mjs",
11
+ "research:validate": "node skills/research/scripts/validate-research-package.mjs"
10
12
  }
11
13
  }
@@ -9,6 +9,13 @@ Run a fresh UX research scan for the product the user specifies.
9
9
 
10
10
  Focus on current, evidence-backed user problems. Prioritize logged-in product experience, self-serve flows, onboarding, docs/help, developer experience, support friction, and product workflows.
11
11
 
12
+ ## Modes
13
+
14
+ - `quick` is the default. It produces a sharp in-chat brief from the best available current evidence.
15
+ - `evidence-audited` is opt-in. Use it only when the user explicitly asks for deep, strict, auditable, or `evidence-audited` research. For consequential product or investment decisions, recommend this mode but do not switch silently.
16
+
17
+ Both modes remain UX research workflows. Do not import academic-paper writing, peer-review, publication, or multi-agent ceremony.
18
+
12
19
  ## Critical Overrides
13
20
 
14
21
  - Refer to the Plugin router [$index](../index/SKILL.md) before proceeding.
@@ -25,7 +32,9 @@ Do not inspect every saved reference. Inspect only what the current task needs.
25
32
  ## Contract
26
33
 
27
34
  - Restate the product, audience, time horizon, and research scope before scanning.
35
+ - State the active mode. In `evidence-audited`, also state the planned source classes and inclusion/exclusion criteria before searching.
28
36
  - Use public sources by default. Use internal sources when the connectors are available and the user request allows it.
37
+ - Search user-provided or saved material first, apply the same inclusion criteria to it, then search externally to fill material gaps. Never silently omit supplied material; report exclusions or access failures.
29
38
  - Cite sources wherever available.
30
39
  - Separate observed evidence from inference.
31
40
  - Do not overclaim from anecdotes.
@@ -70,6 +79,8 @@ Do not inspect every saved reference. Inspect only what the current task needs.
70
79
 
71
80
  7. Tell a clear product story.
72
81
 
82
+ For `evidence-audited` mode, follow [evidence-audited.md](references/evidence-audited.md) after scope restatement. This adds a reproducible Search Log, an Evidence Ledger, key-claim audit, counter-signal handling, and an explicit failure policy. It does not require sentence-by-sentence auditing.
83
+
73
84
  ## Output
74
85
 
75
86
  Default to an in-chat research brief unless the user asks for another format.
@@ -81,6 +92,14 @@ Include:
81
92
  - Source map: what was searched, what each source contributed, and where signal was weak.
82
93
  - Opportunity map: group recommendations into fix this week, fix this quarter, and needs deeper research.
83
94
 
95
+ When the user explicitly asks to persist an `evidence-audited` result, create two adjacent files named `<slug>-research-brief.md` and `<slug>-evidence.yaml`. Start from [research-brief-template.md](assets/research-brief-template.md) and [evidence-template.yaml](assets/evidence-template.yaml), then run:
96
+
97
+ ```bash
98
+ node scripts/validate-research-package.mjs <slug>-research-brief.md <slug>-evidence.yaml
99
+ ```
100
+
101
+ Run the command from this skill directory. Do not persist research files merely because `evidence-audited` mode is active.
102
+
84
103
  ## Rules
85
104
 
86
105
  - Use citations wherever available.
@@ -89,4 +108,7 @@ Include:
89
108
  - Separate UX friction from missing features.
90
109
  - Separate reliability/performance issues from UX workflow issues.
91
110
  - Mark internal-only evidence separately from public evidence.
111
+ - Do not equate source count with frequency. State whether frequency is measured, repeated across independent sources, or anecdotal.
112
+ - In `evidence-audited` mode, audit the key claims for every ranked problem: problem existence, impact, frequency characterization, and the evidence basis for the recommended move. Audit every high-severity key claim; for lower-severity problems include at least one primary supporting item and one counter-signal or an explicit `none-found` search result.
113
+ - Unsupported key claims must use `needs-deeper-research`; partially supported claims must be qualified. Never label a persisted package audited when its validator has not passed.
92
114
  - Keep the brief sharp, specific, and easy to consume.