create-yss-spec 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/README.md +2 -2
  2. package/package.json +1 -1
  3. package/template/.agents/skills/code-review/SKILL.md +4 -0
  4. package/template/.agents/skills/code-review/agents/openai.yaml +1 -1
  5. package/template/.agents/skills/code-review/references/yss-review-standards.md +9 -2
  6. package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
  7. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
  8. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  9. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
  10. package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
  11. package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
  12. package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
  13. package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
  14. package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
  15. package/template/.agents/skills/yss-implementation-contract-compiler/SKILL.md +1 -1
  16. package/template/.agents/skills/yss-implementation-contract-compiler/references/boundaries.md +4 -0
  17. package/template/.agents/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +25 -0
  18. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
  19. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
  20. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
  21. package/template/.agents/skills/yss-mybatis/SKILL.md +34 -58
  22. package/template/.agents/skills/yss-mybatis/agents/openai.yaml +2 -2
  23. package/template/.agents/skills/yss-mybatis/references/source-index.md +88 -68
  24. package/template/.agents/skills/yss-product-lifecycle/SKILL.md +48 -43
  25. package/template/.agents/skills/yss-product-lifecycle/references/artifact-dependencies.md +4 -2
  26. package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +67 -10
  27. package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +5 -1
  28. package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +5 -2
  29. package/template/.agents/skills/yss-repository/SKILL.md +28 -70
  30. package/template/.agents/skills/yss-repository/agents/openai.yaml +2 -2
  31. package/template/.agents/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
  32. package/template/.agents/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
  33. package/template/.agents/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
  34. package/template/.agents/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
  35. package/template/.agents/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
  36. package/template/.agents/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
  37. package/template/.agents/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
  38. package/template/.agents/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
  39. package/template/.claude/skills/code-review/SKILL.md +4 -0
  40. package/template/.claude/skills/code-review/agents/openai.yaml +1 -1
  41. package/template/.claude/skills/code-review/references/yss-review-standards.md +9 -2
  42. package/template/.claude/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
  43. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
  44. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  45. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
  46. package/template/.claude/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
  47. package/template/.claude/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
  48. package/template/.claude/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
  49. package/template/.claude/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
  50. package/template/.claude/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
  51. package/template/.claude/skills/yss-implementation-contract-compiler/SKILL.md +1 -1
  52. package/template/.claude/skills/yss-implementation-contract-compiler/references/boundaries.md +4 -0
  53. package/template/.claude/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +25 -0
  54. package/template/.claude/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
  55. package/template/.claude/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
  56. package/template/.claude/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
  57. package/template/.claude/skills/yss-mybatis/SKILL.md +34 -58
  58. package/template/.claude/skills/yss-mybatis/agents/openai.yaml +2 -2
  59. package/template/.claude/skills/yss-mybatis/references/source-index.md +88 -68
  60. package/template/.claude/skills/yss-product-lifecycle/SKILL.md +48 -43
  61. package/template/.claude/skills/yss-product-lifecycle/references/artifact-dependencies.md +4 -2
  62. package/template/.claude/skills/yss-product-lifecycle/references/orchestration-contract.yaml +67 -10
  63. package/template/.claude/skills/yss-product-lifecycle/references/orchestration.md +5 -1
  64. package/template/.claude/skills/yss-product-lifecycle/references/state-model.md +5 -2
  65. package/template/.claude/skills/yss-repository/SKILL.md +28 -70
  66. package/template/.claude/skills/yss-repository/agents/openai.yaml +2 -2
  67. package/template/.claude/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
  68. package/template/.claude/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
  69. package/template/.claude/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
  70. package/template/.claude/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
  71. package/template/.claude/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
  72. package/template/.claude/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
  73. package/template/.claude/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
  74. package/template/.claude/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
  75. package/template/.codex/skills/code-review/SKILL.md +4 -0
  76. package/template/.codex/skills/code-review/agents/openai.yaml +1 -1
  77. package/template/.codex/skills/code-review/references/yss-review-standards.md +9 -2
  78. package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
  79. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
  80. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  81. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
  82. package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
  83. package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
  84. package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
  85. package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
  86. package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
  87. package/template/.codex/skills/yss-implementation-contract-compiler/SKILL.md +1 -1
  88. package/template/.codex/skills/yss-implementation-contract-compiler/references/boundaries.md +4 -0
  89. package/template/.codex/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +25 -0
  90. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
  91. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
  92. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
  93. package/template/.codex/skills/yss-mybatis/SKILL.md +34 -58
  94. package/template/.codex/skills/yss-mybatis/agents/openai.yaml +2 -2
  95. package/template/.codex/skills/yss-mybatis/references/source-index.md +88 -68
  96. package/template/.codex/skills/yss-product-lifecycle/SKILL.md +48 -43
  97. package/template/.codex/skills/yss-product-lifecycle/references/artifact-dependencies.md +4 -2
  98. package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +67 -10
  99. package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +5 -1
  100. package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +5 -2
  101. package/template/.codex/skills/yss-repository/SKILL.md +28 -70
  102. package/template/.codex/skills/yss-repository/agents/openai.yaml +2 -2
  103. package/template/.codex/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
  104. package/template/.codex/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
  105. package/template/.codex/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
  106. package/template/.codex/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
  107. package/template/.codex/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
  108. package/template/.codex/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
  109. package/template/.codex/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
  110. package/template/.codex/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
  111. package/template/.cursor/skills/code-review/SKILL.md +4 -0
  112. package/template/.cursor/skills/code-review/agents/openai.yaml +1 -1
  113. package/template/.cursor/skills/code-review/references/yss-review-standards.md +9 -2
  114. package/template/.cursor/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
  115. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
  116. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  117. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
  118. package/template/.cursor/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
  119. package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
  120. package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
  121. package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
  122. package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
  123. package/template/.cursor/skills/yss-implementation-contract-compiler/SKILL.md +1 -1
  124. package/template/.cursor/skills/yss-implementation-contract-compiler/references/boundaries.md +4 -0
  125. package/template/.cursor/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +25 -0
  126. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
  127. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
  128. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
  129. package/template/.cursor/skills/yss-mybatis/SKILL.md +34 -58
  130. package/template/.cursor/skills/yss-mybatis/agents/openai.yaml +2 -2
  131. package/template/.cursor/skills/yss-mybatis/references/source-index.md +88 -68
  132. package/template/.cursor/skills/yss-product-lifecycle/SKILL.md +48 -43
  133. package/template/.cursor/skills/yss-product-lifecycle/references/artifact-dependencies.md +4 -2
  134. package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +67 -10
  135. package/template/.cursor/skills/yss-product-lifecycle/references/orchestration.md +5 -1
  136. package/template/.cursor/skills/yss-product-lifecycle/references/state-model.md +5 -2
  137. package/template/.cursor/skills/yss-repository/SKILL.md +28 -70
  138. package/template/.cursor/skills/yss-repository/agents/openai.yaml +2 -2
  139. package/template/.cursor/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
  140. package/template/.cursor/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
  141. package/template/.cursor/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
  142. package/template/.cursor/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
  143. package/template/.cursor/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
  144. package/template/.cursor/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
  145. package/template/.cursor/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
  146. package/template/.cursor/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
  147. package/template/.pi/skills/code-review/SKILL.md +4 -0
  148. package/template/.pi/skills/code-review/agents/openai.yaml +1 -1
  149. package/template/.pi/skills/code-review/references/yss-review-standards.md +9 -2
  150. package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
  151. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
  152. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  153. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
  154. package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
  155. package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
  156. package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
  157. package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
  158. package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
  159. package/template/.pi/skills/yss-implementation-contract-compiler/SKILL.md +1 -1
  160. package/template/.pi/skills/yss-implementation-contract-compiler/references/boundaries.md +4 -0
  161. package/template/.pi/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +25 -0
  162. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
  163. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
  164. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
  165. package/template/.pi/skills/yss-mybatis/SKILL.md +34 -58
  166. package/template/.pi/skills/yss-mybatis/agents/openai.yaml +2 -2
  167. package/template/.pi/skills/yss-mybatis/references/source-index.md +88 -68
  168. package/template/.pi/skills/yss-product-lifecycle/SKILL.md +48 -43
  169. package/template/.pi/skills/yss-product-lifecycle/references/artifact-dependencies.md +4 -2
  170. package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +67 -10
  171. package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +5 -1
  172. package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +5 -2
  173. package/template/.pi/skills/yss-repository/SKILL.md +28 -70
  174. package/template/.pi/skills/yss-repository/agents/openai.yaml +2 -2
  175. package/template/.pi/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
  176. package/template/.pi/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
  177. package/template/.pi/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
  178. package/template/.pi/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
  179. package/template/.pi/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
  180. package/template/.pi/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
  181. package/template/.pi/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
  182. package/template/.pi/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
  183. package/template/.qoder/skills/code-review/SKILL.md +4 -0
  184. package/template/.qoder/skills/code-review/agents/openai.yaml +1 -1
  185. package/template/.qoder/skills/code-review/references/yss-review-standards.md +9 -2
  186. package/template/.qoder/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
  187. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
  188. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  189. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
  190. package/template/.qoder/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
  191. package/template/.qoder/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
  192. package/template/.qoder/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
  193. package/template/.qoder/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
  194. package/template/.qoder/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
  195. package/template/.qoder/skills/yss-implementation-contract-compiler/SKILL.md +1 -1
  196. package/template/.qoder/skills/yss-implementation-contract-compiler/references/boundaries.md +4 -0
  197. package/template/.qoder/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +25 -0
  198. package/template/.qoder/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
  199. package/template/.qoder/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
  200. package/template/.qoder/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
  201. package/template/.qoder/skills/yss-mybatis/SKILL.md +34 -58
  202. package/template/.qoder/skills/yss-mybatis/agents/openai.yaml +2 -2
  203. package/template/.qoder/skills/yss-mybatis/references/source-index.md +88 -68
  204. package/template/.qoder/skills/yss-product-lifecycle/SKILL.md +48 -43
  205. package/template/.qoder/skills/yss-product-lifecycle/references/artifact-dependencies.md +4 -2
  206. package/template/.qoder/skills/yss-product-lifecycle/references/orchestration-contract.yaml +67 -10
  207. package/template/.qoder/skills/yss-product-lifecycle/references/orchestration.md +5 -1
  208. package/template/.qoder/skills/yss-product-lifecycle/references/state-model.md +5 -2
  209. package/template/.qoder/skills/yss-repository/SKILL.md +28 -70
  210. package/template/.qoder/skills/yss-repository/agents/openai.yaml +2 -2
  211. package/template/.qoder/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
  212. package/template/.qoder/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
  213. package/template/.qoder/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
  214. package/template/.qoder/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
  215. package/template/.qoder/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
  216. package/template/.qoder/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
  217. package/template/.qoder/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
  218. package/template/.qoder/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
  219. package/template/.trae/skills/code-review/SKILL.md +4 -0
  220. package/template/.trae/skills/code-review/agents/openai.yaml +1 -1
  221. package/template/.trae/skills/code-review/references/yss-review-standards.md +9 -2
  222. package/template/.trae/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
  223. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
  224. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  225. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
  226. package/template/.trae/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
  227. package/template/.trae/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
  228. package/template/.trae/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
  229. package/template/.trae/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
  230. package/template/.trae/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
  231. package/template/.trae/skills/yss-implementation-contract-compiler/SKILL.md +1 -1
  232. package/template/.trae/skills/yss-implementation-contract-compiler/references/boundaries.md +4 -0
  233. package/template/.trae/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +25 -0
  234. package/template/.trae/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
  235. package/template/.trae/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
  236. package/template/.trae/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
  237. package/template/.trae/skills/yss-mybatis/SKILL.md +34 -58
  238. package/template/.trae/skills/yss-mybatis/agents/openai.yaml +2 -2
  239. package/template/.trae/skills/yss-mybatis/references/source-index.md +88 -68
  240. package/template/.trae/skills/yss-product-lifecycle/SKILL.md +48 -43
  241. package/template/.trae/skills/yss-product-lifecycle/references/artifact-dependencies.md +4 -2
  242. package/template/.trae/skills/yss-product-lifecycle/references/orchestration-contract.yaml +67 -10
  243. package/template/.trae/skills/yss-product-lifecycle/references/orchestration.md +5 -1
  244. package/template/.trae/skills/yss-product-lifecycle/references/state-model.md +5 -2
  245. package/template/.trae/skills/yss-repository/SKILL.md +28 -70
  246. package/template/.trae/skills/yss-repository/agents/openai.yaml +2 -2
  247. package/template/.trae/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
  248. package/template/.trae/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
  249. package/template/.trae/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
  250. package/template/.trae/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
  251. package/template/.trae/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
  252. package/template/.trae/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
  253. package/template/.trae/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
  254. package/template/.trae/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
  255. package/template/docs/agents/digital-human-roles.yaml +2 -0
  256. package/template/docs/agents/yss-skill-registry.yaml +5 -0
  257. package/template/docs/process/lifecycle-artifact-map.md +4 -0
  258. package/template/docs/process/lifecycle-registry-baseline.json +6 -1
  259. package/template/docs/process/lifecycle-registry.yaml +23 -0
  260. package/template/docs/process/schemas/implementation-repository-preparation-result.schema.json +38 -0
  261. package/template/docs/process/schemas/project-scaffold-contract.schema.json +113 -0
  262. package/template/docs/process/template-verification-profiles.yaml +23 -0
  263. package/template/docs/templates/implementation-repo-registry-template.md +8 -0
  264. package/template/docs/templates/review-report-template.md +7 -3
  265. package/template/scripts/lib/lifecycle-context-query.mjs +137 -0
  266. package/template/scripts/lib/lifecycle-transition.mjs +109 -3
  267. package/template/scripts/lib/scenario-checks.mjs +29 -26
  268. package/template/scripts/lib/skill-registry.mjs +9 -0
  269. package/template/scripts/query-lifecycle-context +25 -0
  270. package/template/scripts/verify-business-language-scenarios +0 -7
  271. package/template/scripts/verify-frontend-scaffold-generator-scenarios +2 -0
  272. package/template/scripts/verify-lifecycle-context-query-scenarios +68 -0
  273. package/template/scripts/verify-lifecycle-transition-scenarios +44 -4
  274. package/template/skills-lock.json +9 -9
  275. package/template.snapshot.json +4 -4
  276. package/template/.agents/skills/yss-mybatis/assets/BaseRepository.java +0 -112
  277. package/template/.agents/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
  278. package/template/.agents/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
  279. package/template/.agents/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
  280. package/template/.agents/skills/yss-mybatis/references/README.md +0 -57
  281. package/template/.agents/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
  282. package/template/.claude/skills/yss-mybatis/assets/BaseRepository.java +0 -112
  283. package/template/.claude/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
  284. package/template/.claude/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
  285. package/template/.claude/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
  286. package/template/.claude/skills/yss-mybatis/references/README.md +0 -57
  287. package/template/.claude/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
  288. package/template/.codex/skills/yss-mybatis/assets/BaseRepository.java +0 -112
  289. package/template/.codex/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
  290. package/template/.codex/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
  291. package/template/.codex/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
  292. package/template/.codex/skills/yss-mybatis/references/README.md +0 -57
  293. package/template/.codex/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
  294. package/template/.cursor/skills/yss-mybatis/assets/BaseRepository.java +0 -112
  295. package/template/.cursor/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
  296. package/template/.cursor/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
  297. package/template/.cursor/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
  298. package/template/.cursor/skills/yss-mybatis/references/README.md +0 -57
  299. package/template/.cursor/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
  300. package/template/.pi/skills/yss-mybatis/assets/BaseRepository.java +0 -112
  301. package/template/.pi/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
  302. package/template/.pi/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
  303. package/template/.pi/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
  304. package/template/.pi/skills/yss-mybatis/references/README.md +0 -57
  305. package/template/.pi/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
  306. package/template/.qoder/skills/yss-mybatis/assets/BaseRepository.java +0 -112
  307. package/template/.qoder/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
  308. package/template/.qoder/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
  309. package/template/.qoder/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
  310. package/template/.qoder/skills/yss-mybatis/references/README.md +0 -57
  311. package/template/.qoder/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
  312. package/template/.trae/skills/yss-mybatis/assets/BaseRepository.java +0 -112
  313. package/template/.trae/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
  314. package/template/.trae/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
  315. package/template/.trae/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
  316. package/template/.trae/skills/yss-mybatis/references/README.md +0 -57
  317. package/template/.trae/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
@@ -1,24 +1,394 @@
1
1
  #!/usr/bin/env node
2
+ import { createHash } from "node:crypto";
2
3
  import { execFileSync } from "node:child_process";
3
- import { access, mkdir, readdir, writeFile } from "node:fs/promises";
4
+ import { access, mkdir, readFile, readdir, writeFile } from "node:fs/promises";
4
5
  import os from "node:os";
5
6
  import path from "node:path";
6
7
  import { fileURLToPath } from "node:url";
7
8
 
8
- const BACKEND = {"yss-cache":["yss-microservice-components/yss-component-cache-parent"],"yss-mybatis":["yss-microservice-components/yss-component-persistence"],"yss-dto":["yss-microservice-components/yss-component-dto"],"yss-audit-log":["yss-microservice-components/yss-component-audit-log"],"yss-excel-mvc":["yss-microservice-components/yss-component-excel-mvc","yss-microservice-components/yss-component-excel-starter"],"yss-distributed-id":["yss-microservice-components/yss-component-distributed-id","yss-microservice-components/yss-component-leaf"],"yss-resilience4j":["yss-microservice-components/yss-component-resilience4j-starter"],"yss-validation":["yss-microservice-components/yss-component-validation-engine-parent","yss-microservice-components/yss-component-validation-jsr303"],"yss-security-algorithm":["yss-microservice-components/yss-component-security-algorithm"],"yss-userinfo":["yss-microservice-components/yss-component-userinfo-starter"],"yss-exception":["yss-microservice-components/yss-component-exception"]};
9
- const FRONTEND={"yss-ui":["components","hooks","skills"],"yss-components":["components"],"yss-hook":["hooks"],"yss-ui-business-page-generation":["components","hooks","skills"],"yss-use-table-height":["hooks"],"yss-use-tree-height":["hooks"]};
10
- const URLS={components:"http://192.168.164.27:3200/components",hooks:"http://192.168.164.27:3200/hooks",skills:"http://192.168.164.27:3200/skills"};
11
- const KEYS=["Audit","Cache","Clear","Command","Configuration","Controller","DTO","Data","Enable","Excel","Handler","Interceptor","Jdbc","Mapper","Mybatis","Page","Properties","Query","Repository","Request","Response","Result","Update","Aspect","Leaf","Id","Dir","Dic","Dictionary","File","Upload","Log","Message","Mail","Liquibase","Circuit","Breaker","Sql","Tpl","Tag","Task","Flow","Report","Validation","Validator","Security","Crypto","User","Variable","Quality","Search","Similarity","Scheduler","Runner","Duck","Dynamic","Factory","Client","Feign","Gateway","Convertor","Adapter","Advice","Bridge","Route","Uploader","Sftp","Minio","Parser","Express","Rule","Template","Generator","Importer","Engine","Event","Submitter","Executor","Context","Status","Type","State"];
12
- const DOCS=new Set(["README.md","readme.md","HELP.md","TECHNICAL_DESIGN.md"]);
13
- const exists=async p=>{try{await access(p);return true}catch{return false}};
14
- async function walk(root){if(!await exists(root))return[];const out=[];for(const item of await readdir(root,{withFileTypes:true})){const p=path.join(root,item.name);if(item.isDirectory())out.push(...await walk(p));else if(item.isFile())out.push(p)}return out}
15
- const relative=(root,p)=>{const value=path.relative(root,p);return value&&!value.startsWith("..")?value:p};
16
- function state(root){try{const run=args=>execFileSync("git",["-C",root,...args],{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim();return[run(["rev-parse","HEAD"]),run(["status","--porcelain"])?"dirty":"clean"]}catch{return["unavailable","unknown"]}}
17
- async function sourceRoot(){if(process.env.YSS_SOURCE_ROOT){const root=path.resolve(process.env.YSS_SOURCE_ROOT);if(await exists(path.join(root,"yss-microservice-components")))return root;throw new Error(`YSS_SOURCE_ROOT must point to the repository root containing \`yss-microservice-components\`: ${root}`)}const home=os.homedir(),candidates=[process.cwd(),...ancestors(process.cwd()),path.join(home,"Documents/yss-project/yss-cloud-microservice"),path.join(home,"Documents/yss-project"),path.join(home,"Projects/yss-cloud-microservice"),path.join(home,"Projects")];for(const base of [path.join(home,"Projects"),path.join(home,"Documents"),path.join(home,"Documents/yss-project")])if(await exists(base))for(const entry of await readdir(base,{withFileTypes:true}))if(entry.isDirectory())candidates.push(path.join(base,entry.name));for(const root of candidates)if(await exists(path.join(root,"yss-microservice-components")))return path.resolve(root);throw new Error("Could not find a YSS source repository containing `yss-microservice-components`. Export YSS_SOURCE_ROOT=/absolute/path/to/yss-cloud-microservice and rerun.")}
18
- function ancestors(start){const out=[];let current=path.resolve(start);while(path.dirname(current)!==current){current=path.dirname(current);out.push(current)}return out}
19
- async function files(bases){const out={docs:[],poms:[],java:[]};for(const base of bases)for(const p of await walk(base)){if(DOCS.has(path.basename(p)))out.docs.push(p);else if(path.basename(p)==="pom.xml")out.poms.push(p);else if(p.endsWith(".java")&&p.includes(`${path.sep}src${path.sep}main${path.sep}java${path.sep}`))out.java.push(p)}for(const a of Object.values(out))a.sort();return out}
20
- export async function refresh({skillsRoot,source,now=new Date().toISOString(),frontend=true}){const [commit,worktree]=state(source);for(const [skill,parts]of Object.entries(BACKEND)){const bases=parts.map(item=>path.join(source,item));const found=await files(bases);const java=found.java.filter(p=>KEYS.some(key=>path.basename(p,".java").includes(key))).slice(0,120);const list=(items,map,empty)=>items.length?items.map(map):[empty];const baseHints=await Promise.all(bases.map(async p=>`- \`${relative(source,p)}\` (${await exists(p)?"existed":"missing"} when indexed)`));const lines=[`# ${skill} Source Index`,``,`Generated: ${now}`,`Source commit: \`${commit}\``,`Source worktree: \`${worktree}\``,`Indexed source root: resolved at refresh time; set \`YSS_SOURCE_ROOT\` to reproduce or refresh.`,``,`This file is generated by \`yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs\`. Do not hand-edit generated sections.`,``,`Paths below are source path hints captured at refresh time. If they do not exist in the current workspace, locate sources using \`YSS_SOURCE_ROOT\`, CodeGraph, package/class names, Maven artifact names, or repository search before assuming the source is unavailable.`,``,`## Component Path Hints`,``,...baseHints,``,`## Documentation Files`,``,...list(found.docs,p=>`- \`${relative(source,p)}\``,"- No component documentation files found."),``,`## Maven Modules`,``,...list(found.poms,p=>`- \`${relative(source,path.dirname(p))}\``,"- No Maven modules found."),``,`## Key Java Entry Points`,``,...list(java,p=>`- \`${relative(source,p)}\``,"- No key Java entry points matched the configured name patterns."),``,`## Recommended Next Reads`,``,`- Start with the documentation files above when learning component usage.`,`- Search the key Java entry points for annotations, auto configuration, properties, aspects, interceptors, handlers, and result objects before changing application code.`,`- Prefer existing component extension points over rewriting framework logic in business modules.`,``];const target=path.join(skillsRoot,skill,"references","source-index.md");await mkdir(path.dirname(target),{recursive:true});await writeFile(target,lines.join("\n"),"utf8")}
21
- if(frontend)for(const[skill,keys]of Object.entries(FRONTEND)){if(!await exists(path.join(skillsRoot,skill)))continue;const target=path.join(skillsRoot,skill,"references","frontend-docs.md");await mkdir(path.dirname(target),{recursive:true});await writeFile(target,[`# ${skill} Frontend Documentation`,``,`Generated: ${now}`,``,`Use these YSS UI documentation entry points as authoritative references when local repo examples are insufficient.`,``,...keys.map(key=>`- ${key}: ${URLS[key]}`),``,`When documentation and local code differ, inspect the current project code before editing and prefer established local usage.`,``].join("\n"),"utf8")}
22
- return{backend:Object.keys(BACKEND).length,frontend:frontend?Object.keys(FRONTEND).length:0}}
23
- async function main(){try{const script=path.dirname(fileURLToPath(import.meta.url));const result=await refresh({skillsRoot:path.resolve(process.env.YSS_SKILLS_ROOT||path.join(script,"../..")),source:await sourceRoot(),frontend:!["0","false","no"].includes((process.env.YSS_REFRESH_FRONTEND||"true").toLowerCase())});console.log(`Updated ${result.backend} backend indexes and ${result.frontend} frontend doc references.`)}catch(error){console.error(error.message);process.exitCode=1}}
24
- if(process.argv[1]===fileURLToPath(import.meta.url))await main();
9
+ const BACKEND = {
10
+ "yss-cache": ["yss-microservice-components/yss-component-cache-parent"],
11
+ "yss-mybatis": ["yss-microservice-components/yss-component-persistence"],
12
+ "yss-dto": ["yss-microservice-components/yss-component-dto"],
13
+ "yss-audit-log": ["yss-microservice-components/yss-component-audit-log"],
14
+ "yss-excel-mvc": [
15
+ "yss-microservice-components/yss-component-excel-mvc",
16
+ "yss-microservice-components/yss-component-excel-starter",
17
+ ],
18
+ "yss-distributed-id": [
19
+ "yss-microservice-components/yss-component-distributed-id",
20
+ "yss-microservice-components/yss-component-leaf",
21
+ ],
22
+ "yss-resilience4j": ["yss-microservice-components/yss-component-resilience4j-starter"],
23
+ "yss-validation": [
24
+ "yss-microservice-components/yss-component-validation-engine-parent",
25
+ "yss-microservice-components/yss-component-validation-jsr303",
26
+ ],
27
+ "yss-security-algorithm": ["yss-microservice-components/yss-component-security-algorithm"],
28
+ "yss-userinfo": ["yss-microservice-components/yss-component-userinfo-starter"],
29
+ "yss-exception": ["yss-microservice-components/yss-component-exception"],
30
+ };
31
+
32
+ const FRONTEND = {
33
+ "yss-ui": ["components", "hooks", "skills"],
34
+ "yss-components": ["components"],
35
+ "yss-hook": ["hooks"],
36
+ "yss-ui-business-page-generation": ["components", "hooks", "skills"],
37
+ "yss-use-table-height": ["hooks"],
38
+ "yss-use-tree-height": ["hooks"],
39
+ };
40
+
41
+ const URLS = {
42
+ components: "http://192.168.164.27:3200/components",
43
+ hooks: "http://192.168.164.27:3200/hooks",
44
+ skills: "http://192.168.164.27:3200/skills",
45
+ };
46
+
47
+ const KEYS = [
48
+ "Audit", "Cache", "Clear", "Command", "Configuration", "Controller", "DTO", "Data", "Enable", "Excel",
49
+ "Handler", "Interceptor", "Jdbc", "Mapper", "Mybatis", "Page", "Properties", "Query", "Repository", "Request",
50
+ "Response", "Result", "Update", "Aspect", "Leaf", "Id", "Dir", "Dic", "Dictionary", "File", "Upload", "Log",
51
+ "Message", "Mail", "Liquibase", "Circuit", "Breaker", "Sql", "Tpl", "Tag", "Task", "Flow", "Report",
52
+ "Validation", "Validator", "Security", "Crypto", "User", "Variable", "Quality", "Search", "Similarity",
53
+ "Scheduler", "Runner", "Duck", "Dynamic", "Factory", "Client", "Feign", "Gateway", "Convertor", "Adapter",
54
+ "Advice", "Bridge", "Route", "Uploader", "Sftp", "Minio", "Parser", "Express", "Rule", "Template", "Generator",
55
+ "Importer", "Engine", "Event", "Submitter", "Executor", "Context", "Status", "Type", "State",
56
+ ];
57
+
58
+ const DOCS = new Set(["README.md", "readme.md", "HELP.md", "TECHNICAL_DESIGN.md"]);
59
+ const SKIPPED_DIRECTORIES = new Set([".git", "node_modules", "target", "build", "out", "${project.build.directory}"]);
60
+
61
+ const MYBATIS_CAPABILITIES = [
62
+ {
63
+ title: "Repository abstractions",
64
+ sources: [
65
+ {
66
+ suffix: "/support/BaseRepository.java",
67
+ patterns: [/public interface BaseRepository/, /int (insert|insertSelective|insertList|updateList|updateListSelective)\(/],
68
+ },
69
+ {
70
+ suffix: "/support/BasePlusRepository.java",
71
+ patterns: [/public interface BasePlusRepository/, /insertBatchSomeColumn/],
72
+ },
73
+ ],
74
+ },
75
+ {
76
+ title: "Pagination and activation",
77
+ sources: [
78
+ { suffix: "/aop/EntityQueryAspect.java", patterns: [/@Around\(/, /PageHelper\.offsetPage/] },
79
+ { suffix: "/config/PageQueryEntityConfigration.java", patterns: [/@ConditionalOnProperty/] },
80
+ {
81
+ suffix: "/YssMybatisMapperProperties.java",
82
+ patterns: [
83
+ /@ConfigurationProperties/,
84
+ /private (String mapperLocation|String mapperScan|Integer batchSize|String dbType|PageHelper pageHelper|MybatisPlusPagination mybatisPlusPagination)/,
85
+ /public static class (PageHelper|MybatisPlusPagination)/,
86
+ /private Boolean enabled/,
87
+ ],
88
+ },
89
+ {
90
+ suffix: "/config/MapperConfiguration.java",
91
+ patterns: [/new PageInterceptor\(/, /new PaginationInnerInterceptor\(/, /setBatchSize\(/, /setDbType\(/],
92
+ },
93
+ ],
94
+ },
95
+ {
96
+ title: "SQL-level batch insertion",
97
+ sources: [
98
+ { suffix: "/config/BatchInsertSettings.java", patterns: [/DEFAULT_BATCH_SIZE/, /configuredBatchSize/] },
99
+ { suffix: "/config/BatchSqlInjector.java", patterns: [/public class BatchSqlInjector/, /insertBatchSomeColumnInternal/, /FieldFill\.UPDATE/] },
100
+ { suffix: "/config/DialectInsertBatchSomeColumn.java", patterns: [/public class DialectInsertBatchSomeColumn/, /DbType\.(ORACLE|ORACLE_12C|DM)/] },
101
+ ],
102
+ },
103
+ {
104
+ title: "Multi-data-source capability boundary",
105
+ sources: [
106
+ {
107
+ suffix: "/MultiDataSourceHolder.java",
108
+ patterns: [/public class MultiDataSourceHolder/, /Map<String, DataSource>/, /getMultiDataSource\(/],
109
+ },
110
+ ],
111
+ },
112
+ ];
113
+
114
+ const exists = async (target) => {
115
+ try {
116
+ await access(target);
117
+ return true;
118
+ } catch {
119
+ return false;
120
+ }
121
+ };
122
+
123
+ async function walk(root) {
124
+ if (!await exists(root)) return [];
125
+ const output = [];
126
+ for (const item of await readdir(root, { withFileTypes: true })) {
127
+ const target = path.join(root, item.name);
128
+ if (item.isDirectory() && !SKIPPED_DIRECTORIES.has(item.name)) output.push(...await walk(target));
129
+ else if (item.isFile()) output.push(target);
130
+ }
131
+ return output;
132
+ }
133
+
134
+ function relative(root, target) {
135
+ const value = path.relative(root, target).replaceAll(path.sep, "/");
136
+ return value && !value.startsWith("..") ? value : target;
137
+ }
138
+
139
+ function runGit(root, args) {
140
+ return execFileSync("git", ["-C", root, ...args], {
141
+ encoding: "utf8",
142
+ stdio: ["ignore", "pipe", "ignore"],
143
+ }).trim();
144
+ }
145
+
146
+ export function sourceState(root, componentPaths) {
147
+ try {
148
+ const commit = runGit(root, ["rev-parse", "HEAD"]);
149
+ const componentWorktree = runGit(root, ["status", "--porcelain", "--", ...componentPaths]) ? "dirty" : "clean";
150
+ const componentTrees = componentPaths.map((componentPath) => {
151
+ let tree = "missing";
152
+ try {
153
+ tree = runGit(root, ["rev-parse", `HEAD:${componentPath}`]);
154
+ } catch {
155
+ // The path can be newly added or absent in the indexed commit.
156
+ }
157
+ return { path: componentPath, tree };
158
+ });
159
+ return { commit, componentWorktree, componentTrees };
160
+ } catch {
161
+ return {
162
+ commit: "unavailable",
163
+ componentWorktree: "unknown",
164
+ componentTrees: componentPaths.map((componentPath) => ({ path: componentPath, tree: "unavailable" })),
165
+ };
166
+ }
167
+ }
168
+
169
+ async function sourceRoot() {
170
+ if (process.env.YSS_SOURCE_ROOT) {
171
+ const root = path.resolve(process.env.YSS_SOURCE_ROOT);
172
+ if (await exists(path.join(root, "yss-microservice-components"))) return root;
173
+ throw new Error(`YSS_SOURCE_ROOT must point to the repository root containing \`yss-microservice-components\`: ${root}`);
174
+ }
175
+
176
+ const home = os.homedir();
177
+ const candidates = [
178
+ process.cwd(),
179
+ ...ancestors(process.cwd()),
180
+ path.join(home, "Documents/yss-project/yss-cloud-microservice"),
181
+ path.join(home, "Documents/yss-project"),
182
+ path.join(home, "Projects/yss-cloud-microservice"),
183
+ path.join(home, "Projects"),
184
+ ];
185
+ for (const base of [path.join(home, "Projects"), path.join(home, "Documents"), path.join(home, "Documents/yss-project")]) {
186
+ if (!await exists(base)) continue;
187
+ for (const entry of await readdir(base, { withFileTypes: true })) {
188
+ if (entry.isDirectory()) candidates.push(path.join(base, entry.name));
189
+ }
190
+ }
191
+ for (const root of candidates) {
192
+ if (await exists(path.join(root, "yss-microservice-components"))) return path.resolve(root);
193
+ }
194
+ throw new Error("Could not find a YSS source repository containing `yss-microservice-components`. Export YSS_SOURCE_ROOT=/absolute/path/to/yss-cloud-microservice and rerun.");
195
+ }
196
+
197
+ function ancestors(start) {
198
+ const output = [];
199
+ let current = path.resolve(start);
200
+ while (path.dirname(current) !== current) {
201
+ current = path.dirname(current);
202
+ output.push(current);
203
+ }
204
+ return output;
205
+ }
206
+
207
+ async function files(bases) {
208
+ const output = { docs: [], poms: [], java: [], metadata: [] };
209
+ for (const base of bases) {
210
+ for (const target of await walk(base)) {
211
+ if (DOCS.has(path.basename(target))) output.docs.push(target);
212
+ else if (path.basename(target) === "pom.xml") output.poms.push(target);
213
+ else if (target.endsWith(".java") && target.includes(`${path.sep}src${path.sep}main${path.sep}java${path.sep}`)) output.java.push(target);
214
+ else if (path.basename(target) === "spring.factories") output.metadata.push(target);
215
+ }
216
+ }
217
+ for (const items of Object.values(output)) items.sort();
218
+ return output;
219
+ }
220
+
221
+ async function sha256(target) {
222
+ return createHash("sha256").update(await readFile(target)).digest("hex");
223
+ }
224
+
225
+ function list(items, render, empty) {
226
+ return items.length ? items.map(render) : [empty];
227
+ }
228
+
229
+ async function genericJavaEntries(source, javaFiles) {
230
+ const selected = javaFiles
231
+ .filter((target) => KEYS.some((key) => path.basename(target, ".java").includes(key)))
232
+ .slice(0, 120);
233
+ const output = [];
234
+ for (const target of selected) {
235
+ output.push(`- \`${relative(source, target)}\` — \`sha256:${await sha256(target)}\``);
236
+ }
237
+ return output.length ? output : ["- No key Java entry points matched the configured name patterns."];
238
+ }
239
+
240
+ function matchingLines(contents, patterns) {
241
+ return contents
242
+ .split(/\r?\n/)
243
+ .map((line, index) => ({ line: index + 1, text: line.trim().replace(/\s+/g, " ") }))
244
+ .filter(({ text }) => text && patterns.some((pattern) => pattern.test(text)))
245
+ .slice(0, 14);
246
+ }
247
+
248
+ async function mybatisCapabilityMatrix(source, javaFiles, metadataFiles) {
249
+ const output = ["## Capability Matrix", ""];
250
+ for (const capability of MYBATIS_CAPABILITIES) {
251
+ output.push(`### ${capability.title}`, "");
252
+ for (const expected of capability.sources) {
253
+ const target = javaFiles.find((candidate) => relative(source, candidate).endsWith(expected.suffix));
254
+ if (!target) {
255
+ output.push(`- \`${path.basename(expected.suffix)}\` — source not found.`);
256
+ continue;
257
+ }
258
+ const sourcePath = relative(source, target);
259
+ output.push(`- \`${sourcePath}\` — \`sha256:${await sha256(target)}\``);
260
+ const lines = matchingLines(await readFile(target, "utf8"), expected.patterns);
261
+ if (!lines.length) output.push(" - No configured public fact matched; refresh rules may need maintenance.");
262
+ else for (const fact of lines) output.push(` - \`${sourcePath}:${fact.line}\` — \`${fact.text.replaceAll("`", "'")}\``);
263
+ }
264
+ output.push("");
265
+ }
266
+
267
+ output.push("### Auto-configuration registration", "");
268
+ for (const target of metadataFiles) {
269
+ const sourcePath = relative(source, target);
270
+ output.push(`- \`${sourcePath}\` — \`sha256:${await sha256(target)}\``);
271
+ const registrations = (await readFile(target, "utf8"))
272
+ .split(/\r?\n/)
273
+ .map((line) => line.trim())
274
+ .filter((line) => line && !line.startsWith("#"));
275
+ for (const registration of registrations.slice(0, 12)) output.push(` - \`${registration.replaceAll("`", "'")}\``);
276
+ }
277
+ if (!metadataFiles.length) output.push("- No `spring.factories` registration found.");
278
+ output.push("");
279
+ return output;
280
+ }
281
+
282
+ async function backendIndex({ skill, parts, source, found, now, stateResolver }) {
283
+ const currentState = stateResolver(source, parts);
284
+ const bases = parts.map((item) => path.join(source, item));
285
+ const baseHints = await Promise.all(bases.map(async (target) =>
286
+ `- \`${relative(source, target)}\` (${await exists(target) ? "existed" : "missing"} when indexed)`,
287
+ ));
288
+ const treeLines = currentState.componentTrees.map(({ path: componentPath, tree }) =>
289
+ `Component tree \`${componentPath}\`: \`${tree}\``,
290
+ );
291
+ const lines = [
292
+ `# ${skill} Source Index`,
293
+ "",
294
+ `Generated: ${now}`,
295
+ `Source commit: \`${currentState.commit}\``,
296
+ `Component worktree: \`${currentState.componentWorktree}\``,
297
+ ...treeLines,
298
+ "Indexed source root: resolved at refresh time; set `YSS_SOURCE_ROOT` to reproduce or refresh.",
299
+ "",
300
+ "This file is generated by `yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs`. Do not hand-edit generated sections.",
301
+ "",
302
+ "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.",
303
+ "",
304
+ "## Component Path Hints",
305
+ "",
306
+ ...baseHints,
307
+ "",
308
+ "## Documentation Files",
309
+ "",
310
+ ...list(found.docs, (target) => `- \`${relative(source, target)}\``, "- No component documentation files found."),
311
+ "",
312
+ "Component documentation is a discovery aid. For API signatures, conditions and defaults, prefer the indexed source facts below when documentation differs.",
313
+ "",
314
+ "## Maven Modules",
315
+ "",
316
+ ...list(found.poms, (target) => `- \`${relative(source, path.dirname(target))}\``, "- No Maven modules found."),
317
+ "",
318
+ ];
319
+
320
+ if (skill === "yss-mybatis") lines.push(...await mybatisCapabilityMatrix(source, found.java, found.metadata));
321
+ else lines.push("## Key Java Entry Points", "", ...await genericJavaEntries(source, found.java), "");
322
+
323
+ lines.push(
324
+ "## Freshness and Use",
325
+ "",
326
+ "- Locate the current source root using `YSS_SOURCE_ROOT`, CodeGraph, Maven artifact names or repository search.",
327
+ "- Compare each indexed `Component tree` with `git rev-parse HEAD:<component-path>` and require the current component subtree to be clean before exact guidance.",
328
+ "- 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.",
329
+ "- Read only the source entries needed for the current decision or troubleshooting path.",
330
+ "",
331
+ );
332
+ return lines.join("\n");
333
+ }
334
+
335
+ export async function refresh({
336
+ skillsRoot,
337
+ source,
338
+ now = new Date().toISOString(),
339
+ frontend = true,
340
+ backendSkills = Object.keys(BACKEND),
341
+ stateResolver = sourceState,
342
+ }) {
343
+ const unknownSkills = backendSkills.filter((skill) => !(skill in BACKEND));
344
+ if (unknownSkills.length) throw new Error(`Unknown backend source-index skill: ${unknownSkills.join(", ")}`);
345
+ for (const skill of backendSkills) {
346
+ const parts = BACKEND[skill];
347
+ const bases = parts.map((item) => path.join(source, item));
348
+ const found = await files(bases);
349
+ const target = path.join(skillsRoot, skill, "references", "source-index.md");
350
+ await mkdir(path.dirname(target), { recursive: true });
351
+ await writeFile(target, await backendIndex({ skill, parts, source, found, now, stateResolver }), "utf8");
352
+ }
353
+
354
+ if (frontend) {
355
+ for (const [skill, keys] of Object.entries(FRONTEND)) {
356
+ if (!await exists(path.join(skillsRoot, skill))) continue;
357
+ const target = path.join(skillsRoot, skill, "references", "frontend-docs.md");
358
+ await mkdir(path.dirname(target), { recursive: true });
359
+ await writeFile(target, [
360
+ `# ${skill} Frontend Documentation`,
361
+ "",
362
+ `Generated: ${now}`,
363
+ "",
364
+ "Use these YSS UI documentation entry points as authoritative references when local repo examples are insufficient.",
365
+ "",
366
+ ...keys.map((key) => `- ${key}: ${URLS[key]}`),
367
+ "",
368
+ "When documentation and local code differ, inspect the current project code before editing and prefer established local usage.",
369
+ "",
370
+ ].join("\n"), "utf8");
371
+ }
372
+ }
373
+ return { backend: backendSkills.length, frontend: frontend ? Object.keys(FRONTEND).length : 0 };
374
+ }
375
+
376
+ async function main() {
377
+ try {
378
+ const script = path.dirname(fileURLToPath(import.meta.url));
379
+ const result = await refresh({
380
+ skillsRoot: path.resolve(process.env.YSS_SKILLS_ROOT || path.join(script, "../..")),
381
+ source: await sourceRoot(),
382
+ frontend: !["0", "false", "no"].includes((process.env.YSS_REFRESH_FRONTEND || "true").toLowerCase()),
383
+ backendSkills: process.env.YSS_REFRESH_BACKEND_SKILLS
384
+ ? process.env.YSS_REFRESH_BACKEND_SKILLS.split(",").map((skill) => skill.trim()).filter(Boolean)
385
+ : Object.keys(BACKEND),
386
+ });
387
+ console.log(`Updated ${result.backend} backend indexes and ${result.frontend} frontend doc references.`);
388
+ } catch (error) {
389
+ console.error(error.message);
390
+ process.exitCode = 1;
391
+ }
392
+ }
393
+
394
+ if (process.argv[1] === fileURLToPath(import.meta.url)) await main();
@@ -1,9 +1,10 @@
1
1
  import assert from "node:assert/strict";
2
+ import { execFileSync } from "node:child_process";
2
3
  import { mkdir, mkdtemp, readFile, writeFile } from "node:fs/promises";
3
4
  import { tmpdir } from "node:os";
4
5
  import path from "node:path";
5
6
  import test from "node:test";
6
- import { refresh } from "./refresh-yss-skill-index.mjs";
7
+ import { refresh, sourceState } from "./refresh-yss-skill-index.mjs";
7
8
 
8
9
  test("writes Node-labelled generated indexes", async () => {
9
10
  const root=await mkdtemp(path.join(tmpdir(),"yss-index-")); const source=path.join(root,"source"); const skills=path.join(root,"skills");
@@ -13,3 +14,80 @@ test("writes Node-labelled generated indexes", async () => {
13
14
  assert.match(await readFile(path.join(skills,"yss-cache/references/source-index.md"),"utf8"),/refresh-yss-skill-index\.mjs/);
14
15
  assert.match(await readFile(path.join(skills,"yss-ui/references/frontend-docs.md"),"utf8"),/components/);
15
16
  });
17
+
18
+ test("writes a source-backed MyBatis capability matrix without absolute paths", async () => {
19
+ const root = await mkdtemp(path.join(tmpdir(), "yss-mybatis-index-"));
20
+ const source = path.join(root, "source");
21
+ const skills = path.join(root, "skills");
22
+ const component = "yss-microservice-components/yss-component-persistence";
23
+ const plusJava = path.join(source, component, "yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis");
24
+ const baseJava = path.join(source, component, "yss-component-mybatis-starter/src/main/java/com/yss/cloud/mybatis");
25
+ const commonJava = path.join(source, component, "yss-component-persistence-common/src/main/java/com/yss/cloud/mybatis");
26
+
27
+ await mkdir(path.join(plusJava, "support"), { recursive: true });
28
+ await mkdir(path.join(baseJava, "config"), { recursive: true });
29
+ await mkdir(commonJava, { recursive: true });
30
+ await mkdir(path.join(skills, "yss-mybatis"), { recursive: true });
31
+ await writeFile(path.join(source, component, "pom.xml"), "<project/>");
32
+ await writeFile(path.join(plusJava, "support/BasePlusRepository.java"), [
33
+ "public interface BasePlusRepository<T> extends BaseMapper<T> {",
34
+ " default Integer insertBatchSomeColumn(List<T> entities) { return 0; }",
35
+ " Integer insertBatchSomeColumnInternal(List<T> entities);",
36
+ "}",
37
+ ].join("\n"));
38
+ await writeFile(path.join(baseJava, "config/PageQueryEntityConfigration.java"), [
39
+ "public class PageQueryEntityConfigration {",
40
+ " @ConditionalOnProperty(name = \"yss.mybatis.page-helper.enabled\", havingValue = \"true\", matchIfMissing = true)",
41
+ "}",
42
+ ].join("\n"));
43
+ await writeFile(path.join(commonJava, "MultiDataSourceHolder.java"), [
44
+ "public class MultiDataSourceHolder {",
45
+ " private Map<String, DataSource> multiDataSource;",
46
+ "}",
47
+ ].join("\n"));
48
+
49
+ await refresh({
50
+ skillsRoot: skills,
51
+ source,
52
+ now: "2026-01-01T00:00:00Z",
53
+ frontend: false,
54
+ backendSkills: ["yss-mybatis"],
55
+ stateResolver: () => ({
56
+ commit: "a".repeat(40),
57
+ componentWorktree: "clean",
58
+ componentTrees: [{ path: component, tree: "b".repeat(40) }],
59
+ }),
60
+ });
61
+
62
+ const index = await readFile(path.join(skills, "yss-mybatis/references/source-index.md"), "utf8");
63
+ assert.match(index, /## Capability Matrix/);
64
+ assert.match(index, /BasePlusRepository<T>/);
65
+ assert.match(index, /yss\.mybatis\.page-helper\.enabled/);
66
+ assert.match(index, /Map<String, DataSource>/);
67
+ assert.match(index, /Component worktree: `clean`/);
68
+ assert.match(index, /Component tree.*b{40}/);
69
+ assert.doesNotMatch(index, new RegExp(root.replaceAll("/", "\\/")));
70
+ assert.doesNotMatch(index, /## Key Java Entry Points/);
71
+ });
72
+
73
+ test("source freshness is scoped to the indexed component subtree", async () => {
74
+ const root = await mkdtemp(path.join(tmpdir(), "yss-component-state-"));
75
+ const component = "yss-microservice-components/yss-component-persistence";
76
+ const componentFile = path.join(root, component, "pom.xml");
77
+ const unrelatedFile = path.join(root, "yss-microservice-components/other/README.md");
78
+ await mkdir(path.dirname(componentFile), { recursive: true });
79
+ await mkdir(path.dirname(unrelatedFile), { recursive: true });
80
+ await writeFile(componentFile, "<project/>\n");
81
+ await writeFile(unrelatedFile, "clean\n");
82
+ execFileSync("git", ["init", "-q"], { cwd: root });
83
+ execFileSync("git", ["config", "user.email", "test@example.com"], { cwd: root });
84
+ execFileSync("git", ["config", "user.name", "Test"], { cwd: root });
85
+ execFileSync("git", ["add", "."], { cwd: root });
86
+ execFileSync("git", ["commit", "-qm", "fixture"], { cwd: root });
87
+
88
+ await writeFile(unrelatedFile, "dirty elsewhere\n");
89
+ assert.equal(sourceState(root, [component]).componentWorktree, "clean");
90
+
91
+ await writeFile(componentFile, "<project><dirty/></project>\n");
92
+ assert.equal(sourceState(root, [component]).componentWorktree, "dirty");
93
+ });
@@ -219,6 +219,7 @@ gate_policy:
219
219
  - gate.repository-identity-valid
220
220
  - gate.prototype-verified
221
221
  orchestrator:
222
+ - gate.implementation-repositories-ready
222
223
  - gate.slice-contract-approved
223
224
  - gate.slice-ready-for-agent
224
225
  digital_human_review:
@@ -275,6 +276,7 @@ user_decision_policy:
275
276
  work_units:
276
277
  work-unit.discovery-requirements: discovery-conclusion
277
278
  work-unit.service-project-initialization: scaffold-choice
279
+ work-unit.implementation-repository-preparation: scaffold-choice
278
280
  work-unit.slice-implementation: implementation-scope
279
281
  work-unit.release-and-retrospective: gate.release-ready
280
282
  work_unit_gates:
@@ -85,6 +85,7 @@ capabilities:
85
85
  - { id: component.gateway-resilience, primary_skill: yss-resilience4j, task_modes: [guidance, integration, slice-implementation, troubleshooting, component-maintenance, review-input] }
86
86
  - { id: scaffold.ddd, primary_skill: yss-ddd-scaffold-generator, task_modes: [integration, component-maintenance] }
87
87
  - { id: scaffold.layered-mvc, primary_skill: yss-layered-mvc-scaffold-generator, task_modes: [integration, component-maintenance] }
88
+ - { id: scaffold.frontend-vue3, primary_skill: yss-frontend-scaffold-generator, task_modes: [integration, component-maintenance] }
88
89
  - { id: project-init.mvc-data-analysis, primary_skill: yss-mvc-data-analysis-project-initializer, task_modes: [component-maintenance] }
89
90
  - { id: migration.springboot3, primary_skill: yss-up-springboot3, task_modes: [guidance, integration, troubleshooting, component-maintenance, review-input] }
90
91
  recipes:
@@ -106,8 +107,12 @@ recipes:
106
107
  - { id: backend.distributed-id, capabilities: [component.distributed-id] }
107
108
  - { id: backend.ddd-scaffold, capabilities: [scaffold.ddd, quality.java-code-style] }
108
109
  - { id: backend.mvc-scaffold, capabilities: [scaffold.layered-mvc, quality.java-code-style] }
110
+ - { id: frontend.vue3-scaffold, capabilities: [scaffold.frontend-vue3] }
109
111
  - { id: backend.springboot3-migration, capabilities: [migration.springboot3, quality.java-code-style] }
110
112
  skill_dependencies:
113
+ code-review:
114
+ - { skill: yss-repository, type: context-conditional, when: backend-persistence-impact }
115
+ - { skill: yss-mybatis, type: context-conditional, when: backend-persistence-impact }
111
116
  yss-prototype-stage:
112
117
  - { skill: prototype-review, type: review-only }
113
118
  - { skill: yss-design-system, type: coordination-only }
@@ -39,6 +39,7 @@
39
39
  | `gate.openapi-frozen` | OpenAPI Freeze | `stage.system-data-engineering` | API 进入实现。 | 无 | `evidence.approval-record` |
40
40
  | `gate.engineering-baseline-accepted` | 工程基线 | `stage.system-data-engineering` | 后端、前端或高风险工程变化。 | 无 | `evidence.fresh-verification` |
41
41
  | `gate.architecture-reviewed` | 架构审查 | `stage.system-data-engineering` | 高风险或跨边界变化。 | 无 | `evidence.design-review-result` |
42
+ | `gate.implementation-repositories-ready` | 实现仓库准备就绪 | `stage.system-data-engineering` | 后端或前端交付面进入 Ticket 正式化;未命中的交付面须记录带原因的 not-applicable。 | `gate.engineering-baseline-accepted` | `evidence.implementation-repository-preparation`、`evidence.fresh-verification` |
42
43
  | `gate.slice-contract-approved` | Slice Implementation Contract 批准 | `stage.ticket-formalization` | Agent 进入实现;脚手架完成后每个后续生成代码工作单元。 | 无 | `evidence.contract-approval` |
43
44
  | `gate.slice-ready-for-agent` | 垂直切片实现就绪 | `stage.ticket-formalization` | 垂直切片具备直接实现条件。 | 无 | `evidence.contract-approval`、`evidence.approval-record` |
44
45
  | `gate.frontend-implementation-verified` | 前端实现还原验证 | `stage.verification-release-retrospective` | UI 影响切片完成实现并准备合并、发布或阶段完成。 | 无 | `evidence.frontend-implementation-verification` |
@@ -67,6 +68,8 @@
67
68
  | `artifact.engineering-baseline` | 工程基线记录 | `stage.system-data-engineering` | 后端、前端或高风险工程变化。 |
68
69
  | `artifact.architecture-review` | 架构审查记录 | `stage.system-data-engineering` | 高风险或跨边界变化。 |
69
70
  | `artifact.technical-design` | 技术设计合同 | `stage.system-data-engineering` | 后端技术设计需要按已确认 DDD 或 MVC 架构明确行为、分层、一致性或数据映射。 |
71
+ | `artifact.project-scaffold-contract` | Project Scaffold Contract | `stage.system-data-engineering` | 命中的前端或后端交付面选择初始化新工程。 |
72
+ | `artifact.implementation-repository-preparation-result` | 实现仓库准备结果 | `stage.system-data-engineering` | 后端或前端交付面进入 Ticket 正式化。 |
70
73
  | `artifact.tactical-design` | DDD 战术设计 | `stage.system-data-engineering` | 聚合边界、状态机、一致性或持久化映射复杂到无法在系统概要设计的 Tactical DDD Check 中清楚表达。 |
71
74
  | `artifact.spec-delta` | Spec Delta | `stage.spec-architecture` | 已有冻结 Spec 的高风险行为变化。 |
72
75
  | `artifact.parent-ticket` | 功能父 Ticket | `stage.ticket-formalization` | 每个进入追踪的功能。 |
@@ -101,6 +104,7 @@
101
104
  | `evidence.yss-skill-execution-result` | YSS Skill Execution Result | 专项 skill 的合同版本、写入、验证、延期 seam 与偏离证据。 |
102
105
  | `evidence.frontend-implementation-verification` | 前端实现还原验证证据 | UI 实现相对冻结原型和 Spec 的桌面/窄屏视觉、状态、交互、控制台与 pnpm 验证记录。 |
103
106
  | `evidence.fresh-verification` | Fresh Verification 记录 | 本轮实际执行的验证命令、结果和时间。 |
107
+ | `evidence.implementation-repository-preparation` | 实现仓库准备证据 | 按项目记录交付面、已有仓库接入或新脚手架合同、生成清单、实际验证结果、仓库位置、Git 边界和当前版本。 |
104
108
  | `evidence.checkpoint-and-rollback` | Checkpoint 与回滚点 | 可追溯的变更边界、发布记录和恢复动作。 |
105
109
  <!-- lifecycle-registry:structure:end -->
106
110
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema_version": 1,
3
3
  "registry_id": "yss.lifecycle",
4
- "semantic_sha256": "4eadc734957c5112dad60ec9fe4d844ac8790cbe798fbd8177ee60eae6dbe1fa",
4
+ "semantic_sha256": "68c053060bb837fe4bc2b40d7a6ffcea1a53fc6b5e6b929eb0858824c657a15d",
5
5
  "published_ids": [
6
6
  "artifact.architecture-review",
7
7
  "artifact.data-architecture",
@@ -13,12 +13,14 @@
13
13
  "artifact.functional-architecture",
14
14
  "artifact.high-fidelity-html-prototype",
15
15
  "artifact.impact-assessment",
16
+ "artifact.implementation-repository-preparation-result",
16
17
  "artifact.interaction-spec",
17
18
  "artifact.low-fidelity-prototype",
18
19
  "artifact.openapi-draft",
19
20
  "artifact.openapi-freeze-record",
20
21
  "artifact.parent-ticket",
21
22
  "artifact.product-overview",
23
+ "artifact.project-scaffold-contract",
22
24
  "artifact.prototype-confirmation",
23
25
  "artifact.prototype-deliverable",
24
26
  "artifact.prototype-review",
@@ -42,6 +44,7 @@
42
44
  "evidence.fresh-verification",
43
45
  "evidence.frontend-implementation-verification",
44
46
  "evidence.impact-assessment",
47
+ "evidence.implementation-repository-preparation",
45
48
  "evidence.maintenance-intensity-checkpoint",
46
49
  "evidence.openapi-draft-review",
47
50
  "evidence.prototype-confirmation",
@@ -59,6 +62,7 @@
59
62
  "gate.engineering-baseline-accepted",
60
63
  "gate.frontend-delivery-inputs-verified",
61
64
  "gate.frontend-implementation-verified",
65
+ "gate.implementation-repositories-ready",
62
66
  "gate.openapi-draft-reviewed",
63
67
  "gate.openapi-frozen",
64
68
  "gate.prototype-reviewed",
@@ -86,6 +90,7 @@
86
90
  "work-unit.entry-triage",
87
91
  "work-unit.fresh-verification",
88
92
  "work-unit.frontend-implementation-verification",
93
+ "work-unit.implementation-repository-preparation",
89
94
  "work-unit.independent-review",
90
95
  "work-unit.intensity-aware-review",
91
96
  "work-unit.intensity-aware-verification",