create-yss-spec 3.4.5 → 3.4.7

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 (547) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/template/.agents/skills/.strategic-design-skills-manifest.json +1 -1
  4. package/template/.agents/skills/.yss-skills-manifest.json +1 -8
  5. package/template/.agents/skills/formily-mode-slot-detail/SKILL.md +3 -4
  6. package/template/.agents/skills/yedit-table-usage/SKILL.md +2 -0
  7. package/template/.agents/skills/yss-application/SKILL.md +8 -6
  8. package/template/.agents/skills/yss-audit-log/SKILL.md +12 -7
  9. package/template/.agents/skills/yss-audit-log/references/source-index.boot2-java8.md +57 -0
  10. package/template/.agents/skills/yss-audit-log/references/source-index.boot3-java17.md +58 -0
  11. package/template/.agents/skills/yss-audit-log/references/source-index.md +6 -39
  12. package/template/.agents/skills/yss-cache/SKILL.md +5 -1
  13. package/template/.agents/skills/yss-cache/references/source-index.boot2-java8.md +81 -0
  14. package/template/.agents/skills/yss-cache/references/source-index.boot3-java17.md +83 -0
  15. package/template/.agents/skills/yss-cache/references/source-index.md +6 -63
  16. package/template/.agents/skills/yss-cache/scripts/check-skill-freshness.sh +20 -15
  17. package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +2 -2
  18. package/template/{.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md → .agents/skills/yss-ddd-scaffold-generator/references/engineering-baseline.md} +0 -5
  19. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +1 -1
  20. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +2 -2
  21. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +1 -3
  22. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  23. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +1 -1
  24. package/template/.agents/skills/yss-design-system/SKILL.md +2 -2
  25. package/template/.agents/skills/yss-distributed-id/SKILL.md +4 -0
  26. package/template/.agents/skills/yss-distributed-id/references/source-index.boot2-java8.md +102 -0
  27. package/template/.agents/skills/yss-distributed-id/references/source-index.boot3-java17.md +90 -0
  28. package/template/.agents/skills/yss-distributed-id/references/source-index.md +6 -82
  29. package/template/.agents/skills/yss-dto/SKILL.md +2 -2
  30. package/template/.agents/skills/yss-dto/references/source-index.boot2-java8.md +67 -0
  31. package/template/.agents/skills/yss-dto/references/source-index.boot3-java17.md +70 -0
  32. package/template/.agents/skills/yss-dto/references/source-index.md +6 -51
  33. package/template/.agents/skills/yss-excel-mvc/SKILL.md +4 -0
  34. package/template/.agents/skills/yss-excel-mvc/references/source-index.boot2-java8.md +90 -0
  35. package/template/.agents/skills/yss-excel-mvc/references/source-index.boot3-java17.md +58 -0
  36. package/template/.agents/skills/yss-excel-mvc/references/source-index.md +6 -70
  37. package/template/.agents/skills/yss-exception/SKILL.md +12 -9
  38. package/template/.agents/skills/yss-exception/references/source-index.boot2-java8.md +50 -0
  39. package/template/.agents/skills/yss-exception/references/source-index.boot3-java17.md +50 -0
  40. package/template/.agents/skills/yss-exception/references/source-index.md +6 -31
  41. package/template/.agents/skills/yss-formily/SKILL.md +2 -2
  42. package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
  43. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +1 -1
  44. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +2 -2
  45. package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +158 -0
  46. package/template/.agents/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +3 -3
  47. package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +5 -0
  48. package/template/.agents/skills/yss-hook/SKILL.md +3 -2
  49. package/template/.agents/skills/yss-implementation-contract-compiler/SKILL.md +2 -0
  50. package/template/.agents/skills/yss-implementation-contract-compiler/references/boundaries.md +4 -6
  51. package/template/.agents/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +27 -2
  52. package/template/.agents/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +2 -1
  53. package/template/.agents/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +60 -14
  54. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/SKILL.md +6 -5
  55. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +2 -2
  56. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/references/architecture.md +2 -0
  57. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/data-analysis-profile.mjs +82 -0
  58. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +23 -9
  59. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +23 -6
  60. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/tests/scaffold-generator.test.mjs +2 -0
  61. package/template/.agents/skills/yss-mybatis/SKILL.md +2 -2
  62. package/template/.agents/skills/yss-mybatis/references/source-index.boot2-java8.md +126 -0
  63. package/template/.agents/skills/yss-mybatis/references/source-index.boot3-java17.md +126 -0
  64. package/template/.agents/skills/yss-mybatis/references/source-index.md +6 -109
  65. package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +11 -11
  66. package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +2 -2
  67. package/template/.agents/skills/yss-repository/SKILL.md +1 -1
  68. package/template/.agents/skills/yss-resilience4j/SKILL.md +4 -0
  69. package/template/.agents/skills/yss-resilience4j/references/source-index.boot2-java8.md +48 -0
  70. package/template/.agents/skills/yss-resilience4j/references/source-index.boot3-java17.md +48 -0
  71. package/template/.agents/skills/yss-resilience4j/references/source-index.md +6 -29
  72. package/template/.agents/skills/yss-security-algorithm/SKILL.md +34 -10
  73. package/template/.agents/skills/yss-security-algorithm/references/source-index.boot2-java8.md +50 -0
  74. package/template/.agents/skills/yss-security-algorithm/references/source-index.boot3-java17.md +51 -0
  75. package/template/.agents/skills/yss-security-algorithm/references/source-index.md +6 -31
  76. package/template/.agents/skills/yss-skill-source-index-refresh/SKILL.md +12 -6
  77. package/template/.agents/skills/yss-skill-source-index-refresh/references/backend-component-platform-compatibility.md +27 -0
  78. package/template/.agents/skills/yss-skill-source-index-refresh/references/source-location.md +4 -4
  79. package/template/.agents/skills/yss-skill-source-index-refresh/references/source-map-config.md +13 -5
  80. package/template/.agents/skills/yss-skill-source-index-refresh/scripts/check-backend-skill-source-index.mjs +60 -0
  81. package/template/.agents/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +250 -56
  82. package/template/.agents/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +74 -7
  83. package/template/.agents/skills/yss-tactical-design/SKILL.md +1 -1
  84. package/template/.agents/skills/yss-tactical-design/references/output-template.md +1 -1
  85. package/template/.agents/skills/yss-technical-design/SKILL.md +3 -1
  86. package/template/.agents/skills/yss-technical-design/references/technical-design-contract.md +1 -1
  87. package/template/.agents/skills/yss-technical-design/scripts/generate-schema.mjs +1 -1
  88. package/template/.agents/skills/yss-technical-design/tests/run-scenarios.mjs +3 -1
  89. package/template/.agents/skills/yss-ui/SKILL.md +9 -6
  90. package/template/.agents/skills/yss-ui/references/component-routing.md +11 -4
  91. package/template/.agents/skills/yss-ui-business-page-generation/SKILL.md +5 -1
  92. package/template/.agents/skills/yss-ui-business-page-generation/references/hooks-map.md +3 -2
  93. package/template/.agents/skills/yss-up-springboot3/SKILL.md +23 -9
  94. package/template/.agents/skills/yss-userinfo/SKILL.md +21 -14
  95. package/template/.agents/skills/yss-userinfo/references/source-index.boot2-java8.md +49 -0
  96. package/template/.agents/skills/yss-userinfo/references/source-index.boot3-java17.md +54 -0
  97. package/template/.agents/skills/yss-userinfo/references/source-index.md +6 -30
  98. package/template/.agents/skills/yss-validation/SKILL.md +12 -17
  99. package/template/.agents/skills/yss-validation/references/source-index.boot2-java8.md +47 -0
  100. package/template/.agents/skills/yss-validation/references/source-index.boot3-java17.md +47 -0
  101. package/template/.agents/skills/yss-validation/references/source-index.md +6 -29
  102. package/template/.agents/skills/yss-web-controller/SKILL.md +4 -4
  103. package/template/.agents/skills/yss-web-controller/scripts/generate_controller.test.mjs +1 -1
  104. package/template/.agents/skills/ytable-usage/SKILL.md +14 -7
  105. package/template/.agents/skills/ytree-usage/SKILL.md +1 -0
  106. package/template/.codex/skills/formily-mode-slot-detail/SKILL.md +3 -4
  107. package/template/.codex/skills/yedit-table-usage/SKILL.md +2 -0
  108. package/template/.codex/skills/yss-application/SKILL.md +8 -6
  109. package/template/.codex/skills/yss-audit-log/SKILL.md +12 -7
  110. package/template/.codex/skills/yss-audit-log/references/source-index.boot2-java8.md +57 -0
  111. package/template/.codex/skills/yss-audit-log/references/source-index.boot3-java17.md +58 -0
  112. package/template/.codex/skills/yss-audit-log/references/source-index.md +6 -39
  113. package/template/.codex/skills/yss-cache/SKILL.md +5 -1
  114. package/template/.codex/skills/yss-cache/references/source-index.boot2-java8.md +81 -0
  115. package/template/.codex/skills/yss-cache/references/source-index.boot3-java17.md +83 -0
  116. package/template/.codex/skills/yss-cache/references/source-index.md +6 -63
  117. package/template/.codex/skills/yss-cache/scripts/check-skill-freshness.sh +20 -15
  118. package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +2 -2
  119. package/template/{.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md → .codex/skills/yss-ddd-scaffold-generator/references/engineering-baseline.md} +0 -5
  120. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +1 -1
  121. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +2 -2
  122. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +1 -3
  123. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  124. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +1 -1
  125. package/template/.codex/skills/yss-design-system/SKILL.md +2 -2
  126. package/template/.codex/skills/yss-distributed-id/SKILL.md +4 -0
  127. package/template/.codex/skills/yss-distributed-id/references/source-index.boot2-java8.md +102 -0
  128. package/template/.codex/skills/yss-distributed-id/references/source-index.boot3-java17.md +90 -0
  129. package/template/.codex/skills/yss-distributed-id/references/source-index.md +6 -82
  130. package/template/.codex/skills/yss-dto/SKILL.md +2 -2
  131. package/template/.codex/skills/yss-dto/references/source-index.boot2-java8.md +67 -0
  132. package/template/.codex/skills/yss-dto/references/source-index.boot3-java17.md +70 -0
  133. package/template/.codex/skills/yss-dto/references/source-index.md +6 -51
  134. package/template/.codex/skills/yss-excel-mvc/SKILL.md +4 -0
  135. package/template/.codex/skills/yss-excel-mvc/references/source-index.boot2-java8.md +90 -0
  136. package/template/.codex/skills/yss-excel-mvc/references/source-index.boot3-java17.md +58 -0
  137. package/template/.codex/skills/yss-excel-mvc/references/source-index.md +6 -70
  138. package/template/.codex/skills/yss-exception/SKILL.md +12 -9
  139. package/template/.codex/skills/yss-exception/references/source-index.boot2-java8.md +50 -0
  140. package/template/.codex/skills/yss-exception/references/source-index.boot3-java17.md +50 -0
  141. package/template/.codex/skills/yss-exception/references/source-index.md +6 -31
  142. package/template/.codex/skills/yss-formily/SKILL.md +2 -2
  143. package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
  144. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +1 -1
  145. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +2 -2
  146. package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +158 -0
  147. package/template/.codex/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +3 -3
  148. package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +5 -0
  149. package/template/.codex/skills/yss-hook/SKILL.md +3 -2
  150. package/template/.codex/skills/yss-implementation-contract-compiler/SKILL.md +2 -0
  151. package/template/.codex/skills/yss-implementation-contract-compiler/references/boundaries.md +4 -6
  152. package/template/.codex/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +27 -2
  153. package/template/.codex/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +2 -1
  154. package/template/.codex/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +60 -14
  155. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/SKILL.md +6 -5
  156. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +2 -2
  157. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/references/architecture.md +2 -0
  158. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/data-analysis-profile.mjs +82 -0
  159. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +23 -9
  160. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +23 -6
  161. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/tests/scaffold-generator.test.mjs +2 -0
  162. package/template/.codex/skills/yss-mybatis/SKILL.md +2 -2
  163. package/template/.codex/skills/yss-mybatis/references/source-index.boot2-java8.md +126 -0
  164. package/template/.codex/skills/yss-mybatis/references/source-index.boot3-java17.md +126 -0
  165. package/template/.codex/skills/yss-mybatis/references/source-index.md +6 -109
  166. package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +11 -11
  167. package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +2 -2
  168. package/template/.codex/skills/yss-repository/SKILL.md +1 -1
  169. package/template/.codex/skills/yss-resilience4j/SKILL.md +4 -0
  170. package/template/.codex/skills/yss-resilience4j/references/source-index.boot2-java8.md +48 -0
  171. package/template/.codex/skills/yss-resilience4j/references/source-index.boot3-java17.md +48 -0
  172. package/template/.codex/skills/yss-resilience4j/references/source-index.md +6 -29
  173. package/template/.codex/skills/yss-security-algorithm/SKILL.md +34 -10
  174. package/template/.codex/skills/yss-security-algorithm/references/source-index.boot2-java8.md +50 -0
  175. package/template/.codex/skills/yss-security-algorithm/references/source-index.boot3-java17.md +51 -0
  176. package/template/.codex/skills/yss-security-algorithm/references/source-index.md +6 -31
  177. package/template/.codex/skills/yss-skill-source-index-refresh/SKILL.md +12 -6
  178. package/template/.codex/skills/yss-skill-source-index-refresh/references/backend-component-platform-compatibility.md +27 -0
  179. package/template/.codex/skills/yss-skill-source-index-refresh/references/source-location.md +4 -4
  180. package/template/.codex/skills/yss-skill-source-index-refresh/references/source-map-config.md +13 -5
  181. package/template/.codex/skills/yss-skill-source-index-refresh/scripts/check-backend-skill-source-index.mjs +60 -0
  182. package/template/.codex/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +250 -56
  183. package/template/.codex/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +74 -7
  184. package/template/.codex/skills/yss-tactical-design/SKILL.md +1 -1
  185. package/template/.codex/skills/yss-tactical-design/references/output-template.md +1 -1
  186. package/template/.codex/skills/yss-technical-design/SKILL.md +3 -1
  187. package/template/.codex/skills/yss-technical-design/references/technical-design-contract.md +1 -1
  188. package/template/.codex/skills/yss-technical-design/scripts/generate-schema.mjs +1 -1
  189. package/template/.codex/skills/yss-technical-design/tests/run-scenarios.mjs +3 -1
  190. package/template/.codex/skills/yss-ui/SKILL.md +9 -6
  191. package/template/.codex/skills/yss-ui/references/component-routing.md +11 -4
  192. package/template/.codex/skills/yss-ui-business-page-generation/SKILL.md +5 -1
  193. package/template/.codex/skills/yss-ui-business-page-generation/references/hooks-map.md +3 -2
  194. package/template/.codex/skills/yss-up-springboot3/SKILL.md +23 -9
  195. package/template/.codex/skills/yss-userinfo/SKILL.md +21 -14
  196. package/template/.codex/skills/yss-userinfo/references/source-index.boot2-java8.md +49 -0
  197. package/template/.codex/skills/yss-userinfo/references/source-index.boot3-java17.md +54 -0
  198. package/template/.codex/skills/yss-userinfo/references/source-index.md +6 -30
  199. package/template/.codex/skills/yss-validation/SKILL.md +12 -17
  200. package/template/.codex/skills/yss-validation/references/source-index.boot2-java8.md +47 -0
  201. package/template/.codex/skills/yss-validation/references/source-index.boot3-java17.md +47 -0
  202. package/template/.codex/skills/yss-validation/references/source-index.md +6 -29
  203. package/template/.codex/skills/yss-web-controller/SKILL.md +4 -4
  204. package/template/.codex/skills/yss-web-controller/scripts/generate_controller.test.mjs +1 -1
  205. package/template/.codex/skills/ytable-usage/SKILL.md +14 -7
  206. package/template/.codex/skills/ytree-usage/SKILL.md +1 -0
  207. package/template/.cursor/skills/formily-mode-slot-detail/SKILL.md +3 -4
  208. package/template/.cursor/skills/yedit-table-usage/SKILL.md +2 -0
  209. package/template/.cursor/skills/yss-application/SKILL.md +8 -6
  210. package/template/.cursor/skills/yss-audit-log/SKILL.md +12 -7
  211. package/template/.cursor/skills/yss-audit-log/references/source-index.boot2-java8.md +57 -0
  212. package/template/.cursor/skills/yss-audit-log/references/source-index.boot3-java17.md +58 -0
  213. package/template/.cursor/skills/yss-audit-log/references/source-index.md +6 -39
  214. package/template/.cursor/skills/yss-cache/SKILL.md +5 -1
  215. package/template/.cursor/skills/yss-cache/references/source-index.boot2-java8.md +81 -0
  216. package/template/.cursor/skills/yss-cache/references/source-index.boot3-java17.md +83 -0
  217. package/template/.cursor/skills/yss-cache/references/source-index.md +6 -63
  218. package/template/.cursor/skills/yss-cache/scripts/check-skill-freshness.sh +20 -15
  219. package/template/.cursor/skills/yss-ddd-scaffold-generator/SKILL.md +2 -2
  220. package/template/{.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md → .cursor/skills/yss-ddd-scaffold-generator/references/engineering-baseline.md} +0 -5
  221. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +1 -1
  222. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +2 -2
  223. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +1 -3
  224. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  225. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +1 -1
  226. package/template/.cursor/skills/yss-design-system/SKILL.md +2 -2
  227. package/template/.cursor/skills/yss-distributed-id/SKILL.md +4 -0
  228. package/template/.cursor/skills/yss-distributed-id/references/source-index.boot2-java8.md +102 -0
  229. package/template/.cursor/skills/yss-distributed-id/references/source-index.boot3-java17.md +90 -0
  230. package/template/.cursor/skills/yss-distributed-id/references/source-index.md +6 -82
  231. package/template/.cursor/skills/yss-dto/SKILL.md +2 -2
  232. package/template/.cursor/skills/yss-dto/references/source-index.boot2-java8.md +67 -0
  233. package/template/.cursor/skills/yss-dto/references/source-index.boot3-java17.md +70 -0
  234. package/template/.cursor/skills/yss-dto/references/source-index.md +6 -51
  235. package/template/.cursor/skills/yss-excel-mvc/SKILL.md +4 -0
  236. package/template/.cursor/skills/yss-excel-mvc/references/source-index.boot2-java8.md +90 -0
  237. package/template/.cursor/skills/yss-excel-mvc/references/source-index.boot3-java17.md +58 -0
  238. package/template/.cursor/skills/yss-excel-mvc/references/source-index.md +6 -70
  239. package/template/.cursor/skills/yss-exception/SKILL.md +12 -9
  240. package/template/.cursor/skills/yss-exception/references/source-index.boot2-java8.md +50 -0
  241. package/template/.cursor/skills/yss-exception/references/source-index.boot3-java17.md +50 -0
  242. package/template/.cursor/skills/yss-exception/references/source-index.md +6 -31
  243. package/template/.cursor/skills/yss-formily/SKILL.md +2 -2
  244. package/template/.cursor/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
  245. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +1 -1
  246. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +2 -2
  247. package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +158 -0
  248. package/template/.cursor/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +3 -3
  249. package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +5 -0
  250. package/template/.cursor/skills/yss-hook/SKILL.md +3 -2
  251. package/template/.cursor/skills/yss-implementation-contract-compiler/SKILL.md +2 -0
  252. package/template/.cursor/skills/yss-implementation-contract-compiler/references/boundaries.md +4 -6
  253. package/template/.cursor/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +27 -2
  254. package/template/.cursor/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +2 -1
  255. package/template/.cursor/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +60 -14
  256. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/SKILL.md +6 -5
  257. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +2 -2
  258. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/references/architecture.md +2 -0
  259. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/data-analysis-profile.mjs +82 -0
  260. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +23 -9
  261. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +23 -6
  262. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/tests/scaffold-generator.test.mjs +2 -0
  263. package/template/.cursor/skills/yss-mybatis/SKILL.md +2 -2
  264. package/template/.cursor/skills/yss-mybatis/references/source-index.boot2-java8.md +126 -0
  265. package/template/.cursor/skills/yss-mybatis/references/source-index.boot3-java17.md +126 -0
  266. package/template/.cursor/skills/yss-mybatis/references/source-index.md +6 -109
  267. package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +11 -11
  268. package/template/.cursor/skills/yss-product-lifecycle/references/orchestration.md +2 -2
  269. package/template/.cursor/skills/yss-repository/SKILL.md +1 -1
  270. package/template/.cursor/skills/yss-resilience4j/SKILL.md +4 -0
  271. package/template/.cursor/skills/yss-resilience4j/references/source-index.boot2-java8.md +48 -0
  272. package/template/.cursor/skills/yss-resilience4j/references/source-index.boot3-java17.md +48 -0
  273. package/template/.cursor/skills/yss-resilience4j/references/source-index.md +6 -29
  274. package/template/.cursor/skills/yss-security-algorithm/SKILL.md +34 -10
  275. package/template/.cursor/skills/yss-security-algorithm/references/source-index.boot2-java8.md +50 -0
  276. package/template/.cursor/skills/yss-security-algorithm/references/source-index.boot3-java17.md +51 -0
  277. package/template/.cursor/skills/yss-security-algorithm/references/source-index.md +6 -31
  278. package/template/.cursor/skills/yss-skill-source-index-refresh/SKILL.md +12 -6
  279. package/template/.cursor/skills/yss-skill-source-index-refresh/references/backend-component-platform-compatibility.md +27 -0
  280. package/template/.cursor/skills/yss-skill-source-index-refresh/references/source-location.md +4 -4
  281. package/template/.cursor/skills/yss-skill-source-index-refresh/references/source-map-config.md +13 -5
  282. package/template/.cursor/skills/yss-skill-source-index-refresh/scripts/check-backend-skill-source-index.mjs +60 -0
  283. package/template/.cursor/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +250 -56
  284. package/template/.cursor/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +74 -7
  285. package/template/.cursor/skills/yss-tactical-design/SKILL.md +1 -1
  286. package/template/.cursor/skills/yss-tactical-design/references/output-template.md +1 -1
  287. package/template/.cursor/skills/yss-technical-design/SKILL.md +3 -1
  288. package/template/.cursor/skills/yss-technical-design/references/technical-design-contract.md +1 -1
  289. package/template/.cursor/skills/yss-technical-design/scripts/generate-schema.mjs +1 -1
  290. package/template/.cursor/skills/yss-technical-design/tests/run-scenarios.mjs +3 -1
  291. package/template/.cursor/skills/yss-ui/SKILL.md +9 -6
  292. package/template/.cursor/skills/yss-ui/references/component-routing.md +11 -4
  293. package/template/.cursor/skills/yss-ui-business-page-generation/SKILL.md +5 -1
  294. package/template/.cursor/skills/yss-ui-business-page-generation/references/hooks-map.md +3 -2
  295. package/template/.cursor/skills/yss-up-springboot3/SKILL.md +23 -9
  296. package/template/.cursor/skills/yss-userinfo/SKILL.md +21 -14
  297. package/template/.cursor/skills/yss-userinfo/references/source-index.boot2-java8.md +49 -0
  298. package/template/.cursor/skills/yss-userinfo/references/source-index.boot3-java17.md +54 -0
  299. package/template/.cursor/skills/yss-userinfo/references/source-index.md +6 -30
  300. package/template/.cursor/skills/yss-validation/SKILL.md +12 -17
  301. package/template/.cursor/skills/yss-validation/references/source-index.boot2-java8.md +47 -0
  302. package/template/.cursor/skills/yss-validation/references/source-index.boot3-java17.md +47 -0
  303. package/template/.cursor/skills/yss-validation/references/source-index.md +6 -29
  304. package/template/.cursor/skills/yss-web-controller/SKILL.md +4 -4
  305. package/template/.cursor/skills/yss-web-controller/scripts/generate_controller.test.mjs +1 -1
  306. package/template/.cursor/skills/ytable-usage/SKILL.md +14 -7
  307. package/template/.cursor/skills/ytree-usage/SKILL.md +1 -0
  308. package/template/.pi/skills/formily-mode-slot-detail/SKILL.md +3 -4
  309. package/template/.pi/skills/yedit-table-usage/SKILL.md +2 -0
  310. package/template/.pi/skills/yss-application/SKILL.md +8 -6
  311. package/template/.pi/skills/yss-audit-log/SKILL.md +12 -7
  312. package/template/.pi/skills/yss-audit-log/references/source-index.boot2-java8.md +57 -0
  313. package/template/.pi/skills/yss-audit-log/references/source-index.boot3-java17.md +58 -0
  314. package/template/.pi/skills/yss-audit-log/references/source-index.md +6 -39
  315. package/template/.pi/skills/yss-cache/SKILL.md +5 -1
  316. package/template/.pi/skills/yss-cache/references/source-index.boot2-java8.md +81 -0
  317. package/template/.pi/skills/yss-cache/references/source-index.boot3-java17.md +83 -0
  318. package/template/.pi/skills/yss-cache/references/source-index.md +6 -63
  319. package/template/.pi/skills/yss-cache/scripts/check-skill-freshness.sh +20 -15
  320. package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +2 -2
  321. package/template/.pi/skills/yss-ddd-scaffold-generator/references/{yss-backend-scaffold-parent/SKILL.md → engineering-baseline.md} +0 -5
  322. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +1 -1
  323. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +2 -2
  324. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +1 -3
  325. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  326. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +1 -1
  327. package/template/.pi/skills/yss-design-system/SKILL.md +2 -2
  328. package/template/.pi/skills/yss-distributed-id/SKILL.md +4 -0
  329. package/template/.pi/skills/yss-distributed-id/references/source-index.boot2-java8.md +102 -0
  330. package/template/.pi/skills/yss-distributed-id/references/source-index.boot3-java17.md +90 -0
  331. package/template/.pi/skills/yss-distributed-id/references/source-index.md +6 -82
  332. package/template/.pi/skills/yss-dto/SKILL.md +2 -2
  333. package/template/.pi/skills/yss-dto/references/source-index.boot2-java8.md +67 -0
  334. package/template/.pi/skills/yss-dto/references/source-index.boot3-java17.md +70 -0
  335. package/template/.pi/skills/yss-dto/references/source-index.md +6 -51
  336. package/template/.pi/skills/yss-excel-mvc/SKILL.md +4 -0
  337. package/template/.pi/skills/yss-excel-mvc/references/source-index.boot2-java8.md +90 -0
  338. package/template/.pi/skills/yss-excel-mvc/references/source-index.boot3-java17.md +58 -0
  339. package/template/.pi/skills/yss-excel-mvc/references/source-index.md +6 -70
  340. package/template/.pi/skills/yss-exception/SKILL.md +12 -9
  341. package/template/.pi/skills/yss-exception/references/source-index.boot2-java8.md +50 -0
  342. package/template/.pi/skills/yss-exception/references/source-index.boot3-java17.md +50 -0
  343. package/template/.pi/skills/yss-exception/references/source-index.md +6 -31
  344. package/template/.pi/skills/yss-formily/SKILL.md +2 -2
  345. package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
  346. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +1 -1
  347. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +2 -2
  348. package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +158 -0
  349. package/template/.pi/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +3 -3
  350. package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +5 -0
  351. package/template/.pi/skills/yss-hook/SKILL.md +3 -2
  352. package/template/.pi/skills/yss-implementation-contract-compiler/SKILL.md +2 -0
  353. package/template/.pi/skills/yss-implementation-contract-compiler/references/boundaries.md +4 -6
  354. package/template/.pi/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +27 -2
  355. package/template/.pi/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +2 -1
  356. package/template/.pi/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +60 -14
  357. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/SKILL.md +6 -5
  358. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +2 -2
  359. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/references/architecture.md +2 -0
  360. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/data-analysis-profile.mjs +82 -0
  361. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +23 -9
  362. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +23 -6
  363. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/tests/scaffold-generator.test.mjs +2 -0
  364. package/template/.pi/skills/yss-mybatis/SKILL.md +2 -2
  365. package/template/.pi/skills/yss-mybatis/references/source-index.boot2-java8.md +126 -0
  366. package/template/.pi/skills/yss-mybatis/references/source-index.boot3-java17.md +126 -0
  367. package/template/.pi/skills/yss-mybatis/references/source-index.md +6 -109
  368. package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +11 -11
  369. package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +2 -2
  370. package/template/.pi/skills/yss-repository/SKILL.md +1 -1
  371. package/template/.pi/skills/yss-resilience4j/SKILL.md +4 -0
  372. package/template/.pi/skills/yss-resilience4j/references/source-index.boot2-java8.md +48 -0
  373. package/template/.pi/skills/yss-resilience4j/references/source-index.boot3-java17.md +48 -0
  374. package/template/.pi/skills/yss-resilience4j/references/source-index.md +6 -29
  375. package/template/.pi/skills/yss-security-algorithm/SKILL.md +34 -10
  376. package/template/.pi/skills/yss-security-algorithm/references/source-index.boot2-java8.md +50 -0
  377. package/template/.pi/skills/yss-security-algorithm/references/source-index.boot3-java17.md +51 -0
  378. package/template/.pi/skills/yss-security-algorithm/references/source-index.md +6 -31
  379. package/template/.pi/skills/yss-skill-source-index-refresh/SKILL.md +12 -6
  380. package/template/.pi/skills/yss-skill-source-index-refresh/references/backend-component-platform-compatibility.md +27 -0
  381. package/template/.pi/skills/yss-skill-source-index-refresh/references/source-location.md +4 -4
  382. package/template/.pi/skills/yss-skill-source-index-refresh/references/source-map-config.md +13 -5
  383. package/template/.pi/skills/yss-skill-source-index-refresh/scripts/check-backend-skill-source-index.mjs +60 -0
  384. package/template/.pi/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +250 -56
  385. package/template/.pi/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +74 -7
  386. package/template/.pi/skills/yss-tactical-design/SKILL.md +1 -1
  387. package/template/.pi/skills/yss-tactical-design/references/output-template.md +1 -1
  388. package/template/.pi/skills/yss-technical-design/SKILL.md +3 -1
  389. package/template/.pi/skills/yss-technical-design/references/technical-design-contract.md +1 -1
  390. package/template/.pi/skills/yss-technical-design/scripts/generate-schema.mjs +1 -1
  391. package/template/.pi/skills/yss-technical-design/tests/run-scenarios.mjs +3 -1
  392. package/template/.pi/skills/yss-ui/SKILL.md +9 -6
  393. package/template/.pi/skills/yss-ui/references/component-routing.md +11 -4
  394. package/template/.pi/skills/yss-ui-business-page-generation/SKILL.md +5 -1
  395. package/template/.pi/skills/yss-ui-business-page-generation/references/hooks-map.md +3 -2
  396. package/template/.pi/skills/yss-up-springboot3/SKILL.md +23 -9
  397. package/template/.pi/skills/yss-userinfo/SKILL.md +21 -14
  398. package/template/.pi/skills/yss-userinfo/references/source-index.boot2-java8.md +49 -0
  399. package/template/.pi/skills/yss-userinfo/references/source-index.boot3-java17.md +54 -0
  400. package/template/.pi/skills/yss-userinfo/references/source-index.md +6 -30
  401. package/template/.pi/skills/yss-validation/SKILL.md +12 -17
  402. package/template/.pi/skills/yss-validation/references/source-index.boot2-java8.md +47 -0
  403. package/template/.pi/skills/yss-validation/references/source-index.boot3-java17.md +47 -0
  404. package/template/.pi/skills/yss-validation/references/source-index.md +6 -29
  405. package/template/.pi/skills/yss-web-controller/SKILL.md +4 -4
  406. package/template/.pi/skills/yss-web-controller/scripts/generate_controller.test.mjs +1 -1
  407. package/template/.pi/skills/ytable-usage/SKILL.md +14 -7
  408. package/template/.pi/skills/ytree-usage/SKILL.md +1 -0
  409. package/template/docs/agents/backend-architecture-profiles.md +1 -1
  410. package/template/docs/agents/digital-human-roles.yaml +3 -3
  411. package/template/docs/agents/skill-migrations.md +39 -3
  412. package/template/docs/agents/yss-skill-registry.yaml +93 -96
  413. package/template/docs/api/templates/openapi-draft-review-checklist.md +1 -1
  414. package/template/docs/architecture/templates/engineering-baseline-review-template.md +3 -3
  415. package/template/docs/architecture/templates/system-overview-design-template.md +1 -1
  416. package/template/docs/engineering/backend-platforms.json +662 -9
  417. package/template/docs/engineering/backend-platforms.md +33 -7
  418. package/template/docs/process/schemas/backend-architecture-identity.schema.json +102 -0
  419. package/template/docs/process/schemas/project-scaffold-contract.schema.json +16 -4
  420. package/template/docs/process/schemas/scaffold-architecture-decisions.schema.json +7 -0
  421. package/template/docs/process/schemas/slice-implementation-contract-v3.schema.json +143 -0
  422. package/template/docs/process/strategic-handoff-package.md +1 -1
  423. package/template/docs/templates/implementation-routing-template.md +1 -1
  424. package/template/docs/user-guide//346/212/200/346/234/257/350/256/276/350/256/241/347/224/250/346/210/267/346/214/207/345/215/227.md +2 -2
  425. package/template/scripts/backend-platforms +77 -8
  426. package/template/scripts/lib/backend-platform.mjs +232 -5
  427. package/template/scripts/lib/existing-backend-architecture.mjs +3 -2
  428. package/template/scripts/lib/implementation-contract-compiler.mjs +93 -9
  429. package/template/scripts/lib/skill-registry.mjs +170 -13
  430. package/template/scripts/lib/skill-supply-chain.mjs +1 -1
  431. package/template/scripts/lib/slice-contract-preparation.mjs +6 -5
  432. package/template/scripts/verify-backend-platform-matrix +1 -1
  433. package/template/skills-lock.json +38 -165
  434. package/template/yss-public-skills.json +1 -5
  435. package/template.snapshot.json +4 -4
  436. package/template/.agents/skills/component-selection-imports/SKILL.md +0 -64
  437. package/template/.agents/skills/page-form-module/SKILL.md +0 -168
  438. package/template/.agents/skills/page-list-module/SKILL.md +0 -137
  439. package/template/.agents/skills/page-skeleton/SKILL.md +0 -76
  440. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +0 -34
  441. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -75
  442. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/index.vue +0 -107
  443. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
  444. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/style.less +0 -30
  445. package/template/.agents/skills/page-skeleton/examples/StandardListPage/constant.ts +0 -28
  446. package/template/.agents/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -58
  447. package/template/.agents/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +0 -65
  448. package/template/.agents/skills/page-skeleton/examples/StandardListPage/index.vue +0 -91
  449. package/template/.agents/skills/page-skeleton/examples/StandardListPage/style.less +0 -49
  450. package/template/.agents/skills/vue3-best-practices/SKILL.md +0 -68
  451. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/agents/openai.yaml +0 -5
  452. package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +0 -22
  453. package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +0 -77
  454. package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +0 -9
  455. package/template/.agents/skills/yss-mvc-design/SKILL.md +0 -16
  456. package/template/.agents/skills/yss-mvc-design/agents/openai.yaml +0 -4
  457. package/template/.agents/skills/yss-use-table-height/SKILL.md +0 -130
  458. package/template/.agents/skills/yss-use-table-height/agents/openai.yaml +0 -5
  459. package/template/.agents/skills/yss-use-table-height/references/frontend-docs.md +0 -9
  460. package/template/.agents/skills/yss-use-tree-height/SKILL.md +0 -98
  461. package/template/.agents/skills/yss-use-tree-height/agents/openai.yaml +0 -5
  462. package/template/.agents/skills/yss-use-tree-height/references/frontend-docs.md +0 -9
  463. package/template/.codex/skills/component-selection-imports/SKILL.md +0 -64
  464. package/template/.codex/skills/page-form-module/SKILL.md +0 -168
  465. package/template/.codex/skills/page-list-module/SKILL.md +0 -137
  466. package/template/.codex/skills/page-skeleton/SKILL.md +0 -76
  467. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +0 -34
  468. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -75
  469. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/index.vue +0 -107
  470. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
  471. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/style.less +0 -30
  472. package/template/.codex/skills/page-skeleton/examples/StandardListPage/constant.ts +0 -28
  473. package/template/.codex/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -58
  474. package/template/.codex/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +0 -65
  475. package/template/.codex/skills/page-skeleton/examples/StandardListPage/index.vue +0 -91
  476. package/template/.codex/skills/page-skeleton/examples/StandardListPage/style.less +0 -49
  477. package/template/.codex/skills/vue3-best-practices/SKILL.md +0 -68
  478. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/agents/openai.yaml +0 -5
  479. package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +0 -22
  480. package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +0 -77
  481. package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +0 -9
  482. package/template/.codex/skills/yss-mvc-design/SKILL.md +0 -16
  483. package/template/.codex/skills/yss-mvc-design/agents/openai.yaml +0 -4
  484. package/template/.codex/skills/yss-use-table-height/SKILL.md +0 -130
  485. package/template/.codex/skills/yss-use-table-height/agents/openai.yaml +0 -5
  486. package/template/.codex/skills/yss-use-table-height/references/frontend-docs.md +0 -9
  487. package/template/.codex/skills/yss-use-tree-height/SKILL.md +0 -98
  488. package/template/.codex/skills/yss-use-tree-height/agents/openai.yaml +0 -5
  489. package/template/.codex/skills/yss-use-tree-height/references/frontend-docs.md +0 -9
  490. package/template/.cursor/skills/component-selection-imports/SKILL.md +0 -64
  491. package/template/.cursor/skills/page-form-module/SKILL.md +0 -168
  492. package/template/.cursor/skills/page-list-module/SKILL.md +0 -137
  493. package/template/.cursor/skills/page-skeleton/SKILL.md +0 -76
  494. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +0 -34
  495. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -75
  496. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/index.vue +0 -107
  497. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
  498. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/style.less +0 -30
  499. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/constant.ts +0 -28
  500. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -58
  501. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +0 -65
  502. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/index.vue +0 -91
  503. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/style.less +0 -49
  504. package/template/.cursor/skills/vue3-best-practices/SKILL.md +0 -68
  505. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/agents/openai.yaml +0 -5
  506. package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +0 -22
  507. package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +0 -77
  508. package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +0 -9
  509. package/template/.cursor/skills/yss-mvc-design/SKILL.md +0 -16
  510. package/template/.cursor/skills/yss-mvc-design/agents/openai.yaml +0 -4
  511. package/template/.cursor/skills/yss-use-table-height/SKILL.md +0 -130
  512. package/template/.cursor/skills/yss-use-table-height/agents/openai.yaml +0 -5
  513. package/template/.cursor/skills/yss-use-table-height/references/frontend-docs.md +0 -9
  514. package/template/.cursor/skills/yss-use-tree-height/SKILL.md +0 -98
  515. package/template/.cursor/skills/yss-use-tree-height/agents/openai.yaml +0 -5
  516. package/template/.cursor/skills/yss-use-tree-height/references/frontend-docs.md +0 -9
  517. package/template/.pi/skills/component-selection-imports/SKILL.md +0 -64
  518. package/template/.pi/skills/page-form-module/SKILL.md +0 -168
  519. package/template/.pi/skills/page-list-module/SKILL.md +0 -137
  520. package/template/.pi/skills/page-skeleton/SKILL.md +0 -76
  521. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +0 -34
  522. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -75
  523. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/index.vue +0 -107
  524. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
  525. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/style.less +0 -30
  526. package/template/.pi/skills/page-skeleton/examples/StandardListPage/constant.ts +0 -28
  527. package/template/.pi/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -58
  528. package/template/.pi/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +0 -65
  529. package/template/.pi/skills/page-skeleton/examples/StandardListPage/index.vue +0 -91
  530. package/template/.pi/skills/page-skeleton/examples/StandardListPage/style.less +0 -49
  531. package/template/.pi/skills/vue3-best-practices/SKILL.md +0 -68
  532. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/agents/openai.yaml +0 -5
  533. package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +0 -22
  534. package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +0 -77
  535. package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +0 -9
  536. package/template/.pi/skills/yss-mvc-design/SKILL.md +0 -16
  537. package/template/.pi/skills/yss-mvc-design/agents/openai.yaml +0 -4
  538. package/template/.pi/skills/yss-use-table-height/SKILL.md +0 -130
  539. package/template/.pi/skills/yss-use-table-height/agents/openai.yaml +0 -5
  540. package/template/.pi/skills/yss-use-table-height/references/frontend-docs.md +0 -9
  541. package/template/.pi/skills/yss-use-tree-height/SKILL.md +0 -98
  542. package/template/.pi/skills/yss-use-tree-height/agents/openai.yaml +0 -5
  543. package/template/.pi/skills/yss-use-tree-height/references/frontend-docs.md +0 -9
  544. /package/template/.agents/skills/{yss-mvc-design → yss-technical-design}/references/mvc-design.schema.json +0 -0
  545. /package/template/.codex/skills/{yss-mvc-design → yss-technical-design}/references/mvc-design.schema.json +0 -0
  546. /package/template/.cursor/skills/{yss-mvc-design → yss-technical-design}/references/mvc-design.schema.json +0 -0
  547. /package/template/.pi/skills/{yss-mvc-design → yss-technical-design}/references/mvc-design.schema.json +0 -0
@@ -1,5 +1,6 @@
1
1
  import assert from "node:assert/strict";
2
2
  import test from "node:test";
3
+ import { readFileSync } from "node:fs";
3
4
  import {
4
5
  compileImplementationContract,
5
6
  digestDocument,
@@ -8,6 +9,7 @@ import {
8
9
  validateExecutionResult
9
10
  } from "../../../../scripts/lib/implementation-contract-compiler.mjs";
10
11
  import { loadSkillRegistry } from "../../../../scripts/lib/skill-registry.mjs";
12
+ import { loadBackendPlatforms, platformBinding } from "../../../../scripts/lib/backend-platform.mjs";
11
13
 
12
14
  const registry = loadSkillRegistry();
13
15
  const compilerContract = loadCompilerContract();
@@ -15,17 +17,18 @@ const fixed = "2026-09-04T00:00:00.000Z";
15
17
  const identity = { architecture_family: "domain-driven", architecture_profile: "target-domain-model", generator_skill: "yss-ddd-scaffold-generator", requested_capabilities: [], resolved_modules: ["domain", "application", "infrastructure", "adapter", "bootstrap"], verification_database: "h2", production_database: "not-bound", contract_digest: "a".repeat(64) };
16
18
  const architecture = { architecture_identity: identity, architecture_evidence: { engineering_baseline: identity, repository_registration: identity, manifest: identity } };
17
19
  const compile = (input) => compileImplementationContract({ registry, compilerContract, compiledAt: fixed, ...architecture, ...input });
20
+ const stableComponentError = code => error => error?.code === code && new RegExp(`^component-capability: ${code}:`).test(error.message);
18
21
 
19
22
  test("combines narrow recipes once and preserves deterministic output", () => {
20
23
  const input = {
21
- recipeIds: ["backend.ddd-http-api", "backend.ddd-domain-behavior", "backend.ddd-persistence-mybatis"],
22
- conditions: ["mybatis", "conversion", "pojo", "request-validation", "error-mapping"]
24
+ recipeIds: ["backend.ddd-domain-behavior"],
25
+ conditions: ["conversion", "pojo"]
23
26
  };
24
27
  const first = compile(input);
25
28
  const second = compile({ ...input, recipeIds: [...input.recipeIds].reverse(), conditions: [...input.conditions].reverse() });
26
29
  assert.deepEqual(first, second);
27
- assert.deepEqual(first.recipe_ids, ["backend.ddd-domain-behavior", "backend.ddd-persistence-mybatis", "backend.ddd-http-api"]);
28
- for (const skill of ["yss-domain", "yss-application", "yss-repository", "yss-mybatis", "yss-web-controller", "yss-dto", "yss-validation", "yss-exception", "mapstruct", "lombok", "alibaba-java-code-style"]) {
30
+ assert.deepEqual(first.recipe_ids, ["backend.ddd-domain-behavior"]);
31
+ for (const skill of ["yss-domain", "yss-application", "mapstruct", "lombok", "alibaba-java-code-style"]) {
29
32
  assert.equal(first.required_skills.filter((candidate) => candidate === skill).length, 1, `${skill} should appear once`);
30
33
  }
31
34
  });
@@ -37,17 +40,43 @@ test("does not promote conditional or component dependencies without explicit in
37
40
  assert.equal(persistence.required_skills.includes("mapstruct"), false);
38
41
  assert.equal(persistence.required_skills.includes("lombok"), false);
39
42
 
40
- const validation = compile({ requiredCapabilities: ["contract.request-validation"] });
41
- assert.deepEqual(validation.required_skills, ["yss-validation"]);
42
- assert.equal(validation.required_skills.includes("yss-exception"), false);
43
- assert.ok(validation.non_expanding_dependencies.some((edge) => edge.from === "yss-validation" && edge.skill === "yss-exception"));
43
+ assert.throws(
44
+ () => compile({ requiredCapabilities: ["contract.request-validation"], architecture_identity: undefined, architecture_evidence: undefined }),
45
+ /component-platform-binding-required/
46
+ );
44
47
  });
45
48
 
46
49
  test("loads only explicitly satisfied context-conditional dependencies", () => {
47
- const persistence = compile({ requiredCapabilities: ["layer.persistence"], conditions: ["mybatis"] });
48
- assert.equal(persistence.required_skills.includes("yss-mybatis"), true);
49
- assert.equal(persistence.required_skills.includes("mapstruct"), false);
50
- assert.equal(persistence.required_skills.includes("lombok"), false);
50
+ const application = compile({ requiredCapabilities: ["layer.application"], conditions: ["conversion"] });
51
+ assert.equal(application.required_skills.includes("mapstruct"), true);
52
+ assert.equal(application.required_skills.includes("lombok"), false);
53
+ assert.equal(application.required_skills.includes("yss-mybatis"), false);
54
+ });
55
+
56
+ test("requires a platform binding for every backend component capability", () => {
57
+ for (const capability of ["contract.dto-wire", "contract.request-validation", "contract.error-mapping", "framework.mybatis", "component.cache", "component.current-user-context", "component.audit-log", "component.excel-import-export", "component.distributed-id", "component.security-algorithm", "component.gateway-resilience"]) {
58
+ assert.throws(
59
+ () => compile({ requiredCapabilities: [capability], architecture_identity: undefined, architecture_evidence: undefined }),
60
+ stableComponentError("component-platform-binding-required"),
61
+ capability
62
+ );
63
+ }
64
+ });
65
+
66
+ test("public compiler entry preserves stable component error codes", () => {
67
+ const catalog = loadBackendPlatforms();
68
+ const boot2Profile = catalog.profiles.find(item => item.id === "spring-boot-2.7-jdk8");
69
+ const boot2Entry = catalog.compatibility.find(item => item.profile_id === boot2Profile.id);
70
+ const boot2 = platformBinding(boot2Profile, boot2Entry);
71
+ const withPlatform = platform_configuration => {
72
+ const architecture_identity = { ...identity, platform_configuration };
73
+ return { architecture_identity, architecture_evidence: { engineering_baseline: architecture_identity, repository_registration: architecture_identity, manifest: architecture_identity } };
74
+ };
75
+ assert.throws(() => compile({ requiredCapabilities: ["contract.dto-wire"], ...withPlatform(boot2) }), stableComponentError("component-evidence-missing"));
76
+ assert.throws(() => compile({ requiredCapabilities: ["component.cache"], ...withPlatform(boot2) }), stableComponentError("component-platform-generation-mismatch"));
77
+ const boot3Profile = catalog.profiles.find(item => item.id === "spring-boot-3.5-jdk17");
78
+ const boot3 = { ...boot2, profile_id: boot3Profile.id, spring_boot_version: boot3Profile.spring_boot_version, java_version: boot3Profile.java_version, compatibility_id: "unavailable-boot3-components" };
79
+ assert.throws(() => compile({ requiredCapabilities: ["contract.dto-wire"], ...withPlatform(boot3) }), stableComponentError("component-unavailable-for-platform"));
51
80
  });
52
81
 
53
82
  test("rejects recipes that reference skills and context-required cycles", () => {
@@ -62,12 +91,12 @@ test("rejects recipes that reference skills and context-required cycles", () =>
62
91
 
63
92
  test("rejects removed ids and schema v1 without compatibility", () => {
64
93
  assert.throws(() => compile({ recipeIds: ["yss-router"] }), /已移除 skill id/);
65
- assert.throws(() => compileImplementationContract({ registry: { ...registry, schema_version: 1 }, compilerContract, requiredCapabilities: ["layer.domain"] }), /schema v1 已停止支持/);
94
+ assert.throws(() => compileImplementationContract({ registry: { ...registry, schema_version: 1 }, compilerContract, requiredCapabilities: ["layer.domain"] }), /schema v1\/v2 已停止支持/);
66
95
  assert.throws(() => compileImplementationContract({ registry, compilerContract: { ...compilerContract, schema_version: 1 }, requiredCapabilities: ["layer.domain"] }), /schema v1 已停止支持/);
67
96
  });
68
97
 
69
98
  test("marks digest drift stale and validates v2 execution evidence", () => {
70
- const resolution = compile({ requiredCapabilities: ["contract.request-validation"], architecture_identity: undefined, architecture_evidence: undefined });
99
+ const resolution = compile({ requiredCapabilities: ["quality.java-code-style"], architecture_identity: undefined, architecture_evidence: undefined });
71
100
  const contract = { schema_version: 2, contract_id: "slice-1", contract_version: 1, resolution };
72
101
  assert.deepEqual(evaluateContractFreshness(contract, { registry, compilerContract }), { freshness: "current", reasons: [] });
73
102
  const changedRegistry = structuredClone(registry);
@@ -89,3 +118,20 @@ test("marks digest drift stale and validates v2 execution evidence", () => {
89
118
  assert.deepEqual(validateExecutionResult(result, contract, { registry, compilerContract }), { status: "accepted", blockers: [] });
90
119
  assert.deepEqual(validateExecutionResult({ ...result, new_impacts: [{ impact_type: "cache" }] }, contract, { registry, compilerContract }), { status: "blocked", blockers: ["new-impacts"] });
91
120
  });
121
+
122
+ test("marks legacy component contracts without component bindings stale", () => {
123
+ const resolution = compile({ requiredCapabilities: ["quality.java-code-style"], architecture_identity: undefined, architecture_evidence: undefined });
124
+ resolution.required_capabilities = ["contract.dto-wire"];
125
+ resolution.required_skills = ["yss-dto"];
126
+ const contract = { schema_version: 2, contract_id: "legacy-component", contract_version: 1, resolution };
127
+ assert.ok(evaluateContractFreshness(contract, { registry, compilerContract }).reasons.includes("component-binding-drift"));
128
+ });
129
+
130
+ test("current lifecycle scaffold contract delegates platform facts to the catalog", () => {
131
+ const source = readFileSync(new URL("../../yss-product-lifecycle/references/orchestration-contract.yaml", import.meta.url), "utf8");
132
+ const current = source.slice(source.indexOf("backend_scaffold:"), source.indexOf(" required_inputs:", source.indexOf("backend_scaffold:")));
133
+ assert.match(current, /platform_binding: platform_configuration-v2/);
134
+ assert.doesNotMatch(current, /yss_components_version:\s*2\.0\.0-SNAPSHOT/);
135
+ assert.doesNotMatch(current, /spring-boot-3/);
136
+ assert.doesNotMatch(current, /validation_namespace:\s*javax/);
137
+ });
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: yss-layered-mvc-scaffold-generator
3
- description: 用于在生命周期已批准的脚手架合同下生成按批准 Spring Boot / Java 平台生成通用 YSS 分层 MVC 后端工程;核心模块为 server、service、repository,并按能力确定性增加 adapter、client、feign-client。
3
+ description: 在生命周期已批准的脚手架合同下生成通用 YSS 分层 MVC 后端,或按 mvc-data-analysis-v1 初始化六模块数据分析 project-instance。
4
4
  ---
5
5
 
6
6
  # YSS Layered MVC Scaffold Generator
7
7
 
8
- 本 skill 只为已登记的全新 backend project 生成机械工程骨架,不创建 `project-instance`、不初始化 Git、不生成业务 Controller、DTO、查询、状态机或 Mock 数据。
8
+ 本 skill 只为已登记的全新 backend project 生成机械工程骨架,不生成业务 Controller、DTO、查询、状态机或 Mock 数据。普通 `layered-mvc-service` 不创建 `project-instance` 或初始化 Git;`mvc-data-analysis-v1` 按批准合同创建独立 project-instance、同级锁定 `skillUtils` 和未提交的 main Git。
9
9
 
10
10
  ## 进入条件
11
11
 
@@ -31,12 +31,13 @@ description: 用于在生命周期已批准的脚手架合同下生成按批准
31
31
 
32
32
  ## 架构与 Profile
33
33
 
34
- - 固定核心模块:`server`、`service`、`repository`。
34
+ - `layered-mvc-service` 固定核心模块:`server`、`service`、`repository`。
35
35
  - `external-integration` 增加 `adapter`。
36
36
  - `published-client` 增加 `client`。
37
37
  - `feign-client` 增加 `client`、`feign-client`。
38
38
  - 平台来自批准的 `platform_configuration`;保留 YSS BOM、MyBatis-Plus,不固定单一 Boot/Java/Validation 命名空间。
39
- - 固定 architecture_profile=layered-mvc-service;verification_database=h2、production_database=not-bound。测试使用 H2,本地运行显式启用 scaffold-local;不引入外部驱动/数据源。
39
+ - `mvc-data-analysis-v1` 固定 `server/core/client/repository/adapter/feign-client` 六模块,要求 `context_handoff_ref`、摘要和 `init_git=true`,复制批准的根 `CONTEXT.md`、治理资产和锁定工具包;不得从交接内容创造术语。该 Profile 仍绑定平台目录与构件证据,不再通过历史初始化器绕过平台门禁。
40
+ - 两个 Profile 均固定 verification_database=h2、production_database=not-bound。测试使用 H2,本地运行显式启用 scaffold-local;不引入外部驱动/数据源。
40
41
 
41
42
  能力解析规则、模块职责和依赖方向见 [architecture.md](references/architecture.md)。生成器必须同时校验 `requested_capabilities` 与 `resolved_modules`,不得自行补猜模块。
42
43
 
@@ -69,7 +70,7 @@ node scripts/generate_and_verify_scaffold.mjs \
69
70
  ## 硬约束
70
71
 
71
72
  - 新生成只接受包含 API Contract Decision 的统一 schema v4;缺 API 字段的预发布 v4 不得静默接受。验证器可只读检查历史 Manifest v3,恢复必须另行完成所有权审计、技术/数据/API 设计补齐与当前批准。历史 v2/v3 均不用于新生成。
72
- - `architecture_family` 必须为 `layered-mvc`,`generator_skill` 必须为本 skill。
73
+ - `architecture_family` 必须为 `layered-mvc`,`generator_skill` 必须为本 skill。旧数据分析初始化合同必须标记 `stale` 并按 `mvc-data-analysis-v1` Profile 重编译,不自动替换或继承批准。
73
74
  - 目标存在、`--force`、旧项目迁移、模板升级均为 `unsupported`。
74
75
  - Harness 内只允许以 `apps/backend/` 为输出父容器;外部实现仓库使用已登记真实路径。
75
76
  - 不生成业务示例。健康检查、上下文加载测试和架构测试只能验证机械工程能力,不定义用户可见 API。
@@ -1,4 +1,4 @@
1
1
  interface:
2
2
  display_name: "YSS Layered MVC Scaffold Generator"
3
- short_description: "Generate an approved YSS layered MVC backend skeleton."
4
- default_prompt: "Use $yss-layered-mvc-scaffold-generator only after a user-confirmed architecture decision and a lifecycle-approved schema v4 scaffold contract with approved technical and data design prerequisites."
3
+ short_description: "Generate approved MVC service or data-analysis profiles."
4
+ default_prompt: "Use $yss-layered-mvc-scaffold-generator only after a user-confirmed architecture decision and a lifecycle-approved schema v4 contract; generate layered-mvc-service or the native mvc-data-analysis-v1 project profile exactly as bound."
@@ -11,6 +11,8 @@
11
11
 
12
12
  合同保存 `requested_capabilities`、`resolved_modules` 和 `resolution_version: 1`。模块按 `server`、`service`、`repository`、`adapter`、`client`、`feign-client` 的稳定顺序生成。
13
13
 
14
+ `mvc-data-analysis-v1` 是本生成器的固定 Profile,不使用上述可选闭包:模块严格为 `server`、`core`、`client`、`repository`、`adapter`、`feign-client`。`core` 承载薄应用编排,不能依赖 `client`、Spring Web 或生产数据库驱动;CONTEXT handoff、project-instance 治理信封、同级 `skillUtils` 与独立 Git 必须在最终 rename 前完成。
15
+
14
16
  ## 职责和依赖
15
17
 
16
18
  | 模块 | 职责 | 允许依赖 |
@@ -0,0 +1,82 @@
1
+ import { createHash } from "node:crypto";
2
+ import { spawnSync } from "node:child_process";
3
+ import { cp, lstat, mkdir, mkdtemp, readFile, rename, rm, writeFile } from "node:fs/promises";
4
+ import path from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+
7
+ const REPOSITORY_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../..");
8
+ const digest = (value) => `sha256:${createHash("sha256").update(value).digest("hex")}`;
9
+
10
+ async function present(target) {
11
+ try { await lstat(target); return true; }
12
+ catch (error) { if (error.code === "ENOENT") return false; throw error; }
13
+ }
14
+
15
+ async function put(target, text) {
16
+ await mkdir(path.dirname(target), { recursive: true });
17
+ await writeFile(target, `${text.trimEnd()}\n`);
18
+ }
19
+
20
+ function within(parent, target) {
21
+ const relative = path.relative(parent, target);
22
+ return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
23
+ }
24
+
25
+ async function sharedTools(outputDir, contract) {
26
+ const destination = path.join(outputDir, "skillUtils");
27
+ if (!contract.allowed_write_paths.some((item) => within(path.resolve(outputDir, item), destination))) throw new Error("skillUtils 不在批准写范围内");
28
+ const lock = await readFile(path.join(REPOSITORY_ROOT, "skills-lock.json"));
29
+ if (await present(destination)) {
30
+ if (!await present(path.join(destination, "skill-utils.yaml")) || !lock.equals(await readFile(path.join(destination, "skills-lock.json")))) throw new Error("已有 skillUtils 不匹配;须独立批准刷新,初始化不会覆盖");
31
+ return digest(lock);
32
+ }
33
+ const staging = await mkdtemp(path.join(outputDir, ".skillUtils.staging-"));
34
+ try {
35
+ for (const relative of [".agents/skills", ".codex/skills", ".cursor/skills", ".pi/skills", "scripts", "docs/agents", "docs/process", "AGENTS.md", "skills-lock.json"]) {
36
+ await mkdir(path.dirname(path.join(staging, relative)), { recursive: true });
37
+ await cp(path.join(REPOSITORY_ROOT, relative), path.join(staging, relative), { recursive: true });
38
+ }
39
+ await put(path.join(staging, "skill-utils.yaml"), "schema_version: 1\nkind: yss-skill-utils\ncompatibility: skill-utils-v1\ncanonical_root: .agents/skills");
40
+ await rename(staging, destination);
41
+ } catch (error) {
42
+ await rm(staging, { recursive: true, force: true });
43
+ throw error;
44
+ }
45
+ return digest(lock);
46
+ }
47
+
48
+ export async function finalizeDataAnalysisProfile({ projectRoot, contract, architectureIdentity, options }) {
49
+ if (!contract.context_handoff_ref || !contract.context_handoff_digest) throw new Error("缺少批准的 context_handoff_ref/context_handoff_digest");
50
+ const contractFile = path.resolve(options.contractFile);
51
+ const contractRoot = path.dirname(contractFile);
52
+ const handoffPath = path.resolve(contractRoot, contract.context_handoff_ref);
53
+ if (!within(contractRoot, handoffPath)) throw new Error("CONTEXT handoff 不得越过脚手架合同目录");
54
+ const context = await readFile(handoffPath);
55
+ if (digest(context) !== contract.context_handoff_digest || !/^---\r?\ncontext_schema_version: 1\r?\n---/m.test(context.toString())) throw new Error("CONTEXT handoff schema/digest 不匹配");
56
+ if (spawnSync("git", ["--version"]).status !== 0) throw new Error("Git 不可用");
57
+
58
+ for (const relative of ["docs/agents", "docs/process", "docs/templates", "docs/architecture/templates"]) {
59
+ await mkdir(path.dirname(path.join(projectRoot, relative)), { recursive: true });
60
+ await cp(path.join(REPOSITORY_ROOT, relative), path.join(projectRoot, relative), { recursive: true });
61
+ }
62
+ await put(path.join(projectRoot, "CONTEXT.md"), context.toString());
63
+ const agents = (await readFile(path.join(REPOSITORY_ROOT, "AGENTS.md"), "utf8"))
64
+ .replace(/## 4\. `template-source` 模板维护路由[\s\S]*?(?=## 5\.)/, "## 4. 模板维护\n\n本仓为 project-instance;模板维护回上游执行。\n\n")
65
+ .replaceAll(".agents/skills", "../skillUtils/.agents/skills");
66
+ await put(path.join(projectRoot, "AGENTS.md"), agents);
67
+ await put(path.join(projectRoot, "yss-project.yaml"), "schema_version: 1\nrepository_mode: project-instance");
68
+ await put(path.join(projectRoot, ".artifact-workspace.yaml"), `schema_version: 1\nkind: service\nservice_id: ${options.projectName}`);
69
+ await cp(path.join(REPOSITORY_ROOT, "scripts/lib"), path.join(projectRoot, "scripts/lib"), { recursive: true });
70
+ await cp(path.join(REPOSITORY_ROOT, "scripts/vendor"), path.join(projectRoot, "scripts/vendor"), { recursive: true });
71
+ for (const name of ["repository-mode", "implementation-path-policy", "repository-scope-policy", "generate-lifecycle-artifacts", "node-generate-lifecycle-artifacts.mjs", "verify-lifecycle-registry", "node-verify-lifecycle-registry.mjs", "verify-lifecycle-checkpoint", "verify-context-reconciliation", "verify-approval-record", "verify-user-decision", "verify-digital-human-task-package", "verify-yss-dto-openapi-profile", "verify-frontend-implementation-evidence"]) {
72
+ await cp(path.join(REPOSITORY_ROOT, "scripts", name), path.join(projectRoot, "scripts", name));
73
+ }
74
+ const lockDigest = await sharedTools(path.resolve(options.outputDir), contract);
75
+ await put(path.join(projectRoot, "skills-lock.json"), JSON.stringify({ version: 1, distribution: { mode: "sibling-directory", skillUtilsDir: "../skillUtils", required: true, compatibility: "skill-utils-v1", lock_digest: lockDigest } }, null, 2));
76
+ await put(path.join(projectRoot, "docs/process/engineering-baseline.json"), JSON.stringify({ schema_version: 1, architecture_identity: architectureIdentity, platform_profile: contract.profiles.platform, scaffold_completion: "generated" }, null, 2));
77
+ await put(path.join(projectRoot, "docs/process/implementation-repo-registry.yaml"), JSON.stringify({ schema_version: 1, projects: [{ project_type: "backend", project_name: options.projectName, project_root: ".", git_root: ".", repository_scope: "external-repository", scaffold_status: "initialized", default_branch: "main", architecture_identity: architectureIdentity, allowed_write_paths: ["."], verification_commands: contract.verification_commands, expected_evidence_files: contract.expected_evidence_files, ci: "not-configured", rollback_point: "initial-empty-repository" }] }, null, 2));
78
+ await put(path.join(projectRoot, "docs/process/service-initialization.json"), JSON.stringify({ work_unit: "work-unit.service-project-initialization", context_handoff_ref: contract.context_handoff_ref, context_handoff_digest: contract.context_handoff_digest, contract_id: contract.contract_id, architecture_identity: architectureIdentity, status: "generated" }, null, 2));
79
+ await put(path.join(projectRoot, ".gitignore"), "target/\n**/target/\n.idea/\n*.iml\n.env\n.env.*\n.local/");
80
+ const git = spawnSync("git", ["init", "--initial-branch=main"], { cwd: projectRoot, encoding: "utf8" });
81
+ if (git.status !== 0) throw new Error(`Git 初始化失败: ${git.stderr}`);
82
+ }
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  /** 依据生命周期批准的 schema v4 合同生成纯机械 YSS 分层 MVC 后端骨架。 */
3
3
  import { platformSourceFingerprint, generatedTreeDigest } from "../../../../scripts/lib/backend-platform-provenance.mjs";
4
- import { assertContractPlatform, platformProfile, platformTemplateVars, platformSmokeTest } from "../../../../scripts/lib/backend-platform.mjs";
4
+ import { assertContractPlatform, platformTemplateVars, platformSmokeTest } from "../../../../scripts/lib/backend-platform.mjs";
5
5
  import { assertScaffoldUserDecision } from "../../../../scripts/lib/user-decision.mjs";
6
6
  import { validateBackendScaffoldPrerequisites } from "../../../../scripts/lib/backend-scaffold-prerequisites.mjs";
7
7
  import { createHash } from "node:crypto";
@@ -14,6 +14,7 @@ import { findGitRoot, gitSubmoduleScaffoldViolation, overlayMountViolation } fro
14
14
  import { assertLocalDatabaseProfile, localDatabaseConfiguration, scaffoldArchitectureIdentity } from "../../../../scripts/lib/scaffold-local-database.mjs";
15
15
  import { validateArchitectureIdentity } from "../../../../scripts/lib/backend-architecture.mjs";
16
16
  import { validateJsonSchema } from "../../../../scripts/lib/json-schema.mjs";
17
+ import { finalizeDataAnalysisProfile } from "./data-analysis-profile.mjs";
17
18
 
18
19
  const SCRIPT_DIR = path.dirname(fileURLToPath(import.meta.url));
19
20
  const SKILL_ROOT = path.resolve(SCRIPT_DIR, "..");
@@ -146,7 +147,7 @@ function modulePom(contract, module, modules, platform) {
146
147
  }
147
148
  if (module === "client") dependencies.push(dependency("com.yss.cloud", "yss-component-dto"), dependency(platform.validation_group, platform.validation_artifact));
148
149
  if (["server", "service", "core", "client", "repository"].includes(module)) dependencies.push(dependency("org.projectlombok", "lombok", platform.versions.lombok, "provided"));
149
- if (module === "feign-client") dependencies.push(own("client"), dependency("org.springframework.cloud", contract.generator_skill === SKILL_ID ? "spring-cloud-starter-openfeign" : "spring-cloud-openfeign-core"));
150
+ if (module === "feign-client") dependencies.push(own("client"), dependency("org.springframework.cloud", contract.architecture_profile === "mvc-data-analysis-v1" ? "spring-cloud-openfeign-core" : "spring-cloud-starter-openfeign"));
150
151
  const plugin = module === "server" ? `<profiles><profile><id>scaffold-local</id><dependencies>${dependency("com.h2database", "h2", null, "runtime")}</dependencies></profile></profiles><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>` : "";
151
152
  return `<?xml version="1.0" encoding="UTF-8"?>
152
153
  <project xmlns="http://maven.apache.org/POM/4.0.0"><modelVersion>4.0.0</modelVersion><parent><groupId>${xml(contract.maven_coordinates.group_id)}</groupId><artifactId>${xml(contract.project_name)}</artifactId><version>${xml(contract.maven_coordinates.project_version)}</version></parent><artifactId>${xml(contract.project_name)}-${module}</artifactId><dependencies>${dependencies.join("")}</dependencies>${plugin}</project>`;
@@ -160,6 +161,10 @@ export async function validateContract(options, skillId, architectureProfile, pl
160
161
  if (contract.schema_version !== 4) fail(`unsupported: 新生成只接受 scaffold contract v4,收到 v${contract.schema_version}`);
161
162
  const expectedScaffoldKind = architectureProfile === "mvc-data-analysis-v1" ? "backend-mvc-data-analysis" : "backend-layered-mvc";
162
163
  if (contract.kind !== "project-scaffold-contract" || contract.delivery_role !== "backend" || contract.scaffold_kind !== expectedScaffoldKind) fail(`schema v4 合同必须绑定 backend/${expectedScaffoldKind}`);
164
+ if (architectureProfile === "mvc-data-analysis-v1") {
165
+ if (contract.init_git !== true) fail("mvc-data-analysis-v1 必须由合同显式要求独立 Git 初始化");
166
+ if (!contract.context_handoff_ref || !contract.context_handoff_digest) fail("mvc-data-analysis-v1 缺少批准的 CONTEXT handoff");
167
+ }
163
168
  validateJsonSchema(contract, path.join(REPOSITORY_ROOT, "docs/process/schemas/project-scaffold-contract.schema.json"), { label: "Project Scaffold Contract v4" });
164
169
  const required = ["contract_id", "contract_version", "scaffold_request_id", "status", "compiler_draft_ref", "lifecycle_approval_ref", "persisted_ref", "current_version", "implementation_repository", "backend_repository", "scaffold_status", "project_name", "target_output_dir", "base_package", "architecture_family", "generator_skill", "decision_ref", "decision_id", "decision_digest", "maven_coordinates", "profiles", "module_profile", "allowed_write_paths", "expected_evidence_files", "verification_commands", "approval", "work_unit", "generation_policy"];
165
170
  const missing = required.filter((field) => !isPresent(contract[field]));
@@ -176,6 +181,7 @@ export async function validateContract(options, skillId, architectureProfile, pl
176
181
  for (const [field, value] of Object.entries(expectedProfiles)) if (contract.profiles?.[field] !== value) fail(`unsupported profile ${field}: ${contract.profiles?.[field]}`);
177
182
  assertLocalDatabaseProfile(contract.profiles);
178
183
  if (contract.architecture_profile !== architectureProfile) fail(`合同必须显式绑定 ${architectureProfile} Profile`);
184
+ if (architectureProfile !== "mvc-data-analysis-v1" && contract.init_git !== false) fail("通用 layered-mvc-service 脚手架不得初始化 Git");
179
185
  const requested = contract.module_profile?.requested_capabilities;
180
186
  if (!Array.isArray(requested)) fail("module_profile.requested_capabilities 必须是数组");
181
187
  const resolved = architectureProfile === "mvc-data-analysis-v1" ? ["server", "core", "client", "repository", "adapter", "feign-client"] : orderedModules(requested);
@@ -209,8 +215,7 @@ export async function validateContract(options, skillId, architectureProfile, pl
209
215
  assertScaffoldUserDecision(decision);
210
216
  validateArchitectureIdentity(scaffoldArchitectureIdentity(contract, sha256(contractText)));
211
217
  const designPrerequisites = await validateBackendScaffoldPrerequisites(contract, { contractFile });
212
- const platform = skillId === SKILL_ID ? assertContractPlatform(contract, decision, { ...platformOptions, requireVerified: platformOptions.candidate !== true }).profile : platformProfile("spring-boot-2.7-jdk8", undefined, "2.7.18");
213
- if (skillId !== SKILL_ID && (contract.platform_configuration || contract.profiles.platform !== "spring-boot-2.7-jdk8" || contract.profiles.validation_namespace !== "javax")) fail("unsupported: data-analysis initializer remains on legacy Boot 2.7/Java 8");
218
+ const platform = assertContractPlatform(contract, decision, { ...platformOptions, requireVerified: platformOptions.candidate !== true }).profile;
214
219
  return { contract, contractText, modules: resolved, designPrerequisites, platform };
215
220
  }
216
221
 
@@ -227,8 +232,15 @@ async function validateOutputLayout(outputDir, projectName) {
227
232
  if (await exists(target)) fail(`unsupported: 目标已存在 ${target}`);
228
233
  }
229
234
 
230
- export async function generate(options, { skillId = SKILL_ID, architectureProfile = "layered-mvc-service", finalize, platformOptions = {} } = {}) {
231
- if (!((skillId === SKILL_ID && architectureProfile === "layered-mvc-service") || (skillId === "yss-mvc-data-analysis-project-initializer" && architectureProfile === "mvc-data-analysis-v1"))) fail("unsupported MVC generator/Profile pair");
235
+ async function profileFromContract(options) {
236
+ const text = await readFile(path.resolve(options.contractFile), "utf8").catch(() => fail(`脚手架合同不可读取: ${path.resolve(options.contractFile)}`));
237
+ try { return JSON.parse(text).architecture_profile; }
238
+ catch { fail("脚手架合同必须是 JSON 对象"); }
239
+ }
240
+
241
+ export async function generate(options, { skillId = SKILL_ID, architectureProfile, finalize, platformOptions = {} } = {}) {
242
+ architectureProfile ??= await profileFromContract(options);
243
+ if (skillId !== SKILL_ID || !["layered-mvc-service", "mvc-data-analysis-v1"].includes(architectureProfile)) fail("unsupported MVC generator/Profile pair");
232
244
  await validateOutputLayout(options.outputDir, options.projectName);
233
245
  const { contract, contractText, modules, designPrerequisites, platform } = await validateContract(options, skillId, architectureProfile, platformOptions);
234
246
  const outputDir = path.resolve(options.outputDir);
@@ -252,11 +264,13 @@ export async function generate(options, { skillId = SKILL_ID, architectureProfil
252
264
  await put(projectRoot, `${serverRoot}/src/test/resources/application-scaffold-test.yml`, localDatabaseConfiguration(`${options.projectName}_test`));
253
265
  await put(projectRoot, `${serverRoot}/src/test/java/${packagePath}/${applicationClass}Test.java`, `package ${options.basePackage};\n\nimport org.junit.jupiter.api.Test;\nimport org.springframework.boot.test.context.SpringBootTest;\nimport org.springframework.test.context.ActiveProfiles;\n\n@SpringBootTest\n@ActiveProfiles("scaffold-test")\nclass ${applicationClass}Test {\n @Test\n void contextLoads() {\n }\n}`);
254
266
  await put(projectRoot, `${serverRoot}/src/test/java/${packagePath}/architecture/LayeredMvcArchitectureTest.java`, `package ${options.basePackage}.architecture;\n\nimport static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;\n\nimport com.tngtech.archunit.core.importer.ImportOption;\nimport com.tngtech.archunit.junit.AnalyzeClasses;\nimport com.tngtech.archunit.junit.ArchTest;\nimport com.tngtech.archunit.lang.ArchRule;\n\n@AnalyzeClasses(packages = "${options.basePackage}", importOptions = ImportOption.DoNotIncludeTests.class)\nclass LayeredMvcArchitectureTest {\n @ArchTest\n static final ArchRule repositoryDoesNotDependOnUpperLayers = noClasses().that().resideInAPackage("..repository..").should().dependOnClassesThat().resideInAnyPackage("..service..", "..server..");\n}`);
255
- if (skillId === SKILL_ID) await put(projectRoot, `${serverRoot}/src/test/java/${packagePath}/PlatformIntegrationTest.java`, platformSmokeTest(options.basePackage, platform, contract.module_profile.requested_capabilities));
267
+ await put(projectRoot, `${serverRoot}/src/test/java/${packagePath}/PlatformIntegrationTest.java`, platformSmokeTest(options.basePackage, platform, contract.module_profile.requested_capabilities));
256
268
  const wrapper = path.join(REPOSITORY_ROOT, ".agents/skills/yss-ddd-scaffold-generator/assets/wrapper");
257
269
  await cp(wrapper, projectRoot, { recursive: true });
258
270
  await chmod(path.join(projectRoot, "mvnw"), 0o755);
259
- if (finalize) await finalize({ projectRoot, contract, architectureIdentity: scaffoldArchitectureIdentity(contract, sha256(contractText)) });
271
+ const architectureIdentity = scaffoldArchitectureIdentity(contract, sha256(contractText));
272
+ const profileFinalize = finalize ?? (architectureProfile === "mvc-data-analysis-v1" ? finalizeDataAnalysisProfile : null);
273
+ if (profileFinalize) await profileFinalize({ projectRoot, contract, architectureIdentity, options });
260
274
  await put(projectRoot, "README.md", `# ${options.projectName}\n\n平台:Spring Boot ${platform.spring_boot_version} / Java ${platform.java_version}。\n\n该工程由 ${skillId} 根据批准的 schema v${contract.schema_version} 合同生成。模块:${modules.join("、")}。不包含业务 API、SQL 或生产数据库绑定。\n\n本地运行需同时显式启用 Maven -Pscaffold-local 和 Spring scaffold-local Profile;测试独立使用 H2。生产数据库须由后续已批准存储工作单元接入。`);
261
275
  const generatedFiles = [];
262
276
  for (const entry of await fileEntries(projectRoot, new Set([".yss/scaffold-generation.json"]))) generatedFiles.push({ path: entry.relative, owner: "generator", sha256: rawSha256(await readFile(entry.target)) });
@@ -269,7 +283,7 @@ export async function generate(options, { skillId = SKILL_ID, architectureProfil
269
283
  schema_version: 4,
270
284
  kind: architectureProfile === "mvc-data-analysis-v1" ? "service-project-initialization" : "backend-scaffold",
271
285
  architecture_profile: contract.architecture_profile,
272
- architecture_identity: scaffoldArchitectureIdentity(contract, sha256(contractText)),
286
+ architecture_identity: architectureIdentity,
273
287
  contract_id: contract.contract_id,
274
288
  contract_version: contract.contract_version,
275
289
  scaffold_request_id: contract.scaffold_request_id,
@@ -36,7 +36,7 @@ async function fixture(t, { profile = capabilityModules.basic, architectureProfi
36
36
  delivery_role: "backend",
37
37
  scaffold_kind: architectureProfile === "mvc-data-analysis-v1" ? "backend-mvc-data-analysis" : "backend-layered-mvc",
38
38
  repository_scope: "external-repository",
39
- init_git: false,
39
+ init_git: architectureProfile === "mvc-data-analysis-v1",
40
40
  contract_id: "scaffold.demo-service.v1",
41
41
  contract_version: 1,
42
42
  scaffold_request_id: "request.demo-service",
@@ -74,19 +74,17 @@ async function fixture(t, { profile = capabilityModules.basic, architectureProfi
74
74
  }
75
75
 
76
76
  test("数据分析初始化生成 H2 六模块和独立治理信封", async (t) => {
77
- const skillId = "yss-mvc-data-analysis-project-initializer";
78
- const data = await fixture(t, { architectureProfile: "mvc-data-analysis-v1", skillId, profile: { capabilities: [], modules: ["server", "core", "client", "repository", "adapter", "feign-client"] } });
77
+ const data = await fixture(t, { architectureProfile: "mvc-data-analysis-v1", profile: { capabilities: [], modules: ["server", "core", "client", "repository", "adapter", "feign-client"] } });
79
78
  const context = "---\ncontext_schema_version: 1\n---\n# 业务上下文\n\n## 业务术语\n\n| 术语 | 含义 | 英文标识 | 适用业务责任区 | 避免 / 备注 |\n|---|---|---|---|---|\n";
80
79
  await writeFile(path.join(data.root, "context-handoff.md"), context);
81
80
  data.contract.context_handoff_ref = "context-handoff.md";
82
81
  data.contract.context_handoff_digest = digest(context);
83
82
  await writeFile(data.contractFile, JSON.stringify(data.contract));
84
- const initializer = path.resolve(path.dirname(script), `../../${skillId}/scripts/generate_project.mjs`);
85
- const result = spawnSync(process.execPath, [initializer, ...data.args], { encoding: "utf8" });
83
+ const result = spawnSync(process.execPath, [path.resolve(path.dirname(script), "../../../../scripts/fixtures/backend-scaffold/generate-candidate.mjs"), script, ...data.args], { encoding: "utf8" });
86
84
  assert.equal(result.status, 0, result.stderr);
87
85
  const manifest = JSON.parse(await readFile(path.join(data.project, ".yss/scaffold-generation.json"), "utf8"));
88
86
  assert.equal(manifest.architecture_identity.architecture_profile, "mvc-data-analysis-v1");
89
- assert.equal(manifest.generator_skill, skillId);
87
+ assert.equal(manifest.generator_skill, "yss-layered-mvc-scaffold-generator");
90
88
  assert.equal(await readFile(path.join(data.project, "CONTEXT.md"), "utf8"), context);
91
89
  await stat(path.join(data.project, ".git"));
92
90
  await stat(path.join(data.output, "skillUtils/skills-lock.json"));
@@ -95,6 +93,25 @@ test("数据分析初始化生成 H2 六模块和独立治理信封", async (t)
95
93
  assert.doesNotMatch(core, /demo-service-client|spring-web|ojdbc|mysql-connector/);
96
94
  });
97
95
 
96
+ test("数据分析 Profile 缺少 CONTEXT handoff 或独立 Git 合同时零写入阻断", async (t) => {
97
+ const profile = { capabilities: [], modules: ["server", "core", "client", "repository", "adapter", "feign-client"] };
98
+ const missingContext = await fixture(t, { architectureProfile: "mvc-data-analysis-v1", profile });
99
+ const missingResult = spawnSync(process.execPath, [path.resolve(path.dirname(script), "../../../../scripts/fixtures/backend-scaffold/generate-candidate.mjs"), script, ...missingContext.args], { encoding: "utf8" });
100
+ assert.notEqual(missingResult.status, 0);
101
+ assert.match(missingResult.stderr, /CONTEXT handoff/);
102
+ await assert.rejects(stat(missingContext.project), { code: "ENOENT" });
103
+
104
+ const noGit = await fixture(t, { architectureProfile: "mvc-data-analysis-v1", profile });
105
+ const context = "---\ncontext_schema_version: 1\n---\n# 业务上下文\n";
106
+ await writeFile(path.join(noGit.root, "context-handoff.md"), context);
107
+ Object.assign(noGit.contract, { init_git: false, context_handoff_ref: "context-handoff.md", context_handoff_digest: digest(context) });
108
+ await writeFile(noGit.contractFile, JSON.stringify(noGit.contract));
109
+ const noGitResult = spawnSync(process.execPath, [path.resolve(path.dirname(script), "../../../../scripts/fixtures/backend-scaffold/generate-candidate.mjs"), script, ...noGit.args], { encoding: "utf8" });
110
+ assert.notEqual(noGitResult.status, 0);
111
+ assert.match(noGitResult.stderr, /独立 Git/);
112
+ await assert.rejects(stat(noGit.project), { code: "ENOENT" });
113
+ });
114
+
98
115
  test("旧数据库和 Mock 参数在写入前被拒绝", async (t) => {
99
116
  const data = await fixture(t);
100
117
  for (const args of [["--database", "mysql"], ["--with-mock"]]) {
@@ -0,0 +1,2 @@
1
+ // Keep the task-package entry stable while the canonical implementation test remains beside the generator.
2
+ import "../scripts/scaffold-generator.test.mjs";
@@ -52,6 +52,6 @@ description: 用于 YSS MyBatis / MyBatis-Plus 组件能力核验、接入决策
52
52
  - 使用项目根 `./mvnw ...` 记录实际命令、退出码和时间;H2 只证明本地/测试行为,不证明生产方言。
53
53
  - 按 [YSS Skill Execution Result v2](../yss-implementation-contract-compiler/references/yss-skill-execution-result.md) 返回证据、`seam_deferred`、`deviations`、`new_impacts`、`drift` 和 `violation`。
54
54
 
55
- ## 新脚手架平台约束
55
+ ## 平台与源码门禁
56
56
 
57
- 消费批准切片架构身份中的 `platform_configuration`,与工程 Manifest 核对后使用对应 YSS 组件。Boot 2.7 使用 `javax` Web/Validation API;Boot 3.5/4.1 使用 `jakarta`。Boot 4 按 Jackson 3、对应自动配置和 starter 适配;不替换 `javax.sql` 等 Java SE 包。平台不一致、兼容条目缺失或候选未验证时回合同编译器阻断,不在业务实现中升级或替换组件。详见 仓库共享合同 `docs/engineering/backend-platforms.md`。
57
+ 接入、修改、代码生成或给出精确类名/配置前,读取 [后端组件平台与源码门禁](../yss-skill-source-index-refresh/references/backend-component-platform-compatibility.md),从批准的 `platform_configuration.component_platform_line` 选择 `source-index.boot2-java8.md` 或 `source-index.boot3-java17.md`,并以 `--skill yss-mybatis --platform-line <line> --source-root <matching-root>` 运行统一 freshness 校验。平台线与源码根不匹配、组件 tree 不一致、组件子树 dirty、索引缺少平台信号,或 Manifest / 组件 GAV 缺少 verified 兼容证据时返回 `blocked`;不得回退另一代索引,也不在业务实现中升级、降级或替换 YSS 组件。既有工程只读分诊可继续,但不得据此宣称跨 Boot/JDK 兼容。
@@ -0,0 +1,126 @@
1
+ # yss-mybatis Source Index
2
+
3
+ Index schema: `backend-component-source-index-v2`
4
+ Platform line: `boot2-java8`
5
+ Generated: 2026-09-18T18:40:26.031Z
6
+ Source commit: `a3be2b2e33dca4545782e2b31894aaa00d0305cd`
7
+ Component worktree: `clean`
8
+ Component tree `yss-microservice-components/yss-component-persistence`: `274d9f4c948d0bd8a58e7f6fb50685d6de740f7b`
9
+ Indexed source root: resolved at refresh time; set `YSS_SOURCE_ROOT_BOOT2_JAVA8` to reproduce or refresh.
10
+
11
+ This file is generated by `yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs`. Do not hand-edit generated sections.
12
+
13
+ Paths are relocatable source hints. Exact guidance requires a matching component tree and a clean indexed component subtree; the repository commit is trace metadata and may differ when unrelated components change.
14
+
15
+ ## Component Path Hints
16
+
17
+ - `yss-microservice-components/yss-component-persistence` (existed when indexed)
18
+
19
+ ## Documentation Files
20
+
21
+ - `yss-microservice-components/yss-component-persistence/HELP.md`
22
+ - `yss-microservice-components/yss-component-persistence/README.md`
23
+ - `yss-microservice-components/yss-component-persistence/TECHNICAL_DESIGN.md`
24
+
25
+ Component documentation is a discovery aid. For API signatures, conditions and defaults, prefer the indexed source facts below when documentation differs.
26
+
27
+ ## Maven Modules
28
+
29
+ - `yss-microservice-components/yss-component-persistence/pom.xml` — GAV `com.yss.cloud:yss-component-persistence:2.0.0-SNAPSHOT`; parent `com.yss.cloud:yss-microservice-components:2.0.0-SNAPSHOT`
30
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-mapper/pom.xml` — GAV `com.yss.cloud:yss-component-mybatis-mapper:2.0.0-SNAPSHOT`; parent `com.yss.cloud:yss-component-persistence:2.0.0-SNAPSHOT`
31
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/pom.xml` — GAV `com.yss.cloud:yss-component-mybatis-plus-starter:2.0.0-SNAPSHOT`; parent `com.yss.cloud:yss-component-persistence:2.0.0-SNAPSHOT`
32
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-starter/pom.xml` — GAV `com.yss.cloud:yss-component-mybatis-starter:2.0.0-SNAPSHOT`; parent `com.yss.cloud:yss-component-persistence:2.0.0-SNAPSHOT`
33
+ - `yss-microservice-components/yss-component-persistence/yss-component-persistence-common/pom.xml` — GAV `com.yss.cloud:yss-component-persistence-common:2.0.0-SNAPSHOT`; parent `com.yss.cloud:yss-component-persistence:2.0.0-SNAPSHOT`
34
+
35
+ ## Platform Signals
36
+
37
+ - Inherited Java signals: `1.8`.
38
+ - Inherited Spring Boot signals: `2.7.18`.
39
+ - Namespace source signals: `javax.*` in 8 main Java files; `jakarta.*` in 0 main Java files.
40
+ - Auto-configuration metadata: 4 `spring.factories`; 1 `AutoConfiguration.imports` files.
41
+ - These are source observations, not compatibility certification. Use the approved `platform_configuration` and verified compatibility evidence before integration or generation.
42
+
43
+ ## Capability Matrix
44
+
45
+ ### Repository abstractions
46
+
47
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-starter/src/main/java/com/yss/cloud/mybatis/support/BaseRepository.java` — `sha256:fd6d72ff759b3438a2cf9d8a2ba24e848a9e68995fc8a100a0a53c65ee3500bb`
48
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-starter/src/main/java/com/yss/cloud/mybatis/support/BaseRepository.java:20` — `public interface BaseRepository<T, D extends Serializable> extends Mapper<T>, BaseMapper<T, D>, ListMapper<T> {`
49
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-starter/src/main/java/com/yss/cloud/mybatis/support/BaseRepository.java:66` — `<S extends T> int insert(S entity);`
50
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-starter/src/main/java/com/yss/cloud/mybatis/support/BaseRepository.java:80` — `<S extends T> int insertSelective(S entity);`
51
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-starter/src/main/java/com/yss/cloud/mybatis/support/BaseRepository.java:85` — `<S extends T> int insertList(@Param("entityList") List<S> entityList);`
52
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-starter/src/main/java/com/yss/cloud/mybatis/support/BaseRepository.java:96` — `<S extends T> int updateList(@Param("entityList") List<S> entityList);`
53
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-starter/src/main/java/com/yss/cloud/mybatis/support/BaseRepository.java:108` — `<S extends T> int updateListSelective(@Param("entityList") List<S> entityList);`
54
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/support/BasePlusRepository.java` — `sha256:3c37b73a2a2dcaa1ad47fee42f8fb4f9b9ecf51b095f8d1fef816cf785fcbb05`
55
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/support/BasePlusRepository.java:12` — `public interface BasePlusRepository<T> extends BaseMapper<T> {`
56
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/support/BasePlusRepository.java:21` — `default Integer insertBatchSomeColumn(List<T> entityList) {`
57
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/support/BasePlusRepository.java:29` — `Integer rows = insertBatchSomeColumnInternal(entityList.subList(fromIndex, toIndex));`
58
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/support/BasePlusRepository.java:43` — `Integer insertBatchSomeColumnInternal(List<T> entityList);`
59
+
60
+ ### Pagination and activation
61
+
62
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-starter/src/main/java/com/yss/cloud/mybatis/aop/EntityQueryAspect.java` — `sha256:617d5eba33a8266bfc485c8e5f39f43519dd16f4d89c9fea7f918d87b00293ba`
63
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-starter/src/main/java/com/yss/cloud/mybatis/aop/EntityQueryAspect.java:22` — `@Around("( (execution(public * (@org.springframework.stereotype.Repository *).*(..)) || execution(* com.yss..*.gateway.impl.*.*(..))))&& (args(pageQuery)||args(pageQuery,..))")`
64
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-starter/src/main/java/com/yss/cloud/mybatis/aop/EntityQueryAspect.java:27` — `Page<Object> page = PageHelper.offsetPage(pageQuery.getOffset(), pageQuery.getPageSize());`
65
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-starter/src/main/java/com/yss/cloud/mybatis/config/PageQueryEntityConfigration.java` — `sha256:c2659f417c10db7fd9e1a91f825d3b6396ae949f7858dbd3b3d9f8917ae42031`
66
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-starter/src/main/java/com/yss/cloud/mybatis/config/PageQueryEntityConfigration.java:15` — `@ConditionalOnProperty(name = "yss.mybatis.page-helper.enabled", havingValue = "true", matchIfMissing = true)`
67
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/YssMybatisMapperProperties.java` — `sha256:2fda7b769434bd6942f680cdc7ffa71030c0d6a0e448d762e0f19b2d0b33cd85`
68
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/YssMybatisMapperProperties.java:8` — `@ConfigurationProperties(value = "yss.mybatis",ignoreUnknownFields = false)`
69
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/YssMybatisMapperProperties.java:10` — `private String mapperLocation = "mappers/*.xml";`
70
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/YssMybatisMapperProperties.java:11` — `private String mapperScan = "com.yss.cloud.**.mapper";`
71
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/YssMybatisMapperProperties.java:15` — `private Integer batchSize = 200;`
72
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/YssMybatisMapperProperties.java:21` — `private PageHelper pageHelper = new PageHelper();`
73
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/YssMybatisMapperProperties.java:27` — `private MybatisPlusPagination mybatisPlusPagination = new MybatisPlusPagination();`
74
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/YssMybatisMapperProperties.java:36` — `private String dbType;`
75
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/YssMybatisMapperProperties.java:164` — `private Boolean enabled = true;`
76
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/YssMybatisMapperProperties.java:183` — `private Boolean enabled = true;`
77
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/config/MapperConfiguration.java` — `sha256:79509947c12aeac7b9d6d3e8610edea438240b6613368b84b57b492f06a6b7fc`
78
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/config/MapperConfiguration.java:47` — `PageInterceptor pageInterceptor = new PageInterceptor();`
79
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/config/MapperConfiguration.java:264` — `batchSqlInjector.setDbType(dbType);`
80
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/config/MapperConfiguration.java:265` — `BatchInsertSettings.setBatchSize(yssMybatisMapperProperties.getBatchSize());`
81
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/config/MapperConfiguration.java:275` — `PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(dbType);`
82
+
83
+ ### SQL-level batch insertion
84
+
85
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/config/BatchInsertSettings.java` — `sha256:b1ae05aed5f90a97c36ad29d240b05f9f7c5ee5796f2bc293917e09f7d1c8bd2`
86
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/config/BatchInsertSettings.java:8` — `private static final int DEFAULT_BATCH_SIZE = 200;`
87
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/config/BatchInsertSettings.java:9` — `private static volatile int batchSize = DEFAULT_BATCH_SIZE;`
88
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/config/BatchInsertSettings.java:18` — `public static void setBatchSize(Integer configuredBatchSize) {`
89
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/config/BatchInsertSettings.java:19` — `batchSize = configuredBatchSize == null || configuredBatchSize <= 0`
90
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/config/BatchInsertSettings.java:20` — `? DEFAULT_BATCH_SIZE : configuredBatchSize;`
91
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/config/BatchSqlInjector.java` — `sha256:463dfc881c0c33e27ed2a9157041e8b06d2b2e8bbab0dae1a106f467c31fb4ef`
92
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/config/BatchSqlInjector.java:16` — `public class BatchSqlInjector extends DefaultSqlInjector {`
93
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/config/BatchSqlInjector.java:28` — `"insertBatchSomeColumnInternal", dbType, i -> FieldFill.UPDATE != i.getFieldFill()));`
94
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/config/DialectInsertBatchSomeColumn.java` — `sha256:9cc31f71154fffbc99e4f67816b9026f286f864cfb56a57420185f5e0362dca3`
95
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/config/DialectInsertBatchSomeColumn.java:24` — `public class DialectInsertBatchSomeColumn extends AbstractMethod {`
96
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/config/DialectInsertBatchSomeColumn.java:82` — `return dbType == DbType.ORACLE`
97
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/config/DialectInsertBatchSomeColumn.java:83` — `|| dbType == DbType.ORACLE_12C`
98
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis/config/DialectInsertBatchSomeColumn.java:84` — `|| dbType == DbType.DM;`
99
+
100
+ ### Multi-data-source capability boundary
101
+
102
+ - `yss-microservice-components/yss-component-persistence/yss-component-persistence-common/src/main/java/com/yss/cloud/mybatis/MultiDataSourceHolder.java` — `sha256:d19370f6a63af76ccb0d05084ef9f0aa71488dcc98b320933ffb8ccf9b9bf896`
103
+ - `yss-microservice-components/yss-component-persistence/yss-component-persistence-common/src/main/java/com/yss/cloud/mybatis/MultiDataSourceHolder.java:10` — `public class MultiDataSourceHolder {`
104
+ - `yss-microservice-components/yss-component-persistence/yss-component-persistence-common/src/main/java/com/yss/cloud/mybatis/MultiDataSourceHolder.java:12` — `private Map<String, DataSource> multiDataSource;`
105
+
106
+ ### Auto-configuration registration
107
+
108
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-mapper/src/main/resources/META-INF/spring.factories` — `sha256:592ecdc43e8e11f86c6d1c4b335661f7a05ae8faf4ebb206ec49ef25512d5e46`
109
+ - `org.springframework.boot.autoconfigure.EnableAutoConfiguration=\`
110
+ - `io.mybatis.config.spring.SpringEnvAutoConfiguration`
111
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-mapper/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports` — `sha256:d489ab3426d162416a1dfb396dbd3e530f9d5a287c880aab4b021229cc4f06fd`
112
+ - `io.mybatis.config.spring.SpringEnvAutoConfiguration`
113
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-plus-starter/src/main/resources/META-INF/spring.factories` — `sha256:22d8e4510b67fffe9a132b20524c1982c530d80594a3c4e9f839e914068e0a58`
114
+ - `org.springframework.boot.autoconfigure.EnableAutoConfiguration = com.yss.cloud.mybatis.MybatisPlusConfiguration`
115
+ - `yss-microservice-components/yss-component-persistence/yss-component-mybatis-starter/src/main/resources/META-INF/spring.factories` — `sha256:ab6be3903a3af9369ecc56d47dac769511e62bc4a7215ebb7171a920415fa23f`
116
+ - `org.springframework.boot.autoconfigure.EnableAutoConfiguration = com.yss.cloud.mybatis.MybatisBaseConfiguration,com.yss.cloud.mybatis.MybatisPlusConfiguration`
117
+ - `yss-microservice-components/yss-component-persistence/yss-component-persistence-common/src/main/resources/META-INF/spring.factories` — `sha256:59e4a12550a854ad5a5b253ba3300058edc6646b2b221505aab4fb6bfcad1721`
118
+ - `org.springframework.boot.autoconfigure.EnableAutoConfiguration = com.yss.cloud.mybatis.MultiDataSourceConfiguration`
119
+
120
+ ## Freshness and Use
121
+
122
+ - Locate the current source root using `YSS_SOURCE_ROOT_BOOT2_JAVA8`, CodeGraph, Maven artifact names or repository search.
123
+ - Compare each indexed `Component tree` with `git rev-parse HEAD:<component-path>` and require the current component subtree to be clean before exact guidance.
124
+ - Run `node ../yss-skill-source-index-refresh/scripts/check-backend-skill-source-index.mjs --skill <skill-id> --platform-line boot2-java8 --source-root <root>` from the canonical skill root before exact integration guidance.
125
+ - A repository commit difference alone is not stale when the component tree is unchanged; a component tree mismatch or component-local dirty state is stale.
126
+ - Read only the source entries needed for the current decision or troubleshooting path.