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
@@ -10,23 +10,103 @@ const COMMANDS = PHASES.map((phase) => `./mvnw ${phase}`);
10
10
  const isoNow = () => new Date().toISOString();
11
11
  async function isFile(target) { try { return (await stat(target)).isFile(); } catch (error) { if (error.code === "ENOENT") return false; throw error; } }
12
12
  async function writeText(target, content) { await mkdir(path.dirname(target), { recursive: true }); await writeFile(target, content, "utf8"); }
13
+ async function isExecutable(target) {
14
+ try { const info = await stat(target); return info.isFile() && Boolean(info.mode & 0o111); }
15
+ catch (error) { if (error.code === "ENOENT") return false; throw error; }
16
+ }
17
+ async function readTextIfPresent(target) { try { return await readFile(target, "utf8"); } catch (error) { if (error.code === "ENOENT") return ""; throw error; } }
18
+ function configured(value) { return typeof value === "string" && value.trim().length > 0; }
19
+ function redactSecrets(text, environment = process.env) {
20
+ let output = text;
21
+ for (const name of ["MAVEN_REPO_USERNAME", "MAVEN_REPO_PASSWORD"]) {
22
+ const value = environment[name];
23
+ if (configured(value)) output = output.replaceAll(value, `[REDACTED:${name}]`);
24
+ }
25
+ return output;
26
+ }
27
+ function classifyFailure(phase, outcome) {
28
+ if (outcome.exitCode === 0) return null;
29
+ const output = `${outcome.stdout}\n${outcome.stderr}`.replaceAll(/\u001B\[[0-9;]*m/g, "");
30
+ if (/Non-resolvable parent POM|Could not transfer artifact|Could not resolve (?:dependencies|artifact)|status code: 401|\bUnauthorized\b|PKIX path building failed|Name or service not known|Unknown host/i.test(output)) return "repository-access";
31
+ if (/Unable to find main class|mainClass.*(?:not found|missing)/i.test(output)) return "bootstrap-entrypoint";
32
+ if (/COMPILATION ERROR|Compilation failure|maven-compiler-plugin/i.test(output)) return "compilation";
33
+ if (phase === "validate") return "project-model";
34
+ if (phase === "test") return "test-failure";
35
+ if (phase === "package") return "packaging";
36
+ return "maven-execution";
37
+ }
13
38
  function parseArgs(argv) { const result = {}; for (let index = 0; index < argv.length; index += 1) { let token = argv[index]; if (token === "--help" || token === "-h") { result.help = true; continue; } const equals = token.indexOf("="); let value; if (equals !== -1) { value = token.slice(equals + 1); token = token.slice(0, equals); } if (!["--project-root", "--evidence-dir"].includes(token)) throw new Error(`不支持的参数: ${token}`); if (value === undefined) value = argv[++index]; if (!value || value.startsWith("--")) throw new Error(`参数 ${token} 缺少值`); result[token === "--project-root" ? "projectRoot" : "evidenceDir"] = path.resolve(value); } if (result.help) return result; if (!result.projectRoot || !result.evidenceDir) throw new Error("必须提供 --project-root 和 --evidence-dir"); return result; }
14
39
  function validateManifest(manifest) {
15
- const required = ["schema_version", "contract_id", "contract_version", "slice_id", "approval_ref", "approver", "lifecycle_approval_ref", "router_draft_ref", "persisted_ref", "contract_file_ref", "current_version", "allowed_write_paths", "expected_evidence_files", "verification_commands", "generation_mode"];
40
+ if (manifest.schema_version !== 2) throw new Error(`unsupported: scaffold Manifest schema_version=${manifest.schema_version};只验证 Target Profile v2`);
41
+ const required = ["schema_version", "contract_id", "contract_version", "scaffold_request_id", "contract_digest", "profiles", "ownership", "readiness", "generation_policy", "completion_level", "approval_ref", "approver", "lifecycle_approval_ref", "router_draft_ref", "persisted_ref", "contract_file_ref", "current_version", "allowed_write_paths", "expected_evidence_files", "verification_commands", "generation_mode"];
16
42
  const missing = required.filter((field) => manifest[field] === undefined || manifest[field] === null || manifest[field] === "");
17
43
  if (manifest.generation_mode !== "controlled-generation" || missing.length) throw new Error(`脚手架生成元数据清单不完整或不是 controlled-generation: ${missing.join(", ")}`);
44
+ if (manifest.profiles.architecture !== "target-domain-model" || manifest.generation_policy.mode !== "initialize-only" || manifest.generation_policy.existing_target !== "unsupported" || manifest.generation_policy.old_project_migration !== "unsupported" || manifest.generation_policy.template_upgrade !== "unsupported") throw new Error("Manifest v2 必须声明 Target Profile 与严格 initialize-only;已有目标、旧项目迁移和模板升级均须为 unsupported");
18
45
  if (manifest.current_version !== manifest.contract_version) throw new Error("脚手架生成元数据清单不是当前合同版本");
19
46
  if (JSON.stringify(manifest.verification_commands) !== JSON.stringify(COMMANDS)) throw new Error("脚手架生成元数据清单验证命令不符合固定合同");
20
47
  }
21
- function execute(wrapper, phase, cwd) { return new Promise((resolve) => { const child = spawn(wrapper, [phase], { cwd, stdio: ["ignore", "pipe", "pipe"] }); let stdout = "", stderr = ""; child.stdout.on("data", (chunk) => { stdout += chunk; }); child.stderr.on("data", (chunk) => { stderr += chunk; }); child.on("error", (error) => resolve({ exitCode: 127, stdout: "", stderr: String(error) })); child.on("close", (code) => resolve({ exitCode: code ?? 1, stdout, stderr })); }); }
22
- export async function run(projectRoot, evidenceDir) {
48
+ function execute(wrapper, phase, cwd, environment) { return new Promise((resolve) => { const child = spawn(wrapper, [phase], { cwd, env: environment, stdio: ["ignore", "pipe", "pipe"] }); let stdout = "", stderr = ""; child.stdout.on("data", (chunk) => { stdout += chunk; }); child.stderr.on("data", (chunk) => { stderr += chunk; }); child.on("error", (error) => resolve({ exitCode: 127, stdout: "", stderr: String(error) })); child.on("close", (code) => resolve({ exitCode: code ?? 1, stdout, stderr })); }); }
49
+ export async function run(projectRoot, evidenceDir, environment = process.env) {
23
50
  const wrapper = path.join(projectRoot, "mvnw"), manifestPath = path.join(projectRoot, ".yss", "scaffold-generation.json");
24
51
  if (!await isFile(wrapper)) throw new Error(`项目根目录缺少 Maven wrapper: ${wrapper}`);
25
52
  if (!await isFile(manifestPath)) throw new Error(`项目根目录缺少脚手架生成元数据清单: ${manifestPath}`);
26
53
  let manifest; try { manifest = JSON.parse(await readFile(manifestPath, "utf8")); } catch { throw new Error(`脚手架生成元数据清单无法读取或不是合法 JSON: ${manifestPath}`); }
27
- validateManifest(manifest); await mkdir(evidenceDir, { recursive: true }); const commands = [];
28
- for (const phase of PHASES) { const stdoutPath = path.join(evidenceDir, `mvnw-${phase}.stdout.log`), stderrPath = path.join(evidenceDir, `mvnw-${phase}.stderr.log`), startedAt = isoNow(), started = process.hrtime.bigint(); const outcome = await execute(wrapper, phase, projectRoot); const durationMs = Number(process.hrtime.bigint() - started) / 1e6; await writeText(stdoutPath, outcome.stdout); await writeText(stderrPath, outcome.stderr); commands.push({ command: `./mvnw ${phase}`, phase, exit_code: outcome.exitCode, duration_ms: Number(durationMs.toFixed(3)), started_at: startedAt, executed_at: isoNow(), stdout_ref: stdoutPath, stderr_ref: stderrPath }); }
29
- return { verification_mode: "controlled-generation", project_root: projectRoot, scaffold_manifest_ref: manifestPath, generated_at: isoNow(), status: commands.every((item) => item.exit_code === 0) ? "passed" : "failed", commands };
54
+ validateManifest(manifest);
55
+ await mkdir(evidenceDir, { recursive: true });
56
+ const mavenConfig = await readTextIfPresent(path.join(projectRoot, ".mvn", "maven.config"));
57
+ const preflight = {
58
+ wrapper_exists: true,
59
+ wrapper_executable: await isExecutable(wrapper),
60
+ java_home_configured: configured(environment.JAVA_HOME),
61
+ maven_repository_credentials_configured: configured(environment.MAVEN_REPO_USERNAME) && configured(environment.MAVEN_REPO_PASSWORD),
62
+ maven_repository_url_configured: configured(environment.YSS_MAVEN_REPOSITORY_URL),
63
+ project_settings_present: await isFile(path.join(projectRoot, ".mvn", "settings.xml")),
64
+ project_maven_config_present: await isFile(path.join(projectRoot, ".mvn", "maven.config")),
65
+ project_settings_wired: /(?:^|\s)-(?:s|-settings)\s+\.mvn\/settings\.xml(?:\s|$)/m.test(mavenConfig),
66
+ repository_profile: manifest.profiles.repository,
67
+ repository_profile_wired: /(?:^|\s)-(?:P|-activate-profiles)\s+yss-internal(?:\s|$)/m.test(mavenConfig),
68
+ maven_coordinates_source: manifest.maven_coordinates_source
69
+ };
70
+ const failed = [];
71
+ if (!preflight.wrapper_executable) failed.push("wrapper-not-executable");
72
+ if (!preflight.project_settings_present || !preflight.project_maven_config_present || !preflight.project_settings_wired || !preflight.repository_profile_wired) failed.push("repository-profile-not-wired");
73
+ if (!preflight.maven_repository_url_configured) failed.push("repository-url-not-configured");
74
+ if (!preflight.maven_repository_credentials_configured) failed.push("repository-credentials-not-configured");
75
+ if (failed.length) return { verification_mode: "controlled-generation", project_root: projectRoot, scaffold_manifest_ref: manifestPath, generated_at: isoNow(), status: "failed", failure_category: "verification-preflight", completion_level: "generated", preflight: { ...preflight, failures: failed }, commands: [] };
76
+ const commands = [];
77
+ for (const phase of PHASES) {
78
+ const stdoutPath = path.join(evidenceDir, `mvnw-${phase}.stdout.log`);
79
+ const stderrPath = path.join(evidenceDir, `mvnw-${phase}.stderr.log`);
80
+ const startedAt = isoNow();
81
+ const started = process.hrtime.bigint();
82
+ const outcome = await execute(wrapper, phase, projectRoot, environment);
83
+ const durationMs = Number(process.hrtime.bigint() - started) / 1e6;
84
+ await writeText(stdoutPath, redactSecrets(outcome.stdout, environment));
85
+ await writeText(stderrPath, redactSecrets(outcome.stderr, environment));
86
+ commands.push({
87
+ command: `./mvnw ${phase}`,
88
+ phase,
89
+ exit_code: outcome.exitCode,
90
+ failure_category: classifyFailure(phase, outcome),
91
+ duration_ms: Number(durationMs.toFixed(3)),
92
+ started_at: startedAt,
93
+ executed_at: isoNow(),
94
+ stdout_ref: stdoutPath,
95
+ stderr_ref: stderrPath
96
+ });
97
+ }
98
+ const failureCategory = commands.find((item) => item.failure_category)?.failure_category ?? null;
99
+ return {
100
+ verification_mode: "controlled-generation",
101
+ project_root: projectRoot,
102
+ scaffold_manifest_ref: manifestPath,
103
+ generated_at: isoNow(),
104
+ status: failureCategory === null ? "passed" : "failed",
105
+ failure_category: failureCategory,
106
+ completion_level: failureCategory === null ? "empty-scaffold-verified" : "generated",
107
+ preflight,
108
+ commands
109
+ };
30
110
  }
31
- async function main() { let args; try { args = parseArgs(process.argv.slice(2)); if (args.help) { console.log("运行 YSS 脚手架真实验证命令\n用法: node scripts/run_scaffold_verification.mjs --project-root <dir> --evidence-dir <dir>"); return 0; } const reportPath = path.join(args.evidenceDir, "scaffold-verification.json"); try { const report = await run(args.projectRoot, args.evidenceDir); await writeText(reportPath, `${JSON.stringify(report, null, 2)}\n`); console.log(`${report.status}: ${reportPath}`); return report.status === "passed" ? 0 : 1; } catch (error) { const report = { verification_mode: "controlled-generation", project_root: args.projectRoot, generated_at: isoNow(), status: "failed", error: error.message, commands: [] }; await writeText(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stderr.write(`❌ 脚手架验证无法执行: ${error.message}\n`); return 1; } } catch (error) { process.stderr.write(`❌ 脚手架验证无法执行: ${error.message}\n`); return 1; } }
111
+ async function main() { let args; try { args = parseArgs(process.argv.slice(2)); if (args.help) { console.log("运行 YSS 脚手架真实验证命令\n用法: node scripts/run_scaffold_verification.mjs --project-root <dir> --evidence-dir <dir>"); return 0; } const reportPath = path.join(args.evidenceDir, "scaffold-verification.json"); try { const report = await run(args.projectRoot, args.evidenceDir); await writeText(reportPath, `${JSON.stringify(report, null, 2)}\n`); console.log(`${report.status}: ${reportPath}`); return report.status === "passed" ? 0 : 1; } catch (error) { const report = { verification_mode: "controlled-generation", project_root: args.projectRoot, generated_at: isoNow(), status: "failed", failure_category: "verification-preflight", error: error.message, commands: [] }; await writeText(reportPath, `${JSON.stringify(report, null, 2)}\n`); process.stderr.write(`❌ 脚手架验证无法执行: ${error.message}\n`); return 1; } } catch (error) { process.stderr.write(`❌ 脚手架验证无法执行: ${error.message}\n`); return 1; } }
32
112
  if (process.argv[1] && import.meta.url === new URL(`file://${process.argv[1]}`).href) process.exitCode = await main();
@@ -1,5 +1,6 @@
1
1
  import assert from "node:assert/strict";
2
2
  import { execFile } from "node:child_process";
3
+ import { createHash } from "node:crypto";
3
4
  import { chmod, mkdtemp, mkdir, readFile, readdir, rm, writeFile } from "node:fs/promises";
4
5
  import { existsSync } from "node:fs";
5
6
  import os from "node:os";
@@ -12,19 +13,264 @@ import { GITLINK_MODE, gitLsFilesStage } from "../../../../scripts/lib/repositor
12
13
 
13
14
  const scripts = path.dirname(fileURLToPath(import.meta.url));
14
15
  const generator = path.join(scripts, "generate_scaffold.mjs");
16
+ const workflow = path.join(scripts, "generate_and_verify_scaffold.mjs");
15
17
  const command = (args, options = {}) => new Promise((resolve) => execFile(process.execPath, [generator, ...args], { encoding: "utf8", ...options }, (error, stdout, stderr) => resolve({ code: error?.code ?? 0, stdout, stderr })));
18
+ const workflowCommand = (args, options = {}) => new Promise((resolve) => execFile(process.execPath, [workflow, ...args], { encoding: "utf8", ...options }, (error, stdout, stderr) => resolve({ code: error?.code ?? 0, stdout, stderr })));
19
+ async function treeDigest(root) {
20
+ const hash = createHash("sha256");
21
+ async function visit(directory) {
22
+ for (const entry of (await readdir(directory, { withFileTypes: true })).sort((left, right) => left.name.localeCompare(right.name))) {
23
+ const absolute = path.join(directory, entry.name);
24
+ if (entry.isDirectory()) await visit(absolute);
25
+ else if (entry.isFile()) hash.update(path.relative(root, absolute).split(path.sep).join("/")).update("\0").update(await readFile(absolute)).update("\0");
26
+ }
27
+ }
28
+ await visit(root);
29
+ return hash.digest("hex");
30
+ }
16
31
  function contract(outputDir, overrides = {}) {
17
- return { schema_version: 1, contract_id: "scaffold-1", contract_version: 1, slice_id: "slice-1", status: "approved", router_draft_ref: "router-1", lifecycle_approval_ref: "approval-1", persisted_ref: "persisted-1", current_version: 1, implementation_repository: "external", backend_repository: "external", scaffold_status: "required", target_git_url_or_output_dir: outputDir, allowed_write_paths: ["."], expected_evidence_files: [".yss/scaffold-generation.json"], verification_commands: ["./mvnw validate", "./mvnw test", "./mvnw package"], approval: { approval_ref: "approval-1", approver: "reviewer", persisted_ref: "persisted-1", current_version: 1 }, work_unit: { id: "unit-1", behavior: "scaffold", primary_skill: "yss-ddd-scaffold-generator", supporting_skills: ["yss-router"], tdd_mode: "controlled-generation", allowed_write_paths: ["."], expected_evidence: ["manifest"], verification_commands: ["./mvnw validate", "./mvnw test", "./mvnw package"], controlled_generation: true }, overwrite_policy: { force_allowed: true, overwrite_scope: "replace-service", rollback_ref: "checkpoint-1" }, ...overrides };
32
+ return {
33
+ schema_version: 2,
34
+ contract_id: "scaffold-1",
35
+ contract_version: 1,
36
+ scaffold_request_id: "scaffold-request-1",
37
+ status: "approved",
38
+ router_draft_ref: "router-1",
39
+ lifecycle_approval_ref: "approval-1",
40
+ persisted_ref: "persisted-1",
41
+ current_version: 1,
42
+ implementation_repository: "external",
43
+ backend_repository: "external",
44
+ scaffold_status: "required",
45
+ project_name: "demo-service",
46
+ target_output_dir: outputDir,
47
+ base_package: "com.yss.demo",
48
+ maven_coordinates: {
49
+ group_id: "com.yss.datamiddle",
50
+ project_version: "1.0.0-SNAPSHOT",
51
+ parent: { group_id: "com.yss.datamiddle", artifact_id: "yss-datamiddle-parent", version: "2.0.0-SNAPSHOT" },
52
+ yss_components_version: "2.0.0-SNAPSHOT"
53
+ },
54
+ profiles: {
55
+ architecture: "target-domain-model",
56
+ persistence: "mybatis-plus",
57
+ database: "mysql",
58
+ platform: "spring-boot-2.7-jdk8",
59
+ validation_namespace: "javax",
60
+ dto_placement: "web",
61
+ repository: "yss-internal"
62
+ },
63
+ allowed_write_paths: ["."],
64
+ expected_evidence_files: [".yss/scaffold-generation.json"],
65
+ verification_commands: ["./mvnw validate", "./mvnw test", "./mvnw package"],
66
+ approval: { approval_ref: "approval-1", approver: "reviewer", persisted_ref: "persisted-1", current_version: 1 },
67
+ work_unit: { id: "unit-1", behavior: "scaffold", primary_skill: "yss-ddd-scaffold-generator", supporting_skills: ["yss-router"], tdd_mode: "controlled-generation", allowed_write_paths: ["."], expected_evidence: ["manifest"], verification_commands: ["./mvnw validate", "./mvnw test", "./mvnw package"], controlled_generation: true },
68
+ generation_policy: { mode: "initialize-only", existing_target: "unsupported", old_project_migration: "unsupported", template_upgrade: "unsupported" },
69
+ ...overrides
70
+ };
18
71
  }
19
- async function fixture() { const root = await mkdtemp(path.join(os.tmpdir(), "yss-scaffold-node-")); const output = path.join(root, "implementation"); await mkdir(output); const contractFile = path.join(root, "contract.json"); await writeFile(contractFile, `${JSON.stringify(contract(output), null, 2)}\n`); return { root, output, contractFile, args: ["--project-name", "demo-service", "--base-package", "com.yss.demo", "--output-dir", output, "--database", "mysql", "--contract-id", "scaffold-1", "--contract-version", "1", "--approval-ref", "approval-1", "--router-draft-ref", "router-1", "--persisted-ref", "persisted-1", "--contract-file", contractFile] }; }
72
+ async function fixture(contractOverrides = {}) { const root = await mkdtemp(path.join(os.tmpdir(), "yss-scaffold-node-")); const output = path.join(root, "implementation"); await mkdir(output); const contractFile = path.join(root, "contract.json"); await writeFile(contractFile, `${JSON.stringify(contract(output, contractOverrides), null, 2)}\n`); return { root, output, contractFile, args: ["--project-name", "demo-service", "--base-package", "com.yss.demo", "--output-dir", output, "--database", "mysql", "--contract-id", "scaffold-1", "--contract-version", "1", "--approval-ref", "approval-1", "--router-draft-ref", "router-1", "--persisted-ref", "persisted-1", "--contract-file", contractFile, "--group-id", "com.yss.datamiddle", "--project-version", "1.0.0-SNAPSHOT", "--parent-group-id", "com.yss.datamiddle", "--parent-artifact-id", "yss-datamiddle-parent", "--parent-version", "2.0.0-SNAPSHOT", "--yss-components-version", "2.0.0-SNAPSHOT"] }; }
20
73
 
21
- test("生成批准合同下的纯工程骨架,并写入清单", async (t) => { const data = await fixture(); t.after(() => rm(data.root, { recursive: true, force: true })); const result = await command(data.args); assert.equal(result.code, 0, result.stderr); const project = path.join(data.output, "demo-service"); const manifest = JSON.parse(await readFile(path.join(project, ".yss/scaffold-generation.json"), "utf8")); assert.equal(manifest.generation_mode, "controlled-generation"); assert.deepEqual(manifest.verification_commands, ["./mvnw validate", "./mvnw test", "./mvnw package"]); assert.match(await readFile(path.join(project, "pom.xml"), "utf8"), /demo-service/); });
74
+ const controlledEnvironment = {
75
+ ...process.env,
76
+ YSS_MAVEN_REPOSITORY_URL: "https://repo.example.invalid/repository/maven-public/",
77
+ MAVEN_REPO_USERNAME: "test-user",
78
+ MAVEN_REPO_PASSWORD: "test-password"
79
+ };
80
+ function targetManifest(overrides = {}) {
81
+ return {
82
+ schema_version: 2,
83
+ contract_id: "id",
84
+ contract_version: 1,
85
+ scaffold_request_id: "request",
86
+ contract_digest: "a".repeat(64),
87
+ approval_ref: "approval",
88
+ approver: "reviewer",
89
+ lifecycle_approval_ref: "approval",
90
+ router_draft_ref: "router",
91
+ persisted_ref: "persisted",
92
+ contract_file_ref: "contract",
93
+ current_version: 1,
94
+ allowed_write_paths: ["."],
95
+ expected_evidence_files: ["manifest"],
96
+ verification_commands: ["./mvnw validate", "./mvnw test", "./mvnw package"],
97
+ generation_mode: "controlled-generation",
98
+ completion_level: "generated",
99
+ profiles: { architecture: "target-domain-model", repository: "yss-internal" },
100
+ ownership: { generated_files: [] },
101
+ readiness: { downstream_skills: {}, architecture_ruleset: "b".repeat(64) },
102
+ generation_policy: { mode: "initialize-only", existing_target: "unsupported", old_project_migration: "unsupported", template_upgrade: "unsupported" },
103
+ maven_coordinates_source: "approved-contract",
104
+ ...overrides
105
+ };
106
+ }
107
+ async function prepareVerifierProject(project, manifest = targetManifest()) {
108
+ await mkdir(path.join(project, ".yss"), { recursive: true });
109
+ await mkdir(path.join(project, ".mvn"), { recursive: true });
110
+ await writeFile(path.join(project, ".mvn", "maven.config"), "-s .mvn/settings.xml\n-P yss-internal\n");
111
+ await writeFile(path.join(project, ".mvn", "settings.xml"), "<settings/>\n");
112
+ await writeFile(path.join(project, ".yss", "scaffold-generation.json"), `${JSON.stringify(manifest)}\n`);
113
+ }
22
114
 
23
- test("拒绝不一致合同和未经明确批准的非空目录覆盖", async (t) => { const data = await fixture(); t.after(() => rm(data.root, { recursive: true, force: true })); const rejected = await command([...data.args.slice(0, -1), path.join(data.root, "missing.json")]); assert.equal(rejected.code, 1); assert.match(rejected.stderr, /合同/); await mkdir(path.join(data.output, "demo-service")); await writeFile(path.join(data.output, "demo-service", "keep.txt"), "keep"); const noForce = await command(data.args); assert.equal(noForce.code, 1); assert.match(noForce.stderr, /--force/); const forceMissingRollback = await command([...data.args, "--force"]); assert.equal(forceMissingRollback.code, 1); assert.match(forceMissingRollback.stderr, /覆盖范围和回滚引用/); });
115
+ test("生成批准的服务级 target profile 骨架,并写入可追溯 Manifest v2", async (t) => { const data = await fixture(); t.after(() => rm(data.root, { recursive: true, force: true })); const result = await command(data.args); assert.equal(result.code, 0, result.stderr); const project = path.join(data.output, "demo-service"); const manifest = JSON.parse(await readFile(path.join(project, ".yss/scaffold-generation.json"), "utf8")); assert.equal(manifest.schema_version, 2); assert.equal(manifest.scaffold_request_id, "scaffold-request-1"); assert.equal(manifest.slice_id, undefined); assert.equal(manifest.completion_level, "generated"); assert.equal(manifest.profiles.architecture, "target-domain-model"); assert.deepEqual(manifest.generation_policy, { mode: "initialize-only", existing_target: "unsupported", old_project_migration: "unsupported", template_upgrade: "unsupported" }); assert.match(manifest.generator.template_digest, /^[a-f0-9]{64}$/); assert.match(manifest.contract_digest, /^[a-f0-9]{64}$/); assert.ok(manifest.ownership.generated_files.length > 8); assert.ok(manifest.ownership.generated_files.every((item) => item.owner === "generator" && /^[a-f0-9]{64}$/.test(item.sha256))); assert.equal(manifest.generation_mode, "controlled-generation"); assert.deepEqual(manifest.verification_commands, ["./mvnw validate", "./mvnw test", "./mvnw package"]); assert.equal(manifest.bootstrap_main_class, "com.yss.demo.DemoServiceApplication"); assert.equal(manifest.bootstrap_main_source, "demo-service-bootstrap/src/main/java/com/yss/demo/DemoServiceApplication.java"); assert.match(await readFile(path.join(project, manifest.bootstrap_main_source), "utf8"), /class DemoServiceApplication/); assert.match(await readFile(path.join(project, "pom.xml"), "utf8"), /demo-service/); assert.equal(manifest.readiness.downstream_skills["yss-domain"], await treeDigest(path.resolve(scripts, "../../yss-domain"))); assert.match(manifest.readiness.contracts.scaffold_parent, /^[a-f0-9]{64}$/); assert.match(manifest.readiness.contracts.router_contract, /^[a-f0-9]{64}$/); });
24
116
 
25
- test("已批准的 --force 先备份非空目标,再提交 staging 工程", async (t) => { const data = await fixture(); t.after(() => rm(data.root, { recursive: true, force: true })); const oldProject = path.join(data.output, "demo-service"); await mkdir(oldProject); await writeFile(path.join(oldProject, "old.txt"), "recoverable"); const result = await command([...data.args, "--force", "--overwrite-scope", "replace-service", "--rollback-ref", "checkpoint-1"]); assert.equal(result.code, 0, result.stderr); const entries = await readdir(data.output); const backup = entries.find((entry) => entry.startsWith(".demo-service.backup-")); assert.ok(backup); assert.equal(await readFile(path.join(data.output, backup, "old.txt"), "utf8"), "recoverable"); assert.ok((await readdir(path.join(data.output, "demo-service"))).includes("pom.xml")); });
117
+ test("schema v1 scaffold contract is unsupported and is never upgraded", async (t) => {
118
+ const data = await fixture({ schema_version: 1 });
119
+ t.after(() => rm(data.root, { recursive: true, force: true }));
120
+ const result = await command(data.args);
121
+ assert.equal(result.code, 1);
122
+ assert.match(result.stderr, /unsupported: scaffold contract schema_version=1/);
123
+ assert.equal(existsSync(path.join(data.output, "demo-service")), false);
124
+ });
26
125
 
27
- test("拒绝覆盖 .gitmodules 登记的 git-submodule 挂载点", async (t) => {
126
+ test("一键工作流只有在真实 Maven 三命令全部通过后才报告完成", { timeout: 300_000 }, async (t) => {
127
+ if (!["YSS_MAVEN_REPOSITORY_URL", "MAVEN_REPO_USERNAME", "MAVEN_REPO_PASSWORD"].every((name) => process.env[name])) {
128
+ t.skip("缺少受控 YSS Maven 仓库环境,真实 Wrapper 验证由 L3 环境门禁执行");
129
+ return;
130
+ }
131
+ const data = await fixture();
132
+ t.after(() => rm(data.root, { recursive: true, force: true }));
133
+ const evidence = path.join(data.root, "workflow-evidence");
134
+ const result = await workflowCommand([...data.args, "--evidence-dir", evidence]);
135
+ assert.equal(result.code, 0, result.stderr);
136
+ assert.match(result.stdout, /脚手架生成与验证完成/);
137
+ const verification = JSON.parse(await readFile(path.join(evidence, "scaffold-verification.json"), "utf8"));
138
+ const workflowReport = JSON.parse(await readFile(path.join(evidence, "scaffold-workflow.json"), "utf8"));
139
+ assert.equal(verification.status, "passed");
140
+ assert.deepEqual(verification.commands.map((item) => item.command), ["./mvnw validate", "./mvnw test", "./mvnw package"]);
141
+ assert.ok(verification.commands.every((item) => item.exit_code === 0));
142
+ assert.equal(verification.preflight.project_settings_wired, true);
143
+ assert.equal(verification.preflight.repository_profile_wired, true);
144
+ assert.equal(workflowReport.status, "completed");
145
+ assert.equal(workflowReport.verification_ref, path.join(evidence, "scaffold-verification.json"));
146
+ const manifest = JSON.parse(await readFile(path.join(data.output, "demo-service", ".yss", "scaffold-generation.json"), "utf8"));
147
+ assert.equal(manifest.completion_level, "empty-scaffold-verified");
148
+ });
149
+
150
+ test("显式 Maven 坐标贯穿批准合同、生成参数、全部 POM 和生成清单", async (t) => {
151
+ const mavenCoordinates = {
152
+ group_id: "com.example.metadata",
153
+ project_version: "1.2.3-SNAPSHOT",
154
+ parent: {
155
+ group_id: "com.yss.datamiddle",
156
+ artifact_id: "yss-datamiddle-parent",
157
+ version: "2.0.0-SNAPSHOT"
158
+ },
159
+ yss_components_version: "2.0.0-SNAPSHOT"
160
+ };
161
+ const data = await fixture({ maven_coordinates: mavenCoordinates });
162
+ t.after(() => rm(data.root, { recursive: true, force: true }));
163
+ const result = await command([
164
+ ...data.args,
165
+ "--group-id", mavenCoordinates.group_id,
166
+ "--project-version", mavenCoordinates.project_version,
167
+ "--parent-group-id", mavenCoordinates.parent.group_id,
168
+ "--parent-artifact-id", mavenCoordinates.parent.artifact_id,
169
+ "--parent-version", mavenCoordinates.parent.version,
170
+ "--yss-components-version", mavenCoordinates.yss_components_version
171
+ ]);
172
+ assert.equal(result.code, 0, result.stderr);
173
+
174
+ const project = path.join(data.output, "demo-service");
175
+ const pomFiles = [
176
+ "pom.xml",
177
+ "demo-service-domain/pom.xml",
178
+ "demo-service-application/pom.xml",
179
+ "demo-service-infrastructure/pom.xml",
180
+ "demo-service-adapter/pom.xml",
181
+ "demo-service-adapter/demo-service-web/pom.xml",
182
+ "demo-service-bootstrap/pom.xml"
183
+ ];
184
+ const poms = await Promise.all(pomFiles.map((file) => readFile(path.join(project, file), "utf8")));
185
+ assert.ok(poms.every((pom) => pom.includes(mavenCoordinates.group_id)), "全部项目内坐标必须使用合同 groupId");
186
+ assert.ok(poms.every((pom) => pom.includes(mavenCoordinates.project_version)), "全部项目内坐标必须使用合同版本");
187
+ const manifest = JSON.parse(await readFile(path.join(project, ".yss/scaffold-generation.json"), "utf8"));
188
+ assert.deepEqual(manifest.maven_coordinates, mavenCoordinates);
189
+ assert.equal(manifest.maven_coordinates_source, "approved-contract");
190
+
191
+ });
192
+
193
+ test("生成工程声明命名仓库 profile、target DDD 依赖边界和构建门禁", async (t) => {
194
+ const data = await fixture();
195
+ t.after(() => rm(data.root, { recursive: true, force: true }));
196
+ const result = await command(data.args);
197
+ assert.equal(result.code, 0, result.stderr);
198
+ const project = path.join(data.output, "demo-service");
199
+ const mavenConfig = await readFile(path.join(project, ".mvn/maven.config"), "utf8");
200
+ const settings = await readFile(path.join(project, ".mvn/settings.xml"), "utf8");
201
+ assert.match(mavenConfig, /-s \.mvn\/settings\.xml/);
202
+ assert.match(mavenConfig, /-P yss-internal/);
203
+ assert.doesNotMatch(settings, /192\.168\.|<activeProfile>aliyun-only<\/activeProfile>/);
204
+ assert.match(settings, /\$\{env\.YSS_MAVEN_REPOSITORY_URL\}/);
205
+ assert.match(settings, /\$\{env\.MAVEN_REPO_USERNAME\}/);
206
+ assert.match(settings, /\$\{env\.MAVEN_REPO_PASSWORD\}/);
207
+
208
+ const domainPom = await readFile(path.join(project, "demo-service-domain/pom.xml"), "utf8");
209
+ const infrastructurePom = await readFile(path.join(project, "demo-service-infrastructure/pom.xml"), "utf8");
210
+ const bootstrapPom = await readFile(path.join(project, "demo-service-bootstrap/pom.xml"), "utf8");
211
+ assert.doesNotMatch(domainPom, /yss-component-(?:dto|exception)|jackson-databind|swagger-annotations|validation-api/);
212
+ assert.match(infrastructurePom, /yss-component-mybatis-plus-starter/);
213
+ assert.match(infrastructurePom, /spring-boot-starter-jdbc/);
214
+ assert.match(bootstrapPom, /spring-boot-starter-actuator/);
215
+ assert.match(bootstrapPom, /spring-boot-starter-test/);
216
+ const webPom = await readFile(path.join(project, "demo-service-adapter", "demo-service-web", "pom.xml"), "utf8");
217
+ assert.match(webPom, /yss-component-dto/);
218
+ assert.match(webPom, /yss-component-exception/);
219
+ assert.match(webPom, /io\.swagger\.core\.v3/);
220
+ const parentPom = await readFile(path.join(project, "pom.xml"), "utf8");
221
+ assert.match(parentPom, /lombok-mapstruct-binding/);
222
+ assert.match(parentPom, /maven-enforcer-plugin/);
223
+ assert.match(parentPom, /maven-compiler-plugin/);
224
+ assert.match(parentPom, /archunit-junit5/);
225
+ });
226
+
227
+ test("生成工程固定平台 profile、Wrapper checksum,并把调试日志隔离到 local 配置", async (t) => {
228
+ const data = await fixture();
229
+ t.after(() => rm(data.root, { recursive: true, force: true }));
230
+ const result = await command(data.args);
231
+ assert.equal(result.code, 0, result.stderr);
232
+ const project = path.join(data.output, "demo-service");
233
+ const wrapper = await readFile(path.join(project, ".mvn", "wrapper", "maven-wrapper.properties"), "utf8");
234
+ assert.match(wrapper, /^wrapperSha256Sum=[a-f0-9]{64}$/m);
235
+ assert.match(wrapper, /^distributionSha256Sum=[a-f0-9]{64}$/m);
236
+ const application = await readFile(path.join(project, "demo-service-bootstrap", "src", "main", "resources", "application.yml"), "utf8");
237
+ assert.doesNotMatch(application, /StdOutImpl|DEBUG/);
238
+ const local = await readFile(path.join(project, "demo-service-bootstrap", "src", "main", "resources", "application-local.yml"), "utf8");
239
+ assert.match(local, /StdOutImpl/);
240
+ assert.match(local, /DEBUG/);
241
+ });
242
+
243
+ test("initialize-only 在写文件前拒绝任何已存在目标和 --force", async (t) => { const data = await fixture(); t.after(() => rm(data.root, { recursive: true, force: true })); const rejected = await command(data.args.map((value) => value === data.contractFile ? path.join(data.root, "missing.json") : value)); assert.equal(rejected.code, 1); assert.match(rejected.stderr, /合同/); await mkdir(path.join(data.output, "demo-service")); await writeFile(path.join(data.output, "demo-service", "keep.txt"), "keep"); const noForce = await command(data.args); assert.equal(noForce.code, 1); assert.match(noForce.stderr, /initialize-only/); const forced = await command([...data.args, "--force"]); assert.equal(forced.code, 1); assert.match(forced.stderr, /initialize-only/); assert.equal(await readFile(path.join(data.output, "demo-service", "keep.txt"), "utf8"), "keep"); });
244
+
245
+ test("拒绝基础包名与批准合同不一致", async (t) => {
246
+ const data = await fixture({ base_package: "com.example.approved" });
247
+ t.after(() => rm(data.root, { recursive: true, force: true }));
248
+ const result = await command(data.args);
249
+ assert.equal(result.code, 1);
250
+ assert.match(result.stderr, /--base-package 与脚手架合同不一致/);
251
+ });
252
+
253
+ test("合同 project_name、profile 和 allowed_write_paths 必须约束实际输出", async (t) => {
254
+ const wrongName = await fixture({ project_name: "other-service" });
255
+ t.after(() => rm(wrongName.root, { recursive: true, force: true }));
256
+ const nameResult = await command(wrongName.args);
257
+ assert.equal(nameResult.code, 1);
258
+ assert.match(nameResult.stderr, /--project-name 与脚手架合同不一致/);
259
+
260
+ const wrongProfile = await fixture({ profiles: { ...contract("unused").profiles, persistence: "mybatis" } });
261
+ t.after(() => rm(wrongProfile.root, { recursive: true, force: true }));
262
+ const profileResult = await command(wrongProfile.args);
263
+ assert.equal(profileResult.code, 1);
264
+ assert.match(profileResult.stderr, /unsupported persistence profile/);
265
+
266
+ const wrongPath = await fixture({ allowed_write_paths: ["another-service"], work_unit: { ...contract("unused").work_unit, allowed_write_paths: ["another-service"] } });
267
+ t.after(() => rm(wrongPath.root, { recursive: true, force: true }));
268
+ const pathResult = await command(wrongPath.args);
269
+ assert.equal(pathResult.code, 1);
270
+ assert.match(pathResult.stderr, /allowed_write_paths/);
271
+ });
272
+
273
+ test("initialize-only 拒绝以 --force 覆盖 .gitmodules 登记的挂载点", async (t) => {
28
274
  const data = await fixture();
29
275
  t.after(() => rm(data.root, { recursive: true, force: true }));
30
276
  const superproject = path.join(data.root, "harness");
@@ -33,9 +279,9 @@ test("拒绝覆盖 .gitmodules 登记的 git-submodule 挂载点", async (t) =>
33
279
  await writeFile(path.join(superproject, ".gitmodules"), "[submodule \"demo-service\"]\n\tpath = apps/backend/demo-service\n\turl = https://example.invalid/demo-service.git\n");
34
280
  const contractFile = path.join(data.root, "gitlink-contract.json");
35
281
  await writeFile(contractFile, `${JSON.stringify(contract(output), null, 2)}\n`);
36
- const result = await command(["--project-name", "demo-service", "--base-package", "com.yss.demo", "--output-dir", output, "--database", "mysql", "--contract-id", "scaffold-1", "--contract-version", "1", "--approval-ref", "approval-1", "--router-draft-ref", "router-1", "--persisted-ref", "persisted-1", "--contract-file", contractFile, "--force", "--overwrite-scope", "replace-service", "--rollback-ref", "checkpoint-1"]);
282
+ const result = await command(["--project-name", "demo-service", "--base-package", "com.yss.demo", "--output-dir", output, "--database", "mysql", "--contract-id", "scaffold-1", "--contract-version", "1", "--approval-ref", "approval-1", "--router-draft-ref", "router-1", "--persisted-ref", "persisted-1", "--contract-file", contractFile, "--force"]);
37
283
  assert.equal(result.code, 1, result.stderr);
38
- assert.match(`${result.stdout}\n${result.stderr}`, /gitlink 不得由脚手架覆盖/);
284
+ assert.match(`${result.stdout}\n${result.stderr}`, /initialize-only|gitlink 不得由脚手架覆盖/);
39
285
  });
40
286
 
41
287
  test("拒绝在 detached HEAD 子仓工作树内当成普通目录生成", async (t) => {
@@ -63,16 +309,93 @@ test("--force 覆盖真实 gitlink 不得走普通目录覆盖路径", async (t)
63
309
  const output = path.join(empty.superproject, "apps/backend");
64
310
  const contractFile = path.join(data.root, "empty-gitlink-contract.json");
65
311
  await writeFile(contractFile, `${JSON.stringify(contract(output), null, 2)}\n`);
66
- const result = await command(["--project-name", "billing-service", "--base-package", "com.yss.demo", "--output-dir", output, "--database", "mysql", "--contract-id", "scaffold-1", "--contract-version", "1", "--approval-ref", "approval-1", "--router-draft-ref", "router-1", "--persisted-ref", "persisted-1", "--contract-file", contractFile, "--force", "--overwrite-scope", "replace-service", "--rollback-ref", "checkpoint-1"]);
312
+ const result = await command(["--project-name", "billing-service", "--base-package", "com.yss.demo", "--output-dir", output, "--database", "mysql", "--contract-id", "scaffold-1", "--contract-version", "1", "--approval-ref", "approval-1", "--router-draft-ref", "router-1", "--persisted-ref", "persisted-1", "--contract-file", contractFile, "--force"]);
67
313
  const text = `${result.stdout}\n${result.stderr}`;
68
314
  assert.equal(result.code, 1, text);
69
315
  assert.doesNotMatch(text, /请显式传入 --force/);
70
- assert.match(text, /--force 不得把 git-submodule 挂载点当成普通目录覆盖|gitlink 不得/);
316
+ assert.match(text, /initialize-only|--force 不得把 git-submodule 挂载点当成普通目录覆盖|gitlink 不得/);
71
317
  assert.equal(existsSync(path.join(output, "billing-service", "pom.xml")), false);
72
318
  assert.equal((await readdir(output)).some((name) => name.includes("backup")), false);
73
319
  assert.equal(gitLsFilesStage(empty.superproject, empty.mount)?.mode, GITLINK_MODE);
74
320
  });
75
321
 
76
- test("验证器记录三条 wrapper 命令的成功和失败证据", async (t) => { const root = await mkdtemp(path.join(os.tmpdir(), "yss-scaffold-verifier-")); t.after(() => rm(root, { recursive: true, force: true })); const project = path.join(root, "project"); await mkdir(path.join(project, ".yss"), { recursive: true }); await writeFile(path.join(project, ".yss/scaffold-generation.json"), `${JSON.stringify({ schema_version: 1, contract_id: "id", contract_version: 1, slice_id: "slice", approval_ref: "approval", approver: "reviewer", lifecycle_approval_ref: "approval", router_draft_ref: "router", persisted_ref: "persisted", contract_file_ref: "contract", current_version: 1, allowed_write_paths: ["."], expected_evidence_files: ["manifest"], verification_commands: ["./mvnw validate", "./mvnw test", "./mvnw package"], generation_mode: "controlled-generation" })}\n`); const wrapper = path.join(project, "mvnw"); await writeFile(wrapper, "#!/bin/sh\n[ \"$1\" = test ] && exit 2\nprintf 'ran %s\\n' \"$1\"\n"); await chmod(wrapper, 0o755); const evidence = path.join(root, "evidence"); const report = await run(project, evidence); assert.equal(report.status, "failed"); assert.deepEqual(report.commands.map((item) => item.exit_code), [0, 2, 0]); assert.match(await readFile(path.join(evidence, "mvnw-test.stderr.log"), "utf8"), /^$/); });
322
+ test("验证器记录三条 wrapper 命令的成功和失败证据", async (t) => { const root = await mkdtemp(path.join(os.tmpdir(), "yss-scaffold-verifier-")); t.after(() => rm(root, { recursive: true, force: true })); const project = path.join(root, "project"); await prepareVerifierProject(project); const wrapper = path.join(project, "mvnw"); await writeFile(wrapper, "#!/bin/sh\n[ \"$1\" = test ] && exit 2\nprintf 'ran %s\\n' \"$1\"\n"); await chmod(wrapper, 0o755); const evidence = path.join(root, "evidence"); const report = await run(project, evidence, controlledEnvironment); assert.equal(report.status, "failed"); assert.equal(report.failure_category, "test-failure"); assert.equal(report.commands[1].failure_category, "test-failure"); assert.equal(report.preflight.wrapper_executable, true); assert.deepEqual(report.commands.map((item) => item.exit_code), [0, 2, 0]); assert.match(await readFile(path.join(evidence, "mvnw-test.stderr.log"), "utf8"), /^$/); });
77
323
 
78
- test("验证器在全部 Maven 命令成功时通过并保留日志引用", async (t) => { const root = await mkdtemp(path.join(os.tmpdir(), "yss-scaffold-verifier-success-")); t.after(() => rm(root, { recursive: true, force: true })); const project = path.join(root, "project"); await mkdir(path.join(project, ".yss"), { recursive: true }); await writeFile(path.join(project, ".yss/scaffold-generation.json"), `${JSON.stringify({ schema_version: 1, contract_id: "id", contract_version: 1, slice_id: "slice", approval_ref: "approval", approver: "reviewer", lifecycle_approval_ref: "approval", router_draft_ref: "router", persisted_ref: "persisted", contract_file_ref: "contract", current_version: 1, allowed_write_paths: ["."], expected_evidence_files: ["manifest"], verification_commands: ["./mvnw validate", "./mvnw test", "./mvnw package"], generation_mode: "controlled-generation" })}\n`); const wrapper = path.join(project, "mvnw"); await writeFile(wrapper, "#!/bin/sh\nprintf 'ran %s\\n' \"$1\"\n"); await chmod(wrapper, 0o755); const report = await run(project, path.join(root, "evidence")); assert.equal(report.status, "passed"); assert.ok(report.commands.every((item) => item.exit_code === 0 && item.stdout_ref.endsWith(".stdout.log"))); });
324
+ test("验证器把内部仓库解析失败与编译失败分开报告", async (t) => {
325
+ const root = await mkdtemp(path.join(os.tmpdir(), "yss-scaffold-repository-failure-"));
326
+ t.after(() => rm(root, { recursive: true, force: true }));
327
+ const project = path.join(root, "project");
328
+ await prepareVerifierProject(project);
329
+ const wrapper = path.join(project, "mvnw");
330
+ await writeFile(wrapper, "#!/bin/sh\nprintf 'Non-resolvable parent POM: Could not transfer artifact\\n'\nexit 1\n");
331
+ await chmod(wrapper, 0o755);
332
+ const report = await run(project, path.join(root, "evidence"), controlledEnvironment);
333
+ assert.equal(report.status, "failed");
334
+ assert.equal(report.failure_category, "repository-access");
335
+ assert.ok(report.commands.every((item) => item.failure_category === "repository-access"));
336
+ assert.equal(typeof report.preflight.maven_repository_credentials_configured, "boolean");
337
+ });
338
+
339
+ test("验证器单独标记 Java 编译失败和 Bootstrap 主类缺失", async (t) => {
340
+ const cases = [
341
+ { output: "[ERROR] COMPILATION ERROR", expected: "compilation" },
342
+ { output: "Unable to find main class", expected: "bootstrap-entrypoint" }
343
+ ];
344
+ for (const item of cases) {
345
+ const root = await mkdtemp(path.join(os.tmpdir(), "yss-scaffold-build-failure-"));
346
+ t.after(() => rm(root, { recursive: true, force: true }));
347
+ const project = path.join(root, "project");
348
+ await prepareVerifierProject(project);
349
+ const wrapper = path.join(project, "mvnw");
350
+ await writeFile(wrapper, `#!/bin/sh\n[ "$1" = package ] || exit 0\nprintf '%s\\n' '${item.output}' >&2\nexit 1\n`);
351
+ await chmod(wrapper, 0o755);
352
+ const report = await run(project, path.join(root, "evidence"), controlledEnvironment);
353
+ assert.equal(report.failure_category, item.expected);
354
+ assert.equal(report.commands[2].failure_category, item.expected);
355
+ }
356
+ });
357
+
358
+ test("验证器在全部 Maven 命令成功时通过并保留日志引用", async (t) => { const root = await mkdtemp(path.join(os.tmpdir(), "yss-scaffold-verifier-success-")); t.after(() => rm(root, { recursive: true, force: true })); const project = path.join(root, "project"); await prepareVerifierProject(project); const wrapper = path.join(project, "mvnw"); await writeFile(wrapper, "#!/bin/sh\nprintf 'ran %s\\n' \"$1\"\n"); await chmod(wrapper, 0o755); const report = await run(project, path.join(root, "evidence"), controlledEnvironment); assert.equal(report.status, "passed"); assert.ok(report.commands.every((item) => item.exit_code === 0 && item.stdout_ref.endsWith(".stdout.log"))); });
359
+
360
+ test("Manifest v2 在缺少受控仓库环境时先于 Maven 执行阻断", async (t) => {
361
+ const root = await mkdtemp(path.join(os.tmpdir(), "yss-scaffold-v2-preflight-"));
362
+ t.after(() => rm(root, { recursive: true, force: true }));
363
+ const project = path.join(root, "project");
364
+ await prepareVerifierProject(project);
365
+ const wrapper = path.join(project, "mvnw");
366
+ await writeFile(wrapper, "#!/bin/sh\nprintf 'must not run'\nexit 99\n");
367
+ await chmod(wrapper, 0o755);
368
+ const report = await run(project, path.join(root, "evidence"), { ...process.env, YSS_MAVEN_REPOSITORY_URL: "", MAVEN_REPO_USERNAME: "", MAVEN_REPO_PASSWORD: "" });
369
+ assert.equal(report.status, "failed");
370
+ assert.equal(report.failure_category, "verification-preflight");
371
+ assert.deepEqual(report.commands, []);
372
+ assert.ok(report.preflight.failures.includes("repository-url-not-configured"));
373
+ });
374
+
375
+ test("Manifest schema v1 is unsupported and verifier never executes its wrapper", async (t) => {
376
+ const root = await mkdtemp(path.join(os.tmpdir(), "yss-scaffold-v1-unsupported-"));
377
+ t.after(() => rm(root, { recursive: true, force: true }));
378
+ const project = path.join(root, "project");
379
+ await prepareVerifierProject(project, { schema_version: 1, contract_id: "legacy", contract_version: 1 });
380
+ const wrapper = path.join(project, "mvnw");
381
+ await writeFile(wrapper, "#!/bin/sh\nprintf 'must not run' > wrapper-ran\n");
382
+ await chmod(wrapper, 0o755);
383
+ await assert.rejects(() => run(project, path.join(root, "evidence"), controlledEnvironment), /unsupported: scaffold Manifest schema_version=1/);
384
+ assert.equal(existsSync(path.join(project, "wrapper-ran")), false);
385
+ });
386
+
387
+ test("验证日志会脱敏 Maven 仓库凭据", async (t) => {
388
+ const root = await mkdtemp(path.join(os.tmpdir(), "yss-scaffold-redaction-"));
389
+ t.after(() => rm(root, { recursive: true, force: true }));
390
+ const project = path.join(root, "project");
391
+ await prepareVerifierProject(project);
392
+ const wrapper = path.join(project, "mvnw");
393
+ await writeFile(wrapper, "#!/bin/sh\nprintf '%s %s\\n' \"$MAVEN_REPO_USERNAME\" \"$MAVEN_REPO_PASSWORD\"\n");
394
+ await chmod(wrapper, 0o755);
395
+ const sensitiveEnvironment = { ...controlledEnvironment, MAVEN_REPO_USERNAME: "sensitive-user", MAVEN_REPO_PASSWORD: "sensitive-password" };
396
+ const evidence = path.join(root, "evidence");
397
+ await run(project, evidence, sensitiveEnvironment);
398
+ const log = await readFile(path.join(evidence, "mvnw-validate.stdout.log"), "utf8");
399
+ assert.doesNotMatch(log, /sensitive-user|sensitive-password/);
400
+ assert.match(log, /\[REDACTED:MAVEN_REPO_USERNAME\].*\[REDACTED:MAVEN_REPO_PASSWORD\]/);
401
+ });
@@ -25,7 +25,7 @@ description: Use when YSS 产品设计系统与 Ant Design 企业级 UI 风格
25
25
  2. 读取已有资产:`docs/design/design.md`、相关 Spec、交互说明、状态矩阵、OpenAPI Draft、现有页面代码。
26
26
  3. 按设计系统基线约束输出或修改产物:颜色、排版、间距、圆角、动效、组件、状态、响应式。
27
27
  4. 若是产品设计阶段,先使用 `yss-prototype-stage`;Codex 以 `product-design:index` 为主入口,其他 Agent 必须交付等价合同资产和证据。
28
- 5. 若是前端实现阶段,配合 `yss-ui`、`yss-components`、`yss-formily`、`yss-page-module-development`,但本技能负责风格与体验一致性门禁。
28
+ 5. 若是前端实现阶段,配合 `yss-ui`、`yss-ui-business-page-generation`、`yss-components`、`yss-formily`;生命周期编排和旧触发词兼容再使用 `yss-page-module-development`,但本技能负责风格与体验一致性门禁。
29
29
  6. 若发现现有设计系统文档不足,先更新 `docs/design/design.md`,再让实现或评审引用该文档。
30
30
 
31
31
  ## 核心基线
@@ -85,7 +85,7 @@ description: Use when YSS 产品设计系统与 Ant Design 企业级 UI 风格
85
85
  | 低保真原型进入高保真前评审 | `prototype-review` |
86
86
  | 低保真评审通过后的高保真 HTML 原型 | `yss-prototype-stage`;`high-fidelity-html-prototype` 仅兼容入口 |
87
87
  | 低保真线框或流程图 | `product-design:index` |
88
- | 前端页面实现 | `yss-ui` / `yss-page-module-development` |
88
+ | 前端页面实现 | `yss-ui` / `yss-ui-business-page-generation`;生命周期兼容使用 `yss-page-module-development` |
89
89
  | 表单 schema | `yss-formily` |
90
90
  | YTable / YTree / 高度自适应 | `yss-components` / `yss-use-table-height` / `yss-use-tree-height` |
91
91
  | 原型阶段的 Ant Design v6 组件 / token / demo 查询 | `yss-antd-design`(只用于原型设计构建;前端落地改用 `yss-ui`) |
@@ -214,8 +214,8 @@ React + Ant Design:
214
214
 
215
215
  YSS UI / Vue:
216
216
 
217
- - 业务页面优先走 `yss-ui` 和 `yss-page-module-development`。
218
- - 表单使用 `YssFormily` schema。
217
+ - 业务页面优先走 `yss-ui` 和 `yss-ui-business-page-generation`;生命周期编排和旧触发词兼容使用 `yss-page-module-development`。
218
+ - 新业务表单使用 `YFormily` schema;`YssFormily` 仅用于历史兼容。
219
219
  - 表格使用 `YTable`,列定义使用项目约定字段。
220
220
  - 高度自适应使用 `useTableHeight` / `useTreeHeight`。
221
221
  - 请求、分页、筛选参数下沉到 Hook。
@@ -7,7 +7,7 @@ description: 用于构建或重构 YSS 领域层代码。当用户要求设计
7
7
 
8
8
  这是一个领域实现 skill。核心目标是消费已批准的战术模型,将领域行为落实为代码;战术模型的设计与批准由 `yss-tactical-design` 和 `yss-product-lifecycle` 负责。
9
9
 
10
- 默认输出是新 DDD target profile;现有 YSS 组件仓库常见 `core/client/repository`、贫血对象和 VO 型 Gateway 只是 legacy profile,不得静默复制成新模块架构。
10
+ 本 skill 在新脚手架链路只支持 `target-domain-model`。`core/client/repository`、贫血对象和 VO 型 Gateway 对该链路均为 `unsupported`,不提供旧架构分支。
11
11
 
12
12
  ## 何时使用
13
13
 
@@ -41,13 +41,14 @@ description: 用于构建或重构 YSS 领域层代码。当用户要求设计
41
41
  - Gateway 只暴露领域能力,不暴露持久化细节。
42
42
  - 对关键状态流转给出明确方法,如 `publish()`、`cancel()`、`terminate()`。
43
43
  - 明确 Aggregate Root、Entity identity、Value Object、不变量、Domain Event 和一致性边界;没有业务行为时不要伪造富领域模型。
44
- - 发现 legacy profile 时先记录迁移/兼容决策,不把 Repository Entity 当 Domain Entity。
44
+ - 发现旧架构时停止套用新脚手架合同并返回 `unsupported`;旧项目继续按原工程维护,现代化改造单独立项。
45
45
 
46
46
  ## 质量要求
47
47
 
48
48
  - 命名体现业务语义,不照抄表名缩写。
49
49
  - 生成代码应可编译,且没有跨层依赖泄漏。
50
- - 对不确定规则写出假设或 TODO,不要伪装成已确认事实。
50
+ - Domain Gateway interface 由本 skill 唯一拥有;Infrastructure 只能实现,不得由 `yss-repository` 反向创建或改写其签名。
51
+ - 对不确定规则返回 `new_impacts` / `drift` 并暂停;不要把未批准假设或 TODO 写进实现冒充已确认事实。
51
52
 
52
53
  ## 协同顺序
53
54
 
@@ -58,7 +59,7 @@ description: 用于构建或重构 YSS 领域层代码。当用户要求设计
58
59
 
59
60
  ## 分层开发规范
60
61
 
61
- 脚手架生成或进入 Domain 实现前,必须加载 `references/domain-layer-guide.md`:其中定义 DTO/Gateway/Domain Service 包结构、命名、校验与示例,与本 skill 的建模约束一并生效。
62
+ 脚手架生成或进入 Domain 实现前,必须加载 `references/domain-layer-guide.md`:其中定义 Aggregate、Domain Gateway、Domain Error、依赖门禁与旧架构 `unsupported` 边界;HTTP DTO/VO 明确不属于 Domain。
62
63
 
63
64
  ## 阶段 7 合同
64
65
 
@@ -1,5 +1,5 @@
1
1
  version: 1
2
2
  interface:
3
3
  display_name: "YSS Domain"
4
- short_description: "领域建模、聚合根、规则与网关设计实践落地标准化规范"
5
- default_prompt: "Use $yss-domain to design aggregates, entities, domain gateways, and business rules for a YSS domain model."
4
+ short_description: "按批准战术模型实现聚合、规则与 Domain Gateway 接口"
5
+ default_prompt: "Use $yss-domain to implement approved aggregates, entities, business rules, domain tests, and the sole Domain Gateway interfaces; reroute instead of inventing unresolved rules."