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
@@ -0,0 +1,225 @@
1
+ import assert from "node:assert/strict";
2
+ import { execFile } from "node:child_process";
3
+ import { createHash } from "node:crypto";
4
+ import { chmod, mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
5
+ import os from "node:os";
6
+ import path from "node:path";
7
+ import test from "node:test";
8
+ import { fileURLToPath } from "node:url";
9
+
10
+ import { generate as generateWeb, parseArgs as parseWebArgs } from "../../yss-web-controller/scripts/generate_controller.mjs";
11
+ import { runFirstSliceVerification } from "./run_first_slice_verification.mjs";
12
+
13
+ const scripts = path.dirname(fileURLToPath(import.meta.url));
14
+ const generator = path.join(scripts, "generate_scaffold.mjs");
15
+ const dtoWireProfileFile = path.resolve(scripts, "../../yss-dto/references/openapi-wire-profile.yaml");
16
+ const execute = (file, args, options = {}) => new Promise((resolve) => execFile(file, args, { encoding: "utf8", ...options }, (error, stdout, stderr) => resolve({ code: error?.code ?? 0, stdout, stderr })));
17
+
18
+ function scaffoldContract(output) {
19
+ return {
20
+ schema_version: 2,
21
+ contract_id: "golden-scaffold-1",
22
+ contract_version: 1,
23
+ scaffold_request_id: "golden-request-1",
24
+ status: "approved",
25
+ router_draft_ref: "router-golden-1",
26
+ lifecycle_approval_ref: "approval-golden-1",
27
+ persisted_ref: "persisted-golden-1",
28
+ current_version: 1,
29
+ implementation_repository: "external",
30
+ backend_repository: "external",
31
+ scaffold_status: "required",
32
+ project_name: "golden-service",
33
+ target_output_dir: output,
34
+ base_package: "com.yss.golden",
35
+ maven_coordinates: { group_id: "com.yss.datamiddle", project_version: "1.0.0-SNAPSHOT", parent: { group_id: "com.yss.datamiddle", artifact_id: "yss-datamiddle-parent", version: "2.0.0-SNAPSHOT" }, yss_components_version: "2.0.0-SNAPSHOT" },
36
+ profiles: { architecture: "target-domain-model", persistence: "mybatis-plus", database: "mysql", platform: "spring-boot-2.7-jdk8", validation_namespace: "javax", dto_placement: "web", repository: "yss-internal" },
37
+ allowed_write_paths: ["."],
38
+ expected_evidence_files: [".yss/scaffold-generation.json"],
39
+ verification_commands: ["./mvnw validate", "./mvnw test", "./mvnw package"],
40
+ approval: { approval_ref: "approval-golden-1", approver: "maintainer", persisted_ref: "persisted-golden-1", current_version: 1 },
41
+ work_unit: { id: "golden-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 },
42
+ generation_policy: { mode: "initialize-only", existing_target: "unsupported", old_project_migration: "unsupported", template_upgrade: "unsupported" }
43
+ };
44
+ }
45
+
46
+ async function writeJava(project, relative, source) {
47
+ const target = path.join(project, relative);
48
+ await mkdir(path.dirname(target), { recursive: true });
49
+ await writeFile(target, `${source.trim()}\n`, "utf8");
50
+ }
51
+
52
+ async function prepareGoldenProject(t) {
53
+ const root = await mkdtemp(path.join(os.tmpdir(), "yss-golden-slice-"));
54
+ t.after(() => rm(root, { recursive: true, force: true }));
55
+ const output = path.join(root, "implementation");
56
+ await mkdir(output);
57
+ const contractFile = path.join(root, "scaffold-contract.json");
58
+ await writeFile(contractFile, `${JSON.stringify(scaffoldContract(output), null, 2)}\n`);
59
+ const args = ["--project-name", "golden-service", "--base-package", "com.yss.golden", "--output-dir", output, "--database", "mysql", "--contract-id", "golden-scaffold-1", "--contract-version", "1", "--approval-ref", "approval-golden-1", "--router-draft-ref", "router-golden-1", "--persisted-ref", "persisted-golden-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"];
60
+ const generated = await execute(process.execPath, [generator, ...args]);
61
+ assert.equal(generated.code, 0, generated.stderr);
62
+ const project = path.join(output, "golden-service");
63
+ const manifestPath = path.join(project, ".yss", "scaffold-generation.json");
64
+ const emptyVerificationPath = path.join(root, "empty-scaffold-verification.json");
65
+ await writeFile(emptyVerificationPath, JSON.stringify({ status: "passed", completion_level: "empty-scaffold-verified", commands: ["./mvnw validate", "./mvnw test", "./mvnw package"] }));
66
+ const manifest = JSON.parse(await readFile(manifestPath, "utf8"));
67
+ manifest.completion_level = "empty-scaffold-verified";
68
+ manifest.empty_scaffold_verification_ref = emptyVerificationPath;
69
+ await writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`);
70
+ const java = "src/main/java/com/yss/golden";
71
+ const testJava = "src/test/java/com/yss/golden";
72
+ await writeJava(project, `golden-service-domain/${java}/domain/quality/model/QualityRule.java`, `package com.yss.golden.domain.quality.model;
73
+ public final class QualityRule { private final Long id; private final String name; public QualityRule(Long id, String name) { if (name == null || name.trim().isEmpty()) throw new IllegalArgumentException("quality-rule-name-required"); this.id=id; this.name=name; } public Long getId(){return id;} public String getName(){return name;} }`);
74
+ await writeJava(project, `golden-service-domain/${java}/domain/quality/gateway/QualityRuleGateway.java`, `package com.yss.golden.domain.quality.gateway;
75
+ import com.yss.golden.domain.quality.model.QualityRule; import java.util.Optional; public interface QualityRuleGateway { Optional<QualityRule> findById(Long id); void save(QualityRule rule); void delete(Long id); }`);
76
+ await writeJava(project, `golden-service-domain/${testJava}/domain/quality/model/QualityRuleTest.java`, `package com.yss.golden.domain.quality.model;
77
+ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertThrows; class QualityRuleTest { @Test void rejectsBlankName(){ assertThrows(IllegalArgumentException.class, () -> new QualityRule(1L, " ")); } }`);
78
+ for (const [relative, source] of Object.entries({
79
+ [`golden-service-application/${java}/application/command/QualityRuleCreateCommand.java`]: `package com.yss.golden.application.command; public class QualityRuleCreateCommand { private String ruleName; public String getRuleName(){return ruleName;} public void setRuleName(String value){this.ruleName=value;} }`,
80
+ [`golden-service-application/${java}/application/command/QualityRuleUpdateCommand.java`]: `package com.yss.golden.application.command; public class QualityRuleUpdateCommand { private Long id; private String ruleName; public Long getId(){return id;} public void setId(Long value){this.id=value;} public String getRuleName(){return ruleName;} public void setRuleName(String value){this.ruleName=value;} }`,
81
+ [`golden-service-application/${java}/application/query/QualityRulePageQuery.java`]: `package com.yss.golden.application.query; public class QualityRulePageQuery { private int pageIndex; private int pageSize; private String ruleName; public int getPageIndex(){return pageIndex;} public void setPageIndex(int value){this.pageIndex=value;} public int getPageSize(){return pageSize;} public void setPageSize(int value){this.pageSize=value;} public String getRuleName(){return ruleName;} public void setRuleName(String value){this.ruleName=value;} }`,
82
+ [`golden-service-application/${java}/application/result/QualityRuleResult.java`]: `package com.yss.golden.application.result; import java.io.Serializable; public class QualityRuleResult implements Serializable { private Long id; private String ruleName; public Long getId(){return id;} public void setId(Long value){this.id=value;} public String getRuleName(){return ruleName;} public void setRuleName(String value){this.ruleName=value;} }`,
83
+ [`golden-service-application/${java}/application/port/QualityRuleQueryPort.java`]: `package com.yss.golden.application.port; import com.yss.cloud.dto.result.PageResult; import com.yss.golden.application.query.QualityRulePageQuery; import com.yss.golden.application.result.QualityRuleResult; public interface QualityRuleQueryPort { PageResult<QualityRuleResult> page(QualityRulePageQuery query); }`,
84
+ [`golden-service-application/${java}/application/service/QualityRuleService.java`]: `package com.yss.golden.application.service; import com.yss.cloud.dto.result.PageResult; import com.yss.golden.application.command.*; import com.yss.golden.application.query.QualityRulePageQuery; import com.yss.golden.application.result.QualityRuleResult; public interface QualityRuleService { PageResult<QualityRuleResult> page(QualityRulePageQuery query); QualityRuleResult detail(Long id); Long add(QualityRuleCreateCommand command); Boolean update(QualityRuleUpdateCommand command); Boolean delete(Long id); }`,
85
+ [`golden-service-application/${java}/application/service/impl/QualityRuleServiceImpl.java`]: `package com.yss.golden.application.service.impl;
86
+ import com.yss.cloud.dto.result.PageResult; import com.yss.golden.application.command.*; import com.yss.golden.application.port.QualityRuleQueryPort; import com.yss.golden.application.query.QualityRulePageQuery; import com.yss.golden.application.result.QualityRuleResult; import com.yss.golden.application.service.QualityRuleService; import com.yss.golden.domain.quality.gateway.QualityRuleGateway; import com.yss.golden.domain.quality.model.QualityRule; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;
87
+ @Service public class QualityRuleServiceImpl implements QualityRuleService { private final QualityRuleGateway gateway; private final QualityRuleQueryPort queryPort; public QualityRuleServiceImpl(QualityRuleGateway gateway, QualityRuleQueryPort queryPort){this.gateway=gateway;this.queryPort=queryPort;} public PageResult<QualityRuleResult> page(QualityRulePageQuery query){return queryPort.page(query);} public QualityRuleResult detail(Long id){QualityRule rule=gateway.findById(id).orElseThrow(IllegalArgumentException::new); QualityRuleResult result=new QualityRuleResult(); result.setId(rule.getId()); result.setRuleName(rule.getName()); return result;} @Transactional public Long add(QualityRuleCreateCommand command){QualityRule rule=new QualityRule(null, command.getRuleName()); gateway.save(rule); return rule.getId();} @Transactional public Boolean update(QualityRuleUpdateCommand command){gateway.save(new QualityRule(command.getId(), command.getRuleName())); return true;} @Transactional public Boolean delete(Long id){gateway.delete(id); return true;} }`,
88
+ [`golden-service-application/${java}/application/error/QualityRuleConflictException.java`]: `package com.yss.golden.application.error; public final class QualityRuleConflictException extends RuntimeException { public QualityRuleConflictException(String message) { super(message); } }`,
89
+ [`golden-service-application/${java}/application/error/QualityRuleSystemException.java`]: `package com.yss.golden.application.error; public final class QualityRuleSystemException extends RuntimeException { public QualityRuleSystemException(String message, Throwable cause) { super(message, cause); } }`,
90
+ [`golden-service-infrastructure/${java}/infrastructure/persistence/po/QualityRulePO.java`]: `package com.yss.golden.infrastructure.persistence.po; public class QualityRulePO { private Long id; private String name; public Long getId(){return id;} public void setId(Long value){this.id=value;} public String getName(){return name;} public void setName(String value){this.name=value;} }`,
91
+ [`golden-service-infrastructure/${java}/infrastructure/persistence/convertor/QualityRulePersistenceConvertor.java`]: `package com.yss.golden.infrastructure.persistence.convertor; import com.yss.golden.domain.quality.model.QualityRule; import com.yss.golden.infrastructure.persistence.po.QualityRulePO; import org.mapstruct.Mapper; @Mapper(componentModel="spring") public interface QualityRulePersistenceConvertor { QualityRule toDomain(QualityRulePO source); QualityRulePO toPO(QualityRule source); }`,
92
+ [`golden-service-infrastructure/${java}/infrastructure/persistence/repository/QualityRuleRepository.java`]: `package com.yss.golden.infrastructure.persistence.repository; import com.yss.golden.infrastructure.persistence.po.QualityRulePO; import java.util.List; import org.apache.ibatis.annotations.*; @Mapper public interface QualityRuleRepository { @Select("select id, rule_name as name from quality_rule where id = #{id}") QualityRulePO selectById(Long id); @Select("select id, rule_name as name from quality_rule") List<QualityRulePO> selectAll(); @Insert("insert into quality_rule(rule_name) values(#{name})") int insert(QualityRulePO po); @Delete("delete from quality_rule where id = #{id}") int deleteById(Long id); }`,
93
+ [`golden-service-infrastructure/${java}/infrastructure/persistence/gateway/QualityRuleGatewayImpl.java`]: `package com.yss.golden.infrastructure.persistence.gateway; import com.yss.golden.domain.quality.gateway.QualityRuleGateway; import com.yss.golden.domain.quality.model.QualityRule; import com.yss.golden.infrastructure.persistence.convertor.QualityRulePersistenceConvertor; import com.yss.golden.infrastructure.persistence.repository.QualityRuleRepository; import java.util.Optional; import org.springframework.stereotype.Repository; @Repository public class QualityRuleGatewayImpl implements QualityRuleGateway { private final QualityRuleRepository repository; private final QualityRulePersistenceConvertor convertor; public QualityRuleGatewayImpl(QualityRuleRepository repository, QualityRulePersistenceConvertor convertor){this.repository=repository;this.convertor=convertor;} public Optional<QualityRule> findById(Long id){return Optional.ofNullable(repository.selectById(id)).map(convertor::toDomain);} public void save(QualityRule rule){repository.insert(convertor.toPO(rule));} public void delete(Long id){repository.deleteById(id);} }`,
94
+ [`golden-service-infrastructure/${java}/infrastructure/query/adapter/QualityRuleQueryAdapter.java`]: `package com.yss.golden.infrastructure.query.adapter; import com.yss.cloud.dto.result.PageResult; import com.yss.golden.application.port.QualityRuleQueryPort; import com.yss.golden.application.query.QualityRulePageQuery; import com.yss.golden.application.result.QualityRuleResult; import java.util.Collections; import org.springframework.stereotype.Repository; @Repository public class QualityRuleQueryAdapter implements QualityRuleQueryPort { public PageResult<QualityRuleResult> page(QualityRulePageQuery query){return PageResult.of(Collections.emptyList(), 0L, query.getPageSize(), query.getPageIndex());} }`
95
+ })) await writeJava(project, relative, source);
96
+ await writeJava(project, `golden-service-application/${testJava}/application/service/QualityRuleServiceTest.java`, `package com.yss.golden.application.service; import com.yss.golden.application.command.QualityRuleCreateCommand; import com.yss.golden.application.port.QualityRuleQueryPort; import com.yss.golden.application.service.impl.QualityRuleServiceImpl; import com.yss.golden.domain.quality.gateway.QualityRuleGateway; import org.junit.jupiter.api.Test; import static org.mockito.Mockito.*; class QualityRuleServiceTest { @Test void createPersistsThroughDomainGateway(){QualityRuleGateway gateway=mock(QualityRuleGateway.class); QualityRuleCreateCommand command=new QualityRuleCreateCommand(); command.setRuleName("rule"); new QualityRuleServiceImpl(gateway, mock(QualityRuleQueryPort.class)).add(command); verify(gateway).save(any());} }`);
97
+ await writeJava(project, `golden-service-infrastructure/${testJava}/infrastructure/persistence/QualityRuleGatewayIntegrationTest.java`, `package com.yss.golden.infrastructure.persistence; import com.yss.golden.infrastructure.persistence.convertor.QualityRulePersistenceConvertor; import com.yss.golden.infrastructure.persistence.po.QualityRulePO; import org.junit.jupiter.api.Test; import org.mapstruct.factory.Mappers; import static org.junit.jupiter.api.Assertions.assertEquals; class QualityRuleGatewayIntegrationTest { @Test void persistenceMappingRoundTrips(){QualityRulePO po=new QualityRulePO(); po.setId(1L); po.setName("rule"); assertEquals("rule", Mappers.getMapper(QualityRulePersistenceConvertor.class).toDomain(po).getName());} }`);
98
+ const metadata = path.join(root, "metadata.json");
99
+ const webContract = path.join(root, "web-contract.json");
100
+ const dtoWireProfileDigest = createHash("sha256").update(await readFile(dtoWireProfileFile)).digest("hex");
101
+ await writeFile(metadata, JSON.stringify({ tables: [{ table_name: "quality_rule", table_comment: "质量规则", columns: [{ name: "id", sql_type: "bigint", primary: true, nullable: false }, { name: "rule_name", sql_type: "varchar(64)", nullable: false }] }] }));
102
+ const webProject = path.join(project, "golden-service-adapter", "golden-service-web");
103
+ await writeFile(webContract, JSON.stringify({ schema_version: 2, contract_id: "golden-slice-1", contract_version: 1, current_version: 1, slice_id: "quality-rule-first-slice", status: "approved", integration_mode: "scaffold-v2", implementation_project_root: project, scaffold_manifest_ref: manifestPath, base_package: "com.yss.golden", module_name: "golden", domain_segment: "quality", application_service_package: "com.yss.golden.application.service", architecture_profile: "target-domain-model", platform_profile: "spring-boot-2.7-jdk8", validation_namespace: "javax", dto_placement: "web", dto_wire_profile_ref: dtoWireProfileFile, dto_wire_profile_digest: dtoWireProfileDigest, openapi_freeze_ref: "openapi://quality-rule@1", allowed_write_paths: [path.join(webProject, "src/main/java/com/yss/golden/rest")], expected_evidence_files: ["first-slice-verification.json"], verification_commands: ["./mvnw test", "./mvnw package"], fields: { quality_rule: { create: ["rule_name"], update: ["id", "rule_name"], query: ["rule_name"], pagination: ["pageIndex", "pageSize"], response: ["id", "rule_name"] } } }));
104
+ await generateWeb(parseWebArgs(["--metadata-file", metadata, "--contract-file", webContract, "--dto-wire-profile-file", dtoWireProfileFile, "--scaffold-manifest-file", manifestPath, "--base-package", "com.yss.golden", "--module-name", "golden", "--domain-segment", "quality", "--web-project-dir", webProject, "--application-service-package", "com.yss.golden.application.service", "--validation-namespace", "javax"]), { log() {}, warn() {} });
105
+ await writeJava(project, `golden-service-adapter/golden-service-web/${java}/rest/advice/TargetProfileExceptionAdvice.java`, `package com.yss.golden.rest.advice;
106
+ import com.yss.golden.application.error.QualityRuleConflictException;
107
+ import com.yss.golden.application.error.QualityRuleSystemException;
108
+ import org.springframework.core.Ordered;
109
+ import org.springframework.core.annotation.Order;
110
+ import org.springframework.http.HttpStatus;
111
+ import org.springframework.http.ResponseEntity;
112
+ import org.springframework.web.bind.annotation.ExceptionHandler;
113
+ import org.springframework.web.bind.annotation.RestControllerAdvice;
114
+ @Order(Ordered.HIGHEST_PRECEDENCE)
115
+ @RestControllerAdvice
116
+ public final class TargetProfileExceptionAdvice {
117
+ @ExceptionHandler(QualityRuleConflictException.class)
118
+ public ResponseEntity<ErrorResponse> handleConflict(QualityRuleConflictException ignored) { return response(HttpStatus.CONFLICT, "QUALITY_RULE_CONFLICT", "质量规则冲突", "请检查质量规则后重试"); }
119
+ @ExceptionHandler(QualityRuleSystemException.class)
120
+ public ResponseEntity<ErrorResponse> handleKnownSystem(QualityRuleSystemException ignored) { return response(HttpStatus.SERVICE_UNAVAILABLE, "QUALITY_RULE_SYSTEM", "服务暂不可用", "请稍后重试"); }
121
+ @ExceptionHandler(RuntimeException.class)
122
+ public ResponseEntity<ErrorResponse> handleUnknown(RuntimeException ignored) { return response(HttpStatus.INTERNAL_SERVER_ERROR, "SYS_ERROR", "后台服务异常,请联系技术管理员", "请联系技术管理员"); }
123
+ private ResponseEntity<ErrorResponse> response(HttpStatus status, String errCode, String message, String tips) { return ResponseEntity.status(status).body(new ErrorResponse(errCode, message, tips)); }
124
+ public static final class ErrorResponse {
125
+ private final String errCode;
126
+ private final String message;
127
+ private final String tips;
128
+ ErrorResponse(String errCode, String message, String tips) { this.errCode = errCode; this.message = message; this.tips = tips; }
129
+ public String getErrCode() { return errCode; }
130
+ public String getMessage() { return message; }
131
+ public String getTips() { return tips; }
132
+ }
133
+ }`);
134
+ await writeJava(project, `golden-service-adapter/golden-service-web/${testJava}/rest/GoldenExceptionIntegrationTest.java`, `package com.yss.golden.rest;
135
+ import com.yss.cloud.exception.advice.GlobalExceptionAdvice;
136
+ import com.yss.golden.application.error.QualityRuleConflictException;
137
+ import com.yss.golden.application.error.QualityRuleSystemException;
138
+ import org.junit.jupiter.api.Test;
139
+ import org.springframework.beans.factory.annotation.Autowired;
140
+ import org.springframework.boot.SpringBootConfiguration;
141
+ import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
142
+ import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
143
+ import org.springframework.boot.test.context.SpringBootTest;
144
+ import org.springframework.context.ApplicationContext;
145
+ import org.springframework.context.annotation.Import;
146
+ import com.yss.golden.rest.advice.TargetProfileExceptionAdvice;
147
+ import org.springframework.http.MediaType;
148
+ import org.springframework.test.web.servlet.MockMvc;
149
+ import org.springframework.web.bind.annotation.GetMapping;
150
+ import org.springframework.web.bind.annotation.RestController;
151
+ import static org.assertj.core.api.Assertions.assertThat;
152
+ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
153
+ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
154
+ @SpringBootTest(classes = GoldenExceptionIntegrationTest.TestApplication.class)
155
+ @AutoConfigureMockMvc
156
+ class GoldenExceptionIntegrationTest {
157
+ @Autowired MockMvc mvc;
158
+ @Autowired ApplicationContext context;
159
+ @Test void actualStarterAutoConfigurationIsLoaded() { assertThat(context.getBeansOfType(GlobalExceptionAdvice.class)).hasSize(1); }
160
+ @Test void businessErrorUsesStablePublicResponse() throws Exception { mvc.perform(get("/exception-probe/business")).andExpect(status().isConflict()).andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)).andExpect(jsonPath("$.errCode").value("QUALITY_RULE_CONFLICT")).andExpect(jsonPath("$.message").value("质量规则冲突")); }
161
+ @Test void knownSystemErrorIsSanitized() throws Exception { mvc.perform(get("/exception-probe/system")).andExpect(status().isServiceUnavailable()).andExpect(jsonPath("$.errCode").value("QUALITY_RULE_SYSTEM")).andExpect(jsonPath("$.message").value("服务暂不可用")).andExpect(content().string(org.hamcrest.Matchers.not(org.hamcrest.Matchers.containsString("database-password")))); }
162
+ @Test void unknownErrorIsSanitizedAndHandledBeforeComponentFallback() throws Exception { mvc.perform(get("/exception-probe/unknown")).andExpect(status().isInternalServerError()).andExpect(jsonPath("$.errCode").value("SYS_ERROR")).andExpect(jsonPath("$.message").value("后台服务异常,请联系技术管理员")).andExpect(content().string(org.hamcrest.Matchers.not(org.hamcrest.Matchers.containsString("runtime-secret")))); }
163
+ @SpringBootConfiguration @EnableAutoConfiguration @Import({ExceptionProbeController.class, TargetProfileExceptionAdvice.class}) static class TestApplication {}
164
+ @RestController static class ExceptionProbeController {
165
+ @GetMapping("/exception-probe/business") void business() { throw new QualityRuleConflictException("internal-business-detail"); }
166
+ @GetMapping("/exception-probe/system") void system() { throw new QualityRuleSystemException("database-password", new IllegalStateException("internal-cause")); }
167
+ @GetMapping("/exception-probe/unknown") void unknown() { throw new RuntimeException("runtime-secret"); }
168
+ }
169
+ }`);
170
+ const sliceContract = path.join(root, "slice-contract.json");
171
+ const requiredSkills = ["yss-domain", "yss-application", "yss-repository", "yss-mybatis", "yss-web-controller", "yss-dto", "yss-exception", "yss-validation", "mapstruct", "lombok", "alibaba-java-code-style"];
172
+ await writeFile(sliceContract, JSON.stringify({ schema_version: 1, contract_id: "golden-slice-1", contract_version: 1, slice_id: "quality-rule-first-slice", status: "approved", readiness: { blockers: [], stale_inputs: [] }, common: { required_skills: requiredSkills }, backend: { status: "required", affected_layers: ["domain", "application", "infrastructure", "web"], required_skills: requiredSkills }, work_units: [{ id: "slice-backend", contract_id: "golden-slice-1", contract_version: 1, work_unit: { primary_skill: "yss-domain" } }] }));
173
+ return { root, project, sliceContract };
174
+ }
175
+
176
+ test("golden first slice 组合 Domain/Application/Infrastructure/Web 且不发生 DTO/PO 穿层", async (t) => {
177
+ const { project } = await prepareGoldenProject(t);
178
+ const domainPom = await readFile(path.join(project, "golden-service-domain", "pom.xml"), "utf8");
179
+ const applicationPom = await readFile(path.join(project, "golden-service-application", "pom.xml"), "utf8");
180
+ const webPom = await readFile(path.join(project, "golden-service-adapter", "golden-service-web", "pom.xml"), "utf8");
181
+ const controller = await readFile(path.join(project, "golden-service-adapter", "golden-service-web", "src/main/java/com/yss/golden/rest/QualityRuleController.java"), "utf8");
182
+ const convertor = await readFile(path.join(project, "golden-service-adapter", "golden-service-web", "src/main/java/com/yss/golden/rest/convertor/QualityRuleWebConvertor.java"), "utf8");
183
+ const pageRequest = await readFile(path.join(project, "golden-service-adapter", "golden-service-web", "src/main/java/com/yss/golden/rest/dto/request/QualityRulePageRequest.java"), "utf8");
184
+ const serviceImpl = await readFile(path.join(project, "golden-service-application", "src/main/java/com/yss/golden/application/service/impl/QualityRuleServiceImpl.java"), "utf8");
185
+ const repository = await readFile(path.join(project, "golden-service-infrastructure", "src/main/java/com/yss/golden/infrastructure/persistence/repository/QualityRuleRepository.java"), "utf8");
186
+ const gatewayImpl = await readFile(path.join(project, "golden-service-infrastructure", "src/main/java/com/yss/golden/infrastructure/persistence/gateway/QualityRuleGatewayImpl.java"), "utf8");
187
+ const queryAdapter = await readFile(path.join(project, "golden-service-infrastructure", "src/main/java/com/yss/golden/infrastructure/query/adapter/QualityRuleQueryAdapter.java"), "utf8");
188
+ assert.doesNotMatch(domainPom, /yss-component-dto|yss-component-exception|spring-web|swagger/);
189
+ assert.match(applicationPom, /yss-component-dto/);
190
+ assert.doesNotMatch(webPom, /golden-service-domain|golden-service-infrastructure/);
191
+ assert.doesNotMatch(`${controller}\n${convertor}`, /\.domain\.|\.infrastructure\.|\.repository\.|Mappers\.getMapper|INSTANCE/);
192
+ assert.match(convertor, /@Mapper\(componentModel = "spring"\)/);
193
+ assert.doesNotMatch(pageRequest, /offset|needTotalCount|tempTotalCount|extends PageQuery/);
194
+ assert.match(pageRequest, /pageIndex/);
195
+ assert.match(pageRequest, /pageSize/);
196
+ assert.doesNotMatch(pageRequest, /orderBy|orderDirection|groupBy/);
197
+ assert.match(serviceImpl, /implements QualityRuleService/);
198
+ assert.match(serviceImpl, /@Transactional/);
199
+ assert.match(repository, /@Mapper/);
200
+ assert.match(gatewayImpl, /implements QualityRuleGateway/);
201
+ assert.match(queryAdapter, /implements QualityRuleQueryPort/);
202
+ });
203
+
204
+ test("golden first slice 通过真实 Wrapper 后才写入 first-slice-verified", { timeout: 300_000 }, async (t) => {
205
+ if (!["YSS_MAVEN_REPOSITORY_URL", "MAVEN_REPO_USERNAME", "MAVEN_REPO_PASSWORD"].every((name) => process.env[name])) {
206
+ t.skip("缺少受控 YSS Maven 仓库环境;不得声明 first-slice-verified");
207
+ return;
208
+ }
209
+ const { project, sliceContract, root } = await prepareGoldenProject(t);
210
+ await chmod(path.join(project, "mvnw"), 0o755);
211
+ const result = await runFirstSliceVerification(project, path.join(root, "first-slice-evidence"), sliceContract, process.env);
212
+ assert.equal(result.status, "passed", JSON.stringify(result, null, 2));
213
+ assert.equal(JSON.parse(await readFile(path.join(project, ".yss/scaffold-generation.json"), "utf8")).completion_level, "first-slice-verified");
214
+ });
215
+
216
+ test("真实 YSS exception starter 的自动配置、优先级、三类映射和序列化均受保护", { timeout: 300_000 }, async (t) => {
217
+ if (!["YSS_MAVEN_REPOSITORY_URL", "MAVEN_REPO_USERNAME", "MAVEN_REPO_PASSWORD"].every((name) => process.env[name])) {
218
+ t.skip("缺少受控 YSS Maven 仓库环境;不得声明 exception starter 真实集成已验证");
219
+ return;
220
+ }
221
+ const { project } = await prepareGoldenProject(t);
222
+ await chmod(path.join(project, "mvnw"), 0o755);
223
+ const result = await execute(path.join(project, "mvnw"), ["-pl", "golden-service-adapter/golden-service-web", "-am", "test"], { cwd: project, timeout: 300_000 });
224
+ assert.equal(result.code, 0, `${result.stdout}\n${result.stderr}`);
225
+ });
@@ -0,0 +1,164 @@
1
+ import assert from "node:assert/strict";
2
+ import { createHash } from "node:crypto";
3
+ import { chmod, mkdir, mkdtemp, readFile, readdir, writeFile } from "node:fs/promises";
4
+ import os from "node:os";
5
+ import path from "node:path";
6
+ import test from "node:test";
7
+ import { fileURLToPath } from "node:url";
8
+
9
+ import { runFirstSliceVerification } from "./run_first_slice_verification.mjs";
10
+
11
+ const requiredSkills = ["yss-domain", "yss-application", "yss-repository", "yss-mybatis", "yss-web-controller", "yss-dto", "yss-exception", "yss-validation", "mapstruct", "lombok", "alibaba-java-code-style"];
12
+ const scripts = path.dirname(fileURLToPath(import.meta.url));
13
+ const repositoryRoot = path.resolve(scripts, "../../../..");
14
+
15
+ async function treeDigest(root) {
16
+ const relativeFiles = [];
17
+ async function visit(directory) {
18
+ for (const entry of await readdir(directory, { withFileTypes: true })) {
19
+ const absolute = path.join(directory, entry.name);
20
+ if (entry.isDirectory()) await visit(absolute);
21
+ else if (entry.isFile()) relativeFiles.push(path.relative(root, absolute).split(path.sep).join("/"));
22
+ }
23
+ }
24
+ await visit(root);
25
+ const hash = createHash("sha256");
26
+ for (const relative of relativeFiles.sort()) hash.update(relative).update("\0").update(await readFile(path.join(root, relative))).update("\0");
27
+ return hash.digest("hex");
28
+ }
29
+
30
+ async function readiness() {
31
+ const downstreamSkills = {};
32
+ for (const skill of requiredSkills) downstreamSkills[skill] = await treeDigest(path.join(repositoryRoot, ".agents", "skills", skill));
33
+ const digest = async (relative) => createHash("sha256").update(await readFile(path.join(repositoryRoot, relative))).digest("hex");
34
+ return {
35
+ downstream_skills: downstreamSkills,
36
+ contracts: {
37
+ scaffold_parent: await digest(".agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md"),
38
+ router_contract: await digest(".agents/skills/yss-router/references/router-contract.yaml")
39
+ },
40
+ architecture_ruleset: "b".repeat(64)
41
+ };
42
+ }
43
+
44
+ async function write(project, relative, content = "fixture\n") {
45
+ const target = path.join(project, relative);
46
+ await mkdir(path.dirname(target), { recursive: true });
47
+ await writeFile(target, content);
48
+ }
49
+
50
+ async function fixture({ omitGatewayImpl = false, omitReadiness = false } = {}) {
51
+ const root = await mkdtemp(path.join(os.tmpdir(), "yss-first-slice-verification-"));
52
+ const project = path.join(root, "demo-service");
53
+ const evidence = path.join(root, "evidence");
54
+ const manifestPath = path.join(project, ".yss", "scaffold-generation.json");
55
+ const contractPath = path.join(root, "slice-contract.json");
56
+ await mkdir(path.dirname(manifestPath), { recursive: true });
57
+ await writeFile(manifestPath, JSON.stringify({
58
+ schema_version: 2,
59
+ contract_id: "scaffold-1",
60
+ contract_version: 1,
61
+ scaffold_request_id: "scaffold-request-1",
62
+ contract_digest: "a".repeat(64),
63
+ profiles: { architecture: "target-domain-model", persistence: "mybatis-plus", database: "mysql", platform: "spring-boot-2.7-jdk8", validation_namespace: "javax", dto_placement: "web", repository: "yss-internal" },
64
+ ownership: { generated_files: [] },
65
+ readiness: omitReadiness ? { downstream_skills: {}, contracts: {}, architecture_ruleset: "b".repeat(64) } : await readiness(),
66
+ generation_policy: { mode: "initialize-only", existing_target: "unsupported", old_project_migration: "unsupported", template_upgrade: "unsupported" },
67
+ completion_level: "empty-scaffold-verified",
68
+ approval_ref: "approval-1",
69
+ approver: "maintainer",
70
+ lifecycle_approval_ref: "approval-1",
71
+ router_draft_ref: "router-1",
72
+ persisted_ref: "persisted-1",
73
+ contract_file_ref: contractPath,
74
+ current_version: 1,
75
+ allowed_write_paths: ["."],
76
+ expected_evidence_files: [".yss/scaffold-generation.json"],
77
+ verification_commands: ["./mvnw validate", "./mvnw test", "./mvnw package"],
78
+ generation_mode: "controlled-generation",
79
+ maven_coordinates_source: "approved-contract"
80
+ }));
81
+ await writeFile(contractPath, JSON.stringify({
82
+ schema_version: 1,
83
+ contract_id: "slice-1",
84
+ contract_version: 1,
85
+ slice_id: "quality-rule-first-slice",
86
+ status: "approved",
87
+ readiness: { blockers: [], stale_inputs: [] },
88
+ common: { required_skills: requiredSkills },
89
+ backend: { status: "required", affected_layers: ["domain", "application", "infrastructure", "web"], required_skills: requiredSkills },
90
+ work_units: [{ id: "slice-backend", contract_id: "slice-1", contract_version: 1, work_unit: { primary_skill: "yss-domain" } }]
91
+ }));
92
+ await write(project, "mvnw", "#!/bin/sh\nexit 0\n");
93
+ await chmod(path.join(project, "mvnw"), 0o755);
94
+ await write(project, ".mvn/settings.xml", "<settings/>\n");
95
+ await write(project, ".mvn/maven.config", "-s .mvn/settings.xml -P yss-internal\n");
96
+ const files = [
97
+ "demo-service-domain/src/main/java/com/yss/demo/domain/quality/model/QualityRule.java",
98
+ "demo-service-domain/src/main/java/com/yss/demo/domain/quality/gateway/QualityRuleGateway.java",
99
+ "demo-service-domain/src/test/java/com/yss/demo/domain/quality/model/QualityRuleTest.java",
100
+ "demo-service-application/src/main/java/com/yss/demo/application/command/QualityRuleCreateCommand.java",
101
+ "demo-service-application/src/main/java/com/yss/demo/application/query/QualityRulePageQuery.java",
102
+ "demo-service-application/src/main/java/com/yss/demo/application/result/QualityRuleResult.java",
103
+ "demo-service-application/src/main/java/com/yss/demo/application/service/QualityRuleService.java",
104
+ "demo-service-application/src/main/java/com/yss/demo/application/service/impl/QualityRuleServiceImpl.java",
105
+ "demo-service-application/src/test/java/com/yss/demo/application/service/QualityRuleServiceTest.java",
106
+ "demo-service-infrastructure/src/main/java/com/yss/demo/infrastructure/persistence/po/QualityRulePO.java",
107
+ "demo-service-infrastructure/src/main/java/com/yss/demo/infrastructure/persistence/repository/QualityRuleRepository.java",
108
+ "demo-service-infrastructure/src/main/java/com/yss/demo/infrastructure/persistence/convertor/QualityRulePersistenceConvertor.java",
109
+ "demo-service-infrastructure/src/main/java/com/yss/demo/infrastructure/query/adapter/QualityRuleQueryAdapter.java",
110
+ "demo-service-infrastructure/src/test/java/com/yss/demo/infrastructure/persistence/QualityRuleGatewayIntegrationTest.java",
111
+ "demo-service-adapter/demo-service-web/src/main/java/com/yss/demo/rest/QualityRuleController.java",
112
+ "demo-service-adapter/demo-service-web/src/main/java/com/yss/demo/rest/convertor/QualityRuleWebConvertor.java",
113
+ "demo-service-adapter/demo-service-web/src/main/java/com/yss/demo/rest/dto/request/QualityRuleCreateRequest.java",
114
+ "demo-service-adapter/demo-service-web/src/main/java/com/yss/demo/rest/dto/response/QualityRuleResponse.java",
115
+ "demo-service-adapter/demo-service-web/src/test/java/com/yss/demo/rest/QualityRuleContractTest.java"
116
+ ];
117
+ if (!omitGatewayImpl) files.push("demo-service-infrastructure/src/main/java/com/yss/demo/infrastructure/persistence/gateway/QualityRuleGatewayImpl.java");
118
+ for (const relative of files) await write(project, relative);
119
+ return { root, project, evidence, manifestPath, contractPath };
120
+ }
121
+
122
+ const environment = { ...process.env, JAVA_HOME: "/fixture/java", YSS_MAVEN_REPOSITORY_URL: "https://repo.example.invalid", MAVEN_REPO_USERNAME: "user", MAVEN_REPO_PASSWORD: "secret" };
123
+
124
+ test("refuses first-slice promotion when a required persistence seam is absent", async () => {
125
+ const data = await fixture({ omitGatewayImpl: true });
126
+ const report = await runFirstSliceVerification(data.project, data.evidence, data.contractPath, environment);
127
+ assert.equal(report.status, "failed");
128
+ assert.ok(report.missing_artifacts.includes("infrastructure-gateway-implementation"));
129
+ const manifest = JSON.parse(await readFile(data.manifestPath, "utf8"));
130
+ assert.equal(manifest.completion_level, "empty-scaffold-verified");
131
+ });
132
+
133
+ test("refuses first-slice promotion when downstream skill or contract digests are absent", async () => {
134
+ const data = await fixture({ omitReadiness: true });
135
+ const report = await runFirstSliceVerification(data.project, data.evidence, data.contractPath, environment);
136
+ assert.equal(report.status, "failed");
137
+ assert.ok(report.downstream_skill_drift.includes("yss-domain:digest-missing"));
138
+ assert.ok(report.downstream_skill_drift.includes("router_contract:digest-missing"));
139
+ const manifest = JSON.parse(await readFile(data.manifestPath, "utf8"));
140
+ assert.equal(manifest.completion_level, "empty-scaffold-verified");
141
+ });
142
+
143
+ test("refuses first-slice promotion when a work unit references a stale contract version", async () => {
144
+ const data = await fixture();
145
+ const contract = JSON.parse(await readFile(data.contractPath, "utf8"));
146
+ contract.work_units[0].contract_version = 0;
147
+ await writeFile(data.contractPath, JSON.stringify(contract));
148
+ const report = await runFirstSliceVerification(data.project, data.evidence, data.contractPath, environment);
149
+ assert.equal(report.status, "failed");
150
+ assert.ok(report.contract_failures.includes("work-unit-contract-version-mismatch:slice-backend"));
151
+ });
152
+
153
+ test("promotes a complete approved slice only after all root wrapper commands pass", async () => {
154
+ const data = await fixture();
155
+ const report = await runFirstSliceVerification(data.project, data.evidence, data.contractPath, environment);
156
+ assert.equal(report.status, "passed");
157
+ assert.equal(report.completion_level, "first-slice-verified");
158
+ assert.deepEqual(report.commands.map((item) => item.exit_code), [0, 0, 0]);
159
+ const manifest = JSON.parse(await readFile(data.manifestPath, "utf8"));
160
+ assert.equal(manifest.completion_level, "first-slice-verified");
161
+ assert.equal(manifest.first_slice_contract.contract_id, "slice-1");
162
+ assert.equal(manifest.first_slice_contract.slice_id, "quality-rule-first-slice");
163
+ assert.equal(JSON.parse(await readFile(path.join(data.evidence, "first-slice-verification.json"), "utf8")).status, "passed");
164
+ });
@@ -0,0 +1,126 @@
1
+ #!/usr/bin/env node
2
+ /** 在同一个受控工作流中生成脚手架并执行真实 Maven Wrapper 验证。 */
3
+ import { execFile } from "node:child_process";
4
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
5
+ import path from "node:path";
6
+ import process from "node:process";
7
+ import { fileURLToPath } from "node:url";
8
+
9
+ import { run } from "./run_scaffold_verification.mjs";
10
+
11
+ const SCRIPT_DIR = path.dirname(fileURLToPath(import.meta.url));
12
+ const GENERATOR = path.join(SCRIPT_DIR, "generate_scaffold.mjs");
13
+ const isoNow = () => new Date().toISOString();
14
+
15
+ function parseArgs(argv) {
16
+ const generatorArgs = [];
17
+ let evidenceDir;
18
+ let projectName;
19
+ let outputDir;
20
+ for (let index = 0; index < argv.length; index += 1) {
21
+ const original = argv[index];
22
+ const [flag, inlineValue] = original.split(/=(.*)/s, 2);
23
+ let value = inlineValue;
24
+ if (["--evidence-dir", "--project-name", "--output-dir"].includes(flag) && value === undefined) value = argv[index + 1];
25
+ if (flag === "--evidence-dir") {
26
+ if (!value || value.startsWith("--")) throw new Error("参数 --evidence-dir 缺少值");
27
+ evidenceDir = path.resolve(value);
28
+ if (inlineValue === undefined) index += 1;
29
+ continue;
30
+ }
31
+ generatorArgs.push(original);
32
+ if (["--project-name", "--output-dir"].includes(flag) && inlineValue === undefined) {
33
+ if (!value || value.startsWith("--")) throw new Error(`参数 ${flag} 缺少值`);
34
+ generatorArgs.push(value);
35
+ index += 1;
36
+ }
37
+ if (flag === "--project-name") projectName = value;
38
+ if (flag === "--output-dir") outputDir = value;
39
+ }
40
+ if (!evidenceDir) throw new Error("必须提供 --evidence-dir");
41
+ if (!projectName || !outputDir) throw new Error("必须提供 --project-name 和 --output-dir");
42
+ return { evidenceDir, generatorArgs, projectRoot: path.join(path.resolve(outputDir), projectName) };
43
+ }
44
+
45
+ function executeGenerator(args) {
46
+ return new Promise((resolve) => {
47
+ execFile(process.execPath, [GENERATOR, ...args], { encoding: "utf8" }, (error, stdout, stderr) => {
48
+ resolve({ exitCode: error?.code ?? 0, stdout, stderr });
49
+ });
50
+ });
51
+ }
52
+
53
+ async function writeJson(target, value) {
54
+ await mkdir(path.dirname(target), { recursive: true });
55
+ await writeFile(target, `${JSON.stringify(value, null, 2)}\n`, "utf8");
56
+ }
57
+
58
+ async function main() {
59
+ let args;
60
+ try {
61
+ args = parseArgs(process.argv.slice(2));
62
+ } catch (error) {
63
+ process.stderr.write(`❌ 脚手架工作流无法执行: ${error.message}\n`);
64
+ return 1;
65
+ }
66
+ await mkdir(args.evidenceDir, { recursive: true });
67
+ const workflowPath = path.join(args.evidenceDir, "scaffold-workflow.json");
68
+ const verificationPath = path.join(args.evidenceDir, "scaffold-verification.json");
69
+ const generation = await executeGenerator(args.generatorArgs);
70
+ await writeFile(path.join(args.evidenceDir, "scaffold-generation.stdout.log"), generation.stdout, "utf8");
71
+ await writeFile(path.join(args.evidenceDir, "scaffold-generation.stderr.log"), generation.stderr, "utf8");
72
+ process.stdout.write(generation.stdout);
73
+ process.stderr.write(generation.stderr);
74
+ if (generation.exitCode !== 0) {
75
+ await writeJson(workflowPath, {
76
+ workflow_mode: "controlled-generation",
77
+ generated_at: isoNow(),
78
+ project_root: args.projectRoot,
79
+ status: "blocked",
80
+ failure_category: "generation",
81
+ generation_exit_code: generation.exitCode,
82
+ verification_ref: null
83
+ });
84
+ return 1;
85
+ }
86
+ try {
87
+ const verification = await run(args.projectRoot, args.evidenceDir);
88
+ await writeJson(verificationPath, verification);
89
+ const passed = verification.status === "passed";
90
+ if (passed) {
91
+ const manifestPath = path.join(args.projectRoot, ".yss", "scaffold-generation.json");
92
+ const manifest = JSON.parse(await readFile(manifestPath, "utf8"));
93
+ manifest.completion_level = "empty-scaffold-verified";
94
+ manifest.empty_scaffold_verification_ref = verificationPath;
95
+ manifest.empty_scaffold_verified_at = isoNow();
96
+ await writeJson(manifestPath, manifest);
97
+ }
98
+ await writeJson(workflowPath, {
99
+ workflow_mode: "controlled-generation",
100
+ generated_at: isoNow(),
101
+ project_root: args.projectRoot,
102
+ status: passed ? "completed" : "blocked",
103
+ failure_category: verification.failure_category,
104
+ generation_exit_code: generation.exitCode,
105
+ verification_ref: verificationPath
106
+ });
107
+ if (passed) process.stdout.write(`✅ 脚手架生成与验证完成: ${args.projectRoot}\n`);
108
+ else process.stderr.write(`❌ 脚手架验证失败,已阻断: ${verification.failure_category}\n`);
109
+ return passed ? 0 : 1;
110
+ } catch (error) {
111
+ await writeJson(workflowPath, {
112
+ workflow_mode: "controlled-generation",
113
+ generated_at: isoNow(),
114
+ project_root: args.projectRoot,
115
+ status: "blocked",
116
+ failure_category: "verification-preflight",
117
+ generation_exit_code: generation.exitCode,
118
+ verification_ref: verificationPath,
119
+ error: error.message
120
+ });
121
+ process.stderr.write(`❌ 脚手架验证无法执行,已阻断: ${error.message}\n`);
122
+ return 1;
123
+ }
124
+ }
125
+
126
+ process.exitCode = await main();