create-yss-spec 2.1.3 → 2.1.5

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 (296) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/template/.agents/skills/code-review/SKILL.md +38 -10
  4. package/template/.agents/skills/high-fidelity-html-prototype/SKILL.md +16 -12
  5. package/template/.agents/skills/product-design-prototype/SKILL.md +6 -2
  6. package/template/.agents/skills/prototype-review/SKILL.md +6 -2
  7. package/template/.agents/skills/wireframe-prototype/SKILL.md +5 -1
  8. package/template/.agents/skills/yss-api-integration/SKILL.md +25 -7
  9. package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +3 -17
  10. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +0 -30
  11. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  12. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +1 -21
  13. package/template/.agents/skills/yss-design-system/SKILL.md +6 -5
  14. package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +12 -6
  15. package/template/.agents/skills/yss-openapi-draft-review/SKILL.md +13 -17
  16. package/template/.agents/skills/yss-openapi-governance/SKILL.md +89 -114
  17. package/template/.agents/skills/yss-openapi-governance/agents/openai.yaml +2 -2
  18. package/template/.agents/skills/yss-product-lifecycle/SKILL.md +13 -7
  19. package/template/.agents/skills/yss-product-lifecycle/references/artifact-dependencies.md +2 -2
  20. package/template/.agents/skills/yss-product-lifecycle/references/matt-yss-adapter.md +8 -2
  21. package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +77 -30
  22. package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +7 -2
  23. package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +8 -0
  24. package/template/.agents/skills/yss-prototype-stage/SKILL.md +40 -0
  25. package/template/.agents/skills/yss-router/SKILL.md +2 -2
  26. package/template/.agents/skills/yss-router/references/router-contract.yaml +9 -8
  27. package/template/.agents/skills/yss-router/references/slice-implementation-contract.md +4 -1
  28. package/template/.agents/skills/yss-router/references/yss-skill-execution-result.md +2 -1
  29. package/template/.claude/skills/code-review/SKILL.md +38 -10
  30. package/template/.claude/skills/high-fidelity-html-prototype/SKILL.md +16 -12
  31. package/template/.claude/skills/product-design-prototype/SKILL.md +6 -2
  32. package/template/.claude/skills/prototype-review/SKILL.md +6 -2
  33. package/template/.claude/skills/wireframe-prototype/SKILL.md +5 -1
  34. package/template/.claude/skills/yss-api-integration/SKILL.md +25 -7
  35. package/template/.claude/skills/yss-ddd-scaffold-generator/SKILL.md +3 -17
  36. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +0 -30
  37. package/template/.claude/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  38. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +1 -21
  39. package/template/.claude/skills/yss-design-system/SKILL.md +6 -5
  40. package/template/.claude/skills/yss-frontend-scaffold-generator/SKILL.md +12 -6
  41. package/template/.claude/skills/yss-openapi-draft-review/SKILL.md +13 -17
  42. package/template/.claude/skills/yss-openapi-governance/SKILL.md +89 -114
  43. package/template/.claude/skills/yss-openapi-governance/agents/openai.yaml +2 -2
  44. package/template/.claude/skills/yss-product-lifecycle/SKILL.md +13 -7
  45. package/template/.claude/skills/yss-product-lifecycle/references/artifact-dependencies.md +2 -2
  46. package/template/.claude/skills/yss-product-lifecycle/references/matt-yss-adapter.md +8 -2
  47. package/template/.claude/skills/yss-product-lifecycle/references/orchestration-contract.yaml +77 -30
  48. package/template/.claude/skills/yss-product-lifecycle/references/orchestration.md +7 -2
  49. package/template/.claude/skills/yss-product-lifecycle/references/state-model.md +8 -0
  50. package/template/.claude/skills/yss-prototype-stage/SKILL.md +40 -0
  51. package/template/.claude/skills/yss-router/SKILL.md +2 -2
  52. package/template/.claude/skills/yss-router/references/router-contract.yaml +9 -8
  53. package/template/.claude/skills/yss-router/references/slice-implementation-contract.md +4 -1
  54. package/template/.claude/skills/yss-router/references/yss-skill-execution-result.md +2 -1
  55. package/template/.codex/skills/code-review/SKILL.md +38 -10
  56. package/template/.codex/skills/high-fidelity-html-prototype/SKILL.md +16 -12
  57. package/template/.codex/skills/product-design-prototype/SKILL.md +6 -2
  58. package/template/.codex/skills/prototype-review/SKILL.md +6 -2
  59. package/template/.codex/skills/wireframe-prototype/SKILL.md +5 -1
  60. package/template/.codex/skills/yss-api-integration/SKILL.md +25 -7
  61. package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +3 -17
  62. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +0 -30
  63. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  64. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +1 -21
  65. package/template/.codex/skills/yss-design-system/SKILL.md +6 -5
  66. package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +12 -6
  67. package/template/.codex/skills/yss-openapi-draft-review/SKILL.md +13 -17
  68. package/template/.codex/skills/yss-openapi-governance/SKILL.md +89 -114
  69. package/template/.codex/skills/yss-openapi-governance/agents/openai.yaml +2 -2
  70. package/template/.codex/skills/yss-product-lifecycle/SKILL.md +13 -7
  71. package/template/.codex/skills/yss-product-lifecycle/references/artifact-dependencies.md +2 -2
  72. package/template/.codex/skills/yss-product-lifecycle/references/matt-yss-adapter.md +8 -2
  73. package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +77 -30
  74. package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +7 -2
  75. package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +8 -0
  76. package/template/.codex/skills/yss-prototype-stage/SKILL.md +40 -0
  77. package/template/.codex/skills/yss-router/SKILL.md +2 -2
  78. package/template/.codex/skills/yss-router/references/router-contract.yaml +9 -8
  79. package/template/.codex/skills/yss-router/references/slice-implementation-contract.md +4 -1
  80. package/template/.codex/skills/yss-router/references/yss-skill-execution-result.md +2 -1
  81. package/template/.hermes/skills/code-review/SKILL.md +38 -10
  82. package/template/.hermes/skills/high-fidelity-html-prototype/SKILL.md +16 -12
  83. package/template/.hermes/skills/product-design-prototype/SKILL.md +6 -2
  84. package/template/.hermes/skills/prototype-review/SKILL.md +6 -2
  85. package/template/.hermes/skills/wireframe-prototype/SKILL.md +5 -1
  86. package/template/.hermes/skills/yss-api-integration/SKILL.md +25 -7
  87. package/template/.hermes/skills/yss-ddd-scaffold-generator/SKILL.md +3 -17
  88. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +0 -30
  89. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  90. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +1 -21
  91. package/template/.hermes/skills/yss-design-system/SKILL.md +6 -5
  92. package/template/.hermes/skills/yss-frontend-scaffold-generator/SKILL.md +12 -6
  93. package/template/.hermes/skills/yss-openapi-draft-review/SKILL.md +13 -17
  94. package/template/.hermes/skills/yss-openapi-governance/SKILL.md +89 -114
  95. package/template/.hermes/skills/yss-openapi-governance/agents/openai.yaml +2 -2
  96. package/template/.hermes/skills/yss-product-lifecycle/SKILL.md +13 -7
  97. package/template/.hermes/skills/yss-product-lifecycle/references/artifact-dependencies.md +2 -2
  98. package/template/.hermes/skills/yss-product-lifecycle/references/matt-yss-adapter.md +8 -2
  99. package/template/.hermes/skills/yss-product-lifecycle/references/orchestration-contract.yaml +77 -30
  100. package/template/.hermes/skills/yss-product-lifecycle/references/orchestration.md +7 -2
  101. package/template/.hermes/skills/yss-product-lifecycle/references/state-model.md +8 -0
  102. package/template/.hermes/skills/yss-prototype-stage/SKILL.md +40 -0
  103. package/template/.hermes/skills/yss-router/SKILL.md +2 -2
  104. package/template/.hermes/skills/yss-router/references/router-contract.yaml +9 -8
  105. package/template/.hermes/skills/yss-router/references/slice-implementation-contract.md +4 -1
  106. package/template/.hermes/skills/yss-router/references/yss-skill-execution-result.md +2 -1
  107. package/template/.pi/skills/code-review/SKILL.md +38 -10
  108. package/template/.pi/skills/high-fidelity-html-prototype/SKILL.md +16 -12
  109. package/template/.pi/skills/product-design-prototype/SKILL.md +6 -2
  110. package/template/.pi/skills/prototype-review/SKILL.md +6 -2
  111. package/template/.pi/skills/wireframe-prototype/SKILL.md +5 -1
  112. package/template/.pi/skills/yss-api-integration/SKILL.md +25 -7
  113. package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +3 -17
  114. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +0 -30
  115. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  116. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +1 -21
  117. package/template/.pi/skills/yss-design-system/SKILL.md +6 -5
  118. package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +12 -6
  119. package/template/.pi/skills/yss-openapi-draft-review/SKILL.md +13 -17
  120. package/template/.pi/skills/yss-openapi-governance/SKILL.md +89 -114
  121. package/template/.pi/skills/yss-openapi-governance/agents/openai.yaml +2 -2
  122. package/template/.pi/skills/yss-product-lifecycle/SKILL.md +13 -7
  123. package/template/.pi/skills/yss-product-lifecycle/references/artifact-dependencies.md +2 -2
  124. package/template/.pi/skills/yss-product-lifecycle/references/matt-yss-adapter.md +8 -2
  125. package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +77 -30
  126. package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +7 -2
  127. package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +8 -0
  128. package/template/.pi/skills/yss-prototype-stage/SKILL.md +40 -0
  129. package/template/.pi/skills/yss-router/SKILL.md +2 -2
  130. package/template/.pi/skills/yss-router/references/router-contract.yaml +9 -8
  131. package/template/.pi/skills/yss-router/references/slice-implementation-contract.md +4 -1
  132. package/template/.pi/skills/yss-router/references/yss-skill-execution-result.md +2 -1
  133. package/template/.qoder/skills/code-review/SKILL.md +38 -10
  134. package/template/.qoder/skills/high-fidelity-html-prototype/SKILL.md +16 -12
  135. package/template/.qoder/skills/product-design-prototype/SKILL.md +6 -2
  136. package/template/.qoder/skills/prototype-review/SKILL.md +6 -2
  137. package/template/.qoder/skills/wireframe-prototype/SKILL.md +5 -1
  138. package/template/.qoder/skills/yss-api-integration/SKILL.md +25 -7
  139. package/template/.qoder/skills/yss-ddd-scaffold-generator/SKILL.md +3 -17
  140. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +0 -30
  141. package/template/.qoder/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  142. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +1 -21
  143. package/template/.qoder/skills/yss-design-system/SKILL.md +6 -5
  144. package/template/.qoder/skills/yss-frontend-scaffold-generator/SKILL.md +12 -6
  145. package/template/.qoder/skills/yss-openapi-draft-review/SKILL.md +13 -17
  146. package/template/.qoder/skills/yss-openapi-governance/SKILL.md +89 -114
  147. package/template/.qoder/skills/yss-openapi-governance/agents/openai.yaml +2 -2
  148. package/template/.qoder/skills/yss-product-lifecycle/SKILL.md +13 -7
  149. package/template/.qoder/skills/yss-product-lifecycle/references/artifact-dependencies.md +2 -2
  150. package/template/.qoder/skills/yss-product-lifecycle/references/matt-yss-adapter.md +8 -2
  151. package/template/.qoder/skills/yss-product-lifecycle/references/orchestration-contract.yaml +77 -30
  152. package/template/.qoder/skills/yss-product-lifecycle/references/orchestration.md +7 -2
  153. package/template/.qoder/skills/yss-product-lifecycle/references/state-model.md +8 -0
  154. package/template/.qoder/skills/yss-prototype-stage/SKILL.md +40 -0
  155. package/template/.qoder/skills/yss-router/SKILL.md +2 -2
  156. package/template/.qoder/skills/yss-router/references/router-contract.yaml +9 -8
  157. package/template/.qoder/skills/yss-router/references/slice-implementation-contract.md +4 -1
  158. package/template/.qoder/skills/yss-router/references/yss-skill-execution-result.md +2 -1
  159. package/template/.trae/skills/code-review/SKILL.md +38 -10
  160. package/template/.trae/skills/high-fidelity-html-prototype/SKILL.md +16 -12
  161. package/template/.trae/skills/product-design-prototype/SKILL.md +6 -2
  162. package/template/.trae/skills/prototype-review/SKILL.md +6 -2
  163. package/template/.trae/skills/wireframe-prototype/SKILL.md +5 -1
  164. package/template/.trae/skills/yss-api-integration/SKILL.md +25 -7
  165. package/template/.trae/skills/yss-ddd-scaffold-generator/SKILL.md +3 -17
  166. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +0 -30
  167. package/template/.trae/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  168. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +1 -21
  169. package/template/.trae/skills/yss-design-system/SKILL.md +6 -5
  170. package/template/.trae/skills/yss-frontend-scaffold-generator/SKILL.md +12 -6
  171. package/template/.trae/skills/yss-openapi-draft-review/SKILL.md +13 -17
  172. package/template/.trae/skills/yss-openapi-governance/SKILL.md +89 -114
  173. package/template/.trae/skills/yss-openapi-governance/agents/openai.yaml +2 -2
  174. package/template/.trae/skills/yss-product-lifecycle/SKILL.md +13 -7
  175. package/template/.trae/skills/yss-product-lifecycle/references/artifact-dependencies.md +2 -2
  176. package/template/.trae/skills/yss-product-lifecycle/references/matt-yss-adapter.md +8 -2
  177. package/template/.trae/skills/yss-product-lifecycle/references/orchestration-contract.yaml +77 -30
  178. package/template/.trae/skills/yss-product-lifecycle/references/orchestration.md +7 -2
  179. package/template/.trae/skills/yss-product-lifecycle/references/state-model.md +8 -0
  180. package/template/.trae/skills/yss-prototype-stage/SKILL.md +40 -0
  181. package/template/.trae/skills/yss-router/SKILL.md +2 -2
  182. package/template/.trae/skills/yss-router/references/router-contract.yaml +9 -8
  183. package/template/.trae/skills/yss-router/references/slice-implementation-contract.md +4 -1
  184. package/template/.trae/skills/yss-router/references/yss-skill-execution-result.md +2 -1
  185. package/template/AGENTS.md +7 -5
  186. package/template/CONTEXT.md +15 -1
  187. package/template/README.md +2 -1
  188. package/template/__yss_dotfile__.gitignore +4 -0
  189. package/template/docs/adr/0001-product-design-prototype-entrypoint.md +1 -1
  190. package/template/docs/adr/0003-machine-readable-lifecycle-registry.md +5 -0
  191. package/template/docs/adr/0004-split-lifecycle-and-router-registry-domains.md +5 -0
  192. package/template/docs/adr/0005-cross-repository-ecosystem-release-manifest.md +5 -0
  193. package/template/docs/adr/0006-stable-lifecycle-ids-and-generated-structure.md +5 -0
  194. package/template/docs/adr/0007-separate-skill-routing-registry-from-integrity-lock.md +5 -0
  195. package/template/docs/agents/issue-tracker.md +1 -0
  196. package/template/docs/api/templates/openapi-draft-review-checklist.md +8 -6
  197. package/template/docs/api/templates/openapi-freeze-record-template.md +8 -2
  198. package/template/docs/api/templates/openapi-json-export-record-template.md +60 -0
  199. package/template/docs/architecture/templates/architecture-review-checklist.md +6 -19
  200. package/template/docs/architecture/templates/functional-architecture-template.md +4 -4
  201. package/template/docs/architecture/templates/system-overview-design-template.md +10 -5
  202. package/template/docs/architecture/templates/tech-design-template.md +4 -11
  203. package/template/docs/design/README.md +4 -2
  204. package/template/docs/design/design.md +4 -0
  205. package/template/docs/design/templates/interaction-spec-template.md +3 -3
  206. package/template/docs/design/templates/prototype-confirmation-template.md +9 -6
  207. package/template/docs/design/templates/prototype-evidence-template.yaml +46 -0
  208. package/template/docs/design/templates/prototype-review-checklist.md +4 -4
  209. package/template/docs/discovery/templates/discovery-template.md +0 -1
  210. package/template/docs/implementation/create-yss-spec-repository-mode-contract.md +2 -2
  211. package/template/docs/process/harness-process-tailoring.md +2 -0
  212. package/template/docs/process/harness-work-unit-map.md +14 -10
  213. package/template/docs/process/lifecycle-artifact-map.md +84 -39
  214. package/template/docs/process/lifecycle-registry-baseline.json +70 -0
  215. package/template/docs/process/lifecycle-registry.yaml +289 -0
  216. package/template/docs/process/schemas/lifecycle-registry.schema.json +35 -0
  217. package/template/docs/reviews/lifecycle-registry-phase0-1-red-green-2026-08-17.md +61 -0
  218. package/template/docs/reviews/matt-yss-p0-ticket-review-git-red-green-2026-08-17.md +91 -0
  219. package/template/docs/reviews/openapi-skill-primary-source-research-2026-08-16.md +76 -0
  220. package/template/docs/reviews/openapi-yaml-first-independent-review-2026-08-16.md +121 -0
  221. package/template/docs/reviews/openapi-yaml-first-pressure-scenarios-2026-08-16.md +191 -0
  222. package/template/docs/reviews/openapi-yaml-first-red-green-2026-08-16.md +76 -0
  223. package/template/docs/reviews/openapi-yaml-json-output-independent-review-2026-08-16.md +30 -0
  224. package/template/docs/reviews/openapi-yaml-json-output-scope-red-green-2026-08-16.md +154 -0
  225. package/template/docs/reviews/research-create-yss-spec-refresh-2026-08-16.md +164 -0
  226. package/template/docs/reviews/security-permission-lifecycle-simplification-red-green-2026-08-16.md +43 -0
  227. package/template/docs/reviews/template-release-review-remediation-red-green-2026-08-17.md +41 -0
  228. package/template/docs/templates/agent-brief-template.md +2 -2
  229. package/template/docs/templates/build-architecture-checklist-template.md +3 -4
  230. package/template/docs/templates/implementation-repo-registry-template.md +0 -2
  231. package/template/docs/templates/implementation-routing-template.md +6 -6
  232. package/template/docs/templates/openapi-spec-template.yaml +0 -6
  233. package/template/docs/templates/review-report-template.md +2 -1
  234. package/template/docs/templates/spec-delta-template.md +1 -1
  235. package/template/docs/templates/spec-template.md +0 -1
  236. package/template/docs/templates/vertical-slice-ticket-template.md +2 -2
  237. 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 +6 -6
  238. package/template/docs/user-guide//344/272/247/345/223/201/347/240/224/345/217/221/345/205/250/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 +3 -3
  239. package/template/docs/user-guide//345/244/226/351/203/250/345/221/275/344/273/244/350/241/214/345/267/245/345/205/267/345/256/236/350/267/265/346/214/207/345/215/227.md +1 -1
  240. 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 +1 -1
  241. package/template/scripts/generate-lifecycle-artifacts +26 -0
  242. package/template/scripts/lifecycle-registry.rb +194 -0
  243. package/template/scripts/sync-skills +1 -0
  244. package/template/scripts/test-export-yss-skills.rb +10 -6
  245. package/template/scripts/test-lifecycle-registry.rb +74 -0
  246. package/template/scripts/update-skill-lock +1 -0
  247. package/template/scripts/verify-governance-release +39 -0
  248. package/template/scripts/verify-lifecycle-registry +67 -0
  249. package/template/scripts/verify-lifecycle-scenarios +193 -23
  250. package/template/scripts/verify-matt-yss-integration-scenarios +297 -1
  251. package/template/scripts/verify-openapi-json-handoff-scenarios +270 -0
  252. package/template/scripts/verify-openapi-yaml-first-scenarios +120 -0
  253. package/template/scripts/verify-prototype-backend-scaffold-scenarios +26 -4
  254. package/template/scripts/verify-template +27 -3
  255. package/template/scripts/verify-yss-router-scenarios +51 -14
  256. package/template/skills-lock.json +25 -25
  257. package/template/wiki/raw/skills-lock.json +0 -15
  258. package/template/wiki/wiki/OpenAPI/345/245/221/347/272/246.md +1 -1
  259. package/template/wiki/wiki/YSS/345/267/245/347/250/213/346/212/200/350/203/275/344/275/223/347/263/273.md +1 -1
  260. package/template/yss-public-skills.json +5 -5
  261. package/template.snapshot.json +4 -4
  262. package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/config/smart-doc.json.template +0 -17
  263. package/template/.agents/skills/yss-openapi/SKILL.md +0 -116
  264. package/template/.agents/skills/yss-openapi/agents/openai.yaml +0 -4
  265. package/template/.agents/skills/yss-openapi/img.png +0 -0
  266. package/template/.agents/skills/yss-openapi/img_1.png +0 -0
  267. package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/config/smart-doc.json.template +0 -17
  268. package/template/.claude/skills/yss-openapi/SKILL.md +0 -116
  269. package/template/.claude/skills/yss-openapi/agents/openai.yaml +0 -4
  270. package/template/.claude/skills/yss-openapi/img.png +0 -0
  271. package/template/.claude/skills/yss-openapi/img_1.png +0 -0
  272. package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/config/smart-doc.json.template +0 -17
  273. package/template/.codex/skills/yss-openapi/SKILL.md +0 -116
  274. package/template/.codex/skills/yss-openapi/agents/openai.yaml +0 -4
  275. package/template/.codex/skills/yss-openapi/img.png +0 -0
  276. package/template/.codex/skills/yss-openapi/img_1.png +0 -0
  277. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/config/smart-doc.json.template +0 -17
  278. package/template/.hermes/skills/yss-openapi/SKILL.md +0 -116
  279. package/template/.hermes/skills/yss-openapi/agents/openai.yaml +0 -4
  280. package/template/.hermes/skills/yss-openapi/img.png +0 -0
  281. package/template/.hermes/skills/yss-openapi/img_1.png +0 -0
  282. package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/config/smart-doc.json.template +0 -17
  283. package/template/.pi/skills/yss-openapi/SKILL.md +0 -116
  284. package/template/.pi/skills/yss-openapi/agents/openai.yaml +0 -4
  285. package/template/.pi/skills/yss-openapi/img.png +0 -0
  286. package/template/.pi/skills/yss-openapi/img_1.png +0 -0
  287. package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/config/smart-doc.json.template +0 -17
  288. package/template/.qoder/skills/yss-openapi/SKILL.md +0 -116
  289. package/template/.qoder/skills/yss-openapi/agents/openai.yaml +0 -4
  290. package/template/.qoder/skills/yss-openapi/img.png +0 -0
  291. package/template/.qoder/skills/yss-openapi/img_1.png +0 -0
  292. package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/config/smart-doc.json.template +0 -17
  293. package/template/.trae/skills/yss-openapi/SKILL.md +0 -116
  294. package/template/.trae/skills/yss-openapi/agents/openai.yaml +0 -4
  295. package/template/.trae/skills/yss-openapi/img.png +0 -0
  296. package/template/.trae/skills/yss-openapi/img_1.png +0 -0
@@ -0,0 +1,120 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "json"
5
+ require "pathname"
6
+ require "yaml"
7
+
8
+ ROOT = Pathname.new(__dir__).join("..").realpath
9
+ PROJECTION_ROOTS = %w[
10
+ .agents/skills
11
+ .claude/skills
12
+ .codex/skills
13
+ .hermes/skills
14
+ .pi/skills
15
+ .qoder/skills
16
+ .trae/skills
17
+ ].freeze
18
+
19
+ failures = []
20
+
21
+ template_path = ROOT.join("docs/templates/openapi-spec-template.yaml")
22
+ documents = YAML.load_stream(template_path.read)
23
+ failures << "OpenAPI YAML 模板必须是单一 YAML document" unless documents.length == 1
24
+ document = documents.first
25
+ unless document.is_a?(Hash) && document["openapi"] == "3.1.0"
26
+ failures << "OpenAPI YAML 模板必须是 OAS 3.1 文档"
27
+ end
28
+ %w[pipeline stage status owner].each do |field|
29
+ failures << "OpenAPI YAML 模板不得把生命周期元数据写入根字段: #{field}" if document.is_a?(Hash) && document.key?(field)
30
+ end
31
+
32
+ PROJECTION_ROOTS.each do |root|
33
+ failures << "已移除的 yss-openapi 仍存在: #{root}/yss-openapi" if ROOT.join(root, "yss-openapi").exist?
34
+ end
35
+
36
+ lock = JSON.parse(ROOT.join("skills-lock.json").read)
37
+ if lock.dig("skills", "shared", "yss-openapi")
38
+ failures << "skills-lock.json 仍登记 yss-openapi"
39
+ end
40
+
41
+ public_skills = JSON.parse(ROOT.join("yss-public-skills.json").read)
42
+ if public_skills.fetch("skills").include?("yss-openapi")
43
+ failures << "yss-public-skills.json 仍公开 yss-openapi"
44
+ end
45
+
46
+ router = ROOT.join(".agents/skills/yss-router/references/router-contract.yaml").read
47
+ removed_skill_pattern = /(?<![a-z0-9-])yss-openapi(?![a-z0-9-])/
48
+ failures << "Router 仍路由到 yss-openapi" if router.match?(removed_skill_pattern)
49
+ failures << "Router 脚手架合同仍允许旧 OpenAPI 基线" if router.include?("smart_doc_baseline")
50
+ unless router.include?("api-integration:\n when_regeneration: [yss-openapi-governance]")
51
+ failures << "Router 未将客户端重新生成路由到 yss-openapi-governance"
52
+ end
53
+
54
+ lifecycle_contract = ROOT.join(".agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml").read
55
+ failures << "Lifecycle 脚手架合同仍允许旧 OpenAPI 基线" if lifecycle_contract.include?("smart_doc_baseline")
56
+ lifecycle_skill = ROOT.join(".agents/skills/yss-product-lifecycle/SKILL.md").read
57
+ failures << "Lifecycle 说明仍保留旧 OpenAPI 基线" if lifecycle_skill.match?(/smart[ -]?doc/i)
58
+ implementation_routing_template = ROOT.join("docs/templates/implementation-routing-template.md").read
59
+ failures << "实现路由模板仍保留旧 OpenAPI 基线" if implementation_routing_template.match?(/smart[ -]?doc/i)
60
+
61
+ scaffold_pom = ROOT.join(".agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template").read
62
+ failures << "后端脚手架仍包含 smart-doc Maven 插件" if scaffold_pom.include?("smart-doc-maven-plugin")
63
+ failures << "后端脚手架仍保留 smart-doc 配置模板" if ROOT.join(".agents/skills/yss-ddd-scaffold-generator/assets/templates/config/smart-doc.json.template").exist?
64
+
65
+ scaffold_generator = ROOT.join(".agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py").read
66
+ failures << "后端脚手架生成器仍生成 smart-doc 配置" if scaffold_generator.include?("smart-doc.json") || scaffold_generator.include?("smart-doc-maven-plugin")
67
+
68
+ governance = ROOT.join(".agents/skills/yss-openapi-governance/SKILL.md").read
69
+ %w[YAML-first 唯一权威 redocly\ bundle --ext\ json operationId].each do |marker|
70
+ failures << "OpenAPI Governance 缺少 YAML-first JSON 派生规则: #{marker}" unless governance.include?(marker)
71
+ end
72
+ failures << "OpenAPI Governance 仍依赖 smart-doc" if governance.include?("smart-doc")
73
+ %w[pnpm\ generate:api orval.config unsafeDisableValidation].each do |marker|
74
+ failures << "OpenAPI Governance 越界到前端代码生成或 Orval 配置: #{marker}" if governance.include?(marker)
75
+ end
76
+
77
+ api_integration = ROOT.join(".agents/skills/yss-api-integration/SKILL.md").read
78
+ %w[冻结的\ OpenAPI\ YAML redocly\ bundle 原样物化 既有前端代码生成流程].each do |marker|
79
+ failures << "API Integration 缺少冻结 JSON 的下游交接规则: #{marker}" unless api_integration.include?(marker)
80
+ end
81
+ failures << "API Integration 仍引用 yss-openapi" if api_integration.match?(removed_skill_pattern)
82
+ %w[docs/.scratch/<feature>/api/<feature>.json SHA-256 受控交接].each do |marker|
83
+ failures << "API Integration 未绑定治理 JSON 派生物: #{marker}" unless api_integration.include?(marker)
84
+ end
85
+ %w[orval.config unsafeDisableValidation].each do |marker|
86
+ failures << "API Integration 越界要求修改或核验 Orval 配置: #{marker}" if api_integration.include?(marker)
87
+ end
88
+
89
+ frontend_scaffold = ROOT.join(".agents/skills/yss-frontend-scaffold-generator/SKILL.md").read
90
+ failures << "前端脚手架仍接受任意 openapi_source" if frontend_scaffold.include?("openapi_source")
91
+ %w[OpenAPI\ Freeze\ 记录 OpenAPI\ JSON\ 派生记录 SHA-256 openapi/openapi.json 既有前端代码生成流程].each do |marker|
92
+ failures << "前端脚手架未绑定冻结 JSON 交接: #{marker}" unless frontend_scaffold.include?(marker)
93
+ end
94
+ %w[配置并读取实际\ `orval.config.*` unsafeDisableValidation].each do |marker|
95
+ failures << "前端脚手架越界修改或核验既有 Orval 配置: #{marker}" if frontend_scaffold.include?(marker)
96
+ end
97
+
98
+ export_record = ROOT.join("docs/api/templates/openapi-json-export-record-template.md")
99
+ failures << "缺少 OpenAPI JSON 派生记录模板" unless export_record.file?
100
+ if export_record.file?
101
+ export_record_text = export_record.read
102
+ %w[Orval\ 输入路径 orval.config unsafeDisableValidation pnpm\ generate:api].each do |marker|
103
+ failures << "JSON 派生记录越界记录前端 Orval 配置或执行: #{marker}" if export_record_text.include?(marker)
104
+ end
105
+ end
106
+
107
+ freeze_record = ROOT.join("docs/api/templates/openapi-freeze-record-template.md")
108
+ %w[orval.config unsafeDisableValidation].each do |marker|
109
+ failures << "OpenAPI Freeze 记录越界规定 Orval 配置: #{marker}" if freeze_record.read.include?(marker)
110
+ end
111
+
112
+ draft_checklist = ROOT.join("docs/api/templates/openapi-draft-review-checklist.md")
113
+ failures << "Draft 评审清单越界要求 Orval 输入路径" if draft_checklist.read.include?("Orval 输入路径")
114
+
115
+ unless failures.empty?
116
+ warn failures.join("\n")
117
+ exit 1
118
+ end
119
+
120
+ puts "OpenAPI YAML-first 场景验证通过"
@@ -16,8 +16,16 @@ end
16
16
  def route_after_prototype(facts)
17
17
  return {"status" => "not-applicable", "steps" => []} unless facts.fetch(:backend_impact)
18
18
 
19
- if facts.fetch(:ui_impact) && !facts.fetch(:prototype_confirmation)
20
- return {"status" => "blocked", "reason" => "prototype-confirmation-required", "steps" => []}
19
+ if facts.fetch(:ui_impact)
20
+ {
21
+ prototype_review: "prototype-review-required",
22
+ prototype_verification: "prototype-verification-required",
23
+ antd_cli_verification: "antd-cli-verification-required",
24
+ browser_verification: "browser-verification-required",
25
+ prototype_confirmation: "prototype-confirmation-required"
26
+ }.each do |fact, reason|
27
+ return {"status" => "blocked", "reason" => reason, "steps" => []} unless facts.fetch(fact, false)
28
+ end
21
29
  end
22
30
 
23
31
  steps = ["engineering-baseline"]
@@ -74,7 +82,9 @@ if backend_scaffold.is_a?(Hash)
74
82
  %w[approval_ref approver persisted_ref current_version].each do |required|
75
83
  failures << "脚手架合同审批记录缺少 #{required}" unless scaffold_schema.dig("approval", "required").to_a.include?(required)
76
84
  end
77
- failures << "backend_scaffold 必须声明 prototype_confirmation 后置顺序" unless backend_scaffold.dig("sequence", "after").include?("prototype_confirmation")
85
+ %w[prototype_review prototype_verification antd_cli_verification browser_verification prototype_confirmation].each do |required|
86
+ failures << "backend_scaffold 必须声明 #{required} 后置顺序" unless backend_scaffold.dig("sequence", "after").include?(required)
87
+ end
78
88
  failures << "backend_scaffold 必须先于业务代码生成" unless backend_scaffold.dig("sequence", "before").include?("business_code_generation")
79
89
  failures << "required 脚手架必须使用 yss-ddd-scaffold-generator" unless backend_scaffold["generator_skill"] == "yss-ddd-scaffold-generator"
80
90
  failures << "脚手架生成必须使用 controlled-generation" unless backend_scaffold["tdd_mode"] == "controlled-generation"
@@ -146,7 +156,9 @@ if router_scaffold_schema.is_a?(Hash)
146
156
  end
147
157
 
148
158
  complete_facts = {
149
- backend_impact: true, ui_impact: true, prototype_confirmation: true, scaffold_status: "required", scaffold_contract_approved: true
159
+ backend_impact: true, ui_impact: true, prototype_review: true, prototype_verification: true,
160
+ antd_cli_verification: true, browser_verification: true, prototype_confirmation: true,
161
+ scaffold_status: "required", scaffold_contract_approved: true
150
162
  }
151
163
  complete_route = route_after_prototype(complete_facts)
152
164
  expected_steps = %w[engineering-baseline yss-router-scaffold-contract lifecycle-approve-scaffold-contract yss-ddd-scaffold-generator yss-backend-scaffold-parent yss-router-contract-recompile]
@@ -155,6 +167,16 @@ failures << "原型完成后的后端路由顺序不完整" unless complete_rout
155
167
  blocked_route = route_after_prototype(complete_facts.merge(prototype_confirmation: false))
156
168
  failures << "原型未确认时错误允许后端脚手架" unless blocked_route["status"] == "blocked" && blocked_route["reason"] == "prototype-confirmation-required"
157
169
 
170
+ {
171
+ prototype_review: "prototype-review-required",
172
+ prototype_verification: "prototype-verification-required",
173
+ antd_cli_verification: "antd-cli-verification-required",
174
+ browser_verification: "browser-verification-required"
175
+ }.each do |missing_fact, reason|
176
+ blocked = route_after_prototype(complete_facts.merge(missing_fact => false))
177
+ failures << "#{missing_fact} 缺失时错误允许后端脚手架" unless blocked["status"] == "blocked" && blocked["reason"] == reason
178
+ end
179
+
158
180
  missing_scaffold_contract = route_after_prototype(complete_facts.merge(scaffold_contract_approved: false))
159
181
  failures << "脚手架受控生成缺少批准合同仍被允许" unless missing_scaffold_contract["status"] == "blocked" && missing_scaffold_contract["reason"] == "scaffold-contract-required"
160
182
 
@@ -29,6 +29,9 @@ required_files=(
29
29
  "AGENTS.md"
30
30
  "CONTEXT.md"
31
31
  "skills-lock.json"
32
+ "docs/process/lifecycle-registry.yaml"
33
+ "docs/process/lifecycle-registry-baseline.json"
34
+ "docs/process/schemas/lifecycle-registry.schema.json"
32
35
  "docs/process/lifecycle-artifact-map.md"
33
36
  "docs/process/harness-process-tailoring.md"
34
37
  "docs/templates/local-parent-ticket-template.md"
@@ -39,11 +42,17 @@ required_files=(
39
42
  "scripts/update-skill-lock"
40
43
  "scripts/implementation-path-policy.rb"
41
44
  "scripts/verify-lifecycle-scenarios"
45
+ "scripts/generate-lifecycle-artifacts"
46
+ "scripts/verify-lifecycle-registry"
47
+ "scripts/test-lifecycle-registry.rb"
48
+ "scripts/verify-governance-release"
42
49
  "scripts/verify-implementation-path-scenarios"
43
50
  "scripts/verify-scaffold-generator-scenarios"
44
51
  "scripts/verify-prototype-backend-scaffold-scenarios"
45
52
  "scripts/verify-matt-yss-integration-scenarios"
46
53
  "scripts/verify-yss-ui-scenarios"
54
+ "scripts/verify-openapi-yaml-first-scenarios"
55
+ "scripts/verify-openapi-json-handoff-scenarios"
47
56
  )
48
57
 
49
58
  required_skills=(
@@ -120,19 +129,28 @@ lock.fetch("skills", {}).fetch("shared", {}).each do |skill_name, metadata|
120
129
  end
121
130
 
122
131
  openapi_path = root.join("docs/templates/openapi-spec-template.yaml")
123
- openapi_text = openapi_path.binread.force_encoding("UTF-8").sub(/\A---\n.*?\n---\n/m, "")
124
- YAML.safe_load(openapi_text, permitted_classes: [], aliases: true)
132
+ documents = YAML.load_stream(openapi_path.binread.force_encoding("UTF-8"))
133
+ unless documents.length == 1 && documents.first.is_a?(Hash) && documents.first["openapi"] == "3.1.0"
134
+ warn "docs/templates/openapi-spec-template.yaml 必须是单一 OAS 3.1 YAML document"
135
+ exit 1
136
+ end
125
137
  RUBY
126
138
 
127
139
  scripts/sync-skills --check
128
140
  scripts/update-skill-lock --check
141
+ scripts/verify-lifecycle-registry
129
142
  scripts/verify-lifecycle-scenarios
143
+ scripts/verify-governance-release
130
144
  scripts/verify-implementation-path-scenarios
131
145
  scripts/verify-scaffold-generator-scenarios
132
146
  scripts/verify-prototype-backend-scaffold-scenarios
133
147
  ruby scripts/verify-matt-yss-integration-scenarios
134
148
  scripts/verify-yss-router-scenarios
135
149
  scripts/verify-yss-ui-scenarios
150
+ scripts/verify-openapi-yaml-first-scenarios
151
+ scripts/verify-openapi-json-handoff-scenarios
152
+ ruby scripts/test-lifecycle-registry.rb
153
+ ruby scripts/test-export-yss-skills.rb
136
154
 
137
155
  ruby <<'RUBY'
138
156
  # encoding: UTF-8
@@ -161,7 +179,8 @@ obsolete_names = [
161
179
  "obsidian-vault",
162
180
  "writing-great-skills",
163
181
  "code-review-process",
164
- "yss-domain-modeling"
182
+ "yss-domain-modeling",
183
+ "yss-openapi"
165
184
  ].freeze
166
185
 
167
186
  agent_roots.each do |agent_root|
@@ -266,6 +285,11 @@ ruby -c scripts/sync-skills >/dev/null
266
285
  ruby -c scripts/update-skill-lock >/dev/null
267
286
  ruby -c scripts/implementation-path-policy.rb >/dev/null
268
287
  ruby -c scripts/verify-lifecycle-scenarios >/dev/null
288
+ ruby -c scripts/lifecycle-registry.rb >/dev/null
289
+ ruby -c scripts/generate-lifecycle-artifacts >/dev/null
290
+ ruby -c scripts/verify-lifecycle-registry >/dev/null
291
+ ruby -c scripts/test-lifecycle-registry.rb >/dev/null
292
+ ruby -c scripts/verify-governance-release >/dev/null
269
293
  ruby -c scripts/verify-prototype-backend-scaffold-scenarios >/dev/null
270
294
  ruby -c scripts/verify-matt-yss-integration-scenarios >/dev/null
271
295
  ruby -c scripts/verify-yss-ui-scenarios >/dev/null
@@ -38,7 +38,7 @@ def routing_input_violations(contract, input)
38
38
  contract.fetch("exclusive_flags").each do |left, right|
39
39
  violations << "#{left}/#{right}" unless flags[left] != flags[right]
40
40
  end
41
- violations
41
+ violations.uniq
42
42
  end
43
43
 
44
44
  def active_impacts(input)
@@ -49,7 +49,8 @@ base_input = {
49
49
  "slice_id" => "order-create",
50
50
  "impact_flags" => {
51
51
  "ui_impact" => true, "api_impact" => true, "no_api_impact" => false,
52
- "data_impact" => false, "backend_impact" => false, "cross_repo" => false
52
+ "data_impact" => false, "backend_impact" => false, "cross_repo" => false,
53
+ "existing_frozen_baseline" => false
53
54
  },
54
55
  "lifecycle" => {}, "implementation" => {}, "acceptance" => {}
55
56
  }
@@ -60,17 +61,36 @@ failures << "Invalid lifecycle input type was accepted" if routing_input_violati
60
61
  both_api_modes = base_input["impact_flags"].merge("api_impact" => true, "no_api_impact" => true)
61
62
  failures << "API/no-API exclusivity was not enforced" if routing_input_violations(CONTRACT, base_input.merge("impact_flags" => both_api_modes)).empty?
62
63
 
64
+ legacy_posture_key = %w[security permission posture].join("_")
65
+ failures << "Router 输入仍要求已废弃的专项输入" if CONTRACT.fetch("routing_input_required").include?(legacy_posture_key)
66
+ failures << "Router 仍声明已废弃的专项合同" if CONTRACT.key?(legacy_posture_key)
67
+ legacy_impact_flags = CONTRACT.fetch("impact_flags_required").select do |flag|
68
+ %w[permission security].any? { |prefix| flag.start_with?("#{prefix}_") }
69
+ end
70
+ failures << "Router 仍要求安全 / 权限派生旗标" unless (CONTRACT.fetch("impact_flags_required") & legacy_impact_flags).empty?
71
+ explicit_authorization_input = base_input.merge("acceptance" => {"behavior" => "角色授权规则变化"})
72
+ failures << "显式权限行为无法按普通输入进入 Router" unless routing_input_violations(CONTRACT, explicit_authorization_input).empty?
73
+
63
74
  common_ready = CONTRACT.dig("readiness", "common").to_h { |key| [key, true] }
64
75
  ui_ready = CONTRACT.dig("readiness", "ui_impact").to_h { |key| [key, true] }
65
76
  api_ready = CONTRACT.dig("readiness", "api_impact").to_h { |key| [key, true] }
66
77
  all_ui = common_ready.merge(ui_ready).merge(api_ready)
67
78
  failures << "Approved UI inputs were blocked" unless readiness_missing(CONTRACT, %w[ui_impact api_impact], all_ui).empty?
68
79
 
80
+ %w[prototype_review prototype_verification antd_cli_evidence browser_verification_evidence prototype_confirmation].each do |field|
81
+ failures << "Router UI readiness 缺少 #{field}" unless CONTRACT.dig("readiness", "ui_impact").include?(field)
82
+ end
83
+
69
84
  ui_without_confirmation = all_ui.merge("prototype_confirmation" => false)
70
85
  unless readiness_missing(CONTRACT, %w[ui_impact api_impact], ui_without_confirmation).include?("prototype_confirmation")
71
86
  failures << "UI implementation was not blocked without prototype confirmation"
72
87
  end
73
88
 
89
+ ui_without_browser_evidence = all_ui.merge("browser_verification_evidence" => false)
90
+ unless readiness_missing(CONTRACT, %w[ui_impact api_impact], ui_without_browser_evidence).include?("browser_verification_evidence")
91
+ failures << "UI implementation was not blocked without browser verification evidence"
92
+ end
93
+
74
94
  data_ready = common_ready.merge(CONTRACT.dig("readiness", "data_impact").to_h { |key| [key, true] })
75
95
  data_missing = data_ready.merge("data_architecture" => false)
76
96
  unless readiness_missing(CONTRACT, %w[data_impact], data_missing).include?("data_architecture")
@@ -504,14 +524,26 @@ backend_skill_mutation["backend"]["required_skills"].delete("mapstruct")
504
524
  failures << "Backend contract accepted incomplete skill closure" unless slice_contract_decision_violations(CONTRACT, backend_input, backend_evidence, backend_skill_mutation, backend_expected_skills).include?("backend.required_skills")
505
525
  failures << "Backend contract accepted omitted skill closure" if slice_contract_decision_violations(CONTRACT, backend_input, backend_evidence, backend_slice, []).empty?
506
526
 
527
+ component_route_examples = {
528
+ "Current-user" => {"impact" => "current-user-context", "skills" => ["yss-userinfo"]},
529
+ "Audit" => {"impact" => "audit-event", "skills" => ["yss-audit-log", "yss-userinfo", "yss-dto"]},
530
+ "Encryption" => {"impact" => "encryption-or-signing", "skills" => ["yss-security-algorithm", "yss-exception"]}
531
+ }
532
+ component_route_examples.each do |label, example|
533
+ candidate = Marshal.load(Marshal.dump(backend_slice))
534
+ candidate["backend"]["component_impacts"] = [example.fetch("impact")]
535
+ required_skills = dependency_closure(CONTRACT, backend_expected_skills + example.fetch("skills"), {})
536
+ candidate["backend"]["required_skills"] = required_skills
537
+ candidate["common"]["required_skills"] = required_skills
538
+ failures << "#{label} component route was rejected" unless slice_contract_decision_violations(
539
+ CONTRACT, backend_input, backend_evidence, candidate, required_skills
540
+ ).empty?
541
+ end
507
542
  component_slice = Marshal.load(Marshal.dump(backend_slice))
508
543
  component_slice["backend"]["component_impacts"] = ["current-user-context"]
509
544
  component_skills = dependency_closure(CONTRACT, backend_expected_skills + ["yss-userinfo"], {})
510
545
  component_slice["backend"]["required_skills"] = component_skills
511
546
  component_slice["common"]["required_skills"] = component_skills
512
- failures << "Current-user component route was rejected" unless slice_contract_decision_violations(
513
- CONTRACT, backend_input, backend_evidence, component_slice, component_skills
514
- ).empty?
515
547
  unknown_component = Marshal.load(Marshal.dump(component_slice))
516
548
  unknown_component["backend"]["component_impacts"] = ["unknown-component"]
517
549
  unless slice_contract_decision_violations(CONTRACT, backend_input, backend_evidence, unknown_component, component_skills).include?("backend.component_impacts")
@@ -730,6 +762,17 @@ mutations = {
730
762
  "drift" => valid_result.merge("status" => "drift"),
731
763
  "violation" => valid_result.merge("status" => "violation")
732
764
  }
765
+
766
+ valid_deferred = valid_result.merge(
767
+ "status" => "seam-deferred",
768
+ "seam_deferred" => [{
769
+ "risk" => "temporary adapter", "owner" => "team", "follow_up_ticket" => "T-2",
770
+ "verification_plan" => "contract test", "target_version_or_release_date" => "2026-09-01"
771
+ }]
772
+ )
773
+ unless execution_violations(CONTRACT, valid_deferred, *valid_args).empty?
774
+ failures << "Valid seam-deferred result was rejected"
775
+ end
733
776
  mutations.each do |expected, result|
734
777
  blocker = expected.sub(/-(empty|command|contract-version|status|shape|work-unit|missing|implemented-with-seam|not-applicable-reason|identity|area)$/, "")
735
778
  actual = execution_violations(CONTRACT, result, *valid_args)
@@ -870,15 +913,9 @@ end
870
913
 
871
914
  scaffold_pom_template = ROOT.join(".agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template")
872
915
  scaffold_pom_body = scaffold_pom_template.read
873
- smart_doc_plugin_versions = scaffold_pom_body.scan(/<artifactId>smart-doc-maven-plugin<\/artifactId>\s*<version>([^<]+)<\/version>/).flatten
874
- failures << "smart-doc Maven plugin version must be fixed at yss-4.0.0" unless smart_doc_plugin_versions == ["yss-4.0.0"]
875
- smart_doc_template = ROOT.join(".agents/skills/yss-ddd-scaffold-generator/assets/templates/config/smart-doc.json.template")
876
- smart_doc_body = smart_doc_template.file? ? smart_doc_template.read : ""
877
- %w[allInOne outPath packageFilters componentType].each do |marker|
878
- failures << "smart-doc template missing #{marker}" unless smart_doc_body.include?("\"#{marker}\"")
879
- end
880
- failures << "smart-doc packageFilters must use the supported single-star regex" unless smart_doc_body.include?("\"packageFilters\": \"{{base_package}}.*\"")
881
- failures << "smart-doc template contains environment secret settings" if smart_doc_body.match?(/appToken|openUrl|debugEnvUrl|serverUrl/)
916
+ failures << "后端脚手架不得保留旧 OpenAPI Maven 插件" if scaffold_pom_body.include?("smart-doc-maven-plugin")
917
+ legacy_openapi_template = ROOT.join(".agents/skills/yss-ddd-scaffold-generator/assets/templates/config/smart-doc.json.template")
918
+ failures << "后端脚手架不得保留旧 OpenAPI 配置模板" if legacy_openapi_template.exist?
882
919
 
883
920
  %w[
884
921
  yss-domain/SKILL.md
@@ -94,7 +94,7 @@
94
94
  "source": "mattpocock/skills",
95
95
  "sourceType": "github",
96
96
  "skillPath": "skills/engineering/code-review/SKILL.md",
97
- "effectiveHash": "e336f095361832fbac27866a8d1c0fc61716ea7ce266c2d6eb193781ac6f60be",
97
+ "effectiveHash": "e1a71372e9ef1e5dc422fdf138ba2803ad7d4f6ce82d0fe276017276b365c150",
98
98
  "upstreamHash": "1d5e7242a98674635be79ab310cdda0e555d36a9903d2526ebf4263d0b7997ca",
99
99
  "targets": [
100
100
  ".agents/skills",
@@ -328,7 +328,7 @@
328
328
  "source": "project",
329
329
  "sourceType": "local",
330
330
  "skillPath": ".agents/skills/high-fidelity-html-prototype/SKILL.md",
331
- "effectiveHash": "e6de720a81d38e75a96ee30b3b8443ff1df0fd94f99a2dc512dee2348c7ab6be",
331
+ "effectiveHash": "9cde0608db48293eb0c0784a4283a41ba582aabdc2ef9f77dc1606492d333eda",
332
332
  "targets": [
333
333
  ".agents/skills",
334
334
  ".claude/skills",
@@ -469,7 +469,7 @@
469
469
  "source": "project",
470
470
  "sourceType": "local",
471
471
  "skillPath": ".agents/skills/product-design-prototype/SKILL.md",
472
- "effectiveHash": "ca8a5c4dbd8b75ebf6febcf1887d6b51bf7daa953b505694dac01fd59aef2f1a",
472
+ "effectiveHash": "cd8f600b5fde968244186e365e6533c1b6edbd8e3726d3d2d3e38b8056457d7f",
473
473
  "targets": [
474
474
  ".agents/skills",
475
475
  ".claude/skills",
@@ -500,7 +500,7 @@
500
500
  "source": "project",
501
501
  "sourceType": "local",
502
502
  "skillPath": ".agents/skills/prototype-review/SKILL.md",
503
- "effectiveHash": "3c5973fab1fabafe32d852e63629e0bf13cc38769728fe2037595525a8dfa9e5",
503
+ "effectiveHash": "5502cd1617734eaf50b6aaa26ced6d5dfe60b5ef552ea81cdfb7150a9d3008d0",
504
504
  "targets": [
505
505
  ".agents/skills",
506
506
  ".claude/skills",
@@ -784,7 +784,7 @@
784
784
  "source": "project",
785
785
  "sourceType": "local",
786
786
  "skillPath": ".agents/skills/wireframe-prototype/SKILL.md",
787
- "effectiveHash": "aa1d29a77ad5104ca67cf796ddfeaeccc3b3ea669697557b55c283f42c6cdc11",
787
+ "effectiveHash": "200e1a34cc4de1f6a9f6a8e31e66c123568e804183d6661ee0c164086f88a88e",
788
788
  "targets": [
789
789
  ".agents/skills",
790
790
  ".claude/skills",
@@ -894,7 +894,7 @@
894
894
  "source": "project",
895
895
  "sourceType": "local",
896
896
  "skillPath": ".agents/skills/yss-api-integration/SKILL.md",
897
- "effectiveHash": "ac7223a22d83bb0b0365534ab4772847e64cb439c82e8a1d4a0b1c15b3d50a69",
897
+ "effectiveHash": "fb6ccf48f016b6df63c3072fc771344c29a1523b5daf08f9512e7bbd79c6a3bc",
898
898
  "targets": [
899
899
  ".agents/skills",
900
900
  ".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": "2dc2ac84fac2d4a3a1da433dcb863bd8f8c77dc559c584b688876ab2ff8fac05",
1032
+ "effectiveHash": "b0febe45515f862957742dabd2cfb1df7c56811b059f60821efee6712534a834",
1033
1033
  "targets": [
1034
1034
  ".agents/skills",
1035
1035
  ".claude/skills",
@@ -1044,7 +1044,7 @@
1044
1044
  "source": "project",
1045
1045
  "sourceType": "local",
1046
1046
  "skillPath": ".agents/skills/yss-design-system/SKILL.md",
1047
- "effectiveHash": "2626e379a57a197a87e97110eb805b68aae149b4e7388c15dab2b7a2ca55ea26",
1047
+ "effectiveHash": "0cf7028c716b33c6a4b376f8bc6d17708854c0e6b9c460fc60cfa3865be63ce5",
1048
1048
  "targets": [
1049
1049
  ".agents/skills",
1050
1050
  ".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": "b61aa0fdbcd1026757efade8054b84a4f260f1bdf3b1f4d9b6a0315a4a933979",
1182
+ "effectiveHash": "6b966c5824b80f5196c7fd8225238b3047d9e49f1f94c60179e4a567d82911f5",
1183
1183
  "targets": [
1184
1184
  ".agents/skills",
1185
1185
  ".claude/skills",
@@ -1265,11 +1265,11 @@
1265
1265
  ".trae/skills"
1266
1266
  ]
1267
1267
  },
1268
- "yss-openapi": {
1268
+ "yss-openapi-draft-review": {
1269
1269
  "source": "project",
1270
1270
  "sourceType": "local",
1271
- "skillPath": ".agents/skills/yss-openapi/SKILL.md",
1272
- "effectiveHash": "2283b86f5731d58d6138895f2418dd681abc49aa5b3b753b64ef3f7d0d87b690",
1271
+ "skillPath": ".agents/skills/yss-openapi-draft-review/SKILL.md",
1272
+ "effectiveHash": "dcf5c6125081e1adb3b3ee0204f2e14fec62dd2ccb7857d2f0d46c1b64e2755c",
1273
1273
  "targets": [
1274
1274
  ".agents/skills",
1275
1275
  ".claude/skills",
@@ -1280,11 +1280,11 @@
1280
1280
  ".trae/skills"
1281
1281
  ]
1282
1282
  },
1283
- "yss-openapi-draft-review": {
1283
+ "yss-openapi-governance": {
1284
1284
  "source": "project",
1285
1285
  "sourceType": "local",
1286
- "skillPath": ".agents/skills/yss-openapi-draft-review/SKILL.md",
1287
- "effectiveHash": "674d1b60d4b6fc5f13814e4b0c109fe183a54e23865f853994c0d7065847d40c",
1286
+ "skillPath": ".agents/skills/yss-openapi-governance/SKILL.md",
1287
+ "effectiveHash": "20ea763036bc0cbf355c2a644cc65e3054cfaa29de679f699409e24d8d647088",
1288
1288
  "targets": [
1289
1289
  ".agents/skills",
1290
1290
  ".claude/skills",
@@ -1295,11 +1295,11 @@
1295
1295
  ".trae/skills"
1296
1296
  ]
1297
1297
  },
1298
- "yss-openapi-governance": {
1298
+ "yss-page-module-development": {
1299
1299
  "source": "project",
1300
1300
  "sourceType": "local",
1301
- "skillPath": ".agents/skills/yss-openapi-governance/SKILL.md",
1302
- "effectiveHash": "9d34f131880fc517e163d2f73c93c8f141cc9d9411a6c015bd867d7085c4b31a",
1301
+ "skillPath": ".agents/skills/yss-page-module-development/SKILL.md",
1302
+ "effectiveHash": "3198981c5b138f1126e4c0c463eb195f47c4565a049518243651e8ea7bcc136c",
1303
1303
  "targets": [
1304
1304
  ".agents/skills",
1305
1305
  ".claude/skills",
@@ -1310,11 +1310,11 @@
1310
1310
  ".trae/skills"
1311
1311
  ]
1312
1312
  },
1313
- "yss-page-module-development": {
1313
+ "yss-product-lifecycle": {
1314
1314
  "source": "project",
1315
1315
  "sourceType": "local",
1316
- "skillPath": ".agents/skills/yss-page-module-development/SKILL.md",
1317
- "effectiveHash": "3198981c5b138f1126e4c0c463eb195f47c4565a049518243651e8ea7bcc136c",
1316
+ "skillPath": ".agents/skills/yss-product-lifecycle/SKILL.md",
1317
+ "effectiveHash": "1bdf5769a237d6a95bec19dc2ce5790ae052b164c79c9520373bacf9c7b28d0e",
1318
1318
  "targets": [
1319
1319
  ".agents/skills",
1320
1320
  ".claude/skills",
@@ -1325,11 +1325,11 @@
1325
1325
  ".trae/skills"
1326
1326
  ]
1327
1327
  },
1328
- "yss-product-lifecycle": {
1328
+ "yss-prototype-stage": {
1329
1329
  "source": "project",
1330
1330
  "sourceType": "local",
1331
- "skillPath": ".agents/skills/yss-product-lifecycle/SKILL.md",
1332
- "effectiveHash": "199a9f9422cdbb9e31d7517fa4ee9738e41e53a67188aeff9a0130d4f154f93a",
1331
+ "skillPath": ".agents/skills/yss-prototype-stage/SKILL.md",
1332
+ "effectiveHash": "38d4bb83e7a3bf104c11d99e4a8cad9f2094fb29da51f32b0e9a66ebcbe16d03",
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": "5f19ae24070a93bae92fcd8731857e9a57027c27970106eb82498484f8524008",
1377
+ "effectiveHash": "315788ec2c1fcca6f577fa3f83bf0e848404031c5691fd2ba8058ba25fcd0c14",
1378
1378
  "targets": [
1379
1379
  ".agents/skills",
1380
1380
  ".claude/skills",
@@ -1265,21 +1265,6 @@
1265
1265
  ".trae/skills"
1266
1266
  ]
1267
1267
  },
1268
- "yss-openapi": {
1269
- "source": "project",
1270
- "sourceType": "local",
1271
- "skillPath": ".agents/skills/yss-openapi/SKILL.md",
1272
- "effectiveHash": "2283b86f5731d58d6138895f2418dd681abc49aa5b3b753b64ef3f7d0d87b690",
1273
- "targets": [
1274
- ".agents/skills",
1275
- ".claude/skills",
1276
- ".codex/skills",
1277
- ".hermes/skills",
1278
- ".pi/skills",
1279
- ".qoder/skills",
1280
- ".trae/skills"
1281
- ]
1282
- },
1283
1268
  "yss-openapi-draft-review": {
1284
1269
  "source": "project",
1285
1270
  "sourceType": "local",
@@ -6,4 +6,4 @@ OpenAPI Freeze 指已通过评审、可作为前后端实现和契约测试输
6
6
 
7
7
  OpenAPI 契约文件存放于 `docs/api/specs/`,评审检查清单与 Freeze 记录模板见 `docs/api/templates/`。OpenAPI Freeze 或无 API 影响记录完成后,使用 `to-tickets` 拆分成窄垂直切片(见 [[垂直切片Ticket]])。OpenAPI Draft 属于待冻结资产,使用 `ready-for-human`;只有 Freeze 后的契约才支撑 `ready-for-agent` 的切片。
8
8
 
9
- YSS 的 OpenAPI 契约在实现后通过 `yss-openapi` 技能生成 OpenAPI JSON 并刷新前端 Orval API 客户端(见 [[YSS工程技能体系]])。
9
+ YSS 的 OpenAPI 契约以冻结的 OpenAPI 3.1 YAML 为唯一权威。`yss-openapi-governance` 使用锁定的 Redocly CLI 派生 JSON,随后由 `api-integration` 刷新前端 Orval API 客户端;JSON 与生成代码均不得手工修改(见 [[YSS工程技能体系]])。
@@ -2,7 +2,7 @@
2
2
 
3
3
  YSS skills 是项目内置的 YSS 工程规范技能,用于 DDD、UI、OpenAPI、Repository、Controller、DTO、组件和编码规范,与 Matt Pocock 的轻量流程技能互补(见 [[Matt技能体系]])。
4
4
 
5
- 按领域划分:后端脚手架(`yss-ddd-scaffold-generator` 及 Domain / Application / Infrastructure / Web / Adapter 分层技能)、领域建模(`yss-domain`)、持久层(`yss-repository`、`yss-mybatis`、`yss-db2mybatis`)、Web 契约(`yss-web-controller`、`yss-dto`、`yss-openapi`)、前端(`yss-ui`、`yss-components`、`yss-formily`、`yss-hook`、`yss-page-module-development`)、以及横切组件(`yss-cache`、`yss-exception`、`yss-log`、`yss-userinfo`、`yss-distributed-id`、`yss-security-algorithm`、`yss-resilience4j` 等)。
5
+ 按领域划分:后端脚手架(`yss-ddd-scaffold-generator` 及 Domain / Application / Infrastructure / Web / Adapter 分层技能)、领域建模(`yss-domain`)、持久层(`yss-repository`、`yss-mybatis`、`yss-db2mybatis`)、Web 契约(`yss-web-controller`、`yss-dto`、`yss-openapi-governance`、`yss-openapi-draft-review`)、前端(`yss-ui`、`yss-components`、`yss-formily`、`yss-hook`、`yss-page-module-development`、`api-integration`)、以及横切组件(`yss-cache`、`yss-exception`、`yss-log`、`yss-userinfo`、`yss-distributed-id`、`yss-security-algorithm`、`yss-resilience4j` 等)。
6
6
 
7
7
  技能路由纪律:核心 YSS skills 必须消费批准合同并返回 YSS Skill Execution Result(见 [[切片实现合同]]);路径越界、证据缺失、未执行验证、`drift`、`violation` 或 `new_impacts` 阻断继续实现或触发重路由。禁止绕过合同与检查清单直接在 `AGENTS.md` 中自行发明细则。
8
8
 
@@ -28,11 +28,11 @@
28
28
  "yss-log",
29
29
  "yss-microapp-commit",
30
30
  "yss-mybatis",
31
- "yss-openapi",
32
31
  "yss-openapi-draft-review",
33
32
  "yss-openapi-governance",
34
33
  "yss-page-module-development",
35
34
  "yss-product-lifecycle",
35
+ "yss-prototype-stage",
36
36
  "yss-repository",
37
37
  "yss-resilience4j",
38
38
  "yss-router",
@@ -74,7 +74,8 @@
74
74
  "yss-dto",
75
75
  "yss-jdbc",
76
76
  "yss-mybatis",
77
- "yss-repository"
77
+ "yss-repository",
78
+ "yss-web-controller"
78
79
  ]
79
80
  },
80
81
  {
@@ -88,10 +89,10 @@
88
89
  "yss-frontend-scaffold-generator",
89
90
  "yss-hook",
90
91
  "yss-page-module-development",
92
+ "yss-prototype-stage",
91
93
  "yss-ui",
92
94
  "yss-use-table-height",
93
- "yss-use-tree-height",
94
- "yss-web-controller"
95
+ "yss-use-tree-height"
95
96
  ]
96
97
  },
97
98
  {
@@ -99,7 +100,6 @@
99
100
  "description": "用于 YSS API 设计、审查、治理和生成集成的技能。",
100
101
  "skills": [
101
102
  "yss-api-integration",
102
- "yss-openapi",
103
103
  "yss-openapi-draft-review",
104
104
  "yss-openapi-governance"
105
105
  ]