create-yss-spec 2.1.0 → 2.1.2

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 (278) hide show
  1. package/README.md +1 -1
  2. package/package.json +2 -2
  3. package/src/cli.js +2 -30
  4. package/src/template-hash.js +44 -0
  5. package/template/.agents/skills/cross-repo-implementation-routing/SKILL.md +4 -3
  6. package/template/.agents/skills/implementation-repo-onboarding/SKILL.md +4 -2
  7. package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +25 -5
  8. package/template/.agents/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  9. package/template/.agents/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +25 -36
  10. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +474 -258
  11. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +155 -0
  12. package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +2 -1
  13. package/template/.agents/skills/yss-product-lifecycle/SKILL.md +28 -0
  14. package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +70 -2
  15. package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +9 -0
  16. package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +2 -0
  17. package/template/.agents/skills/yss-router/SKILL.md +4 -0
  18. package/template/.agents/skills/yss-router/references/router-contract.yaml +48 -2
  19. package/template/.agents/skills/yss-router/references/slice-implementation-contract.md +2 -0
  20. package/template/.agents/skills/yss-router/references/yss-skill-execution-result.md +1 -1
  21. package/template/.claude/skills/cross-repo-implementation-routing/SKILL.md +4 -3
  22. package/template/.claude/skills/implementation-repo-onboarding/SKILL.md +4 -2
  23. package/template/.claude/skills/yss-ddd-scaffold-generator/SKILL.md +25 -5
  24. package/template/.claude/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  25. package/template/.claude/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +25 -36
  26. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +474 -258
  27. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +155 -0
  28. package/template/.claude/skills/yss-frontend-scaffold-generator/SKILL.md +2 -1
  29. package/template/.claude/skills/yss-product-lifecycle/SKILL.md +28 -0
  30. package/template/.claude/skills/yss-product-lifecycle/references/orchestration-contract.yaml +70 -2
  31. package/template/.claude/skills/yss-product-lifecycle/references/orchestration.md +9 -0
  32. package/template/.claude/skills/yss-product-lifecycle/references/state-model.md +2 -0
  33. package/template/.claude/skills/yss-router/SKILL.md +4 -0
  34. package/template/.claude/skills/yss-router/references/router-contract.yaml +48 -2
  35. package/template/.claude/skills/yss-router/references/slice-implementation-contract.md +2 -0
  36. package/template/.claude/skills/yss-router/references/yss-skill-execution-result.md +1 -1
  37. package/template/.codex/skills/cross-repo-implementation-routing/SKILL.md +4 -3
  38. package/template/.codex/skills/implementation-repo-onboarding/SKILL.md +4 -2
  39. package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +25 -5
  40. package/template/.codex/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  41. package/template/.codex/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +25 -36
  42. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +474 -258
  43. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +155 -0
  44. package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +2 -1
  45. package/template/.codex/skills/yss-product-lifecycle/SKILL.md +28 -0
  46. package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +70 -2
  47. package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +9 -0
  48. package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +2 -0
  49. package/template/.codex/skills/yss-router/SKILL.md +4 -0
  50. package/template/.codex/skills/yss-router/references/router-contract.yaml +48 -2
  51. package/template/.codex/skills/yss-router/references/slice-implementation-contract.md +2 -0
  52. package/template/.codex/skills/yss-router/references/yss-skill-execution-result.md +1 -1
  53. package/template/.hermes/skills/cross-repo-implementation-routing/SKILL.md +4 -3
  54. package/template/.hermes/skills/implementation-repo-onboarding/SKILL.md +4 -2
  55. package/template/.hermes/skills/yss-ddd-scaffold-generator/SKILL.md +25 -5
  56. package/template/.hermes/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  57. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +25 -36
  58. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +474 -258
  59. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +155 -0
  60. package/template/.hermes/skills/yss-frontend-scaffold-generator/SKILL.md +2 -1
  61. package/template/.hermes/skills/yss-product-lifecycle/SKILL.md +28 -0
  62. package/template/.hermes/skills/yss-product-lifecycle/references/orchestration-contract.yaml +70 -2
  63. package/template/.hermes/skills/yss-product-lifecycle/references/orchestration.md +9 -0
  64. package/template/.hermes/skills/yss-product-lifecycle/references/state-model.md +2 -0
  65. package/template/.hermes/skills/yss-router/SKILL.md +4 -0
  66. package/template/.hermes/skills/yss-router/references/router-contract.yaml +48 -2
  67. package/template/.hermes/skills/yss-router/references/slice-implementation-contract.md +2 -0
  68. package/template/.hermes/skills/yss-router/references/yss-skill-execution-result.md +1 -1
  69. package/template/.pi/skills/cross-repo-implementation-routing/SKILL.md +4 -3
  70. package/template/.pi/skills/implementation-repo-onboarding/SKILL.md +4 -2
  71. package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +25 -5
  72. package/template/.pi/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  73. package/template/.pi/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +25 -36
  74. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +474 -258
  75. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +155 -0
  76. package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +2 -1
  77. package/template/.pi/skills/yss-product-lifecycle/SKILL.md +28 -0
  78. package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +70 -2
  79. package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +9 -0
  80. package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +2 -0
  81. package/template/.pi/skills/yss-router/SKILL.md +4 -0
  82. package/template/.pi/skills/yss-router/references/router-contract.yaml +48 -2
  83. package/template/.pi/skills/yss-router/references/slice-implementation-contract.md +2 -0
  84. package/template/.pi/skills/yss-router/references/yss-skill-execution-result.md +1 -1
  85. package/template/.qoder/skills/cross-repo-implementation-routing/SKILL.md +4 -3
  86. package/template/.qoder/skills/implementation-repo-onboarding/SKILL.md +4 -2
  87. package/template/.qoder/skills/yss-ddd-scaffold-generator/SKILL.md +25 -5
  88. package/template/.qoder/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  89. package/template/.qoder/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +25 -36
  90. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +474 -258
  91. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +155 -0
  92. package/template/.qoder/skills/yss-frontend-scaffold-generator/SKILL.md +2 -1
  93. package/template/.qoder/skills/yss-product-lifecycle/SKILL.md +28 -0
  94. package/template/.qoder/skills/yss-product-lifecycle/references/orchestration-contract.yaml +70 -2
  95. package/template/.qoder/skills/yss-product-lifecycle/references/orchestration.md +9 -0
  96. package/template/.qoder/skills/yss-product-lifecycle/references/state-model.md +2 -0
  97. package/template/.qoder/skills/yss-router/SKILL.md +4 -0
  98. package/template/.qoder/skills/yss-router/references/router-contract.yaml +48 -2
  99. package/template/.qoder/skills/yss-router/references/slice-implementation-contract.md +2 -0
  100. package/template/.qoder/skills/yss-router/references/yss-skill-execution-result.md +1 -1
  101. package/template/.trae/skills/cross-repo-implementation-routing/SKILL.md +4 -3
  102. package/template/.trae/skills/implementation-repo-onboarding/SKILL.md +4 -2
  103. package/template/.trae/skills/yss-ddd-scaffold-generator/SKILL.md +25 -5
  104. package/template/.trae/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  105. package/template/.trae/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +25 -36
  106. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +474 -258
  107. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +155 -0
  108. package/template/.trae/skills/yss-frontend-scaffold-generator/SKILL.md +2 -1
  109. package/template/.trae/skills/yss-product-lifecycle/SKILL.md +28 -0
  110. package/template/.trae/skills/yss-product-lifecycle/references/orchestration-contract.yaml +70 -2
  111. package/template/.trae/skills/yss-product-lifecycle/references/orchestration.md +9 -0
  112. package/template/.trae/skills/yss-product-lifecycle/references/state-model.md +2 -0
  113. package/template/.trae/skills/yss-router/SKILL.md +4 -0
  114. package/template/.trae/skills/yss-router/references/router-contract.yaml +48 -2
  115. package/template/.trae/skills/yss-router/references/slice-implementation-contract.md +2 -0
  116. package/template/.trae/skills/yss-router/references/yss-skill-execution-result.md +1 -1
  117. package/template/AGENTS.md +12 -8
  118. package/template/docs/architecture/templates/engineering-baseline-review-template.md +14 -0
  119. package/template/docs/process/implementation-repo-integration.md +17 -0
  120. package/template/docs/process/lifecycle-artifact-map.md +3 -3
  121. package/template/docs/templates/build-architecture-checklist-template.md +7 -1
  122. package/template/docs/templates/cross-repo-slice-template.md +2 -0
  123. package/template/docs/templates/implementation-repo-registry-template.md +14 -0
  124. package/template/docs/templates/implementation-routing-template.md +35 -6
  125. package/template/docs/user-guide//344/272/247/345/223/201/347/224/237/345/221/275/345/221/250/346/234/237/345/267/245/344/275/234/346/265/201.md +4 -3
  126. package/template/docs/user-guide//347/224/237/345/221/275/345/221/250/346/234/237/346/234/200/344/275/263/345/256/236/350/267/265.md +10 -2
  127. package/template/scripts/implementation-path-policy.rb +50 -0
  128. package/template/scripts/sync-skills +5 -0
  129. package/template/scripts/update-skill-lock +7 -1
  130. package/template/scripts/verify-implementation-path-scenarios +43 -0
  131. package/template/scripts/verify-lifecycle-scenarios +18 -0
  132. package/template/scripts/verify-matt-yss-integration-scenarios +1 -1
  133. package/template/scripts/verify-prototype-backend-scaffold-scenarios +239 -0
  134. package/template/scripts/verify-scaffold-generator-scenarios +438 -0
  135. package/template/scripts/verify-template +11 -0
  136. package/template/scripts/verify-yss-router-scenarios +76 -23
  137. package/template/skills-lock.json +6 -6
  138. package/template.snapshot.json +4 -4
  139. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/adapter/UserController.java.template +0 -84
  140. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/application/UserConvertor.java.template +0 -21
  141. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/application/UserService.java.template +0 -48
  142. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/application/UserServiceImpl.java.template +0 -87
  143. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/bootstrap/YssDatamiddleApplication.java.template +0 -28
  144. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/config/data.sql.template +0 -2
  145. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/config/schema.sql.template +0 -27
  146. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/domain/User.java.template +0 -17
  147. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserAddCmd.java.template +0 -27
  148. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserGateway.java.template +0 -54
  149. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserPageQuery.java.template +0 -12
  150. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserUpdateCmd.java.template +0 -21
  151. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserVO.java.template +0 -52
  152. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/AuditableEntity.java.template +0 -25
  153. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/PageUtil.java.template +0 -13
  154. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserGatewayImpl.java.template +0 -85
  155. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPO.java.template +0 -35
  156. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPOConvertor.java.template +0 -28
  157. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserRepository.java.template +0 -7
  158. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/YssDataMybatisConfig.java.template +0 -8
  159. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/adapter/UserController.java.template +0 -84
  160. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/application/UserConvertor.java.template +0 -21
  161. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/application/UserService.java.template +0 -48
  162. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/application/UserServiceImpl.java.template +0 -87
  163. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/bootstrap/YssDatamiddleApplication.java.template +0 -28
  164. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/config/data.sql.template +0 -2
  165. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/config/schema.sql.template +0 -27
  166. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/domain/User.java.template +0 -17
  167. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserAddCmd.java.template +0 -27
  168. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserGateway.java.template +0 -54
  169. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserPageQuery.java.template +0 -12
  170. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserUpdateCmd.java.template +0 -21
  171. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserVO.java.template +0 -52
  172. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/AuditableEntity.java.template +0 -25
  173. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/PageUtil.java.template +0 -13
  174. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserGatewayImpl.java.template +0 -85
  175. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPO.java.template +0 -35
  176. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPOConvertor.java.template +0 -28
  177. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserRepository.java.template +0 -7
  178. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/YssDataMybatisConfig.java.template +0 -8
  179. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/adapter/UserController.java.template +0 -84
  180. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/application/UserConvertor.java.template +0 -21
  181. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/application/UserService.java.template +0 -48
  182. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/application/UserServiceImpl.java.template +0 -87
  183. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/bootstrap/YssDatamiddleApplication.java.template +0 -28
  184. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/config/data.sql.template +0 -2
  185. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/config/schema.sql.template +0 -27
  186. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/domain/User.java.template +0 -17
  187. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserAddCmd.java.template +0 -27
  188. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserGateway.java.template +0 -54
  189. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserPageQuery.java.template +0 -12
  190. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserUpdateCmd.java.template +0 -21
  191. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserVO.java.template +0 -52
  192. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/AuditableEntity.java.template +0 -25
  193. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/PageUtil.java.template +0 -13
  194. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserGatewayImpl.java.template +0 -85
  195. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPO.java.template +0 -35
  196. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPOConvertor.java.template +0 -28
  197. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserRepository.java.template +0 -7
  198. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/YssDataMybatisConfig.java.template +0 -8
  199. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/adapter/UserController.java.template +0 -84
  200. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/application/UserConvertor.java.template +0 -21
  201. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/application/UserService.java.template +0 -48
  202. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/application/UserServiceImpl.java.template +0 -87
  203. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/bootstrap/YssDatamiddleApplication.java.template +0 -28
  204. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/config/data.sql.template +0 -2
  205. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/config/schema.sql.template +0 -27
  206. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/domain/User.java.template +0 -17
  207. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserAddCmd.java.template +0 -27
  208. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserGateway.java.template +0 -54
  209. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserPageQuery.java.template +0 -12
  210. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserUpdateCmd.java.template +0 -21
  211. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserVO.java.template +0 -52
  212. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/AuditableEntity.java.template +0 -25
  213. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/PageUtil.java.template +0 -13
  214. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserGatewayImpl.java.template +0 -85
  215. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPO.java.template +0 -35
  216. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPOConvertor.java.template +0 -28
  217. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserRepository.java.template +0 -7
  218. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/YssDataMybatisConfig.java.template +0 -8
  219. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/adapter/UserController.java.template +0 -84
  220. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/application/UserConvertor.java.template +0 -21
  221. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/application/UserService.java.template +0 -48
  222. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/application/UserServiceImpl.java.template +0 -87
  223. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/bootstrap/YssDatamiddleApplication.java.template +0 -28
  224. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/config/data.sql.template +0 -2
  225. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/config/schema.sql.template +0 -27
  226. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/domain/User.java.template +0 -17
  227. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserAddCmd.java.template +0 -27
  228. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserGateway.java.template +0 -54
  229. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserPageQuery.java.template +0 -12
  230. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserUpdateCmd.java.template +0 -21
  231. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserVO.java.template +0 -52
  232. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/AuditableEntity.java.template +0 -25
  233. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/PageUtil.java.template +0 -13
  234. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserGatewayImpl.java.template +0 -85
  235. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPO.java.template +0 -35
  236. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPOConvertor.java.template +0 -28
  237. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserRepository.java.template +0 -7
  238. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/YssDataMybatisConfig.java.template +0 -8
  239. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/adapter/UserController.java.template +0 -84
  240. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/application/UserConvertor.java.template +0 -21
  241. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/application/UserService.java.template +0 -48
  242. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/application/UserServiceImpl.java.template +0 -87
  243. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/bootstrap/YssDatamiddleApplication.java.template +0 -28
  244. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/config/data.sql.template +0 -2
  245. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/config/schema.sql.template +0 -27
  246. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/domain/User.java.template +0 -17
  247. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserAddCmd.java.template +0 -27
  248. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserGateway.java.template +0 -54
  249. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserPageQuery.java.template +0 -12
  250. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserUpdateCmd.java.template +0 -21
  251. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserVO.java.template +0 -52
  252. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/AuditableEntity.java.template +0 -25
  253. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/PageUtil.java.template +0 -13
  254. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserGatewayImpl.java.template +0 -85
  255. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPO.java.template +0 -35
  256. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPOConvertor.java.template +0 -28
  257. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserRepository.java.template +0 -7
  258. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/YssDataMybatisConfig.java.template +0 -8
  259. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/adapter/UserController.java.template +0 -84
  260. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/application/UserConvertor.java.template +0 -21
  261. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/application/UserService.java.template +0 -48
  262. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/application/UserServiceImpl.java.template +0 -87
  263. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/bootstrap/YssDatamiddleApplication.java.template +0 -28
  264. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/config/data.sql.template +0 -2
  265. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/config/schema.sql.template +0 -27
  266. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/domain/User.java.template +0 -17
  267. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserAddCmd.java.template +0 -27
  268. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserGateway.java.template +0 -54
  269. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserPageQuery.java.template +0 -12
  270. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserUpdateCmd.java.template +0 -21
  271. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/domain/UserVO.java.template +0 -52
  272. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/AuditableEntity.java.template +0 -25
  273. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/PageUtil.java.template +0 -13
  274. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserGatewayImpl.java.template +0 -85
  275. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPO.java.template +0 -35
  276. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserPOConvertor.java.template +0 -28
  277. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/UserRepository.java.template +0 -7
  278. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/infrastructure/YssDataMybatisConfig.java.template +0 -8
@@ -6,6 +6,7 @@ require "rexml/document"
6
6
  require "rexml/xpath"
7
7
  require "time"
8
8
  require "yaml"
9
+ require_relative "implementation-path-policy"
9
10
 
10
11
  ROOT = Pathname.new(__dir__).join("..").realpath
11
12
  CONTRACT = YAML.safe_load(
@@ -137,6 +138,10 @@ def path_allowed_by?(path, allowed_paths)
137
138
  end
138
139
  end
139
140
 
141
+ def implementation_path_policy_valid?(path, policy = "harness-apps-multi-project")
142
+ YssImplementationPathPolicy.valid?(path, enforce_harness: policy == "harness-apps-multi-project")
143
+ end
144
+
140
145
  def dependency_closure(contract, primary_skills, conditions)
141
146
  result = primary_skills.dup
142
147
  loop do
@@ -192,6 +197,8 @@ def work_unit_violations(contract, fixture)
192
197
  violations << "#{prefix}.#{field}" unless value.is_a?(Array) && !value.empty?
193
198
  end
194
199
  work_unit.fetch("allowed_write_paths", []).each do |path|
200
+ policy = fixture.dig("common", "implementation_path_policy")
201
+ violations << "#{prefix}.allowed_write_paths.path-policy" unless implementation_path_policy_valid?(path, policy)
195
202
  violations << "#{prefix}.allowed_write_paths" unless path_scopes.all? { |scope| path_allowed_by?(path, scope) }
196
203
  end
197
204
  work_unit.fetch("expected_evidence", []).each do |evidence|
@@ -217,6 +224,29 @@ end
217
224
  def slice_contract_decision_violations(contract, input, available, fixture, expected_required_skills)
218
225
  violations = []
219
226
  flags = input.fetch("impact_flags")
227
+ implementation_path_policy = fixture.dig("common", "implementation_path_policy")
228
+ unless %w[harness-apps-multi-project external-repository-native].include?(implementation_path_policy)
229
+ violations << "common.implementation_path_policy"
230
+ end
231
+ project_roots = fixture.dig("common", "project_roots")
232
+ if !project_roots.is_a?(Array) || project_roots.empty?
233
+ violations << "common.project_roots"
234
+ elsif implementation_path_policy == "harness-apps-multi-project"
235
+ project_roots.each do |path|
236
+ violations << "common.project_roots.path-policy" unless implementation_path_policy_valid?(path)
237
+ end
238
+ end
239
+ {
240
+ "common" => fixture.dig("common", "allowed_write_paths"),
241
+ "frontend" => fixture.dig("frontend", "allowed_write_paths"),
242
+ "backend" => fixture.dig("backend", "allowed_write_paths")
243
+ }.each do |section, paths|
244
+ next unless paths.is_a?(Array)
245
+
246
+ paths.each do |path|
247
+ violations << "#{section}.allowed_write_paths.path-policy" unless implementation_path_policy_valid?(path, implementation_path_policy)
248
+ end
249
+ end
220
250
  missing_readiness = readiness_missing(contract, active_impacts(input), available)
221
251
  blockers = fixture.dig("readiness", "blockers")
222
252
  stale_inputs = fixture.dig("readiness", "stale_inputs")
@@ -327,15 +357,17 @@ complete_slice["frontend"].merge!(
327
357
  "required_skills" => ["yss-page-module-development"],
328
358
  "approved_prototype_ref" => "docs/prototypes/order-create.html",
329
359
  "state_matrix_ref" => "docs/design/order-create-state-matrix.md",
330
- "allowed_write_paths" => ["apps/frontend/src/pages/order-create/"],
360
+ "allowed_write_paths" => ["apps/frontend/project1/src/pages/order-create/"],
331
361
  "component_test_seams" => ["order-create-form"],
332
362
  "e2e_paths" => ["create-order"]
333
363
  )
334
364
  complete_slice["backend"]["status"] = "not-applicable"
335
365
  complete_slice["common"].merge!(
366
+ "implementation_path_policy" => "harness-apps-multi-project",
367
+ "project_roots" => ["apps/frontend/project1/"],
336
368
  "required_skills" => ["yss-page-module-development"],
337
- "allowed_write_paths" => ["apps/frontend/src/pages/order-create/"],
338
- "expected_evidence_files" => ["apps/frontend/src/pages/order-create/OrderCreate.test.tsx"],
369
+ "allowed_write_paths" => ["apps/frontend/project1/src/pages/order-create/"],
370
+ "expected_evidence_files" => ["apps/frontend/project1/src/pages/order-create/OrderCreate.test.tsx"],
339
371
  "verification_commands" => ["pnpm test order-create"]
340
372
  )
341
373
  complete_slice["contract"].merge!(
@@ -351,8 +383,8 @@ end
351
383
  complete_slice["work_units"] = [{
352
384
  "id" => "render-order-create", "behavior" => "用户提交新订单", "primary_skill" => "yss-page-module-development",
353
385
  "supporting_skills" => [], "tdd_mode" => "behavior-tdd",
354
- "allowed_write_paths" => ["apps/frontend/src/pages/order-create/"],
355
- "expected_evidence" => ["apps/frontend/src/pages/order-create/OrderCreate.test.tsx"],
386
+ "allowed_write_paths" => ["apps/frontend/project1/src/pages/order-create/"],
387
+ "expected_evidence" => ["apps/frontend/project1/src/pages/order-create/OrderCreate.test.tsx"],
356
388
  "verification_commands" => ["pnpm test order-create"], "controlled_generation" => {}
357
389
  }]
358
390
  ui_expected_skills = ["yss-page-module-development"]
@@ -361,6 +393,20 @@ unless ui_violations.empty?
361
393
  failures << "Ready UI/API Slice Contract was rejected: #{ui_violations.join(', ')}"
362
394
  end
363
395
 
396
+ external_slice = Marshal.load(Marshal.dump(complete_slice))
397
+ external_slice["common"].merge!(
398
+ "implementation_path_policy" => "external-repository-native",
399
+ "project_roots" => ["app/frontend/src/"]
400
+ )
401
+ external_slice["common"]["allowed_write_paths"] = ["app/frontend/src/pages/order-create/"]
402
+ external_slice["frontend"]["allowed_write_paths"] = ["app/frontend/src/pages/order-create/"]
403
+ external_slice["work_units"][0]["allowed_write_paths"] = ["app/frontend/src/pages/order-create/"]
404
+ external_slice["work_units"][0]["expected_evidence"] = ["app/frontend/src/pages/order-create/OrderCreate.test.tsx"]
405
+ external_slice["common"]["expected_evidence_files"] = ["app/frontend/src/pages/order-create/OrderCreate.test.tsx"]
406
+ failures << "External native project path was incorrectly blocked" unless slice_contract_decision_violations(
407
+ CONTRACT, base_input, ui_evidence, external_slice, ui_expected_skills
408
+ ).empty?
409
+
364
410
  decision_mutations = {
365
411
  "status-with-blockers" => [base_input, ui_evidence, {"readiness" => {"blockers" => ["review"], "stale_inputs" => [], "not_applicable" => []}}, "status"],
366
412
  "status-with-stale" => [base_input, ui_evidence, {"readiness" => {"blockers" => [], "stale_inputs" => ["spec"], "not_applicable" => []}}, "status"],
@@ -371,6 +417,8 @@ decision_mutations = {
371
417
  "frontend-prototype" => [base_input, ui_evidence, {"frontend" => {"approved_prototype_ref" => nil}}, "frontend.approved_prototype_ref"],
372
418
  "frontend-state-matrix" => [base_input, ui_evidence, {"frontend" => {"state_matrix_ref" => nil}}, "frontend.state_matrix_ref"],
373
419
  "frontend-paths" => [base_input, ui_evidence, {"frontend" => {"allowed_write_paths" => []}}, "frontend.allowed_write_paths"],
420
+ "frontend-singular-path-policy" => [base_input, ui_evidence, {"frontend" => {"allowed_write_paths" => ["app/frontend/project1/"]}}, "frontend.allowed_write_paths.path-policy"],
421
+ "frontend-container-path-policy" => [base_input, ui_evidence, {"frontend" => {"allowed_write_paths" => ["apps/frontend/"]}}, "frontend.allowed_write_paths.path-policy"],
374
422
  "frontend-seams" => [base_input, ui_evidence, {"frontend" => {"component_test_seams" => []}}, "frontend.component_test_seams"],
375
423
  "frontend-e2e" => [base_input, ui_evidence, {"frontend" => {"e2e_paths" => []}}, "frontend.e2e_paths"],
376
424
  "api-impact" => [base_input, ui_evidence, {"contract" => {"api_impact" => false}}, "contract.api_impact"],
@@ -380,6 +428,7 @@ decision_mutations = {
380
428
  "work-units-empty" => [base_input, ui_evidence, {"work_units" => []}, "work_units"],
381
429
  "work-unit-behavior" => [base_input, ui_evidence, {"work_units" => [complete_slice["work_units"][0].merge("behavior" => nil)]}, "work_units[0].behavior"],
382
430
  "work-unit-paths" => [base_input, ui_evidence, {"work_units" => [complete_slice["work_units"][0].merge("allowed_write_paths" => [])]}, "work_units[0].allowed_write_paths"],
431
+ "work-unit-singular-path-policy" => [base_input, ui_evidence, {"work_units" => [complete_slice["work_units"][0].merge("allowed_write_paths" => ["app/frontend/project1/"])]}, "work_units[0].allowed_write_paths.path-policy"],
383
432
  "work-unit-tdd-mode" => [base_input, ui_evidence, {"work_units" => [complete_slice["work_units"][0].merge("tdd_mode" => "unknown")]}, "work_units[0].tdd_mode"],
384
433
  "work-unit-primary-skill" => [base_input, ui_evidence, {"work_units" => [complete_slice["work_units"][0].merge("primary_skill" => "undeclared-skill")]}, "work_units[0].primary_skill"],
385
434
  "work-unit-supporting-skills" => [base_input, ui_evidence, {"work_units" => [complete_slice["work_units"][0].merge("supporting_skills" => ["undeclared-skill"])]}, "work_units[0].supporting_skills"],
@@ -413,15 +462,17 @@ backend_slice["backend"].merge!(
413
462
  "component_impacts" => [],
414
463
  "required_skills" => backend_expected_skills,
415
464
  "application_boundary" => "CreateOrderUseCase", "transaction_boundary" => "CreateOrderUseCase.execute",
416
- "persistence_strategy" => "OrderGateway via MyBatis", "allowed_write_paths" => ["apps/backend/order/"],
417
- "forbidden_patterns" => ["Controller -> Repository"], "expected_evidence_files" => ["apps/backend/order/OrderTest.java"],
418
- "verification_commands" => ["./mvnw -pl order -am test"]
465
+ "persistence_strategy" => "OrderGateway via MyBatis", "allowed_write_paths" => ["apps/backend/project1/"],
466
+ "forbidden_patterns" => ["Controller -> Repository"], "expected_evidence_files" => ["apps/backend/project1/OrderTest.java"],
467
+ "verification_commands" => ["./mvnw -pl project1 -am test"]
419
468
  )
420
469
  backend_slice["common"]["required_skills"] = backend_expected_skills
421
470
  backend_slice["common"].merge!(
422
- "allowed_write_paths" => ["apps/backend/order/"],
423
- "expected_evidence_files" => ["apps/backend/order/OrderTest.java"],
424
- "verification_commands" => ["./mvnw -pl order -am test"]
471
+ "implementation_path_policy" => "harness-apps-multi-project",
472
+ "project_roots" => ["apps/backend/project1/"],
473
+ "allowed_write_paths" => ["apps/backend/project1/"],
474
+ "expected_evidence_files" => ["apps/backend/project1/OrderTest.java"],
475
+ "verification_commands" => ["./mvnw -pl project1 -am test"]
425
476
  )
426
477
  backend_slice["contract"].merge!("api_impact" => false, "freeze_ref" => nil, "no_api_impact_ref" => "docs/contracts/order-create-no-api.md", "contract_tests" => [])
427
478
  CONTRACT.fetch("lifecycle_ref_by_readiness").each do |readiness_key, ref_field|
@@ -430,8 +481,8 @@ end
430
481
  backend_slice["work_units"] = [{
431
482
  "id" => "create-order", "behavior" => "创建订单事务", "primary_skill" => "yss-backend-scaffold-application",
432
483
  "supporting_skills" => backend_expected_skills - ["yss-backend-scaffold-application"], "tdd_mode" => "behavior-tdd",
433
- "allowed_write_paths" => ["apps/backend/order/"], "expected_evidence" => ["apps/backend/order/OrderTest.java"],
434
- "verification_commands" => ["./mvnw -pl order -am test"], "controlled_generation" => {}
484
+ "allowed_write_paths" => ["apps/backend/project1/"], "expected_evidence" => ["apps/backend/project1/OrderTest.java"],
485
+ "verification_commands" => ["./mvnw -pl project1 -am test"], "controlled_generation" => {}
435
486
  }]
436
487
  backend_violations = slice_contract_decision_violations(CONTRACT, backend_input, backend_evidence, backend_slice, backend_expected_skills)
437
488
  unless backend_violations.empty?
@@ -575,7 +626,8 @@ def execution_violations(contract, result, allowed_paths, expected_evidence, exp
575
626
  path = item.is_a?(Hash) ? item["path"] : item
576
627
  valid_item = item.is_a?(Hash) && %w[common frontend backend contract cross_repo].include?(item["contract_area"])
577
628
  within_both = path && allowed_paths.all? { |scope_paths| path_within_contract?(path, scope_paths) }
578
- violations << "path-outside-contract" unless valid_item && within_both
629
+ within_path_policy = path && implementation_path_policy_valid?(path, expected_contract["implementation_path_policy"])
630
+ violations << "path-outside-contract" unless valid_item && within_both && within_path_policy
579
631
  end
580
632
  evidence_paths = result.fetch("evidence_files", []).each_with_object([]) do |item, paths|
581
633
  next unless item.is_a?(Hash) && %w[code test generated review verification].include?(item["evidence_type"]) &&
@@ -624,10 +676,11 @@ def execution_violations(contract, result, allowed_paths, expected_evidence, exp
624
676
  violations & contract.fetch("execution_blockers")
625
677
  end
626
678
 
627
- expected_contract = {"contract_ref" => "docs/contracts/order-create-v2.yaml", "contract_id" => "order-create", "contract_version" => 2}
679
+ expected_contract = {"contract_ref" => "docs/contracts/order-create-v2.yaml", "contract_id" => "order-create", "contract_version" => 2,
680
+ "implementation_path_policy" => "harness-apps-multi-project"}
628
681
  expected_identity = {"skill" => "yss-domain", "slice_id" => "order-create", "work_unit_id" => "create-order"}
629
- evidence_path = "apps/backend/order/OrderTest.java"
630
- expected_command = "./mvnw -pl order -am test"
682
+ evidence_path = "apps/backend/project1/OrderTest.java"
683
+ expected_command = "./mvnw -pl project1 -am test"
631
684
  valid_result = {
632
685
  "schema_version" => 1,
633
686
  "skill" => "yss-domain",
@@ -635,7 +688,7 @@ valid_result = {
635
688
  "work_unit_id" => "create-order",
636
689
  "status" => "implemented",
637
690
  "consumed_contract" => expected_contract,
638
- "changed_files" => [{"path" => "apps/backend/order/Order.java", "contract_area" => "backend"}],
691
+ "changed_files" => [{"path" => "apps/backend/project1/Order.java", "contract_area" => "backend"}],
639
692
  "evidence_files" => [{"path" => evidence_path, "evidence_type" => "test", "behavior_ref" => "create-order"}],
640
693
  "verification_results" => [{"command" => expected_command, "result" => "passed", "executed_at" => "2026-07-21T12:00:00+08:00"}],
641
694
  "constraint_results" => [{"constraint" => "no-controller-repository", "status" => "passed", "evidence_ref" => evidence_path}],
@@ -645,8 +698,8 @@ valid_result = {
645
698
  "not_applicable_reason" => nil
646
699
  }
647
700
  valid_args = [[
648
- ["apps/backend/"],
649
- ["apps/backend/order/"]
701
+ ["apps/backend/project1/"],
702
+ ["apps/backend/project1/"]
650
703
  ], [evidence_path], expected_contract, [expected_command], ["no-controller-repository"], [evidence_path]]
651
704
  valid_args.insert(3, expected_identity)
652
705
  unless execution_violations(CONTRACT, valid_result, *valid_args).empty?
@@ -654,8 +707,8 @@ unless execution_violations(CONTRACT, valid_result, *valid_args).empty?
654
707
  end
655
708
 
656
709
  mutations = {
657
- "path-outside-contract" => valid_result.merge("changed_files" => [{"path" => "apps/backend/order-escape/Evil.java", "contract_area" => "backend"}]),
658
- "path-outside-contract-work-unit" => valid_result.merge("changed_files" => [{"path" => "apps/backend/other/Other.java", "contract_area" => "backend"}]),
710
+ "path-outside-contract" => valid_result.merge("changed_files" => [{"path" => "apps/backend/project1-escape/Evil.java", "contract_area" => "backend"}]),
711
+ "path-outside-contract-work-unit" => valid_result.merge("changed_files" => [{"path" => "apps/backend/project2/Other.java", "contract_area" => "backend"}]),
659
712
  "missing-evidence" => valid_result.merge("evidence_files" => []),
660
713
  "verification-not-executed-empty" => valid_result.merge("verification_results" => []),
661
714
  "verification-not-executed-command" => valid_result.merge("verification_results" => [{"result" => "passed", "executed_at" => "2026-07-21T12:00:00+08:00"}]),
@@ -663,7 +716,7 @@ mutations = {
663
716
  "verification-command-mismatch" => valid_result.merge("verification_results" => [{"command" => "true", "result" => "passed", "executed_at" => "2026-07-21T12:00:00+08:00"}]),
664
717
  "violation-contract-version" => valid_result.merge("consumed_contract" => expected_contract.merge("contract_version" => 1)),
665
718
  "violation-identity" => valid_result.merge("work_unit_id" => "other-work-unit"),
666
- "path-outside-contract-area" => valid_result.merge("changed_files" => [{"path" => "apps/backend/order/Order.java", "contract_area" => "nonsense"}]),
719
+ "path-outside-contract-area" => valid_result.merge("changed_files" => [{"path" => "apps/backend/project1/Order.java", "contract_area" => "nonsense"}]),
667
720
  "seam-deferred-without-owner" => valid_result.merge("seam_deferred" => [{"risk" => "temporary adapter"}]),
668
721
  "seam-deferred-without-owner-empty" => valid_result.merge("status" => "seam-deferred", "seam_deferred" => []),
669
722
  "violation-implemented-with-seam" => valid_result.merge("seam_deferred" => [{"risk" => "temporary", "owner" => "team", "follow_up_ticket" => "T-2", "verification_plan" => "test"}]),
@@ -141,7 +141,7 @@
141
141
  "source": "project",
142
142
  "sourceType": "local",
143
143
  "skillPath": ".agents/skills/cross-repo-implementation-routing/SKILL.md",
144
- "effectiveHash": "4823402876326d33eff644a54db127ce43960ded841f50b1ba236a8f0a2e3f3a",
144
+ "effectiveHash": "3207a3f6b51ba07835b56f7c0b2c5e55ca7fdd30a038b0b6ba8ec00228506a4b",
145
145
  "targets": [
146
146
  ".agents/skills",
147
147
  ".claude/skills",
@@ -359,7 +359,7 @@
359
359
  "source": "project",
360
360
  "sourceType": "local",
361
361
  "skillPath": ".agents/skills/implementation-repo-onboarding/SKILL.md",
362
- "effectiveHash": "ef6573ec4e483ebebb7ce53df4ccd335397b8ae3aa4bc165e0d7cf4aa39e7925",
362
+ "effectiveHash": "e3166bbc93388996d0593803a1d6fb675c0cf596783b3171c035b78293b0c3cd",
363
363
  "targets": [
364
364
  ".agents/skills",
365
365
  ".claude/skills",
@@ -1029,7 +1029,7 @@
1029
1029
  "source": "project",
1030
1030
  "sourceType": "local",
1031
1031
  "skillPath": ".agents/skills/yss-ddd-scaffold-generator/SKILL.md",
1032
- "effectiveHash": "9010169979e38688afc9aeb60e1892a25e79725e86c1816ddf6ba780d80b242f",
1032
+ "effectiveHash": "2dc2ac84fac2d4a3a1da433dcb863bd8f8c77dc559c584b688876ab2ff8fac05",
1033
1033
  "targets": [
1034
1034
  ".agents/skills",
1035
1035
  ".claude/skills",
@@ -1179,7 +1179,7 @@
1179
1179
  "source": "project",
1180
1180
  "sourceType": "local",
1181
1181
  "skillPath": ".agents/skills/yss-frontend-scaffold-generator/SKILL.md",
1182
- "effectiveHash": "b62b04d06574debfc4777da5f85dcbb02ea1e07c35f772e2e4c766892e24830e",
1182
+ "effectiveHash": "b61aa0fdbcd1026757efade8054b84a4f260f1bdf3b1f4d9b6a0315a4a933979",
1183
1183
  "targets": [
1184
1184
  ".agents/skills",
1185
1185
  ".claude/skills",
@@ -1329,7 +1329,7 @@
1329
1329
  "source": "project",
1330
1330
  "sourceType": "local",
1331
1331
  "skillPath": ".agents/skills/yss-product-lifecycle/SKILL.md",
1332
- "effectiveHash": "0b7984e3638cd87ea2342f7040e3288ef8d2e46d47c7b076420d38733c149808",
1332
+ "effectiveHash": "199a9f9422cdbb9e31d7517fa4ee9738e41e53a67188aeff9a0130d4f154f93a",
1333
1333
  "targets": [
1334
1334
  ".agents/skills",
1335
1335
  ".claude/skills",
@@ -1374,7 +1374,7 @@
1374
1374
  "source": "project",
1375
1375
  "sourceType": "local",
1376
1376
  "skillPath": ".agents/skills/yss-router/SKILL.md",
1377
- "effectiveHash": "400a5efe9be5999f99ca97590c3f073c80b43e416a4e56c53f239d691019e7a9",
1377
+ "effectiveHash": "5f19ae24070a93bae92fcd8731857e9a57027c27970106eb82498484f8524008",
1378
1378
  "targets": [
1379
1379
  ".agents/skills",
1380
1380
  ".claude/skills",
@@ -3,8 +3,8 @@
3
3
  "templateName": "yss-spec-project-template",
4
4
  "templateSource": "github:iloveZzz/yss-spec-project-template",
5
5
  "templateRepository": "https://github.com/iloveZzz/yss-spec-project-template.git",
6
- "requestedRef": "6b4880ccbff08bd8a2cd20c1f9704ef445d6280f",
7
- "templateCommit": "6b4880ccbff08bd8a2cd20c1f9704ef445d6280f",
6
+ "requestedRef": "b61c5668d717822c2a69a8e8327fc45b1891b29b",
7
+ "templateCommit": "b61c5668d717822c2a69a8e8327fc45b1891b29b",
8
8
  "encodedPaths": {
9
9
  ".agents/skills/beautiful-article/assets/scaffold-template/.npmrc": ".agents/skills/beautiful-article/assets/scaffold-template/__yss_dotfile__.npmrc",
10
10
  ".agents/skills/drawio-academic-skills/.gitignore": ".agents/skills/drawio-academic-skills/__yss_dotfile__.gitignore",
@@ -32,6 +32,6 @@
32
32
  ".trae/skills/drawio-academic-skills/.gitignore": ".trae/skills/drawio-academic-skills/__yss_dotfile__.gitignore",
33
33
  ".trae/skills/excalidraw-diagram-generator/scripts/.gitignore": ".trae/skills/excalidraw-diagram-generator/scripts/__yss_dotfile__.gitignore"
34
34
  },
35
- "snapshotHash": "2af8eadf3e0c4ec709cb33f1b1311db0db2d5e85429590fd912317f0bcbee285",
36
- "generatedAt": "2026-08-10T12:45:09.992Z"
35
+ "snapshotHash": "93231767f7b762d0247e2db3f075c620b15a2820382e16d6d5e424d50ff922f4",
36
+ "generatedAt": "2026-08-13T05:40:01.242Z"
37
37
  }
@@ -1,84 +0,0 @@
1
- package {{base_package}}.rest;
2
-
3
- import com.yss.cloud.dto.result.PageResult;
4
- import com.yss.cloud.dto.result.SingleResult;
5
- import {{base_package}}.client.dto.cmd.UserAddCmd;
6
- import {{base_package}}.client.dto.cmd.UserUpdateCmd;
7
- import {{base_package}}.client.dto.query.UserPageQuery;
8
- import {{base_package}}.client.vo.UserVO;
9
- import {{base_package}}.core.service.UserService;
10
- import lombok.RequiredArgsConstructor;
11
- import org.springframework.web.bind.annotation.*;
12
-
13
- import javax.validation.Valid;
14
-
15
- /**
16
- * 用户管理控制器
17
- *
18
- * @author {{author}}
19
- * @date {{date}}
20
- */
21
- @RestController
22
- @RequestMapping("/api/users")
23
- @RequiredArgsConstructor
24
- public class UserController {
25
-
26
- private final UserService userService;
27
-
28
- /**
29
- * 分页查询用户
30
- *
31
- * @param query 查询条件
32
- * @return 分页结果
33
- */
34
- @PostMapping("/page")
35
- public PageResult<UserVO> page(@Valid @RequestBody UserPageQuery query) {
36
- return userService.pageUser(query);
37
- }
38
-
39
- /**
40
- * 根据ID查询用户详情
41
- *
42
- * @param id 用户ID
43
- * @return 用户详情
44
- */
45
- @GetMapping("/{id}")
46
- public SingleResult<UserVO> getById(@PathVariable Long id) {
47
- return SingleResult.of(userService.getUserById(id));
48
- }
49
-
50
- /**
51
- * 新增用户
52
- *
53
- * @param cmd 新增命令
54
- * @return 用户ID
55
- */
56
- @PostMapping
57
- public SingleResult<Long> add(@Valid @RequestBody UserAddCmd cmd) {
58
- return SingleResult.of(userService.addUser(cmd));
59
- }
60
-
61
- /**
62
- * 更新用户
63
- *
64
- * @param cmd 更新命令
65
- * @return 更新结果
66
- */
67
- @PutMapping
68
- public SingleResult<Boolean> update(@Valid @RequestBody UserUpdateCmd cmd) {
69
- userService.updateUser(cmd);
70
- return SingleResult.of(true);
71
- }
72
-
73
- /**
74
- * 删除用户
75
- *
76
- * @param id 用户ID
77
- * @return 删除结果
78
- */
79
- @DeleteMapping("/{id}")
80
- public SingleResult<Boolean> delete(@PathVariable Long id) {
81
- userService.deleteUser(id);
82
- return SingleResult.of(true);
83
- }
84
- }
@@ -1,21 +0,0 @@
1
- package {{base_package}}.core.service.convertor;
2
-
3
- import {{base_package}}.client.dto.cmd.UserAddCmd;
4
- import {{base_package}}.client.dto.cmd.UserUpdateCmd;
5
- import {{base_package}}.domain.user.model.User;
6
- import org.mapstruct.Mapper;
7
- import org.mapstruct.NullValueCheckStrategy;
8
- import org.mapstruct.NullValuePropertyMappingStrategy;
9
- import org.mapstruct.factory.Mappers;
10
-
11
- @Mapper(
12
- nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE,
13
- nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
14
- public interface UserConvertor {
15
-
16
- UserConvertor INSTANCE = Mappers.getMapper(UserConvertor.class);
17
-
18
- User toDomain(UserAddCmd cmd);
19
-
20
- User toDomain(UserUpdateCmd cmd);
21
- }
@@ -1,48 +0,0 @@
1
- package {{base_package}}.core.service;
2
-
3
- import com.yss.cloud.dto.result.PageResult;
4
- import {{base_package}}.client.dto.cmd.UserAddCmd;
5
- import {{base_package}}.client.dto.cmd.UserUpdateCmd;
6
- import {{base_package}}.client.dto.query.UserPageQuery;
7
- import {{base_package}}.client.vo.UserVO;
8
-
9
- public interface UserService {
10
-
11
- /**
12
- * 分页查询用户列表
13
- *
14
- * @param query 查询条件
15
- * @return 用户分页结果
16
- */
17
- PageResult<UserVO> pageUser(UserPageQuery query);
18
-
19
- /**
20
- * 根据主键ID查询用户
21
- *
22
- * @param id 用户ID
23
- * @return 用户详情
24
- */
25
- UserVO getUserById(Long id);
26
-
27
- /**
28
- * 新增用户并返回主键ID
29
- *
30
- * @param cmd 新增命令
31
- * @return 新增用户ID
32
- */
33
- Long addUser(UserAddCmd cmd);
34
-
35
- /**
36
- * 根据命令更新用户信息
37
- *
38
- * @param cmd 更新命令
39
- */
40
- void updateUser(UserUpdateCmd cmd);
41
-
42
- /**
43
- * 根据主键ID删除用户
44
- *
45
- * @param id 用户ID
46
- */
47
- void deleteUser(Long id);
48
- }
@@ -1,87 +0,0 @@
1
- package {{base_package}}.core.service.impl;
2
-
3
- import com.yss.cloud.dto.result.PageResult;
4
- import {{base_package}}.client.dto.cmd.UserAddCmd;
5
- import {{base_package}}.client.dto.cmd.UserUpdateCmd;
6
- import {{base_package}}.client.dto.query.UserPageQuery;
7
- import {{base_package}}.client.vo.UserVO;
8
- import {{base_package}}.core.service.UserService;
9
- import {{base_package}}.domain.user.gateway.UserGateway;
10
- import lombok.RequiredArgsConstructor;
11
- import lombok.extern.slf4j.Slf4j;
12
- import org.springframework.stereotype.Service;
13
- import org.springframework.transaction.annotation.Transactional;
14
-
15
- /**
16
- * 用户应用服务实现类
17
- *
18
- * @author {{author}}
19
- * @date {{date}}
20
- */
21
- @Service
22
- @RequiredArgsConstructor
23
- @Slf4j
24
- public class UserServiceImpl implements UserService {
25
- private final UserGateway userGateway;
26
-
27
- /**
28
- * 分页查询用户
29
- *
30
- * @param query 查询条件
31
- * @return 分页结果
32
- */
33
- @Override
34
- public PageResult<UserVO> pageUser(UserPageQuery query) {
35
- log.debug("分页查询用户, query: {}", query);
36
- return userGateway.pageUser(query);
37
- }
38
-
39
- /**
40
- * 根据ID查询用户
41
- *
42
- * @param id 用户ID
43
- * @return 用户信息
44
- */
45
- @Override
46
- public UserVO getUserById(Long id) {
47
- log.debug("根据ID查询用户, id: {}", id);
48
- return userGateway.getUserById(id);
49
- }
50
-
51
- /**
52
- * 新增用户
53
- *
54
- * @param cmd 新增命令
55
- * @return 用户ID
56
- */
57
- @Override
58
- @Transactional(rollbackFor = Exception.class)
59
- public Long addUser(UserAddCmd cmd) {
60
- log.info("新增用户, username: {}", cmd.getUsername());
61
- return userGateway.addUser(cmd);
62
- }
63
-
64
- /**
65
- * 更新用户
66
- *
67
- * @param cmd 更新命令
68
- */
69
- @Override
70
- @Transactional(rollbackFor = Exception.class)
71
- public void updateUser(UserUpdateCmd cmd) {
72
- log.info("更新用户, id: {}", cmd.getId());
73
- userGateway.updateUser(cmd);
74
- }
75
-
76
- /**
77
- * 删除用户
78
- *
79
- * @param id 用户ID
80
- */
81
- @Override
82
- @Transactional(rollbackFor = Exception.class)
83
- public void deleteUser(Long id) {
84
- log.info("删除用户, id: {}", id);
85
- userGateway.deleteUser(id);
86
- }
87
- }
@@ -1,28 +0,0 @@
1
- package {{base_package}};
2
-
3
- import com.yss.cloud.EnableDistributedId;
4
- import com.yss.cloud.cache.EnableYssCloudRedisCache;
5
- import com.yss.excel.mvc.annotation.EnableExcelMvc;
6
- import org.springframework.boot.autoconfigure.SpringBootApplication;
7
- import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
8
- import org.springframework.context.annotation.EnableAspectJAutoProxy;
9
- import org.springframework.scheduling.annotation.EnableAsync;
10
- import org.springframework.boot.SpringApplication;
11
-
12
- @EnableAsync
13
- @EnableDiscoveryClient
14
- // @EnableYssCloudRedisCache // 请在确认 Redis 配置后取消注释
15
- @EnableAspectJAutoProxy
16
- // @EnableDistributedId // 请在确认分布式 ID 配置后取消注释
17
- @EnableExcelMvc
18
- @SpringBootApplication(scanBasePackages = {"com.yss.datamiddle", "com.yss.cloud"})
19
- public class YssDatamiddleApplication {
20
- /**
21
- * 应用程序入口方法,启动 Spring Boot 应用
22
- *
23
- * @param args 启动参数
24
- */
25
- public static void main(String[] args) {
26
- SpringApplication.run(YssDatamiddleApplication.class, args);
27
- }
28
- }
@@ -1,2 +0,0 @@
1
- INSERT INTO t_user (id, username, email, status, description, deleted, created_by, created_date, last_modified_by, last_modified_date)
2
- VALUES (1, 'admin', 'admin@example.com', 1, 'default admin', 0, 'system', CURRENT_TIMESTAMP, 'system', CURRENT_TIMESTAMP);
@@ -1,27 +0,0 @@
1
- -- 用户表
2
- CREATE TABLE `t_user` (
3
- `id` bigint(20) NOT NULL COMMENT '主键ID',
4
- `username` varchar(50) NOT NULL COMMENT '用户名',
5
- `email` varchar(100) DEFAULT NULL COMMENT '邮箱',
6
- `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态:1-启用,0-禁用',
7
- `description` varchar(500) DEFAULT NULL COMMENT '描述',
8
- `deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除标记:0-未删除,1-已删除',
9
- `created_by` varchar(50) DEFAULT NULL COMMENT '创建人',
10
- `created_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
11
- `last_modified_by` varchar(50) DEFAULT NULL COMMENT '最后修改人',
12
- `last_modified_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
13
- PRIMARY KEY (`id`),
14
- UNIQUE KEY `uk_username` (`username`),
15
- KEY `idx_status` (`status`),
16
- KEY `idx_created_date` (`created_date`)
17
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
18
-
19
- -- Leaf Alloc 表
20
- CREATE TABLE `leaf_alloc` (
21
- `biz_tag` varchar(128) NOT NULL COMMENT '业务标签',
22
- `max_id` bigint(20) NOT NULL COMMENT '当前最大ID',
23
- `step` int(11) NOT NULL COMMENT '步长',
24
- `description` varchar(256) DEFAULT NULL COMMENT '描述',
25
- `update_time` varchar(256) DEFAULT NULL COMMENT '更新时间',
26
- PRIMARY KEY (`biz_tag`)
27
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Leaf号段分配表';
@@ -1,17 +0,0 @@
1
- package {{base_package}}.domain.user.model;
2
-
3
- import lombok.Data;
4
-
5
- @Data
6
- public class User {
7
-
8
- private Long id;
9
-
10
- private String username;
11
-
12
- private String email;
13
-
14
- private Integer status;
15
-
16
- private String description;
17
- }
@@ -1,27 +0,0 @@
1
- package {{base_package}}.client.dto.cmd;
2
-
3
- import com.yss.cloud.dto.CommandDTO;
4
- import lombok.Data;
5
-
6
- import javax.validation.constraints.Email;
7
- import javax.validation.constraints.NotBlank;
8
- import javax.validation.constraints.Size;
9
-
10
- /**
11
- * 用户新增命令对象
12
- *
13
- * @author {{author}}
14
- * @date {{date}}
15
- */
16
- @Data
17
- public class UserAddCmd extends CommandDTO {
18
-
19
- @NotBlank(message = "用户名不能为空")
20
- @Size(min = 3, max = 50, message = "用户名长度必须在3-50之间")
21
- private String username;
22
-
23
- @Email(message = "邮箱格式不正确")
24
- private String email;
25
-
26
- private String description;
27
- }