create-yss-spec 2.2.0 → 2.2.1

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 (461) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/template/.agents/rules/yss-ai-skills.md +59 -0
  4. package/template/.agents/skills/.yss-skills-manifest.json +28 -0
  5. package/template/.agents/skills/component-selection-imports/SKILL.md +64 -0
  6. package/template/.agents/skills/file-export-download/SKILL.md +160 -0
  7. package/template/.agents/skills/file-export-download/agents/openai.yaml +4 -0
  8. package/template/.agents/skills/formily-foundation/SKILL.md +176 -0
  9. package/template/.agents/skills/formily-foundation/references/examples.md +486 -0
  10. package/template/.agents/skills/formily-linkage-effects/SKILL.md +167 -0
  11. package/template/.agents/skills/formily-mode-slot-detail/SKILL.md +137 -0
  12. package/template/.agents/skills/formily-step-flow/SKILL.md +194 -0
  13. package/template/.agents/skills/frontend-commit/SKILL.md +118 -0
  14. package/template/.agents/skills/frontend-commit/agents/openai.yaml +7 -0
  15. package/template/.agents/skills/frontend-commit/references/scope-and-examples.md +111 -0
  16. package/template/.agents/skills/java-backend-commit/SKILL.md +121 -0
  17. package/template/.agents/skills/java-backend-commit/agents/openai.yaml +7 -0
  18. package/template/.agents/skills/java-backend-commit/references/scope-and-examples.md +118 -0
  19. package/template/.agents/skills/page-form-module/SKILL.md +168 -0
  20. package/template/.agents/skills/page-list-module/SKILL.md +137 -0
  21. package/template/.agents/skills/page-skeleton/SKILL.md +76 -0
  22. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
  23. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
  24. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
  25. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
  26. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
  27. package/template/.agents/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
  28. package/template/.agents/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
  29. package/template/.agents/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
  30. package/template/.agents/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
  31. package/template/.agents/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
  32. package/template/.agents/skills/prototype-page-acceptance/SKILL.md +62 -0
  33. package/template/.agents/skills/theme-token-usage/SKILL.md +123 -0
  34. package/template/.agents/skills/theme-token-usage/agents/openai.yaml +4 -0
  35. package/template/.agents/skills/vue3-best-practices/SKILL.md +68 -0
  36. package/template/.agents/skills/yedit-table-usage/SKILL.md +227 -0
  37. package/template/.agents/skills/yss-api-integration/SKILL.md +12 -2
  38. package/template/.agents/skills/yss-components/SKILL.md +1 -1
  39. package/template/.agents/skills/yss-design-system/SKILL.md +1 -1
  40. package/template/.agents/skills/yss-formily/SKILL.md +233 -265
  41. package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
  42. package/template/.agents/skills/yss-hook/SKILL.md +1 -1
  43. package/template/.agents/skills/yss-openapi-governance/SKILL.md +2 -2
  44. package/template/.agents/skills/yss-page-module-development/SKILL.md +12 -2
  45. package/template/.agents/skills/yss-page-module-development/references/component-map.md +34 -0
  46. package/template/.agents/skills/yss-page-module-development/references/hooks-map.md +11 -0
  47. package/template/.agents/skills/yss-page-module-development/references/utils-map.md +14 -0
  48. package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +62 -1
  49. package/template/.agents/skills/yss-router/references/boundaries.md +1 -1
  50. package/template/.agents/skills/yss-router/references/router-contract.yaml +6 -2
  51. package/template/.agents/skills/yss-ui/SKILL.md +1 -1
  52. package/template/.agents/skills/yss-use-table-height/SKILL.md +9 -0
  53. package/template/.agents/skills/yss-use-tree-height/SKILL.md +9 -0
  54. package/template/.agents/skills/ytable-usage/SKILL.md +251 -0
  55. package/template/.agents/skills/ytree-usage/SKILL.md +132 -0
  56. package/template/.claude/skills/.yss-skills-manifest.json +29 -0
  57. package/template/.claude/skills/component-selection-imports/SKILL.md +64 -0
  58. package/template/.claude/skills/file-export-download/SKILL.md +160 -0
  59. package/template/.claude/skills/file-export-download/agents/openai.yaml +4 -0
  60. package/template/.claude/skills/formily-foundation/SKILL.md +176 -0
  61. package/template/.claude/skills/formily-foundation/references/examples.md +486 -0
  62. package/template/.claude/skills/formily-linkage-effects/SKILL.md +167 -0
  63. package/template/.claude/skills/formily-mode-slot-detail/SKILL.md +137 -0
  64. package/template/.claude/skills/formily-step-flow/SKILL.md +194 -0
  65. package/template/.claude/skills/frontend-commit/SKILL.md +118 -0
  66. package/template/.claude/skills/frontend-commit/agents/openai.yaml +7 -0
  67. package/template/.claude/skills/frontend-commit/references/scope-and-examples.md +111 -0
  68. package/template/.claude/skills/java-backend-commit/SKILL.md +121 -0
  69. package/template/.claude/skills/java-backend-commit/agents/openai.yaml +7 -0
  70. package/template/.claude/skills/java-backend-commit/references/scope-and-examples.md +118 -0
  71. package/template/.claude/skills/page-form-module/SKILL.md +168 -0
  72. package/template/.claude/skills/page-list-module/SKILL.md +137 -0
  73. package/template/.claude/skills/page-skeleton/SKILL.md +76 -0
  74. package/template/.claude/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
  75. package/template/.claude/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
  76. package/template/.claude/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
  77. package/template/.claude/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
  78. package/template/.claude/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
  79. package/template/.claude/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
  80. package/template/.claude/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
  81. package/template/.claude/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
  82. package/template/.claude/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
  83. package/template/.claude/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
  84. package/template/.claude/skills/prototype-page-acceptance/SKILL.md +62 -0
  85. package/template/.claude/skills/theme-token-usage/SKILL.md +123 -0
  86. package/template/.claude/skills/theme-token-usage/agents/openai.yaml +4 -0
  87. package/template/.claude/skills/vue3-best-practices/SKILL.md +68 -0
  88. package/template/.claude/skills/yedit-table-usage/SKILL.md +227 -0
  89. package/template/.claude/skills/yss-api-integration/SKILL.md +12 -2
  90. package/template/.claude/skills/yss-components/SKILL.md +1 -1
  91. package/template/.claude/skills/yss-design-system/SKILL.md +1 -1
  92. package/template/.claude/skills/yss-formily/SKILL.md +233 -265
  93. package/template/.claude/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
  94. package/template/.claude/skills/yss-hook/SKILL.md +1 -1
  95. package/template/.claude/skills/yss-openapi-governance/SKILL.md +2 -2
  96. package/template/.claude/skills/yss-page-module-development/SKILL.md +12 -2
  97. package/template/.claude/skills/yss-page-module-development/references/component-map.md +34 -0
  98. package/template/.claude/skills/yss-page-module-development/references/hooks-map.md +11 -0
  99. package/template/.claude/skills/yss-page-module-development/references/utils-map.md +14 -0
  100. package/template/.claude/skills/yss-product-lifecycle/references/orchestration-contract.yaml +62 -1
  101. package/template/.claude/skills/yss-router/references/boundaries.md +1 -1
  102. package/template/.claude/skills/yss-router/references/router-contract.yaml +6 -2
  103. package/template/.claude/skills/yss-ui/SKILL.md +1 -1
  104. package/template/.claude/skills/yss-use-table-height/SKILL.md +9 -0
  105. package/template/.claude/skills/yss-use-tree-height/SKILL.md +9 -0
  106. package/template/.claude/skills/ytable-usage/SKILL.md +251 -0
  107. package/template/.claude/skills/ytree-usage/SKILL.md +132 -0
  108. package/template/.codex/skills/component-selection-imports/SKILL.md +64 -0
  109. package/template/.codex/skills/file-export-download/SKILL.md +160 -0
  110. package/template/.codex/skills/file-export-download/agents/openai.yaml +4 -0
  111. package/template/.codex/skills/formily-foundation/SKILL.md +176 -0
  112. package/template/.codex/skills/formily-foundation/references/examples.md +486 -0
  113. package/template/.codex/skills/formily-linkage-effects/SKILL.md +167 -0
  114. package/template/.codex/skills/formily-mode-slot-detail/SKILL.md +137 -0
  115. package/template/.codex/skills/formily-step-flow/SKILL.md +194 -0
  116. package/template/.codex/skills/frontend-commit/SKILL.md +118 -0
  117. package/template/.codex/skills/frontend-commit/agents/openai.yaml +7 -0
  118. package/template/.codex/skills/frontend-commit/references/scope-and-examples.md +111 -0
  119. package/template/.codex/skills/java-backend-commit/SKILL.md +121 -0
  120. package/template/.codex/skills/java-backend-commit/agents/openai.yaml +7 -0
  121. package/template/.codex/skills/java-backend-commit/references/scope-and-examples.md +118 -0
  122. package/template/.codex/skills/page-form-module/SKILL.md +168 -0
  123. package/template/.codex/skills/page-list-module/SKILL.md +137 -0
  124. package/template/.codex/skills/page-skeleton/SKILL.md +76 -0
  125. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
  126. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
  127. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
  128. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
  129. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
  130. package/template/.codex/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
  131. package/template/.codex/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
  132. package/template/.codex/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
  133. package/template/.codex/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
  134. package/template/.codex/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
  135. package/template/.codex/skills/prototype-page-acceptance/SKILL.md +62 -0
  136. package/template/.codex/skills/theme-token-usage/SKILL.md +123 -0
  137. package/template/.codex/skills/theme-token-usage/agents/openai.yaml +4 -0
  138. package/template/.codex/skills/vue3-best-practices/SKILL.md +68 -0
  139. package/template/.codex/skills/yedit-table-usage/SKILL.md +227 -0
  140. package/template/.codex/skills/yss-api-integration/SKILL.md +12 -2
  141. package/template/.codex/skills/yss-components/SKILL.md +1 -1
  142. package/template/.codex/skills/yss-design-system/SKILL.md +1 -1
  143. package/template/.codex/skills/yss-formily/SKILL.md +233 -265
  144. package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
  145. package/template/.codex/skills/yss-hook/SKILL.md +1 -1
  146. package/template/.codex/skills/yss-openapi-governance/SKILL.md +2 -2
  147. package/template/.codex/skills/yss-page-module-development/SKILL.md +12 -2
  148. package/template/.codex/skills/yss-page-module-development/references/component-map.md +34 -0
  149. package/template/.codex/skills/yss-page-module-development/references/hooks-map.md +11 -0
  150. package/template/.codex/skills/yss-page-module-development/references/utils-map.md +14 -0
  151. package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +62 -1
  152. package/template/.codex/skills/yss-router/references/boundaries.md +1 -1
  153. package/template/.codex/skills/yss-router/references/router-contract.yaml +6 -2
  154. package/template/.codex/skills/yss-ui/SKILL.md +1 -1
  155. package/template/.codex/skills/yss-use-table-height/SKILL.md +9 -0
  156. package/template/.codex/skills/yss-use-tree-height/SKILL.md +9 -0
  157. package/template/.codex/skills/ytable-usage/SKILL.md +251 -0
  158. package/template/.codex/skills/ytree-usage/SKILL.md +132 -0
  159. package/template/.cursor/skills/.yss-skills-manifest.json +29 -0
  160. package/template/.cursor/skills/component-selection-imports/SKILL.md +64 -0
  161. package/template/.cursor/skills/file-export-download/SKILL.md +160 -0
  162. package/template/.cursor/skills/file-export-download/agents/openai.yaml +4 -0
  163. package/template/.cursor/skills/formily-foundation/SKILL.md +176 -0
  164. package/template/.cursor/skills/formily-foundation/references/examples.md +486 -0
  165. package/template/.cursor/skills/formily-linkage-effects/SKILL.md +167 -0
  166. package/template/.cursor/skills/formily-mode-slot-detail/SKILL.md +137 -0
  167. package/template/.cursor/skills/formily-step-flow/SKILL.md +194 -0
  168. package/template/.cursor/skills/frontend-commit/SKILL.md +118 -0
  169. package/template/.cursor/skills/frontend-commit/agents/openai.yaml +7 -0
  170. package/template/.cursor/skills/frontend-commit/references/scope-and-examples.md +111 -0
  171. package/template/.cursor/skills/java-backend-commit/SKILL.md +121 -0
  172. package/template/.cursor/skills/java-backend-commit/agents/openai.yaml +7 -0
  173. package/template/.cursor/skills/java-backend-commit/references/scope-and-examples.md +118 -0
  174. package/template/.cursor/skills/page-form-module/SKILL.md +168 -0
  175. package/template/.cursor/skills/page-list-module/SKILL.md +137 -0
  176. package/template/.cursor/skills/page-skeleton/SKILL.md +76 -0
  177. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
  178. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
  179. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
  180. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
  181. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
  182. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
  183. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
  184. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
  185. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
  186. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
  187. package/template/.cursor/skills/prototype-page-acceptance/SKILL.md +62 -0
  188. package/template/.cursor/skills/theme-token-usage/SKILL.md +123 -0
  189. package/template/.cursor/skills/theme-token-usage/agents/openai.yaml +4 -0
  190. package/template/.cursor/skills/vue3-best-practices/SKILL.md +68 -0
  191. package/template/.cursor/skills/yedit-table-usage/SKILL.md +227 -0
  192. package/template/.cursor/skills/yss-api-integration/SKILL.md +12 -2
  193. package/template/.cursor/skills/yss-components/SKILL.md +1 -1
  194. package/template/.cursor/skills/yss-design-system/SKILL.md +1 -1
  195. package/template/.cursor/skills/yss-formily/SKILL.md +233 -265
  196. package/template/.cursor/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
  197. package/template/.cursor/skills/yss-hook/SKILL.md +1 -1
  198. package/template/.cursor/skills/yss-openapi-governance/SKILL.md +2 -2
  199. package/template/.cursor/skills/yss-page-module-development/SKILL.md +12 -2
  200. package/template/.cursor/skills/yss-page-module-development/references/component-map.md +34 -0
  201. package/template/.cursor/skills/yss-page-module-development/references/hooks-map.md +11 -0
  202. package/template/.cursor/skills/yss-page-module-development/references/utils-map.md +14 -0
  203. package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +62 -1
  204. package/template/.cursor/skills/yss-router/references/boundaries.md +1 -1
  205. package/template/.cursor/skills/yss-router/references/router-contract.yaml +6 -2
  206. package/template/.cursor/skills/yss-ui/SKILL.md +1 -1
  207. package/template/.cursor/skills/yss-use-table-height/SKILL.md +9 -0
  208. package/template/.cursor/skills/yss-use-tree-height/SKILL.md +9 -0
  209. package/template/.cursor/skills/ytable-usage/SKILL.md +251 -0
  210. package/template/.cursor/skills/ytree-usage/SKILL.md +132 -0
  211. package/template/.cursorrules +32 -0
  212. package/template/.hermes/skills/component-selection-imports/SKILL.md +64 -0
  213. package/template/.hermes/skills/file-export-download/SKILL.md +160 -0
  214. package/template/.hermes/skills/file-export-download/agents/openai.yaml +4 -0
  215. package/template/.hermes/skills/formily-foundation/SKILL.md +176 -0
  216. package/template/.hermes/skills/formily-foundation/references/examples.md +486 -0
  217. package/template/.hermes/skills/formily-linkage-effects/SKILL.md +167 -0
  218. package/template/.hermes/skills/formily-mode-slot-detail/SKILL.md +137 -0
  219. package/template/.hermes/skills/formily-step-flow/SKILL.md +194 -0
  220. package/template/.hermes/skills/frontend-commit/SKILL.md +118 -0
  221. package/template/.hermes/skills/frontend-commit/agents/openai.yaml +7 -0
  222. package/template/.hermes/skills/frontend-commit/references/scope-and-examples.md +111 -0
  223. package/template/.hermes/skills/java-backend-commit/SKILL.md +121 -0
  224. package/template/.hermes/skills/java-backend-commit/agents/openai.yaml +7 -0
  225. package/template/.hermes/skills/java-backend-commit/references/scope-and-examples.md +118 -0
  226. package/template/.hermes/skills/page-form-module/SKILL.md +168 -0
  227. package/template/.hermes/skills/page-list-module/SKILL.md +137 -0
  228. package/template/.hermes/skills/page-skeleton/SKILL.md +76 -0
  229. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
  230. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
  231. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
  232. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
  233. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
  234. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
  235. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
  236. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
  237. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
  238. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
  239. package/template/.hermes/skills/prototype-page-acceptance/SKILL.md +62 -0
  240. package/template/.hermes/skills/theme-token-usage/SKILL.md +123 -0
  241. package/template/.hermes/skills/theme-token-usage/agents/openai.yaml +4 -0
  242. package/template/.hermes/skills/vue3-best-practices/SKILL.md +68 -0
  243. package/template/.hermes/skills/yedit-table-usage/SKILL.md +227 -0
  244. package/template/.hermes/skills/yss-api-integration/SKILL.md +12 -2
  245. package/template/.hermes/skills/yss-components/SKILL.md +1 -1
  246. package/template/.hermes/skills/yss-design-system/SKILL.md +1 -1
  247. package/template/.hermes/skills/yss-formily/SKILL.md +233 -265
  248. package/template/.hermes/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
  249. package/template/.hermes/skills/yss-hook/SKILL.md +1 -1
  250. package/template/.hermes/skills/yss-openapi-governance/SKILL.md +2 -2
  251. package/template/.hermes/skills/yss-page-module-development/SKILL.md +12 -2
  252. package/template/.hermes/skills/yss-page-module-development/references/component-map.md +34 -0
  253. package/template/.hermes/skills/yss-page-module-development/references/hooks-map.md +11 -0
  254. package/template/.hermes/skills/yss-page-module-development/references/utils-map.md +14 -0
  255. package/template/.hermes/skills/yss-product-lifecycle/references/orchestration-contract.yaml +62 -1
  256. package/template/.hermes/skills/yss-router/references/boundaries.md +1 -1
  257. package/template/.hermes/skills/yss-router/references/router-contract.yaml +6 -2
  258. package/template/.hermes/skills/yss-ui/SKILL.md +1 -1
  259. package/template/.hermes/skills/yss-use-table-height/SKILL.md +9 -0
  260. package/template/.hermes/skills/yss-use-tree-height/SKILL.md +9 -0
  261. package/template/.hermes/skills/ytable-usage/SKILL.md +251 -0
  262. package/template/.hermes/skills/ytree-usage/SKILL.md +132 -0
  263. package/template/.pi/skills/component-selection-imports/SKILL.md +64 -0
  264. package/template/.pi/skills/file-export-download/SKILL.md +160 -0
  265. package/template/.pi/skills/file-export-download/agents/openai.yaml +4 -0
  266. package/template/.pi/skills/formily-foundation/SKILL.md +176 -0
  267. package/template/.pi/skills/formily-foundation/references/examples.md +486 -0
  268. package/template/.pi/skills/formily-linkage-effects/SKILL.md +167 -0
  269. package/template/.pi/skills/formily-mode-slot-detail/SKILL.md +137 -0
  270. package/template/.pi/skills/formily-step-flow/SKILL.md +194 -0
  271. package/template/.pi/skills/frontend-commit/SKILL.md +118 -0
  272. package/template/.pi/skills/frontend-commit/agents/openai.yaml +7 -0
  273. package/template/.pi/skills/frontend-commit/references/scope-and-examples.md +111 -0
  274. package/template/.pi/skills/java-backend-commit/SKILL.md +121 -0
  275. package/template/.pi/skills/java-backend-commit/agents/openai.yaml +7 -0
  276. package/template/.pi/skills/java-backend-commit/references/scope-and-examples.md +118 -0
  277. package/template/.pi/skills/page-form-module/SKILL.md +168 -0
  278. package/template/.pi/skills/page-list-module/SKILL.md +137 -0
  279. package/template/.pi/skills/page-skeleton/SKILL.md +76 -0
  280. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
  281. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
  282. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
  283. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
  284. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
  285. package/template/.pi/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
  286. package/template/.pi/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
  287. package/template/.pi/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
  288. package/template/.pi/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
  289. package/template/.pi/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
  290. package/template/.pi/skills/prototype-page-acceptance/SKILL.md +62 -0
  291. package/template/.pi/skills/theme-token-usage/SKILL.md +123 -0
  292. package/template/.pi/skills/theme-token-usage/agents/openai.yaml +4 -0
  293. package/template/.pi/skills/vue3-best-practices/SKILL.md +68 -0
  294. package/template/.pi/skills/yedit-table-usage/SKILL.md +227 -0
  295. package/template/.pi/skills/yss-api-integration/SKILL.md +12 -2
  296. package/template/.pi/skills/yss-components/SKILL.md +1 -1
  297. package/template/.pi/skills/yss-design-system/SKILL.md +1 -1
  298. package/template/.pi/skills/yss-formily/SKILL.md +233 -265
  299. package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
  300. package/template/.pi/skills/yss-hook/SKILL.md +1 -1
  301. package/template/.pi/skills/yss-openapi-governance/SKILL.md +2 -2
  302. package/template/.pi/skills/yss-page-module-development/SKILL.md +12 -2
  303. package/template/.pi/skills/yss-page-module-development/references/component-map.md +34 -0
  304. package/template/.pi/skills/yss-page-module-development/references/hooks-map.md +11 -0
  305. package/template/.pi/skills/yss-page-module-development/references/utils-map.md +14 -0
  306. package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +62 -1
  307. package/template/.pi/skills/yss-router/references/boundaries.md +1 -1
  308. package/template/.pi/skills/yss-router/references/router-contract.yaml +6 -2
  309. package/template/.pi/skills/yss-ui/SKILL.md +1 -1
  310. package/template/.pi/skills/yss-use-table-height/SKILL.md +9 -0
  311. package/template/.pi/skills/yss-use-tree-height/SKILL.md +9 -0
  312. package/template/.pi/skills/ytable-usage/SKILL.md +251 -0
  313. package/template/.pi/skills/ytree-usage/SKILL.md +132 -0
  314. package/template/.qoder/skills/component-selection-imports/SKILL.md +64 -0
  315. package/template/.qoder/skills/file-export-download/SKILL.md +160 -0
  316. package/template/.qoder/skills/file-export-download/agents/openai.yaml +4 -0
  317. package/template/.qoder/skills/formily-foundation/SKILL.md +176 -0
  318. package/template/.qoder/skills/formily-foundation/references/examples.md +486 -0
  319. package/template/.qoder/skills/formily-linkage-effects/SKILL.md +167 -0
  320. package/template/.qoder/skills/formily-mode-slot-detail/SKILL.md +137 -0
  321. package/template/.qoder/skills/formily-step-flow/SKILL.md +194 -0
  322. package/template/.qoder/skills/frontend-commit/SKILL.md +118 -0
  323. package/template/.qoder/skills/frontend-commit/agents/openai.yaml +7 -0
  324. package/template/.qoder/skills/frontend-commit/references/scope-and-examples.md +111 -0
  325. package/template/.qoder/skills/java-backend-commit/SKILL.md +121 -0
  326. package/template/.qoder/skills/java-backend-commit/agents/openai.yaml +7 -0
  327. package/template/.qoder/skills/java-backend-commit/references/scope-and-examples.md +118 -0
  328. package/template/.qoder/skills/page-form-module/SKILL.md +168 -0
  329. package/template/.qoder/skills/page-list-module/SKILL.md +137 -0
  330. package/template/.qoder/skills/page-skeleton/SKILL.md +76 -0
  331. package/template/.qoder/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
  332. package/template/.qoder/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
  333. package/template/.qoder/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
  334. package/template/.qoder/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
  335. package/template/.qoder/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
  336. package/template/.qoder/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
  337. package/template/.qoder/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
  338. package/template/.qoder/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
  339. package/template/.qoder/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
  340. package/template/.qoder/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
  341. package/template/.qoder/skills/prototype-page-acceptance/SKILL.md +62 -0
  342. package/template/.qoder/skills/theme-token-usage/SKILL.md +123 -0
  343. package/template/.qoder/skills/theme-token-usage/agents/openai.yaml +4 -0
  344. package/template/.qoder/skills/vue3-best-practices/SKILL.md +68 -0
  345. package/template/.qoder/skills/yedit-table-usage/SKILL.md +227 -0
  346. package/template/.qoder/skills/yss-api-integration/SKILL.md +12 -2
  347. package/template/.qoder/skills/yss-components/SKILL.md +1 -1
  348. package/template/.qoder/skills/yss-design-system/SKILL.md +1 -1
  349. package/template/.qoder/skills/yss-formily/SKILL.md +233 -265
  350. package/template/.qoder/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
  351. package/template/.qoder/skills/yss-hook/SKILL.md +1 -1
  352. package/template/.qoder/skills/yss-openapi-governance/SKILL.md +2 -2
  353. package/template/.qoder/skills/yss-page-module-development/SKILL.md +12 -2
  354. package/template/.qoder/skills/yss-page-module-development/references/component-map.md +34 -0
  355. package/template/.qoder/skills/yss-page-module-development/references/hooks-map.md +11 -0
  356. package/template/.qoder/skills/yss-page-module-development/references/utils-map.md +14 -0
  357. package/template/.qoder/skills/yss-product-lifecycle/references/orchestration-contract.yaml +62 -1
  358. package/template/.qoder/skills/yss-router/references/boundaries.md +1 -1
  359. package/template/.qoder/skills/yss-router/references/router-contract.yaml +6 -2
  360. package/template/.qoder/skills/yss-ui/SKILL.md +1 -1
  361. package/template/.qoder/skills/yss-use-table-height/SKILL.md +9 -0
  362. package/template/.qoder/skills/yss-use-tree-height/SKILL.md +9 -0
  363. package/template/.qoder/skills/ytable-usage/SKILL.md +251 -0
  364. package/template/.qoder/skills/ytree-usage/SKILL.md +132 -0
  365. package/template/.trae/skills/.yss-skills-manifest.json +29 -0
  366. package/template/.trae/skills/component-selection-imports/SKILL.md +64 -0
  367. package/template/.trae/skills/file-export-download/SKILL.md +160 -0
  368. package/template/.trae/skills/file-export-download/agents/openai.yaml +4 -0
  369. package/template/.trae/skills/formily-foundation/SKILL.md +176 -0
  370. package/template/.trae/skills/formily-foundation/references/examples.md +486 -0
  371. package/template/.trae/skills/formily-linkage-effects/SKILL.md +167 -0
  372. package/template/.trae/skills/formily-mode-slot-detail/SKILL.md +137 -0
  373. package/template/.trae/skills/formily-step-flow/SKILL.md +194 -0
  374. package/template/.trae/skills/frontend-commit/SKILL.md +118 -0
  375. package/template/.trae/skills/frontend-commit/agents/openai.yaml +7 -0
  376. package/template/.trae/skills/frontend-commit/references/scope-and-examples.md +111 -0
  377. package/template/.trae/skills/java-backend-commit/SKILL.md +121 -0
  378. package/template/.trae/skills/java-backend-commit/agents/openai.yaml +7 -0
  379. package/template/.trae/skills/java-backend-commit/references/scope-and-examples.md +118 -0
  380. package/template/.trae/skills/page-form-module/SKILL.md +168 -0
  381. package/template/.trae/skills/page-list-module/SKILL.md +137 -0
  382. package/template/.trae/skills/page-skeleton/SKILL.md +76 -0
  383. package/template/.trae/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
  384. package/template/.trae/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
  385. package/template/.trae/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
  386. package/template/.trae/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
  387. package/template/.trae/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
  388. package/template/.trae/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
  389. package/template/.trae/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
  390. package/template/.trae/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
  391. package/template/.trae/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
  392. package/template/.trae/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
  393. package/template/.trae/skills/prototype-page-acceptance/SKILL.md +62 -0
  394. package/template/.trae/skills/theme-token-usage/SKILL.md +123 -0
  395. package/template/.trae/skills/theme-token-usage/agents/openai.yaml +4 -0
  396. package/template/.trae/skills/vue3-best-practices/SKILL.md +68 -0
  397. package/template/.trae/skills/yedit-table-usage/SKILL.md +227 -0
  398. package/template/.trae/skills/yss-api-integration/SKILL.md +12 -2
  399. package/template/.trae/skills/yss-components/SKILL.md +1 -1
  400. package/template/.trae/skills/yss-design-system/SKILL.md +1 -1
  401. package/template/.trae/skills/yss-formily/SKILL.md +233 -265
  402. package/template/.trae/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
  403. package/template/.trae/skills/yss-hook/SKILL.md +1 -1
  404. package/template/.trae/skills/yss-openapi-governance/SKILL.md +2 -2
  405. package/template/.trae/skills/yss-page-module-development/SKILL.md +12 -2
  406. package/template/.trae/skills/yss-page-module-development/references/component-map.md +34 -0
  407. package/template/.trae/skills/yss-page-module-development/references/hooks-map.md +11 -0
  408. package/template/.trae/skills/yss-page-module-development/references/utils-map.md +14 -0
  409. package/template/.trae/skills/yss-product-lifecycle/references/orchestration-contract.yaml +62 -1
  410. package/template/.trae/skills/yss-router/references/boundaries.md +1 -1
  411. package/template/.trae/skills/yss-router/references/router-contract.yaml +6 -2
  412. package/template/.trae/skills/yss-ui/SKILL.md +1 -1
  413. package/template/.trae/skills/yss-use-table-height/SKILL.md +9 -0
  414. package/template/.trae/skills/yss-use-tree-height/SKILL.md +9 -0
  415. package/template/.trae/skills/ytable-usage/SKILL.md +251 -0
  416. package/template/.trae/skills/ytree-usage/SKILL.md +132 -0
  417. package/template/docs/agents/skill-migrations.md +16 -0
  418. package/template/docs/agents/skills-maintenance.md +1 -1
  419. package/template/docs/agents/yss-skill-registry.yaml +125 -25
  420. 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 +4 -4
  421. 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
  422. package/template/scripts/lib/scenario-checks.mjs +21 -0
  423. package/template/scripts/lib/skill-governance.mjs +50 -0
  424. package/template/scripts/lib/skill-registry.mjs +82 -5
  425. package/template/scripts/lib/skill-supply-chain.mjs +5 -1
  426. package/template/scripts/verify-skill-governance +10 -0
  427. package/template/scripts/verify-template +3 -2
  428. package/template/skills-lock.json +285 -29
  429. package/template.snapshot.json +4 -4
  430. package/template/.agents/skills/high-fidelity-html-prototype/SKILL.md +0 -89
  431. package/template/.agents/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
  432. package/template/.agents/skills/yss-formily/agents/openai.yaml +0 -5
  433. package/template/.agents/skills/yss-formily/references/examples.md +0 -65
  434. package/template/.claude/skills/high-fidelity-html-prototype/SKILL.md +0 -89
  435. package/template/.claude/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
  436. package/template/.claude/skills/yss-formily/agents/openai.yaml +0 -5
  437. package/template/.claude/skills/yss-formily/references/examples.md +0 -65
  438. package/template/.codex/skills/high-fidelity-html-prototype/SKILL.md +0 -89
  439. package/template/.codex/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
  440. package/template/.codex/skills/yss-formily/agents/openai.yaml +0 -5
  441. package/template/.codex/skills/yss-formily/references/examples.md +0 -65
  442. package/template/.cursor/skills/high-fidelity-html-prototype/SKILL.md +0 -89
  443. package/template/.cursor/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
  444. package/template/.cursor/skills/yss-formily/agents/openai.yaml +0 -5
  445. package/template/.cursor/skills/yss-formily/references/examples.md +0 -65
  446. package/template/.hermes/skills/high-fidelity-html-prototype/SKILL.md +0 -89
  447. package/template/.hermes/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
  448. package/template/.hermes/skills/yss-formily/agents/openai.yaml +0 -5
  449. package/template/.hermes/skills/yss-formily/references/examples.md +0 -65
  450. package/template/.pi/skills/high-fidelity-html-prototype/SKILL.md +0 -89
  451. package/template/.pi/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
  452. package/template/.pi/skills/yss-formily/agents/openai.yaml +0 -5
  453. package/template/.pi/skills/yss-formily/references/examples.md +0 -65
  454. package/template/.qoder/skills/high-fidelity-html-prototype/SKILL.md +0 -89
  455. package/template/.qoder/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
  456. package/template/.qoder/skills/yss-formily/agents/openai.yaml +0 -5
  457. package/template/.qoder/skills/yss-formily/references/examples.md +0 -65
  458. package/template/.trae/skills/high-fidelity-html-prototype/SKILL.md +0 -89
  459. package/template/.trae/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
  460. package/template/.trae/skills/yss-formily/agents/openai.yaml +0 -5
  461. package/template/.trae/skills/yss-formily/references/examples.md +0 -65
@@ -1,14 +1,14 @@
1
1
  schema_version: 1
2
2
  registry_id: yss.skill-routing
3
- status: shadow
3
+ status: active
4
4
  description: >-
5
- 技能分层、别名、默认可发现性和 Agent 运行时入口的 shadow 路由注册表。
6
- 本文件不替代 skills-lock.json 的来源、hash 与投影完整性职责;Router 与生命周期编排器在 status=shadow 时不得消费本表做运行时裁剪。
5
+ 技能分层、别名、默认可发现性和 Agent 运行时入口的可执行路由注册表。
6
+ 本文件不替代 skills-lock.json 的来源、hash 与投影完整性职责;Router 与生命周期编排器只消费通过本表校验的 canonical 技能。
7
7
  canonical_content_root: .agents/skills
8
8
  runtime_policy:
9
- consumed_by_router: false
10
- consumed_by_lifecycle: false
11
- discovery_enforced: false
9
+ consumed_by_router: true
10
+ consumed_by_lifecycle: true
11
+ discovery_enforced: true
12
12
  agent_runtime_roots:
13
13
  claude: .claude/skills
14
14
  codex: .codex/skills
@@ -27,7 +27,7 @@ skills:
27
27
  - id: ask-matt
28
28
  layer: compatibility
29
29
  maturity: supported
30
- instance_default_discoverable: true
30
+ instance_default_discoverable: false
31
31
  aliases: []
32
32
  impacts: [lifecycle]
33
33
  - id: code-review
@@ -75,13 +75,13 @@ skills:
75
75
  - id: grill-me
76
76
  layer: compatibility
77
77
  maturity: supported
78
- instance_default_discoverable: true
78
+ instance_default_discoverable: false
79
79
  aliases: []
80
80
  impacts: [discovery]
81
81
  - id: grill-with-docs
82
82
  layer: compatibility
83
83
  maturity: supported
84
- instance_default_discoverable: true
84
+ instance_default_discoverable: false
85
85
  aliases: []
86
86
  impacts: [discovery]
87
87
  - id: grilling
@@ -96,17 +96,10 @@ skills:
96
96
  instance_default_discoverable: true
97
97
  aliases: []
98
98
  impacts: [lifecycle]
99
- - id: high-fidelity-html-prototype
100
- layer: compatibility
101
- maturity: deprecated
102
- instance_default_discoverable: false
103
- aliases: []
104
- impacts: [prototype]
105
- replaced_by: yss-prototype-stage
106
99
  - id: implement
107
100
  layer: compatibility
108
101
  maturity: supported
109
- instance_default_discoverable: true
102
+ instance_default_discoverable: false
110
103
  aliases: []
111
104
  impacts: [lifecycle]
112
105
  - id: implementation-repo-onboarding
@@ -118,7 +111,7 @@ skills:
118
111
  - id: improve-codebase-architecture
119
112
  layer: compatibility
120
113
  maturity: supported
121
- instance_default_discoverable: true
114
+ instance_default_discoverable: false
122
115
  aliases: []
123
116
  impacts: [quality]
124
117
  - id: llm-wiki
@@ -190,7 +183,7 @@ skills:
190
183
  - id: setup-matt-pocock-skills
191
184
  layer: compatibility
192
185
  maturity: supported
193
- instance_default_discoverable: true
186
+ instance_default_discoverable: false
194
187
  aliases: []
195
188
  impacts: [setup]
196
189
  - id: setup-pre-commit
@@ -226,19 +219,19 @@ skills:
226
219
  - id: to-spec
227
220
  layer: compatibility
228
221
  maturity: supported
229
- instance_default_discoverable: true
222
+ instance_default_discoverable: false
230
223
  aliases: []
231
224
  impacts: [lifecycle]
232
225
  - id: to-tickets
233
226
  layer: compatibility
234
227
  maturity: supported
235
- instance_default_discoverable: true
228
+ instance_default_discoverable: false
236
229
  aliases: []
237
230
  impacts: [lifecycle]
238
231
  - id: triage
239
232
  layer: compatibility
240
233
  maturity: supported
241
- instance_default_discoverable: true
234
+ instance_default_discoverable: false
242
235
  aliases: []
243
236
  impacts: [lifecycle]
244
237
  - id: using-git-worktrees
@@ -413,7 +406,7 @@ skills:
413
406
  layer: specialist
414
407
  maturity: supported
415
408
  instance_default_discoverable: false
416
- aliases: []
409
+ aliases: [page-module-development, yss-ui-business-page-generation]
417
410
  impacts: [frontend]
418
411
  - id: yss-product-lifecycle
419
412
  layer: core
@@ -473,13 +466,13 @@ skills:
473
466
  layer: specialist
474
467
  maturity: supported
475
468
  instance_default_discoverable: false
476
- aliases: []
469
+ aliases: [use-table-height]
477
470
  impacts: [frontend]
478
471
  - id: yss-use-tree-height
479
472
  layer: specialist
480
473
  maturity: supported
481
474
  instance_default_discoverable: false
482
- aliases: []
475
+ aliases: [use-tree-height]
483
476
  impacts: [frontend]
484
477
  - id: yss-userinfo
485
478
  layer: specialist
@@ -499,12 +492,119 @@ skills:
499
492
  instance_default_discoverable: false
500
493
  aliases: []
501
494
  impacts: [backend, api]
495
+ - id: component-selection-imports
496
+ layer: specialist
497
+ maturity: supported
498
+ instance_default_discoverable: false
499
+ aliases: []
500
+ impacts: [frontend]
501
+ - id: file-export-download
502
+ layer: specialist
503
+ maturity: supported
504
+ instance_default_discoverable: false
505
+ aliases: []
506
+ impacts: [frontend, api]
507
+ - id: formily-foundation
508
+ layer: specialist
509
+ maturity: supported
510
+ instance_default_discoverable: false
511
+ aliases: []
512
+ impacts: [frontend]
513
+ - id: formily-linkage-effects
514
+ layer: specialist
515
+ maturity: supported
516
+ instance_default_discoverable: false
517
+ aliases: []
518
+ impacts: [frontend]
519
+ - id: formily-mode-slot-detail
520
+ layer: specialist
521
+ maturity: supported
522
+ instance_default_discoverable: false
523
+ aliases: []
524
+ impacts: [frontend]
525
+ - id: formily-step-flow
526
+ layer: specialist
527
+ maturity: supported
528
+ instance_default_discoverable: false
529
+ aliases: []
530
+ impacts: [frontend]
531
+ - id: frontend-commit
532
+ layer: maintainer-only
533
+ maturity: supported
534
+ instance_default_discoverable: false
535
+ aliases: []
536
+ impacts: [template-maintenance]
537
+ - id: java-backend-commit
538
+ layer: maintainer-only
539
+ maturity: supported
540
+ instance_default_discoverable: false
541
+ aliases: []
542
+ impacts: [template-maintenance]
543
+ - id: page-form-module
544
+ layer: specialist
545
+ maturity: supported
546
+ instance_default_discoverable: false
547
+ aliases: []
548
+ impacts: [frontend]
549
+ - id: page-list-module
550
+ layer: specialist
551
+ maturity: supported
552
+ instance_default_discoverable: false
553
+ aliases: []
554
+ impacts: [frontend]
555
+ - id: page-skeleton
556
+ layer: specialist
557
+ maturity: supported
558
+ instance_default_discoverable: false
559
+ aliases: []
560
+ impacts: [frontend]
561
+ - id: prototype-page-acceptance
562
+ layer: specialist
563
+ maturity: supported
564
+ instance_default_discoverable: false
565
+ aliases: []
566
+ impacts: [prototype, frontend]
567
+ - id: theme-token-usage
568
+ layer: specialist
569
+ maturity: supported
570
+ instance_default_discoverable: false
571
+ aliases: []
572
+ impacts: [frontend, prototype]
573
+ - id: vue3-best-practices
574
+ layer: specialist
575
+ maturity: supported
576
+ instance_default_discoverable: false
577
+ aliases: []
578
+ impacts: [frontend]
579
+ - id: yedit-table-usage
580
+ layer: specialist
581
+ maturity: supported
582
+ instance_default_discoverable: false
583
+ aliases: []
584
+ impacts: [frontend]
585
+ - id: ytable-usage
586
+ layer: specialist
587
+ maturity: supported
588
+ instance_default_discoverable: false
589
+ aliases: []
590
+ impacts: [frontend]
591
+ - id: ytree-usage
592
+ layer: specialist
593
+ maturity: supported
594
+ instance_default_discoverable: false
595
+ aliases: []
596
+ impacts: [frontend]
502
597
  platform_skills:
503
598
  - id: data-analytics
504
599
  root: .codex/skills
505
600
  layer: maintainer-only
506
601
  instance_default_discoverable: false
602
+ aliases: []
507
603
  - id: product-design
508
604
  root: .codex/skills
509
605
  layer: specialist
510
606
  instance_default_discoverable: false
607
+ aliases: [product-design:index]
608
+ external_skills:
609
+ - id: yss-backend-scaffold-parent
610
+ source: .agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md
@@ -165,7 +165,7 @@ skills 是让 AI 按规程工作的“操作手册”,不是关键词装饰。
165
165
  使用 yss-router,基于 `docs/.scratch/data-modeling/issues/04-validate-model.md`、
166
166
  冻结 OpenAPI `docs/.scratch/data-modeling/api/data-modeling.yaml` 和架构设计,
167
167
  选择最小 YSS 技能集。
168
- 请说明为什么需要或不需要 yss-domain、yss-repository、yss-mybatis、yss-web-controller、yss-ui、api-integration。
168
+ 请说明为什么需要或不需要 yss-domain、yss-repository、yss-mybatis、yss-web-controller、yss-ui、yss-api-integration。
169
169
  不要实现代码,只输出技能路由、实现顺序和验证建议。
170
170
  ```
171
171
 
@@ -804,8 +804,8 @@ TDD 顺序示例:
804
804
  | 后端用例编排 | `yss-application` |
805
805
  | 持久化 | `yss-repository`、需要分页/批量/数据源时加 `yss-mybatis` |
806
806
  | Web 接口 | `yss-web-controller`、`yss-dto` |
807
- | 前端页面 | `yss-ui`、`yss-page-module-development`、`api-integration` |
808
- | OpenAPI client 刷新 | `yss-openapi-governance` 从冻结 YAML 派生 JSON,随后 `api-integration` 运行 Orval;只在 Freeze 后或按实现契约刷新时使用 |
807
+ | 前端页面 | `yss-ui`、`yss-page-module-development`、`yss-api-integration` |
808
+ | OpenAPI client 刷新 | `yss-openapi-governance` 从冻结 YAML 派生 JSON,随后 `yss-api-integration` 运行 Orval;只在 Freeze 后或按实现契约刷新时使用 |
809
809
 
810
810
  阶段门禁:
811
811
 
@@ -1072,7 +1072,7 @@ docs/user-guide/
1072
1072
  使用 yss-router。
1073
1073
  输入资产:<Spec 路径>、<交互设计路径>、<OpenAPI Freeze 路径或无 API 影响记录>、<架构设计路径>、<垂直切片路径>。
1074
1074
  目标:选择最小 YSS 技能集。
1075
- 请说明每个候选技能需要或不需要的理由,尤其是 yss-domain、yss-repository、yss-mybatis、yss-web-controller、yss-ui、yss-openapi-governance、api-integration。
1075
+ 请说明每个候选技能需要或不需要的理由,尤其是 yss-domain、yss-repository、yss-mybatis、yss-web-controller、yss-ui、yss-openapi-governance、yss-api-integration。
1076
1076
  边界:不要实现代码,只输出技能路由、实施顺序、测试 seam 和验证建议。
1077
1077
  ```
1078
1078
 
@@ -258,7 +258,7 @@ Competitive Matrix
258
258
 
259
259
  | 场景 | 主技能 | 常见补充 |
260
260
  |---|---|---|
261
- | 新建完整 Vue 业务页面 | `yss-ui` | `yss-page-module-development`、`yss-openapi-governance`、`api-integration` |
261
+ | 新建完整 Vue 业务页面 | `yss-ui` | `yss-page-module-development`、`yss-openapi-governance`、`yss-api-integration` |
262
262
  | YTable / YTree / YssFormily 页面 | `yss-ui` | `yss-use-table-height`、`yss-use-tree-height`、`yss-formily` |
263
263
  | 从零创建后端服务 | `yss-ddd-scaffold-generator` | 后续接 `yss-domain`、`yss-repository`、`yss-web-controller` |
264
264
  | 领域建模和状态规则 | `yss-domain` | — |
@@ -57,6 +57,11 @@ function validateInvocationBoundary(data) {
57
57
  ensure(routes?.["work-unit.discovery-requirements"]?.skills?.includes("grilling") && routes?.["work-unit.discovery-requirements"]?.skills?.includes("domain-modeling"), "需求分析工作单元缺少 grilling/domain-modeling");
58
58
  ensure(routes?.["work-unit.discovery-opportunity"]?.route_by?.market_or_competitor_fact === "competitive-intelligence" && routes["work-unit.discovery-opportunity"].route_by.technical_or_standard_fact === "research", "机会调研事实路由不准确");
59
59
  ensure(routes?.["work-unit.slice-implementation"]?.skills?.includes("tdd") && routes?.["work-unit.slice-implementation"]?.skills?.includes("yss-ui"), "原生实现工作单元缺少 TDD 或 UI 路由");
60
+ const frontendRoute = routes?.["work-unit.slice-implementation"]?.frontend_route;
61
+ ensure(frontendRoute?.primary_skill === "yss-ui" && frontendRoute?.page_orchestration_skill === "yss-page-module-development", "前端实现路由缺少 yss-ui 主入口或页面编排技能");
62
+ for (const impact of ["api_impact", "formily_impact", "table_impact", "tree_impact", "height_impact", "export_impact", "theme_impact"]) {
63
+ ensure(Array.isArray(frontendRoute?.conditional_skills?.[impact]) && frontendRoute.conditional_skills[impact].length > 0 && typeof frontendRoute.not_applicable_reasons?.[impact] === "string", `前端条件专项路由缺少 ${impact}`);
64
+ }
60
65
  ensure(routes?.["work-unit.frontend-implementation-verification"]?.skills?.includes("code-review") && routes?.["work-unit.frontend-implementation-verification"]?.applies_when === "ui_impact", "前端还原验证未绑定 UI fidelity 审查轴");
61
66
  for (const id of ["work-unit.spec-synthesis", "work-unit.ticket-decomposition", "work-unit.slice-implementation"]) {
62
67
  ensure(routes?.[id]?.native?.source === "yss-product-lifecycle" && routes[id].compatibility?.source === "mattpocock/skills" && routes[id].compatibility.formal_artifact_owner === "explicit-user-entry", `${id} 未分离原生执行定义与 Matt 兼容输入`);
@@ -70,6 +75,12 @@ function validateInvocationBoundary(data) {
70
75
  function validateWorkflowExecutionResult(payload, contract, workUnitRoutes) {
71
76
  for (const field of contract.required) ensure(Object.hasOwn(payload, field), `Workflow Execution Result 缺少 ${field}`);
72
77
  ensure(contract.result_values.includes(payload.result), "Workflow Execution Result result 无效");
78
+ if (Object.hasOwn(payload, "unavailable_skill")) {
79
+ ensure(payload.result === contract.unavailable_skill.blocking_result, "技能不可用必须将 Workflow Execution Result 标记为 blocked");
80
+ for (const field of contract.unavailable_skill.required) {
81
+ ensure(typeof payload.unavailable_skill?.[field] === "string" && payload.unavailable_skill[field].trim(), `unavailable_skill.${field} 无效`);
82
+ }
83
+ }
73
84
  for (const field of contract.workflow_reference.required) ensure(typeof payload.workflow_reference?.[field] === "string" && payload.workflow_reference[field].trim(), `workflow_reference.${field} 无效`);
74
85
  const workUnit = workUnitRoutes?.[payload.work_unit];
75
86
  ensure(workUnit, `未知 Workflow Execution Result work_unit: ${payload.work_unit}`);
@@ -189,6 +200,16 @@ export function runScenario(name) {
189
200
  blocking_signals: []
190
201
  };
191
202
  validateWorkflowExecutionResult(validResult, data.workflow_execution_result, data.work_unit_routes);
203
+ const unavailableResult = structuredClone(validResult);
204
+ unavailableResult.result = "blocked";
205
+ unavailableResult.unavailable_skill = { skill: "yss-ui", provider: "codex", fallback: "manual-review", resolution: "needs-human" };
206
+ unavailableResult.blocking_signals = ["missing_evidence"];
207
+ validateWorkflowExecutionResult(unavailableResult, data.workflow_execution_result, data.work_unit_routes);
208
+ const malformedUnavailable = structuredClone(unavailableResult);
209
+ delete malformedUnavailable.unavailable_skill.fallback;
210
+ let unavailableRejected = false;
211
+ try { validateWorkflowExecutionResult(malformedUnavailable, data.workflow_execution_result, data.work_unit_routes); } catch { unavailableRejected = true; }
212
+ ensure(unavailableRejected, "技能不可用结果缺少 fallback 时未被拒绝");
192
213
  const compatibleResult = structuredClone(validResult);
193
214
  compatibleResult.workflow_reference = { source: "mattpocock/skills", skill: "to-spec", invocation_mode: "reference" };
194
215
  validateWorkflowExecutionResult(compatibleResult, data.workflow_execution_result, data.work_unit_routes);
@@ -0,0 +1,50 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { loadSkillRegistry } from "./skill-registry.mjs";
5
+
6
+ export const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..");
7
+
8
+ function fail(message) {
9
+ throw new TypeError(message);
10
+ }
11
+
12
+ export function validateSkillGovernance({ read = (relative) => readFileSync(path.join(ROOT, relative), "utf8"), exists = (relative) => existsSync(path.join(ROOT, relative)) } = {}) {
13
+ const globalRules = read(".agents/rules/yss-ai-skills.md");
14
+ const tableSkill = read(".agents/skills/ytable-usage/SKILL.md");
15
+ const pageSkill = read(".agents/skills/yss-page-module-development/SKILL.md");
16
+
17
+ if (/toolbar-config\.custom.{0,30}(必须|必需)|必须.{0,30}toolbar-config\.custom/.test(globalRules)) {
18
+ fail("全局规则不得把 toolbar-config.custom 作为无条件要求");
19
+ }
20
+ for (const marker of ["主操作必须放入 `#toolbar-right`", "只有确实需要列设置时才使用", "toolbar-config"] ) {
21
+ if (!globalRules.includes(marker)) fail(`全局规则缺少条件化表格工具栏规则: ${marker}`);
22
+ }
23
+ for (const marker of ["无需配置 `:toolbar-config=\"{ custom: true }\"`", "仅在业务明确需要列设置时才传入"]) {
24
+ if (!tableSkill.includes(marker)) fail(`YTable 专项技能缺少条件化工具栏规则: ${marker}`);
25
+ }
26
+ if (!pageSkill.includes("只有确实需要列设置时才启用 `toolbar-config.custom`")) {
27
+ fail("页面模块 canonical 技能缺少条件化 toolbar-config 规则");
28
+ }
29
+
30
+ const registry = loadSkillRegistry();
31
+ const canonicalIds = new Set(registry.skills.map((skill) => skill.id));
32
+ const aliases = new Map(registry.skills.flatMap((skill) => skill.aliases.map((alias) => [alias, skill.id])));
33
+ const legacy = new Set(["api-integration", "page-module-development", "use-table-height", "use-tree-height", "yss-ui-business-page-generation"]);
34
+ for (const alias of legacy) {
35
+ if (exists(`.agents/skills/${alias}`)) fail(`legacy alias 不得存在独立 canonical 目录: ${alias}`);
36
+ if (!aliases.has(alias)) fail(`legacy alias 未登记: ${alias}`);
37
+ }
38
+ if (exists(".agents/skills/high-fidelity-html-prototype") || aliases.has("high-fidelity-html-prototype")) {
39
+ fail("high-fidelity-html-prototype 已退役,不得保留物理目录或运行时 alias");
40
+ }
41
+ for (const skill of registry.skills) {
42
+ if (!canonicalIds.has(skill.id)) fail(`注册表 canonical skill 无效: ${skill.id}`);
43
+ if (skill.maturity === "deprecated") {
44
+ for (const field of ["replaced_by", "migration_deadline", "cleanup_status"]) {
45
+ if (!skill[field] || typeof skill[field] !== "string") fail(`deprecated 技能缺少 ${field}: ${skill.id}`);
46
+ }
47
+ }
48
+ }
49
+ return { checked: true, legacy_aliases: legacy.size };
50
+ }
@@ -1,4 +1,4 @@
1
- import { readFileSync } from "node:fs";
1
+ import { existsSync, readFileSync } from "node:fs";
2
2
  import path from "node:path";
3
3
  import { parseDocument } from "../vendor/yaml.mjs";
4
4
  import { PROJECTION_ROOTS, ROOT } from "./skill-supply-chain.mjs";
@@ -6,9 +6,11 @@ import { PROJECTION_ROOTS, ROOT } from "./skill-supply-chain.mjs";
6
6
  export const DEFAULT_REGISTRY = path.join(ROOT, "docs/agents/yss-skill-registry.yaml");
7
7
  const LOCK_PATH = path.join(ROOT, "skills-lock.json");
8
8
  const ROUTER_CONTRACT = path.join(ROOT, ".agents/skills/yss-router/references/router-contract.yaml");
9
+ const LIFECYCLE_CONTRACT = path.join(ROOT, ".agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml");
9
10
  const LAYERS = new Set(["core", "specialist", "compatibility", "maintainer-only"]);
10
11
  const MATURITIES = new Set(["draft", "verified", "supported", "deprecated"]);
11
12
  const ID_PATTERN = /^[a-z0-9][a-z0-9-]*$/;
13
+ const PLATFORM_ALIAS_PATTERN = /^[a-z0-9][a-z0-9-]*(?::[a-z0-9][a-z0-9-]*)?$/;
12
14
 
13
15
  function fail(message) {
14
16
  throw new TypeError(message);
@@ -45,7 +47,7 @@ function requireString(value, field) {
45
47
  if (typeof value !== "string" || !value.trim()) fail(`${field} 不能为空`);
46
48
  }
47
49
 
48
- export function validateSkillRegistry(registry, { lock, routerContract, skillSource } = {}) {
50
+ export function validateSkillRegistry(registry, { lock, routerContract, lifecycleContract, skillSource } = {}) {
49
51
  if (!registry || typeof registry !== "object" || Array.isArray(registry)) fail("技能路由注册表必须是对象");
50
52
  if (registry.schema_version !== 1) fail("schema_version 必须为 1");
51
53
  if (registry.registry_id !== "yss.skill-routing") fail("registry_id 必须为 yss.skill-routing");
@@ -99,10 +101,14 @@ export function validateSkillRegistry(registry, { lock, routerContract, skillSou
99
101
  if (!MATURITIES.has(skill.maturity)) fail(`${skill.id} 未知 maturity: ${skill.maturity}`);
100
102
  if (typeof skill.instance_default_discoverable !== "boolean") fail(`${skill.id} 缺少 instance_default_discoverable`);
101
103
  if (skill.layer === "core" && skill.instance_default_discoverable !== true) fail(`${skill.id} 作为 core 必须默认可发现`);
102
- if ((skill.layer === "specialist" || skill.layer === "maintainer-only") && skill.instance_default_discoverable !== false) {
104
+ if (["specialist", "maintainer-only", "compatibility"].includes(skill.layer) && skill.instance_default_discoverable !== false) {
103
105
  fail(`${skill.id} 作为 ${skill.layer} 不得默认可发现`);
104
106
  }
105
- if (skill.maturity === "deprecated") requireString(skill.replaced_by, `${skill.id}.replaced_by`);
107
+ if (skill.maturity === "deprecated") {
108
+ requireString(skill.replaced_by, `${skill.id}.replaced_by`);
109
+ requireString(skill.migration_deadline, `${skill.id}.migration_deadline`);
110
+ requireString(skill.cleanup_status, `${skill.id}.cleanup_status`);
111
+ }
106
112
  if (skill.replaced_by && !ids.has(skill.replaced_by) && !skills.some((item) => item.id === skill.replaced_by)) {
107
113
  // resolved in second pass
108
114
  }
@@ -125,6 +131,7 @@ export function validateSkillRegistry(registry, { lock, routerContract, skillSou
125
131
  const platform = registry.platform_skills ?? [];
126
132
  if (!Array.isArray(platform)) fail("platform_skills 必须是数组");
127
133
  const platformIds = new Set();
134
+ const platformAliases = new Map();
128
135
  for (const skill of platform) {
129
136
  requireString(skill.id, "platform_skills.id");
130
137
  requireString(skill.root, `${skill.id}.root`);
@@ -132,9 +139,27 @@ export function validateSkillRegistry(registry, { lock, routerContract, skillSou
132
139
  if (typeof skill.instance_default_discoverable !== "boolean" || skill.instance_default_discoverable !== false) {
133
140
  fail(`${skill.id} 平台技能不得作为实例默认可发现`);
134
141
  }
142
+ if (!Array.isArray(skill.aliases) || skill.aliases.some((alias) => typeof alias !== "string" || !PLATFORM_ALIAS_PATTERN.test(alias))) {
143
+ fail(`${skill.id} aliases 必须是合法 id 数组`);
144
+ }
135
145
  if (platformIds.has(`${skill.root}:${skill.id}`)) fail(`重复平台技能: ${skill.root}/${skill.id}`);
136
146
  platformIds.add(`${skill.root}:${skill.id}`);
137
147
  }
148
+ const external = registry.external_skills ?? [];
149
+ if (!Array.isArray(external)) fail("external_skills 必须是数组");
150
+ const externalIds = new Set();
151
+ for (const skill of external) {
152
+ requireString(skill.id, "external_skills.id");
153
+ requireString(skill.source, `${skill.id}.source`);
154
+ if (externalIds.has(skill.id) || ids.has(skill.id) || aliases.has(skill.id) || platformAliases.has(skill.id)) fail(`external skill 冲突: ${skill.id}`);
155
+ externalIds.add(skill.id);
156
+ }
157
+ for (const skill of platform) {
158
+ for (const alias of skill.aliases) {
159
+ if (ids.has(alias) || aliases.has(alias) || platformAliases.has(alias)) fail(`alias 冲突: ${alias}`);
160
+ platformAliases.set(alias, `${skill.root}:${skill.id}`);
161
+ }
162
+ }
138
163
 
139
164
  if (lock) {
140
165
  const shared = Object.keys(lock.skills?.shared ?? {}).sort();
@@ -179,7 +204,58 @@ export function validateSkillRegistry(registry, { lock, routerContract, skillSou
179
204
  }
180
205
  const closures = Object.keys(routerContract.dependency_closure ?? {});
181
206
  for (const name of closures) {
182
- if (!ids.has(name) && !aliases.has(name)) fail(`Router 闭包引用了未登记技能: ${name}`);
207
+ if (!ids.has(name) && !aliases.has(name) && !externalIds.has(name)) fail(`Router 闭包引用了未登记技能: ${name}`);
208
+ }
209
+ for (const dependencies of Object.values(routerContract.dependency_closure ?? {})) {
210
+ for (const names of Object.values(dependencies ?? {})) {
211
+ for (const name of names ?? []) if (!ids.has(name) && !aliases.has(name) && !externalIds.has(name)) fail(`Router 依赖引用了未登记技能: ${name}`);
212
+ }
213
+ }
214
+ }
215
+
216
+ if (lifecycleContract || existsSync(LIFECYCLE_CONTRACT)) {
217
+ const lifecycle = lifecycleContract ?? yamlFromFile(LIFECYCLE_CONTRACT, "生命周期编排合同");
218
+ const routes = lifecycle.work_unit_routes;
219
+ if (!routes || typeof routes !== "object" || Array.isArray(routes)) fail("生命周期编排合同缺少 work_unit_routes");
220
+ const resolve = (name) => {
221
+ if (ids.has(name)) return name;
222
+ if (aliases.has(name)) return aliases.get(name);
223
+ if (platformAliases.has(name)) return platformAliases.get(name);
224
+ if (externalIds.has(name)) return name;
225
+ if ([...platformIds].some((key) => key.endsWith(`:${name}`))) return name;
226
+ return null;
227
+ };
228
+ for (const [routeId, route] of Object.entries(routes)) {
229
+ if (!route || typeof route !== "object") fail(`${routeId} 生命周期路由必须是对象`);
230
+ requireString(route.primary_skill, `${routeId}.primary_skill`);
231
+ if (!Array.isArray(route.supporting_skills)) fail(`${routeId}.supporting_skills 必须是数组`);
232
+ if (!Array.isArray(route.skills) || route.skills.length === 0) fail(`${routeId}.skills 不能为空`);
233
+ if (!route.applies_when || !route.not_applicable_reason) fail(`${routeId} 缺少 applies_when 或 not_applicable_reason`);
234
+ for (const name of [route.primary_skill, ...route.supporting_skills, ...route.skills]) {
235
+ if (!resolve(name)) fail(`生命周期路由引用了未登记技能: ${routeId} -> ${name}`);
236
+ }
237
+ if (route.frontend_route) {
238
+ requireString(route.frontend_route.primary_skill, `${routeId}.frontend_route.primary_skill`);
239
+ requireString(route.frontend_route.page_orchestration_skill, `${routeId}.frontend_route.page_orchestration_skill`);
240
+ const conditional = route.frontend_route.conditional_skills;
241
+ if (!conditional || typeof conditional !== "object" || Array.isArray(conditional)) fail(`${routeId}.frontend_route.conditional_skills 必须是对象`);
242
+ for (const [impact, names] of Object.entries(conditional)) {
243
+ if (!Array.isArray(names) || names.length === 0) fail(`${routeId}.frontend_route.conditional_skills.${impact} 必须是非空数组`);
244
+ for (const name of names) if (!resolve(name)) fail(`前端条件路由引用了未登记技能: ${routeId}.${impact} -> ${name}`);
245
+ if (route.frontend_route.not_applicable_reasons && typeof route.frontend_route.not_applicable_reasons[impact] !== "string") {
246
+ fail(`${routeId}.frontend_route.not_applicable_reasons.${impact} 必须是字符串`);
247
+ }
248
+ }
249
+ if (!resolve(route.frontend_route.primary_skill) || !resolve(route.frontend_route.page_orchestration_skill)) {
250
+ fail(`${routeId}.frontend_route 主入口引用了未登记技能`);
251
+ }
252
+ }
253
+ if (routeId === "work-unit.prototype-design") {
254
+ if (!route.skills.includes("prototype-review") || !route.supporting_skills.includes("prototype-review")) {
255
+ fail("原型工作单元必须包含独立 prototype-review supporting skill");
256
+ }
257
+ if (route.primary_skill === "prototype-review") fail("prototype-review 必须作为独立 supporting skill,不得成为生命周期主技能");
258
+ }
183
259
  }
184
260
  }
185
261
 
@@ -193,6 +269,7 @@ export function validateDefaultSkillRegistry() {
193
269
  return validateSkillRegistry(registry, {
194
270
  lock,
195
271
  routerContract,
272
+ lifecycleContract: yamlFromFile(LIFECYCLE_CONTRACT, "生命周期编排合同"),
196
273
  skillSource: (id) => readFileSync(path.join(ROOT, ".agents/skills", id, "SKILL.md"), "utf8")
197
274
  });
198
275
  }
@@ -49,6 +49,10 @@ export function unlockedProjectionEntries(candidates, allowedNames, isTracked) {
49
49
  const allowed = new Set(allowedNames);
50
50
  return candidates.filter((candidate) => candidate.isDirectory() || candidate.isSymbolicLink()).filter((candidate) => !allowed.has(candidate.name) && isTracked(candidate.name));
51
51
  }
52
+ export function unlockedCanonicalEntries(names, allowedNames, hasSkillMd = () => true) {
53
+ const allowed = new Set(allowedNames);
54
+ return names.filter((name) => !allowed.has(name) && !OBSOLETE.has(name) && hasSkillMd(name)).sort();
55
+ }
52
56
  export function syncSkills({ check = false } = {}) {
53
57
  const lock = parseLock();
54
58
  const shared = sharedFromLock(lock);
@@ -141,7 +145,7 @@ export function updateSkillLock(arguments_ = process.argv.slice(2)) {
141
145
  const sharedNames = [...new Set([...existing, ...additions])].filter((name) => !removals.has(name) && !OBSOLETE.has(name)).sort();
142
146
  const absent = sharedNames.filter((name) => !lstatSafe(path.join(SOURCE_ROOT, name))?.isDirectory());
143
147
  if (absent.length) throw new TypeError(`锁文件声明的共享 skills 缺少权威内容: ${absent.join(", ")}`);
144
- const unlocked = skillNames(SOURCE_ROOT).filter((name) => tracked(`.agents/skills/${name}`) && !sharedNames.includes(name) && !OBSOLETE.has(name));
148
+ const unlocked = unlockedCanonicalEntries(skillNames(SOURCE_ROOT), sharedNames, (name) => lstatSafe(path.join(SOURCE_ROOT, name, "SKILL.md"))?.isFile());
145
149
  if (unlocked.length) throw new TypeError(`发现未登记到 skills-lock.json 的已跟踪共享 skills: ${unlocked.join(", ")}\n确认新增后运行 scripts/update-skill-lock --add=<skill-name>`);
146
150
  const targets = [".agents/skills", ...PROJECTION_ROOTS];
147
151
  const shared = Object.fromEntries(sharedNames.map((name) => {
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import { validateSkillGovernance } from "./lib/skill-governance.mjs";
3
+
4
+ try {
5
+ const result = validateSkillGovernance();
6
+ process.stdout.write(`技能规范冲突扫描通过(${result.legacy_aliases} 个兼容 alias)\n`);
7
+ } catch (error) {
8
+ process.stderr.write(`技能规范冲突扫描失败: ${error.message}\n`);
9
+ process.exitCode = 1;
10
+ }
@@ -5,7 +5,7 @@ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
5
  cd "$ROOT_DIR"
6
6
  node -e 'const [major]=process.versions.node.split(".").map(Number); if (major < 22 || major >= 27) { console.error("模板工具需要 Node >=22 <27"); process.exit(1); }'
7
7
 
8
- required_files=(yss-project.yaml AGENTS.md CONTEXT.md skills-lock.json docs/agents/yss-skill-registry.yaml docs/process/lifecycle-registry.yaml docs/process/lifecycle-registry-baseline.json docs/process/maintenance-intensity.yaml docs/process/schemas/lifecycle-checkpoint.schema.json docs/process/schemas/frontend-implementation-evidence.schema.json docs/process/templates/lifecycle-checkpoint-template.yaml docs/process/templates/frontend-implementation-plan-template.yaml docs/process/templates/frontend-implementation-verification-template.yaml scripts/repository-mode scripts/implementation-path-policy scripts/repository-scope-policy scripts/sync-skills scripts/update-skill-lock scripts/generate-lifecycle-artifacts scripts/verify-lifecycle-registry scripts/verify-lifecycle-checkpoint scripts/verify-frontend-implementation-evidence scripts/verify-maintenance-checkpoint scripts/verify-maintenance-intensity-scenarios scripts/verify-skill-registry scripts/verify-yss-dto-openapi-profile scripts/verify-yss-dto-openapi-scenarios scripts/export-yss-skills)
8
+ required_files=(yss-project.yaml AGENTS.md CONTEXT.md skills-lock.json docs/agents/yss-skill-registry.yaml docs/process/lifecycle-registry.yaml docs/process/lifecycle-registry-baseline.json docs/process/maintenance-intensity.yaml docs/process/schemas/lifecycle-checkpoint.schema.json docs/process/schemas/frontend-implementation-evidence.schema.json docs/process/templates/lifecycle-checkpoint-template.yaml docs/process/templates/frontend-implementation-plan-template.yaml docs/process/templates/frontend-implementation-verification-template.yaml scripts/repository-mode scripts/implementation-path-policy scripts/repository-scope-policy scripts/sync-skills scripts/update-skill-lock scripts/generate-lifecycle-artifacts scripts/verify-lifecycle-registry scripts/verify-lifecycle-checkpoint scripts/verify-frontend-implementation-evidence scripts/verify-maintenance-checkpoint scripts/verify-maintenance-intensity-scenarios scripts/verify-skill-registry scripts/verify-skill-governance scripts/verify-yss-dto-openapi-profile scripts/verify-yss-dto-openapi-scenarios scripts/export-yss-skills)
9
9
  for required in "${required_files[@]}"; do test -f "$required" || { echo "缺少模板必需文件: $required" >&2; exit 1; }; done
10
10
 
11
11
  repository_mode="$(scripts/repository-mode)"
@@ -19,6 +19,7 @@ fi
19
19
  scripts/sync-skills --check
20
20
  scripts/update-skill-lock --check
21
21
  scripts/verify-skill-registry
22
+ scripts/verify-skill-governance
22
23
  scripts/verify-yss-dto-openapi-profile
23
24
  scripts/verify-yss-dto-openapi-scenarios
24
25
  scripts/verify-lifecycle-registry
@@ -38,7 +39,7 @@ scripts/verify-yss-ui-scenarios
38
39
  scripts/verify-openapi-yaml-first-scenarios
39
40
  scripts/verify-openapi-json-handoff-scenarios
40
41
 
41
- for entry in scripts/sync-skills scripts/update-skill-lock scripts/generate-lifecycle-artifacts scripts/verify-lifecycle-registry scripts/verify-lifecycle-checkpoint scripts/verify-frontend-implementation-evidence scripts/verify-maintenance-checkpoint scripts/verify-maintenance-intensity-scenarios scripts/verify-skill-registry scripts/verify-yss-dto-openapi-profile scripts/verify-yss-dto-openapi-scenarios scripts/verify-lifecycle-scenarios scripts/verify-matt-yss-integration-scenarios scripts/verify-prototype-backend-scaffold-scenarios scripts/verify-yss-router-scenarios scripts/verify-openapi-yaml-first-scenarios scripts/verify-openapi-json-handoff-scenarios scripts/verify-repository-scope-scenarios scripts/export-yss-skills; do node --check "$entry"; done
42
+ for entry in scripts/sync-skills scripts/update-skill-lock scripts/generate-lifecycle-artifacts scripts/verify-lifecycle-registry scripts/verify-lifecycle-checkpoint scripts/verify-frontend-implementation-evidence scripts/verify-maintenance-checkpoint scripts/verify-maintenance-intensity-scenarios scripts/verify-skill-registry scripts/verify-skill-governance scripts/verify-yss-dto-openapi-profile scripts/verify-yss-dto-openapi-scenarios scripts/verify-lifecycle-scenarios scripts/verify-matt-yss-integration-scenarios scripts/verify-prototype-backend-scaffold-scenarios scripts/verify-yss-router-scenarios scripts/verify-openapi-yaml-first-scenarios scripts/verify-openapi-json-handoff-scenarios scripts/verify-repository-scope-scenarios scripts/export-yss-skills; do node --check "$entry"; done
42
43
 
43
44
  legacy_runtime="ru""by"
44
45
  script_roots=(scripts)