create-yss-spec 2.1.15 → 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 (618) hide show
  1. package/README.md +6 -2
  2. package/package.json +1 -1
  3. package/src/cli.js +276 -15
  4. package/template/.agents/rules/yss-ai-skills.md +59 -0
  5. package/template/.agents/skills/.yss-skills-manifest.json +28 -0
  6. package/template/.agents/skills/component-selection-imports/SKILL.md +64 -0
  7. package/template/.agents/skills/cross-repo-implementation-routing/SKILL.md +2 -2
  8. package/template/.agents/skills/file-export-download/SKILL.md +160 -0
  9. package/template/.agents/skills/file-export-download/agents/openai.yaml +4 -0
  10. package/template/.agents/skills/formily-foundation/SKILL.md +176 -0
  11. package/template/.agents/skills/formily-foundation/references/examples.md +486 -0
  12. package/template/.agents/skills/formily-linkage-effects/SKILL.md +167 -0
  13. package/template/.agents/skills/formily-mode-slot-detail/SKILL.md +137 -0
  14. package/template/.agents/skills/formily-step-flow/SKILL.md +194 -0
  15. package/template/.agents/skills/frontend-commit/SKILL.md +118 -0
  16. package/template/.agents/skills/frontend-commit/agents/openai.yaml +7 -0
  17. package/template/.agents/skills/frontend-commit/references/scope-and-examples.md +111 -0
  18. package/template/.agents/skills/implementation-repo-onboarding/SKILL.md +5 -5
  19. package/template/.agents/skills/java-backend-commit/SKILL.md +121 -0
  20. package/template/.agents/skills/java-backend-commit/agents/openai.yaml +7 -0
  21. package/template/.agents/skills/java-backend-commit/references/scope-and-examples.md +118 -0
  22. package/template/.agents/skills/llm-wiki/SKILL.md +1 -1
  23. package/template/.agents/skills/llm-wiki/references/discover.md +1 -0
  24. package/template/.agents/skills/page-form-module/SKILL.md +168 -0
  25. package/template/.agents/skills/page-list-module/SKILL.md +137 -0
  26. package/template/.agents/skills/page-skeleton/SKILL.md +76 -0
  27. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
  28. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
  29. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
  30. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
  31. package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
  32. package/template/.agents/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
  33. package/template/.agents/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
  34. package/template/.agents/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
  35. package/template/.agents/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
  36. package/template/.agents/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
  37. package/template/.agents/skills/prototype-page-acceptance/SKILL.md +62 -0
  38. package/template/.agents/skills/theme-token-usage/SKILL.md +123 -0
  39. package/template/.agents/skills/theme-token-usage/agents/openai.yaml +4 -0
  40. package/template/.agents/skills/vue3-best-practices/SKILL.md +68 -0
  41. package/template/.agents/skills/yedit-table-usage/SKILL.md +227 -0
  42. package/template/.agents/skills/yss-api-integration/SKILL.md +12 -2
  43. package/template/.agents/skills/yss-components/SKILL.md +1 -1
  44. package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
  45. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +30 -3
  46. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +52 -0
  47. package/template/.agents/skills/yss-design-system/SKILL.md +1 -1
  48. package/template/.agents/skills/yss-formily/SKILL.md +233 -265
  49. package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +2 -2
  50. package/template/.agents/skills/yss-hook/SKILL.md +1 -1
  51. package/template/.agents/skills/yss-openapi-governance/SKILL.md +2 -2
  52. package/template/.agents/skills/yss-page-module-development/SKILL.md +12 -2
  53. package/template/.agents/skills/yss-page-module-development/references/component-map.md +34 -0
  54. package/template/.agents/skills/yss-page-module-development/references/hooks-map.md +11 -0
  55. package/template/.agents/skills/yss-page-module-development/references/utils-map.md +14 -0
  56. package/template/.agents/skills/yss-product-lifecycle/references/matt-yss-adapter.md +1 -1
  57. package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +86 -1
  58. package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +2 -0
  59. package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +1 -1
  60. package/template/.agents/skills/yss-router/SKILL.md +1 -1
  61. package/template/.agents/skills/yss-router/references/boundaries.md +1 -1
  62. package/template/.agents/skills/yss-router/references/router-contract.yaml +26 -2
  63. package/template/.agents/skills/yss-router/references/slice-implementation-contract.md +1 -1
  64. package/template/.agents/skills/yss-ui/SKILL.md +1 -1
  65. package/template/.agents/skills/yss-use-table-height/SKILL.md +9 -0
  66. package/template/.agents/skills/yss-use-tree-height/SKILL.md +9 -0
  67. package/template/.agents/skills/ytable-usage/SKILL.md +251 -0
  68. package/template/.agents/skills/ytree-usage/SKILL.md +132 -0
  69. package/template/.claude/skills/.yss-skills-manifest.json +29 -0
  70. package/template/.claude/skills/component-selection-imports/SKILL.md +64 -0
  71. package/template/.claude/skills/cross-repo-implementation-routing/SKILL.md +2 -2
  72. package/template/.claude/skills/file-export-download/SKILL.md +160 -0
  73. package/template/.claude/skills/file-export-download/agents/openai.yaml +4 -0
  74. package/template/.claude/skills/formily-foundation/SKILL.md +176 -0
  75. package/template/.claude/skills/formily-foundation/references/examples.md +486 -0
  76. package/template/.claude/skills/formily-linkage-effects/SKILL.md +167 -0
  77. package/template/.claude/skills/formily-mode-slot-detail/SKILL.md +137 -0
  78. package/template/.claude/skills/formily-step-flow/SKILL.md +194 -0
  79. package/template/.claude/skills/frontend-commit/SKILL.md +118 -0
  80. package/template/.claude/skills/frontend-commit/agents/openai.yaml +7 -0
  81. package/template/.claude/skills/frontend-commit/references/scope-and-examples.md +111 -0
  82. package/template/.claude/skills/implementation-repo-onboarding/SKILL.md +5 -5
  83. package/template/.claude/skills/java-backend-commit/SKILL.md +121 -0
  84. package/template/.claude/skills/java-backend-commit/agents/openai.yaml +7 -0
  85. package/template/.claude/skills/java-backend-commit/references/scope-and-examples.md +118 -0
  86. package/template/.claude/skills/llm-wiki/SKILL.md +1 -1
  87. package/template/.claude/skills/llm-wiki/references/discover.md +1 -0
  88. package/template/.claude/skills/page-form-module/SKILL.md +168 -0
  89. package/template/.claude/skills/page-list-module/SKILL.md +137 -0
  90. package/template/.claude/skills/page-skeleton/SKILL.md +76 -0
  91. package/template/.claude/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
  92. package/template/.claude/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
  93. package/template/.claude/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
  94. package/template/.claude/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
  95. package/template/.claude/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
  96. package/template/.claude/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
  97. package/template/.claude/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
  98. package/template/.claude/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
  99. package/template/.claude/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
  100. package/template/.claude/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
  101. package/template/.claude/skills/prototype-page-acceptance/SKILL.md +62 -0
  102. package/template/.claude/skills/theme-token-usage/SKILL.md +123 -0
  103. package/template/.claude/skills/theme-token-usage/agents/openai.yaml +4 -0
  104. package/template/.claude/skills/vue3-best-practices/SKILL.md +68 -0
  105. package/template/.claude/skills/yedit-table-usage/SKILL.md +227 -0
  106. package/template/.claude/skills/yss-api-integration/SKILL.md +12 -2
  107. package/template/.claude/skills/yss-components/SKILL.md +1 -1
  108. package/template/.claude/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
  109. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +30 -3
  110. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +52 -0
  111. package/template/.claude/skills/yss-design-system/SKILL.md +1 -1
  112. package/template/.claude/skills/yss-formily/SKILL.md +233 -265
  113. package/template/.claude/skills/yss-frontend-scaffold-generator/SKILL.md +2 -2
  114. package/template/.claude/skills/yss-hook/SKILL.md +1 -1
  115. package/template/.claude/skills/yss-openapi-governance/SKILL.md +2 -2
  116. package/template/.claude/skills/yss-page-module-development/SKILL.md +12 -2
  117. package/template/.claude/skills/yss-page-module-development/references/component-map.md +34 -0
  118. package/template/.claude/skills/yss-page-module-development/references/hooks-map.md +11 -0
  119. package/template/.claude/skills/yss-page-module-development/references/utils-map.md +14 -0
  120. package/template/.claude/skills/yss-product-lifecycle/references/matt-yss-adapter.md +1 -1
  121. package/template/.claude/skills/yss-product-lifecycle/references/orchestration-contract.yaml +86 -1
  122. package/template/.claude/skills/yss-product-lifecycle/references/orchestration.md +2 -0
  123. package/template/.claude/skills/yss-product-lifecycle/references/state-model.md +1 -1
  124. package/template/.claude/skills/yss-router/SKILL.md +1 -1
  125. package/template/.claude/skills/yss-router/references/boundaries.md +1 -1
  126. package/template/.claude/skills/yss-router/references/router-contract.yaml +26 -2
  127. package/template/.claude/skills/yss-router/references/slice-implementation-contract.md +1 -1
  128. package/template/.claude/skills/yss-ui/SKILL.md +1 -1
  129. package/template/.claude/skills/yss-use-table-height/SKILL.md +9 -0
  130. package/template/.claude/skills/yss-use-tree-height/SKILL.md +9 -0
  131. package/template/.claude/skills/ytable-usage/SKILL.md +251 -0
  132. package/template/.claude/skills/ytree-usage/SKILL.md +132 -0
  133. package/template/.codex/skills/component-selection-imports/SKILL.md +64 -0
  134. package/template/.codex/skills/cross-repo-implementation-routing/SKILL.md +2 -2
  135. package/template/.codex/skills/file-export-download/SKILL.md +160 -0
  136. package/template/.codex/skills/file-export-download/agents/openai.yaml +4 -0
  137. package/template/.codex/skills/formily-foundation/SKILL.md +176 -0
  138. package/template/.codex/skills/formily-foundation/references/examples.md +486 -0
  139. package/template/.codex/skills/formily-linkage-effects/SKILL.md +167 -0
  140. package/template/.codex/skills/formily-mode-slot-detail/SKILL.md +137 -0
  141. package/template/.codex/skills/formily-step-flow/SKILL.md +194 -0
  142. package/template/.codex/skills/frontend-commit/SKILL.md +118 -0
  143. package/template/.codex/skills/frontend-commit/agents/openai.yaml +7 -0
  144. package/template/.codex/skills/frontend-commit/references/scope-and-examples.md +111 -0
  145. package/template/.codex/skills/implementation-repo-onboarding/SKILL.md +5 -5
  146. package/template/.codex/skills/java-backend-commit/SKILL.md +121 -0
  147. package/template/.codex/skills/java-backend-commit/agents/openai.yaml +7 -0
  148. package/template/.codex/skills/java-backend-commit/references/scope-and-examples.md +118 -0
  149. package/template/.codex/skills/llm-wiki/SKILL.md +1 -1
  150. package/template/.codex/skills/llm-wiki/references/discover.md +1 -0
  151. package/template/.codex/skills/page-form-module/SKILL.md +168 -0
  152. package/template/.codex/skills/page-list-module/SKILL.md +137 -0
  153. package/template/.codex/skills/page-skeleton/SKILL.md +76 -0
  154. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
  155. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
  156. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
  157. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
  158. package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
  159. package/template/.codex/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
  160. package/template/.codex/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
  161. package/template/.codex/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
  162. package/template/.codex/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
  163. package/template/.codex/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
  164. package/template/.codex/skills/prototype-page-acceptance/SKILL.md +62 -0
  165. package/template/.codex/skills/theme-token-usage/SKILL.md +123 -0
  166. package/template/.codex/skills/theme-token-usage/agents/openai.yaml +4 -0
  167. package/template/.codex/skills/vue3-best-practices/SKILL.md +68 -0
  168. package/template/.codex/skills/yedit-table-usage/SKILL.md +227 -0
  169. package/template/.codex/skills/yss-api-integration/SKILL.md +12 -2
  170. package/template/.codex/skills/yss-components/SKILL.md +1 -1
  171. package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
  172. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +30 -3
  173. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +52 -0
  174. package/template/.codex/skills/yss-design-system/SKILL.md +1 -1
  175. package/template/.codex/skills/yss-formily/SKILL.md +233 -265
  176. package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +2 -2
  177. package/template/.codex/skills/yss-hook/SKILL.md +1 -1
  178. package/template/.codex/skills/yss-openapi-governance/SKILL.md +2 -2
  179. package/template/.codex/skills/yss-page-module-development/SKILL.md +12 -2
  180. package/template/.codex/skills/yss-page-module-development/references/component-map.md +34 -0
  181. package/template/.codex/skills/yss-page-module-development/references/hooks-map.md +11 -0
  182. package/template/.codex/skills/yss-page-module-development/references/utils-map.md +14 -0
  183. package/template/.codex/skills/yss-product-lifecycle/references/matt-yss-adapter.md +1 -1
  184. package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +86 -1
  185. package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +2 -0
  186. package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +1 -1
  187. package/template/.codex/skills/yss-router/SKILL.md +1 -1
  188. package/template/.codex/skills/yss-router/references/boundaries.md +1 -1
  189. package/template/.codex/skills/yss-router/references/router-contract.yaml +26 -2
  190. package/template/.codex/skills/yss-router/references/slice-implementation-contract.md +1 -1
  191. package/template/.codex/skills/yss-ui/SKILL.md +1 -1
  192. package/template/.codex/skills/yss-use-table-height/SKILL.md +9 -0
  193. package/template/.codex/skills/yss-use-tree-height/SKILL.md +9 -0
  194. package/template/.codex/skills/ytable-usage/SKILL.md +251 -0
  195. package/template/.codex/skills/ytree-usage/SKILL.md +132 -0
  196. package/template/.cursor/skills/.yss-skills-manifest.json +29 -0
  197. package/template/.cursor/skills/component-selection-imports/SKILL.md +64 -0
  198. package/template/.cursor/skills/cross-repo-implementation-routing/SKILL.md +2 -2
  199. package/template/.cursor/skills/file-export-download/SKILL.md +160 -0
  200. package/template/.cursor/skills/file-export-download/agents/openai.yaml +4 -0
  201. package/template/.cursor/skills/formily-foundation/SKILL.md +176 -0
  202. package/template/.cursor/skills/formily-foundation/references/examples.md +486 -0
  203. package/template/.cursor/skills/formily-linkage-effects/SKILL.md +167 -0
  204. package/template/.cursor/skills/formily-mode-slot-detail/SKILL.md +137 -0
  205. package/template/.cursor/skills/formily-step-flow/SKILL.md +194 -0
  206. package/template/.cursor/skills/frontend-commit/SKILL.md +118 -0
  207. package/template/.cursor/skills/frontend-commit/agents/openai.yaml +7 -0
  208. package/template/.cursor/skills/frontend-commit/references/scope-and-examples.md +111 -0
  209. package/template/.cursor/skills/implementation-repo-onboarding/SKILL.md +5 -5
  210. package/template/.cursor/skills/java-backend-commit/SKILL.md +121 -0
  211. package/template/.cursor/skills/java-backend-commit/agents/openai.yaml +7 -0
  212. package/template/.cursor/skills/java-backend-commit/references/scope-and-examples.md +118 -0
  213. package/template/.cursor/skills/llm-wiki/SKILL.md +1 -1
  214. package/template/.cursor/skills/llm-wiki/references/discover.md +1 -0
  215. package/template/.cursor/skills/page-form-module/SKILL.md +168 -0
  216. package/template/.cursor/skills/page-list-module/SKILL.md +137 -0
  217. package/template/.cursor/skills/page-skeleton/SKILL.md +76 -0
  218. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
  219. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
  220. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
  221. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
  222. package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
  223. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
  224. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
  225. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
  226. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
  227. package/template/.cursor/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
  228. package/template/.cursor/skills/prototype-page-acceptance/SKILL.md +62 -0
  229. package/template/.cursor/skills/theme-token-usage/SKILL.md +123 -0
  230. package/template/.cursor/skills/theme-token-usage/agents/openai.yaml +4 -0
  231. package/template/.cursor/skills/vue3-best-practices/SKILL.md +68 -0
  232. package/template/.cursor/skills/yedit-table-usage/SKILL.md +227 -0
  233. package/template/.cursor/skills/yss-api-integration/SKILL.md +12 -2
  234. package/template/.cursor/skills/yss-components/SKILL.md +1 -1
  235. package/template/.cursor/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
  236. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +30 -3
  237. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +52 -0
  238. package/template/.cursor/skills/yss-design-system/SKILL.md +1 -1
  239. package/template/.cursor/skills/yss-formily/SKILL.md +233 -265
  240. package/template/.cursor/skills/yss-frontend-scaffold-generator/SKILL.md +2 -2
  241. package/template/.cursor/skills/yss-hook/SKILL.md +1 -1
  242. package/template/.cursor/skills/yss-openapi-governance/SKILL.md +2 -2
  243. package/template/.cursor/skills/yss-page-module-development/SKILL.md +12 -2
  244. package/template/.cursor/skills/yss-page-module-development/references/component-map.md +34 -0
  245. package/template/.cursor/skills/yss-page-module-development/references/hooks-map.md +11 -0
  246. package/template/.cursor/skills/yss-page-module-development/references/utils-map.md +14 -0
  247. package/template/.cursor/skills/yss-product-lifecycle/references/matt-yss-adapter.md +1 -1
  248. package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +86 -1
  249. package/template/.cursor/skills/yss-product-lifecycle/references/orchestration.md +2 -0
  250. package/template/.cursor/skills/yss-product-lifecycle/references/state-model.md +1 -1
  251. package/template/.cursor/skills/yss-router/SKILL.md +1 -1
  252. package/template/.cursor/skills/yss-router/references/boundaries.md +1 -1
  253. package/template/.cursor/skills/yss-router/references/router-contract.yaml +26 -2
  254. package/template/.cursor/skills/yss-router/references/slice-implementation-contract.md +1 -1
  255. package/template/.cursor/skills/yss-ui/SKILL.md +1 -1
  256. package/template/.cursor/skills/yss-use-table-height/SKILL.md +9 -0
  257. package/template/.cursor/skills/yss-use-tree-height/SKILL.md +9 -0
  258. package/template/.cursor/skills/ytable-usage/SKILL.md +251 -0
  259. package/template/.cursor/skills/ytree-usage/SKILL.md +132 -0
  260. package/template/.cursorrules +32 -0
  261. package/template/.hermes/skills/component-selection-imports/SKILL.md +64 -0
  262. package/template/.hermes/skills/cross-repo-implementation-routing/SKILL.md +2 -2
  263. package/template/.hermes/skills/file-export-download/SKILL.md +160 -0
  264. package/template/.hermes/skills/file-export-download/agents/openai.yaml +4 -0
  265. package/template/.hermes/skills/formily-foundation/SKILL.md +176 -0
  266. package/template/.hermes/skills/formily-foundation/references/examples.md +486 -0
  267. package/template/.hermes/skills/formily-linkage-effects/SKILL.md +167 -0
  268. package/template/.hermes/skills/formily-mode-slot-detail/SKILL.md +137 -0
  269. package/template/.hermes/skills/formily-step-flow/SKILL.md +194 -0
  270. package/template/.hermes/skills/frontend-commit/SKILL.md +118 -0
  271. package/template/.hermes/skills/frontend-commit/agents/openai.yaml +7 -0
  272. package/template/.hermes/skills/frontend-commit/references/scope-and-examples.md +111 -0
  273. package/template/.hermes/skills/implementation-repo-onboarding/SKILL.md +5 -5
  274. package/template/.hermes/skills/java-backend-commit/SKILL.md +121 -0
  275. package/template/.hermes/skills/java-backend-commit/agents/openai.yaml +7 -0
  276. package/template/.hermes/skills/java-backend-commit/references/scope-and-examples.md +118 -0
  277. package/template/.hermes/skills/llm-wiki/SKILL.md +1 -1
  278. package/template/.hermes/skills/llm-wiki/references/discover.md +1 -0
  279. package/template/.hermes/skills/page-form-module/SKILL.md +168 -0
  280. package/template/.hermes/skills/page-list-module/SKILL.md +137 -0
  281. package/template/.hermes/skills/page-skeleton/SKILL.md +76 -0
  282. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
  283. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
  284. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
  285. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
  286. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
  287. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
  288. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
  289. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
  290. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
  291. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
  292. package/template/.hermes/skills/prototype-page-acceptance/SKILL.md +62 -0
  293. package/template/.hermes/skills/theme-token-usage/SKILL.md +123 -0
  294. package/template/.hermes/skills/theme-token-usage/agents/openai.yaml +4 -0
  295. package/template/.hermes/skills/vue3-best-practices/SKILL.md +68 -0
  296. package/template/.hermes/skills/yedit-table-usage/SKILL.md +227 -0
  297. package/template/.hermes/skills/yss-api-integration/SKILL.md +12 -2
  298. package/template/.hermes/skills/yss-components/SKILL.md +1 -1
  299. package/template/.hermes/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
  300. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +30 -3
  301. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +52 -0
  302. package/template/.hermes/skills/yss-design-system/SKILL.md +1 -1
  303. package/template/.hermes/skills/yss-formily/SKILL.md +233 -265
  304. package/template/.hermes/skills/yss-frontend-scaffold-generator/SKILL.md +2 -2
  305. package/template/.hermes/skills/yss-hook/SKILL.md +1 -1
  306. package/template/.hermes/skills/yss-openapi-governance/SKILL.md +2 -2
  307. package/template/.hermes/skills/yss-page-module-development/SKILL.md +12 -2
  308. package/template/.hermes/skills/yss-page-module-development/references/component-map.md +34 -0
  309. package/template/.hermes/skills/yss-page-module-development/references/hooks-map.md +11 -0
  310. package/template/.hermes/skills/yss-page-module-development/references/utils-map.md +14 -0
  311. package/template/.hermes/skills/yss-product-lifecycle/references/matt-yss-adapter.md +1 -1
  312. package/template/.hermes/skills/yss-product-lifecycle/references/orchestration-contract.yaml +86 -1
  313. package/template/.hermes/skills/yss-product-lifecycle/references/orchestration.md +2 -0
  314. package/template/.hermes/skills/yss-product-lifecycle/references/state-model.md +1 -1
  315. package/template/.hermes/skills/yss-router/SKILL.md +1 -1
  316. package/template/.hermes/skills/yss-router/references/boundaries.md +1 -1
  317. package/template/.hermes/skills/yss-router/references/router-contract.yaml +26 -2
  318. package/template/.hermes/skills/yss-router/references/slice-implementation-contract.md +1 -1
  319. package/template/.hermes/skills/yss-ui/SKILL.md +1 -1
  320. package/template/.hermes/skills/yss-use-table-height/SKILL.md +9 -0
  321. package/template/.hermes/skills/yss-use-tree-height/SKILL.md +9 -0
  322. package/template/.hermes/skills/ytable-usage/SKILL.md +251 -0
  323. package/template/.hermes/skills/ytree-usage/SKILL.md +132 -0
  324. package/template/.pi/skills/component-selection-imports/SKILL.md +64 -0
  325. package/template/.pi/skills/cross-repo-implementation-routing/SKILL.md +2 -2
  326. package/template/.pi/skills/file-export-download/SKILL.md +160 -0
  327. package/template/.pi/skills/file-export-download/agents/openai.yaml +4 -0
  328. package/template/.pi/skills/formily-foundation/SKILL.md +176 -0
  329. package/template/.pi/skills/formily-foundation/references/examples.md +486 -0
  330. package/template/.pi/skills/formily-linkage-effects/SKILL.md +167 -0
  331. package/template/.pi/skills/formily-mode-slot-detail/SKILL.md +137 -0
  332. package/template/.pi/skills/formily-step-flow/SKILL.md +194 -0
  333. package/template/.pi/skills/frontend-commit/SKILL.md +118 -0
  334. package/template/.pi/skills/frontend-commit/agents/openai.yaml +7 -0
  335. package/template/.pi/skills/frontend-commit/references/scope-and-examples.md +111 -0
  336. package/template/.pi/skills/implementation-repo-onboarding/SKILL.md +5 -5
  337. package/template/.pi/skills/java-backend-commit/SKILL.md +121 -0
  338. package/template/.pi/skills/java-backend-commit/agents/openai.yaml +7 -0
  339. package/template/.pi/skills/java-backend-commit/references/scope-and-examples.md +118 -0
  340. package/template/.pi/skills/llm-wiki/SKILL.md +1 -1
  341. package/template/.pi/skills/llm-wiki/references/discover.md +1 -0
  342. package/template/.pi/skills/page-form-module/SKILL.md +168 -0
  343. package/template/.pi/skills/page-list-module/SKILL.md +137 -0
  344. package/template/.pi/skills/page-skeleton/SKILL.md +76 -0
  345. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
  346. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
  347. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
  348. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
  349. package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
  350. package/template/.pi/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
  351. package/template/.pi/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
  352. package/template/.pi/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
  353. package/template/.pi/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
  354. package/template/.pi/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
  355. package/template/.pi/skills/prototype-page-acceptance/SKILL.md +62 -0
  356. package/template/.pi/skills/theme-token-usage/SKILL.md +123 -0
  357. package/template/.pi/skills/theme-token-usage/agents/openai.yaml +4 -0
  358. package/template/.pi/skills/vue3-best-practices/SKILL.md +68 -0
  359. package/template/.pi/skills/yedit-table-usage/SKILL.md +227 -0
  360. package/template/.pi/skills/yss-api-integration/SKILL.md +12 -2
  361. package/template/.pi/skills/yss-components/SKILL.md +1 -1
  362. package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
  363. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +30 -3
  364. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +52 -0
  365. package/template/.pi/skills/yss-design-system/SKILL.md +1 -1
  366. package/template/.pi/skills/yss-formily/SKILL.md +233 -265
  367. package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +2 -2
  368. package/template/.pi/skills/yss-hook/SKILL.md +1 -1
  369. package/template/.pi/skills/yss-openapi-governance/SKILL.md +2 -2
  370. package/template/.pi/skills/yss-page-module-development/SKILL.md +12 -2
  371. package/template/.pi/skills/yss-page-module-development/references/component-map.md +34 -0
  372. package/template/.pi/skills/yss-page-module-development/references/hooks-map.md +11 -0
  373. package/template/.pi/skills/yss-page-module-development/references/utils-map.md +14 -0
  374. package/template/.pi/skills/yss-product-lifecycle/references/matt-yss-adapter.md +1 -1
  375. package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +86 -1
  376. package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +2 -0
  377. package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +1 -1
  378. package/template/.pi/skills/yss-router/SKILL.md +1 -1
  379. package/template/.pi/skills/yss-router/references/boundaries.md +1 -1
  380. package/template/.pi/skills/yss-router/references/router-contract.yaml +26 -2
  381. package/template/.pi/skills/yss-router/references/slice-implementation-contract.md +1 -1
  382. package/template/.pi/skills/yss-ui/SKILL.md +1 -1
  383. package/template/.pi/skills/yss-use-table-height/SKILL.md +9 -0
  384. package/template/.pi/skills/yss-use-tree-height/SKILL.md +9 -0
  385. package/template/.pi/skills/ytable-usage/SKILL.md +251 -0
  386. package/template/.pi/skills/ytree-usage/SKILL.md +132 -0
  387. package/template/.qoder/skills/component-selection-imports/SKILL.md +64 -0
  388. package/template/.qoder/skills/cross-repo-implementation-routing/SKILL.md +2 -2
  389. package/template/.qoder/skills/file-export-download/SKILL.md +160 -0
  390. package/template/.qoder/skills/file-export-download/agents/openai.yaml +4 -0
  391. package/template/.qoder/skills/formily-foundation/SKILL.md +176 -0
  392. package/template/.qoder/skills/formily-foundation/references/examples.md +486 -0
  393. package/template/.qoder/skills/formily-linkage-effects/SKILL.md +167 -0
  394. package/template/.qoder/skills/formily-mode-slot-detail/SKILL.md +137 -0
  395. package/template/.qoder/skills/formily-step-flow/SKILL.md +194 -0
  396. package/template/.qoder/skills/frontend-commit/SKILL.md +118 -0
  397. package/template/.qoder/skills/frontend-commit/agents/openai.yaml +7 -0
  398. package/template/.qoder/skills/frontend-commit/references/scope-and-examples.md +111 -0
  399. package/template/.qoder/skills/implementation-repo-onboarding/SKILL.md +5 -5
  400. package/template/.qoder/skills/java-backend-commit/SKILL.md +121 -0
  401. package/template/.qoder/skills/java-backend-commit/agents/openai.yaml +7 -0
  402. package/template/.qoder/skills/java-backend-commit/references/scope-and-examples.md +118 -0
  403. package/template/.qoder/skills/llm-wiki/SKILL.md +1 -1
  404. package/template/.qoder/skills/llm-wiki/references/discover.md +1 -0
  405. package/template/.qoder/skills/page-form-module/SKILL.md +168 -0
  406. package/template/.qoder/skills/page-list-module/SKILL.md +137 -0
  407. package/template/.qoder/skills/page-skeleton/SKILL.md +76 -0
  408. package/template/.qoder/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
  409. package/template/.qoder/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
  410. package/template/.qoder/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
  411. package/template/.qoder/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
  412. package/template/.qoder/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
  413. package/template/.qoder/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
  414. package/template/.qoder/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
  415. package/template/.qoder/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
  416. package/template/.qoder/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
  417. package/template/.qoder/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
  418. package/template/.qoder/skills/prototype-page-acceptance/SKILL.md +62 -0
  419. package/template/.qoder/skills/theme-token-usage/SKILL.md +123 -0
  420. package/template/.qoder/skills/theme-token-usage/agents/openai.yaml +4 -0
  421. package/template/.qoder/skills/vue3-best-practices/SKILL.md +68 -0
  422. package/template/.qoder/skills/yedit-table-usage/SKILL.md +227 -0
  423. package/template/.qoder/skills/yss-api-integration/SKILL.md +12 -2
  424. package/template/.qoder/skills/yss-components/SKILL.md +1 -1
  425. package/template/.qoder/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
  426. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +30 -3
  427. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +52 -0
  428. package/template/.qoder/skills/yss-design-system/SKILL.md +1 -1
  429. package/template/.qoder/skills/yss-formily/SKILL.md +233 -265
  430. package/template/.qoder/skills/yss-frontend-scaffold-generator/SKILL.md +2 -2
  431. package/template/.qoder/skills/yss-hook/SKILL.md +1 -1
  432. package/template/.qoder/skills/yss-openapi-governance/SKILL.md +2 -2
  433. package/template/.qoder/skills/yss-page-module-development/SKILL.md +12 -2
  434. package/template/.qoder/skills/yss-page-module-development/references/component-map.md +34 -0
  435. package/template/.qoder/skills/yss-page-module-development/references/hooks-map.md +11 -0
  436. package/template/.qoder/skills/yss-page-module-development/references/utils-map.md +14 -0
  437. package/template/.qoder/skills/yss-product-lifecycle/references/matt-yss-adapter.md +1 -1
  438. package/template/.qoder/skills/yss-product-lifecycle/references/orchestration-contract.yaml +86 -1
  439. package/template/.qoder/skills/yss-product-lifecycle/references/orchestration.md +2 -0
  440. package/template/.qoder/skills/yss-product-lifecycle/references/state-model.md +1 -1
  441. package/template/.qoder/skills/yss-router/SKILL.md +1 -1
  442. package/template/.qoder/skills/yss-router/references/boundaries.md +1 -1
  443. package/template/.qoder/skills/yss-router/references/router-contract.yaml +26 -2
  444. package/template/.qoder/skills/yss-router/references/slice-implementation-contract.md +1 -1
  445. package/template/.qoder/skills/yss-ui/SKILL.md +1 -1
  446. package/template/.qoder/skills/yss-use-table-height/SKILL.md +9 -0
  447. package/template/.qoder/skills/yss-use-tree-height/SKILL.md +9 -0
  448. package/template/.qoder/skills/ytable-usage/SKILL.md +251 -0
  449. package/template/.qoder/skills/ytree-usage/SKILL.md +132 -0
  450. package/template/.trae/skills/.yss-skills-manifest.json +29 -0
  451. package/template/.trae/skills/component-selection-imports/SKILL.md +64 -0
  452. package/template/.trae/skills/cross-repo-implementation-routing/SKILL.md +2 -2
  453. package/template/.trae/skills/file-export-download/SKILL.md +160 -0
  454. package/template/.trae/skills/file-export-download/agents/openai.yaml +4 -0
  455. package/template/.trae/skills/formily-foundation/SKILL.md +176 -0
  456. package/template/.trae/skills/formily-foundation/references/examples.md +486 -0
  457. package/template/.trae/skills/formily-linkage-effects/SKILL.md +167 -0
  458. package/template/.trae/skills/formily-mode-slot-detail/SKILL.md +137 -0
  459. package/template/.trae/skills/formily-step-flow/SKILL.md +194 -0
  460. package/template/.trae/skills/frontend-commit/SKILL.md +118 -0
  461. package/template/.trae/skills/frontend-commit/agents/openai.yaml +7 -0
  462. package/template/.trae/skills/frontend-commit/references/scope-and-examples.md +111 -0
  463. package/template/.trae/skills/implementation-repo-onboarding/SKILL.md +5 -5
  464. package/template/.trae/skills/java-backend-commit/SKILL.md +121 -0
  465. package/template/.trae/skills/java-backend-commit/agents/openai.yaml +7 -0
  466. package/template/.trae/skills/java-backend-commit/references/scope-and-examples.md +118 -0
  467. package/template/.trae/skills/llm-wiki/SKILL.md +1 -1
  468. package/template/.trae/skills/llm-wiki/references/discover.md +1 -0
  469. package/template/.trae/skills/page-form-module/SKILL.md +168 -0
  470. package/template/.trae/skills/page-list-module/SKILL.md +137 -0
  471. package/template/.trae/skills/page-skeleton/SKILL.md +76 -0
  472. package/template/.trae/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
  473. package/template/.trae/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
  474. package/template/.trae/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
  475. package/template/.trae/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
  476. package/template/.trae/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
  477. package/template/.trae/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
  478. package/template/.trae/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
  479. package/template/.trae/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
  480. package/template/.trae/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
  481. package/template/.trae/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
  482. package/template/.trae/skills/prototype-page-acceptance/SKILL.md +62 -0
  483. package/template/.trae/skills/theme-token-usage/SKILL.md +123 -0
  484. package/template/.trae/skills/theme-token-usage/agents/openai.yaml +4 -0
  485. package/template/.trae/skills/vue3-best-practices/SKILL.md +68 -0
  486. package/template/.trae/skills/yedit-table-usage/SKILL.md +227 -0
  487. package/template/.trae/skills/yss-api-integration/SKILL.md +12 -2
  488. package/template/.trae/skills/yss-components/SKILL.md +1 -1
  489. package/template/.trae/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
  490. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +30 -3
  491. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +52 -0
  492. package/template/.trae/skills/yss-design-system/SKILL.md +1 -1
  493. package/template/.trae/skills/yss-formily/SKILL.md +233 -265
  494. package/template/.trae/skills/yss-frontend-scaffold-generator/SKILL.md +2 -2
  495. package/template/.trae/skills/yss-hook/SKILL.md +1 -1
  496. package/template/.trae/skills/yss-openapi-governance/SKILL.md +2 -2
  497. package/template/.trae/skills/yss-page-module-development/SKILL.md +12 -2
  498. package/template/.trae/skills/yss-page-module-development/references/component-map.md +34 -0
  499. package/template/.trae/skills/yss-page-module-development/references/hooks-map.md +11 -0
  500. package/template/.trae/skills/yss-page-module-development/references/utils-map.md +14 -0
  501. package/template/.trae/skills/yss-product-lifecycle/references/matt-yss-adapter.md +1 -1
  502. package/template/.trae/skills/yss-product-lifecycle/references/orchestration-contract.yaml +86 -1
  503. package/template/.trae/skills/yss-product-lifecycle/references/orchestration.md +2 -0
  504. package/template/.trae/skills/yss-product-lifecycle/references/state-model.md +1 -1
  505. package/template/.trae/skills/yss-router/SKILL.md +1 -1
  506. package/template/.trae/skills/yss-router/references/boundaries.md +1 -1
  507. package/template/.trae/skills/yss-router/references/router-contract.yaml +26 -2
  508. package/template/.trae/skills/yss-router/references/slice-implementation-contract.md +1 -1
  509. package/template/.trae/skills/yss-ui/SKILL.md +1 -1
  510. package/template/.trae/skills/yss-use-table-height/SKILL.md +9 -0
  511. package/template/.trae/skills/yss-use-tree-height/SKILL.md +9 -0
  512. package/template/.trae/skills/ytable-usage/SKILL.md +251 -0
  513. package/template/.trae/skills/ytree-usage/SKILL.md +132 -0
  514. package/template/AGENTS.md +5 -5
  515. package/template/CONTEXT.md +3 -2
  516. package/template/docs/agents/skill-migrations.md +16 -0
  517. package/template/docs/agents/skills-maintenance.md +1 -1
  518. package/template/docs/agents/yss-skill-registry.yaml +125 -25
  519. package/template/docs/process/implementation-repo-integration.md +24 -2
  520. package/template/docs/templates/cross-repo-slice-template.md +15 -0
  521. package/template/docs/templates/implementation-repo-registry-template.md +8 -3
  522. package/template/docs/templates/implementation-routing-template.md +3 -3
  523. 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 +2 -2
  524. 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
  525. 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
  526. package/template/scripts/lib/git-submodule-fixtures.mjs +58 -0
  527. package/template/scripts/lib/repository-scope-policy.mjs +456 -0
  528. package/template/scripts/lib/scenario-checks.mjs +32 -1
  529. package/template/scripts/lib/skill-governance.mjs +50 -0
  530. package/template/scripts/lib/skill-registry.mjs +82 -5
  531. package/template/scripts/lib/skill-supply-chain.mjs +5 -1
  532. package/template/scripts/repository-scope-policy +16 -0
  533. package/template/scripts/verify-repository-scope-scenarios +239 -0
  534. package/template/scripts/verify-scaffold-generator-scenarios +54 -0
  535. package/template/scripts/verify-skill-governance +10 -0
  536. package/template/scripts/verify-template +4 -2
  537. package/template/skills-lock.json +289 -33
  538. package/template.manifest.json +6 -5
  539. package/template.snapshot.json +4 -4
  540. package/template/.agents/skills/high-fidelity-html-prototype/SKILL.md +0 -89
  541. package/template/.agents/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
  542. package/template/.agents/skills/yss-formily/agents/openai.yaml +0 -5
  543. package/template/.agents/skills/yss-formily/references/examples.md +0 -65
  544. package/template/.claude/skills/high-fidelity-html-prototype/SKILL.md +0 -89
  545. package/template/.claude/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
  546. package/template/.claude/skills/yss-formily/agents/openai.yaml +0 -5
  547. package/template/.claude/skills/yss-formily/references/examples.md +0 -65
  548. package/template/.codex/skills/high-fidelity-html-prototype/SKILL.md +0 -89
  549. package/template/.codex/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
  550. package/template/.codex/skills/yss-formily/agents/openai.yaml +0 -5
  551. package/template/.codex/skills/yss-formily/references/examples.md +0 -65
  552. package/template/.cursor/environment.json +0 -5
  553. package/template/.cursor/skills/high-fidelity-html-prototype/SKILL.md +0 -89
  554. package/template/.cursor/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
  555. package/template/.cursor/skills/yss-formily/agents/openai.yaml +0 -5
  556. package/template/.cursor/skills/yss-formily/references/examples.md +0 -65
  557. package/template/.github/workflows/template-node-tooling.yml +0 -61
  558. package/template/.hermes/skills/high-fidelity-html-prototype/SKILL.md +0 -89
  559. package/template/.hermes/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
  560. package/template/.hermes/skills/yss-formily/agents/openai.yaml +0 -5
  561. package/template/.hermes/skills/yss-formily/references/examples.md +0 -65
  562. package/template/.pi/skills/high-fidelity-html-prototype/SKILL.md +0 -89
  563. package/template/.pi/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
  564. package/template/.pi/skills/yss-formily/agents/openai.yaml +0 -5
  565. package/template/.pi/skills/yss-formily/references/examples.md +0 -65
  566. package/template/.qoder/skills/high-fidelity-html-prototype/SKILL.md +0 -89
  567. package/template/.qoder/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
  568. package/template/.qoder/skills/yss-formily/agents/openai.yaml +0 -5
  569. package/template/.qoder/skills/yss-formily/references/examples.md +0 -65
  570. package/template/.trae/skills/high-fidelity-html-prototype/SKILL.md +0 -89
  571. package/template/.trae/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
  572. package/template/.trae/skills/yss-formily/agents/openai.yaml +0 -5
  573. package/template/.trae/skills/yss-formily/references/examples.md +0 -65
  574. package/template/wiki/.wiki-manifest.json +0 -390
  575. package/template/wiki/raw/AGENTS.md +0 -122
  576. package/template/wiki/raw/CONTEXT.md +0 -80
  577. package/template/wiki/raw/README.md +0 -130
  578. package/template/wiki/raw/adr-0002-repository-mode.md +0 -3
  579. package/template/wiki/raw/create-yss-spec-repository-mode-contract.md +0 -95
  580. package/template/wiki/raw/harness-process-tailoring.md +0 -64
  581. package/template/wiki/raw/implementation-repo-integration.md +0 -62
  582. package/template/wiki/raw/issue-tracker.md +0 -135
  583. package/template/wiki/raw/lifecycle-registry.yaml +0 -369
  584. package/template/wiki/raw/maintenance-intensity.yaml +0 -25
  585. package/template/wiki/raw/skills-lock-names.md +0 -93
  586. package/template/wiki/raw/skills-maintenance.md +0 -90
  587. package/template/wiki/raw/spec-template.md +0 -102
  588. package/template/wiki/raw/triage-labels.md +0 -15
  589. package/template/wiki/raw/vertical-slice-ticket-template.md +0 -132
  590. package/template/wiki/raw/yss-project.yaml +0 -2
  591. package/template/wiki/raw/yss-skill-registry.yaml +0 -510
  592. package/template/wiki/wiki/Agent/345/205/245/345/217/243/350/247/204/345/210/231.md +0 -21
  593. package/template/wiki/wiki/CLAUDE.md +0 -28
  594. package/template/wiki/wiki/Fresh/351/252/214/350/257/201/344/270/216/347/213/254/347/253/213/345/256/241/346/237/245.md +0 -19
  595. package/template/wiki/wiki/LLM Wiki.md +0 -30
  596. package/template/wiki/wiki/Matt/346/212/200/350/203/275/344/275/223/347/263/273.md +0 -21
  597. package/template/wiki/wiki/OpenAPI/345/245/221/347/272/246.md +0 -20
  598. package/template/wiki/wiki/SpecDelta.md +0 -19
  599. package/template/wiki/wiki/Spec/345/237/272/347/272/277.md +0 -22
  600. package/template/wiki/wiki/Ticket/344/270/216/346/265/201/347/250/213/347/212/266/346/200/201.md +0 -21
  601. package/template/wiki/wiki/YSS/345/267/245/347/250/213/346/212/200/350/203/275/344/275/223/347/263/273.md +0 -23
  602. package/template/wiki/wiki/YSS/350/267/257/347/224/261/344/270/216/345/220/210/345/220/214/347/274/226/350/257/221.md +0 -20
  603. package/template/wiki/wiki/concept-table.md +0 -9
  604. package/template/wiki/wiki/index.md +0 -41
  605. package/template/wiki/wiki/log.md +0 -51
  606. package/template/wiki/wiki//344/272/247/345/223/201/347/240/224/345/217/221/347/224/237/345/221/275/345/221/250/346/234/237.md +0 -20
  607. package/template/wiki/wiki//344/272/247/345/223/201/350/256/276/350/256/241/345/275/261/345/223/215/344/270/216/345/216/237/345/236/213.md +0 -19
  608. package/template/wiki/wiki//344/273/223/345/272/223/350/272/253/344/273/275/344/270/216/350/267/257/347/224/261.md +0 -20
  609. package/template/wiki/wiki//345/210/207/347/211/207/345/256/236/347/216/260/345/220/210/345/220/214.md +0 -21
  610. package/template/wiki/wiki//345/236/202/347/233/264/345/210/207/347/211/207Ticket.md +0 -23
  611. package/template/wiki/wiki//345/244/215/347/233/230/344/270/216/346/235/203/345/250/201/350/265/204/344/272/247/344/277/256/350/256/242.md +0 -20
  612. package/template/wiki/wiki//345/256/236/347/216/260/344/273/223/345/272/223/344/270/216/350/267/250/344/273/223/345/272/223/345/245/221/347/272/246.md +0 -22
  613. package/template/wiki/wiki//345/275/261/345/223/215/351/235/242/345/210/206/350/257/212/344/270/216/346/265/201/347/250/213/350/243/201/345/211/252.md +0 -20
  614. package/template/wiki/wiki//346/212/200/350/203/275/346/212/225/345/275/261/344/270/216/351/224/201/345/256/232.md +0 -23
  615. package/template/wiki/wiki//346/235/241/344/273/266/345/274/272/345/210/266/351/227/250/347/246/201.md +0 -18
  616. package/template/wiki/wiki//346/250/241/346/235/277/345/217/221/345/270/203/351/227/250/347/246/201/344/270/216/351/252/214/350/257/201.md +0 -22
  617. package/template/wiki/wiki//346/250/241/346/235/277/346/200/273/350/247/210.md +0 -20
  618. package/template/wiki/wiki//346/250/241/346/235/277/347/273/264/346/212/244/346/265/201/347/250/213.md +0 -19
@@ -0,0 +1,58 @@
1
+ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
2
+ import { tmpdir } from "node:os";
3
+ import path from "node:path";
4
+ import { execFileSync } from "node:child_process";
5
+
6
+ function git(cwd, args) {
7
+ return execFileSync("git", args, { cwd, encoding: "utf8" });
8
+ }
9
+
10
+ function initRepo(dir) {
11
+ mkdirSync(dir, { recursive: true });
12
+ git(dir, ["init", "-b", "main"]);
13
+ git(dir, ["config", "user.email", "test@example.invalid"]);
14
+ git(dir, ["config", "user.name", "fixture"]);
15
+ git(dir, ["config", "commit.gpgsign", "false"]);
16
+ }
17
+
18
+ export function makeGitlinkFixture({ checkout = "empty-gitlink" } = {}) {
19
+ const root = mkdtempSync(path.join(tmpdir(), "yss-gitlink-"));
20
+ const child = path.join(root, "child.git");
21
+ const superproject = path.join(root, "super");
22
+ initRepo(child);
23
+ writeFileSync(path.join(child, "README.md"), "child\n");
24
+ git(child, ["add", "."]);
25
+ git(child, ["commit", "-m", "init child"]);
26
+ const sha = git(child, ["rev-parse", "HEAD"]).trim();
27
+ initRepo(superproject);
28
+ mkdirSync(path.join(superproject, "apps/backend"), { recursive: true });
29
+ const mount = "apps/backend/billing-service";
30
+ if (checkout === "empty-gitlink") {
31
+ mkdirSync(path.join(superproject, mount), { recursive: true });
32
+ writeFileSync(
33
+ path.join(superproject, ".gitmodules"),
34
+ `[submodule "backend-billing-service"]\n\tpath = ${mount}\n\turl = ${child}\n`
35
+ );
36
+ git(superproject, ["update-index", "--add", "--cacheinfo", "160000", sha, mount]);
37
+ git(superproject, ["add", ".gitmodules"]);
38
+ git(superproject, ["commit", "-m", "empty gitlink"]);
39
+ } else {
40
+ git(superproject, ["-c", "protocol.file.allow=always", "submodule", "add", child, mount]);
41
+ git(superproject, ["commit", "-m", "add submodule"]);
42
+ if (checkout === "detached-head") {
43
+ git(path.join(superproject, mount), ["checkout", "--detach"]);
44
+ } else if (checkout === "attached-branch") {
45
+ git(path.join(superproject, mount), ["checkout", "-B", "main"]);
46
+ }
47
+ }
48
+ return {
49
+ root,
50
+ superproject,
51
+ child,
52
+ mount,
53
+ sha,
54
+ cleanup() {
55
+ rmSync(root, { recursive: true, force: true });
56
+ }
57
+ };
58
+ }
@@ -0,0 +1,456 @@
1
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { spawnSync } from "node:child_process";
4
+ import { validImplementationPath, violation as pathViolation } from "./implementation-path-policy.mjs";
5
+
6
+ export const REPOSITORY_SCOPES = Object.freeze([
7
+ "external-repository",
8
+ "harness-apps",
9
+ "git-submodule"
10
+ ]);
11
+
12
+ export const LAYOUT_POLICIES = Object.freeze({
13
+ "external-repository": "external-repository-native",
14
+ "harness-apps": "harness-apps-multi-project",
15
+ "git-submodule": "git-submodule-harness-apps"
16
+ });
17
+
18
+ export const GITLINK_MODE = "160000";
19
+ export const CHECKOUT_STATES = Object.freeze([
20
+ "attached-branch",
21
+ "detached-head",
22
+ "uninitialized",
23
+ "empty-gitlink"
24
+ ]);
25
+
26
+ export const NAMED_STRESS_SCENARIOS = Object.freeze([
27
+ "unknown_scope",
28
+ "layout_mismatch",
29
+ "same_origin_url",
30
+ "copy_source_into_harness",
31
+ "missing_git_entry_mode",
32
+ "declared_harness_apps_actual_gitlink",
33
+ "empty_gitlink_as_regular_dir",
34
+ "detached_head_as_regular_dir",
35
+ "force_overlay_mount"
36
+ ]);
37
+
38
+ function asString(value) {
39
+ return typeof value === "string" ? value.trim() : "";
40
+ }
41
+
42
+ function normalizeSlash(value) {
43
+ const text = asString(value);
44
+ if (!text) return "";
45
+ return text.replace(/\\/g, "/").replace(/\/+$/, "");
46
+ }
47
+
48
+ function isDeclared(value) {
49
+ const text = asString(value);
50
+ return text !== "" && text !== "不适用";
51
+ }
52
+
53
+ function uniqueResolved(items) {
54
+ const seen = new Set();
55
+ const out = [];
56
+ for (const item of items) {
57
+ if (!item) continue;
58
+ const resolved = path.resolve(item);
59
+ if (seen.has(resolved)) continue;
60
+ seen.add(resolved);
61
+ out.push(resolved);
62
+ }
63
+ return out;
64
+ }
65
+
66
+ export function expectedLayoutPolicy(scope) {
67
+ return LAYOUT_POLICIES[scope] ?? null;
68
+ }
69
+
70
+ export function violationRepositoryScope(record = {}) {
71
+ const scope = asString(record.repository_scope);
72
+ if (!REPOSITORY_SCOPES.includes(scope)) {
73
+ return `repository_scope must be one of ${REPOSITORY_SCOPES.join(" / ")}`;
74
+ }
75
+ const layout = asString(record.layout_policy);
76
+ const expected = expectedLayoutPolicy(scope);
77
+ if (layout && layout !== expected) {
78
+ return `layout_policy for ${scope} must be ${expected}`;
79
+ }
80
+ if (scope === "git-submodule") return gitSubmoduleRecordViolation(record);
81
+ if (scope === "harness-apps") return harnessAppsRecordViolation(record);
82
+ return externalRepositoryRecordViolation(record);
83
+ }
84
+
85
+ function gitSubmoduleRecordViolation(record) {
86
+ const projectRoot = normalizeSlash(record.project_root);
87
+ if (!projectRoot || !validImplementationPath(`${projectRoot}/`)) {
88
+ return `git-submodule project_root must be a concrete apps/backend/<project>/ or apps/frontend/<project>/ path: ${pathViolation(record.project_root || "") ?? "missing"}`;
89
+ }
90
+ if (!isDeclared(record.gitlink_path)) {
91
+ return "git-submodule gitlink_path is required";
92
+ }
93
+ const gitlinkPath = normalizeSlash(record.gitlink_path);
94
+ if (gitlinkPath !== projectRoot) {
95
+ return "git-submodule gitlink_path must equal project_root";
96
+ }
97
+ if (asString(record.git_entry_mode) !== GITLINK_MODE) {
98
+ return `git-submodule git_entry_mode must be ${GITLINK_MODE}`;
99
+ }
100
+ if (!asString(record.git_url)) return "git-submodule git_url is required";
101
+ if (!asString(record.gitmodules_name)) return "git-submodule gitmodules_name is required";
102
+ if (!asString(record.superproject_git_url)) {
103
+ return "git-submodule superproject_git_url is required";
104
+ }
105
+ if (asString(record.superproject_git_url) === asString(record.git_url)) {
106
+ return "git-submodule git_url must differ from superproject_git_url";
107
+ }
108
+ if (asString(record.layout_policy) && asString(record.layout_policy) !== LAYOUT_POLICIES["git-submodule"]) {
109
+ return `git-submodule layout_policy must be ${LAYOUT_POLICIES["git-submodule"]}`;
110
+ }
111
+ const checkout = asString(record.checkout_state);
112
+ if (!checkout) return "git-submodule checkout_state is required";
113
+ if (!CHECKOUT_STATES.includes(checkout)) {
114
+ return `git-submodule checkout_state must be one of ${CHECKOUT_STATES.join(" / ")}`;
115
+ }
116
+ if (checkout === "detached-head" && record.commit_allowed === true) {
117
+ return "git-submodule must not commit on detached HEAD";
118
+ }
119
+ if (checkout === "detached-head" && record.scaffold_status === "required") {
120
+ return "detached HEAD must not be treated as a regular directory";
121
+ }
122
+ if ((checkout === "uninitialized" || checkout === "empty-gitlink") && record.scaffold_status === "required") {
123
+ return "empty or uninitialized gitlink must not run scaffold_status=required";
124
+ }
125
+ if (record.force === true) {
126
+ return "--force must not overlay a git-submodule mount as a regular directory";
127
+ }
128
+ if (record.copy_source_into_harness === true) {
129
+ return "git-submodule must use gitlink mount, not copy implementation sources into the superproject";
130
+ }
131
+ return null;
132
+ }
133
+
134
+ function foreignGitlinkIdentityViolation(record, scope) {
135
+ if (asString(record.git_entry_mode) === GITLINK_MODE) {
136
+ return `${scope} cannot record a gitlink; use repository_scope: git-submodule`;
137
+ }
138
+ if (isDeclared(record.gitlink_path) || isDeclared(record.gitmodules_name) || isDeclared(record.superproject_git_url)) {
139
+ return `${scope} must not record git-submodule identity fields; use repository_scope: git-submodule`;
140
+ }
141
+ const checkout = asString(record.checkout_state);
142
+ if (isDeclared(checkout) && CHECKOUT_STATES.includes(checkout)) {
143
+ return `${scope} must not record git-submodule checkout_state; use repository_scope: git-submodule`;
144
+ }
145
+ return null;
146
+ }
147
+
148
+ function harnessAppsRecordViolation(record) {
149
+ const foreign = foreignGitlinkIdentityViolation(record, "harness-apps");
150
+ if (foreign) return foreign;
151
+ const projectRoot = normalizeSlash(record.project_root);
152
+ if (projectRoot && !validImplementationPath(`${projectRoot}/`)) {
153
+ return `harness-apps project_root must be a concrete apps/<kind>/<project>/ path: ${pathViolation(record.project_root)}`;
154
+ }
155
+ return null;
156
+ }
157
+
158
+ function externalRepositoryRecordViolation(record) {
159
+ const gitlinkPath = normalizeSlash(record.gitlink_path);
160
+ if (gitlinkPath && gitlinkPath.startsWith("apps/") && String(record.git_entry_mode) === GITLINK_MODE) {
161
+ return "external-repository cannot mount a gitlink under apps/; use repository_scope: git-submodule";
162
+ }
163
+ const foreign = foreignGitlinkIdentityViolation(record, "external-repository");
164
+ if (foreign) return foreign;
165
+ return null;
166
+ }
167
+
168
+ export function validRepositoryScope(record) {
169
+ return violationRepositoryScope(record) === null;
170
+ }
171
+
172
+ export function parseGitmodules(content) {
173
+ const modules = [];
174
+ if (typeof content !== "string" || content.length === 0) return modules;
175
+ let current = null;
176
+ for (const rawLine of content.split(/\r?\n/)) {
177
+ const line = rawLine.trim();
178
+ const name = line.match(/^\[submodule "(.+)"\]$/);
179
+ if (name) {
180
+ current = { name: name[1], path: "", url: "" };
181
+ modules.push(current);
182
+ continue;
183
+ }
184
+ if (!current) continue;
185
+ const pathMatch = line.match(/^path\s*=\s*(.+)$/);
186
+ if (pathMatch) current.path = normalizeSlash(pathMatch[1]);
187
+ const urlMatch = line.match(/^url\s*=\s*(.+)$/);
188
+ if (urlMatch) current.url = urlMatch[1].trim();
189
+ }
190
+ return modules;
191
+ }
192
+
193
+ export function readGitmodules(repoRoot) {
194
+ const file = path.join(repoRoot, ".gitmodules");
195
+ if (!existsSync(file)) return [];
196
+ return parseGitmodules(readFileSync(file, "utf8"));
197
+ }
198
+
199
+ export function gitLsFilesStage(repoRoot, relativePath) {
200
+ const result = spawnSync("git", ["-C", repoRoot, "ls-files", "--stage", "--", relativePath], {
201
+ encoding: "utf8"
202
+ });
203
+ if (result.status !== 0) return null;
204
+ const line = (result.stdout || "").trim().split(/\r?\n/).filter(Boolean)[0];
205
+ if (!line) return null;
206
+ const match = line.match(/^(\d+)\s+([0-9a-f]+)\s+(\d+)\s+(.+)$/i);
207
+ if (!match) return null;
208
+ return { mode: match[1], sha: match[2], stage: match[3], path: match[4] };
209
+ }
210
+
211
+ export function findGitRoot(start) {
212
+ const roots = collectGitRoots(start);
213
+ return roots[0] ?? null;
214
+ }
215
+
216
+ export function collectGitRoots(start) {
217
+ if (!start) return [];
218
+ const roots = [];
219
+ let current = path.resolve(start);
220
+ while (true) {
221
+ if (existsSync(path.join(current, ".git")) || existsSync(path.join(current, ".gitmodules"))) {
222
+ roots.push(current);
223
+ }
224
+ const parent = path.dirname(current);
225
+ if (parent === current) break;
226
+ current = parent;
227
+ }
228
+ return roots;
229
+ }
230
+
231
+ function isUnsafeCheckout(state) {
232
+ return state === "empty-gitlink" || state === "uninitialized" || state === "detached-head";
233
+ }
234
+
235
+ function gitAbbrevRef(cwd) {
236
+ const result = spawnSync("git", ["-C", cwd, "rev-parse", "--abbrev-ref", "HEAD"], { encoding: "utf8" });
237
+ if (result.status !== 0) return null;
238
+ return (result.stdout || "").trim();
239
+ }
240
+
241
+ function gitShowSuperproject(cwd) {
242
+ const result = spawnSync("git", ["-C", cwd, "rev-parse", "--show-superproject-working-tree"], { encoding: "utf8" });
243
+ if (result.status !== 0) return "";
244
+ return (result.stdout || "").trim();
245
+ }
246
+
247
+ function isEmptyDir(dir) {
248
+ if (!existsSync(dir)) return true;
249
+ try {
250
+ return readdirSync(dir).filter((name) => name !== "." && name !== "..").length === 0;
251
+ } catch {
252
+ return false;
253
+ }
254
+ }
255
+
256
+ export function isGitSubmoduleMount(repoRoot, targetPath) {
257
+ const relative = normalizeSlash(path.relative(repoRoot, path.resolve(targetPath)));
258
+ if (!relative || relative.startsWith("..")) return false;
259
+ const listed = readGitmodules(repoRoot).some((item) => item.path === relative);
260
+ if (listed) return true;
261
+ const staged = gitLsFilesStage(repoRoot, relative);
262
+ return staged?.mode === GITLINK_MODE;
263
+ }
264
+
265
+ export function isGitSubmoduleMountAnywhere(startOrRoot, targetPath) {
266
+ const roots = uniqueResolved([startOrRoot, ...collectGitRoots(targetPath), ...collectGitRoots(startOrRoot)]);
267
+ return roots.some((root) => isGitSubmoduleMount(root, targetPath));
268
+ }
269
+
270
+ export function inspectCheckoutState(repoRoot, targetPath) {
271
+ const resolved = path.resolve(targetPath);
272
+ const relative = repoRoot ? normalizeSlash(path.relative(path.resolve(repoRoot), resolved)) : "";
273
+ const inRepo = Boolean(relative) && !relative.startsWith("..");
274
+ const staged = inRepo ? gitLsFilesStage(repoRoot, relative) : null;
275
+ const listed = inRepo ? readGitmodules(repoRoot).some((item) => item.path === relative) : false;
276
+ const superproject = existsSync(path.join(resolved, ".git")) ? gitShowSuperproject(resolved) : "";
277
+ const isMount = staged?.mode === GITLINK_MODE || listed || Boolean(superproject);
278
+ const hasGit = existsSync(path.join(resolved, ".git"));
279
+ if (isMount && !hasGit) {
280
+ return isEmptyDir(resolved) ? "empty-gitlink" : "uninitialized";
281
+ }
282
+ if (isMount && hasGit) {
283
+ const ref = gitAbbrevRef(resolved);
284
+ if (ref === "HEAD") return "detached-head";
285
+ return "attached-branch";
286
+ }
287
+ return null;
288
+ }
289
+
290
+ export function actualWorkingTreeScope(repoRoot, targetPath) {
291
+ if (isGitSubmoduleMountAnywhere(repoRoot, targetPath) || gitShowSuperproject(targetPath)) {
292
+ return "git-submodule";
293
+ }
294
+ return "regular";
295
+ }
296
+
297
+ export function regularDirectoryMisreadViolation(record = {}, options = {}) {
298
+ const force = options.force === true;
299
+ const checkout = asString(record.checkout_state);
300
+ if (checkout === "empty-gitlink" || checkout === "uninitialized") {
301
+ return "empty gitlink must not be treated as a regular directory";
302
+ }
303
+ if (checkout === "detached-head") {
304
+ return "detached HEAD must not be treated as a regular directory";
305
+ }
306
+ if (options.repoRoot && options.targetPath) {
307
+ const inspected = inspectCheckoutState(options.repoRoot, options.targetPath);
308
+ if (inspected === "empty-gitlink" || inspected === "uninitialized") {
309
+ return "empty gitlink must not be treated as a regular directory";
310
+ }
311
+ if (inspected === "detached-head") {
312
+ return "detached HEAD must not be treated as a regular directory";
313
+ }
314
+ if (isGitSubmoduleMountAnywhere(options.repoRoot, options.targetPath) && force) {
315
+ return "--force must not overlay a git-submodule mount as a regular directory";
316
+ }
317
+ }
318
+ if (force && asString(record.repository_scope) === "git-submodule") {
319
+ return "--force must not overlay a git-submodule mount as a regular directory";
320
+ }
321
+ return null;
322
+ }
323
+
324
+ export function findEnclosingSubmoduleWorktree(repoRoot, start) {
325
+ let current = path.resolve(start);
326
+ const stop = repoRoot ? path.resolve(repoRoot) : null;
327
+ while (true) {
328
+ const roots = uniqueResolved([repoRoot, ...collectGitRoots(current)]);
329
+ for (const root of roots) {
330
+ if (path.resolve(root) === current) continue;
331
+ if (isGitSubmoduleMount(root, current)) {
332
+ return {
333
+ worktree: current,
334
+ superproject: root,
335
+ checkout: inspectCheckoutState(root, current)
336
+ };
337
+ }
338
+ }
339
+ if (existsSync(path.join(current, ".git"))) {
340
+ const superproject = gitShowSuperproject(current);
341
+ if (superproject) {
342
+ const checkout = inspectCheckoutState(superproject, current)
343
+ || (gitAbbrevRef(current) === "HEAD" ? "detached-head" : "attached-branch");
344
+ return { worktree: current, superproject, checkout };
345
+ }
346
+ }
347
+ if (stop && current === stop) break;
348
+ const parent = path.dirname(current);
349
+ if (parent === current) break;
350
+ current = parent;
351
+ }
352
+ return null;
353
+ }
354
+
355
+ export function overlayMountViolation(repoRoot, targetPath, { force = false } = {}) {
356
+ if (!isGitSubmoduleMountAnywhere(repoRoot, targetPath)) return null;
357
+ return force
358
+ ? "--force 不得把 git-submodule 挂载点当成普通目录覆盖;gitlink 不得由脚手架覆盖"
359
+ : "git-submodule gitlink 不得由脚手架覆盖;先 git submodule update --init,在子仓附加分支的工作树内生成,或改用 external-repository / harness-apps";
360
+ }
361
+
362
+ export function unsafeSubmoduleWorktreeViolation(repoRoot, targetPath) {
363
+ const enclosing = findEnclosingSubmoduleWorktree(repoRoot, targetPath);
364
+ if (!enclosing) return null;
365
+ if (enclosing.checkout === "empty-gitlink" || enclosing.checkout === "uninitialized") {
366
+ return "空 gitlink 不得当成普通目录写入;gitlink 不得由脚手架覆盖";
367
+ }
368
+ if (enclosing.checkout === "detached-head") {
369
+ return "detached HEAD 不得当成普通目录写入;gitlink 不得由脚手架覆盖";
370
+ }
371
+ return null;
372
+ }
373
+
374
+ export function implementationWriteViolation(repoRoot, targetPath, { force = false } = {}) {
375
+ return overlayMountViolation(repoRoot, targetPath, { force })
376
+ || unsafeSubmoduleWorktreeViolation(repoRoot, targetPath);
377
+ }
378
+
379
+ function freezeWorkingTreeInspection({ writable, violation, declared, actual }) {
380
+ return Object.freeze({
381
+ writable: writable === true,
382
+ violation: violation || null,
383
+ declared: Object.freeze(declared),
384
+ actual: Object.freeze(actual)
385
+ });
386
+ }
387
+
388
+ export function isWorkingTreeWritable(inspection) {
389
+ return inspection?.writable === true;
390
+ }
391
+
392
+ export function inspectWorkingTreeScope(repoRoot, record = {}) {
393
+ const projectRoot = normalizeSlash(record.project_root);
394
+ const declaredScope = asString(record.repository_scope);
395
+ const declaredCheckout = asString(record.checkout_state);
396
+ const declared = { scope: declaredScope, checkout: declaredCheckout };
397
+ if (!repoRoot || !projectRoot) {
398
+ return freezeWorkingTreeInspection({
399
+ writable: false,
400
+ violation: "working-tree inspection requires repoRoot and project_root",
401
+ declared,
402
+ actual: { scope: null, checkout: null }
403
+ });
404
+ }
405
+ const target = path.resolve(repoRoot, projectRoot);
406
+ const actualScope = actualWorkingTreeScope(repoRoot, target);
407
+ const actualCheckout = inspectCheckoutState(repoRoot, target);
408
+ const actual = { scope: actualScope, checkout: actualCheckout };
409
+ let violation = null;
410
+ if (declaredScope === "harness-apps" && actualScope === "git-submodule") {
411
+ violation = "工作树存在 gitlink / .gitmodules,不得登记为 harness-apps";
412
+ } else if (declaredScope === "external-repository" && actualScope === "git-submodule" && projectRoot.startsWith("apps/")) {
413
+ violation = "工作树存在 apps/ gitlink,不得登记为 external-repository";
414
+ } else if (declaredScope === "git-submodule" && actualScope !== "git-submodule") {
415
+ violation = "工作树不是 gitlink,不得登记为 git-submodule";
416
+ }
417
+ if (isUnsafeCheckout(declaredCheckout) || isUnsafeCheckout(actualCheckout)) {
418
+ const misread = regularDirectoryMisreadViolation({
419
+ checkout_state: isUnsafeCheckout(actualCheckout) ? actualCheckout : declaredCheckout
420
+ });
421
+ violation = violation ? `${violation};${misread}` : misread;
422
+ } else if (!violation) {
423
+ violation = unsafeSubmoduleWorktreeViolation(repoRoot, target);
424
+ }
425
+ const writable = violation === null
426
+ && declaredCheckout !== "empty-gitlink"
427
+ && (declaredScope !== "git-submodule"
428
+ || (declaredCheckout === "attached-branch" && actualCheckout === "attached-branch"));
429
+ return freezeWorkingTreeInspection({ writable, violation, declared, actual });
430
+ }
431
+
432
+ export function gitSubmoduleScaffoldViolation(repositoryRoot, outputDir, projectName, { force = false } = {}) {
433
+ const resolvedOutput = path.resolve(outputDir);
434
+ const projectRoot = path.resolve(resolvedOutput, projectName);
435
+ const gitRoot = findGitRoot(projectRoot) || findGitRoot(resolvedOutput) || repositoryRoot || null;
436
+ return overlayMountViolation(gitRoot, projectRoot, { force })
437
+ || unsafeSubmoduleWorktreeViolation(gitRoot, projectRoot)
438
+ || unsafeSubmoduleWorktreeViolation(gitRoot, resolvedOutput)
439
+ || regularDirectoryMisreadViolation({}, { force, repoRoot: gitRoot, targetPath: projectRoot });
440
+ }
441
+
442
+ export function gitSubmoduleCommitViolation({ checkout_state, commit_authorized } = {}) {
443
+ if (checkout_state === "detached-head") {
444
+ return "git-submodule must checkout an attached branch before commit";
445
+ }
446
+ if (commit_authorized !== true) return "commit_authorized must be true";
447
+ return null;
448
+ }
449
+
450
+ export function gitSubmodulePushOrderViolation(order) {
451
+ const expected = ["submodule-repositories", "superproject-gitlink"];
452
+ if (!Array.isArray(order) || order.length !== expected.length || expected.some((item, index) => order[index] !== item)) {
453
+ return "git-submodule push/commit order must be submodule-repositories then superproject-gitlink";
454
+ }
455
+ return null;
456
+ }
@@ -28,6 +28,9 @@ function validateMattContract(data) {
28
28
  ensure(git?.natural_language_intent_is_authorization === false && rule?.requires_explicit_user_authorization === true && rule?.authorized_value === true && rule?.unauthorized_action === "checkpoint-only", `${action} 授权边界不完整`);
29
29
  ensure(includesAll(rule?.required, [`${prefix}_authorized`, `${prefix}_scope`, `${prefix}_authorization_ref`]) && includesAll(rule?.non_empty, [`${prefix}_scope`, `${prefix}_authorization_ref`]), `${action} 授权必填字段不完整`);
30
30
  }
31
+ const submodule = git?.git_submodule;
32
+ ensure(submodule?.applies_when === "repository_scope=git-submodule" && submodule?.forbid_commit_on_detached_head === true && submodule?.empty_gitlink_scaffold === "blocked" && submodule?.treat_empty_gitlink_as_regular_dir === "blocked" && submodule?.treat_detached_head_as_regular_dir === "blocked" && submodule?.force_overlay_mount === "blocked" && submodule?.write_inside_detached_head === "blocked" && submodule?.require_git_entry_mode === "160000" && submodule?.working_tree_declared_scope_must_match === true && submodule?.copy_source_into_harness === "forbidden" && submodule?.clone_requires_recurse_submodules === true && submodule?.push_recurse_submodules === "check" && submodule?.delivery_order_must_include === "superproject-gitlink-update" && submodule?.nested_authorization === "per-repository" && submodule?.inspect_working_tree_writable === "explicit-boolean" && submodule?.empty_gitlink_writable === false && submodule?.force_overlay_regular_dir_path === "blocked", "git-submodule Git 授权契约不完整");
33
+ ensure(JSON.stringify(submodule?.commit_order) === JSON.stringify(["submodule-repositories", "superproject-gitlink"]) && JSON.stringify(submodule?.push_order) === JSON.stringify(["submodule-repositories", "superproject-gitlink"]), "git-submodule 先子后父顺序不完整");
31
34
  }
32
35
 
33
36
  function validateInvocationBoundary(data) {
@@ -54,6 +57,11 @@ function validateInvocationBoundary(data) {
54
57
  ensure(routes?.["work-unit.discovery-requirements"]?.skills?.includes("grilling") && routes?.["work-unit.discovery-requirements"]?.skills?.includes("domain-modeling"), "需求分析工作单元缺少 grilling/domain-modeling");
55
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", "机会调研事实路由不准确");
56
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
+ }
57
65
  ensure(routes?.["work-unit.frontend-implementation-verification"]?.skills?.includes("code-review") && routes?.["work-unit.frontend-implementation-verification"]?.applies_when === "ui_impact", "前端还原验证未绑定 UI fidelity 审查轴");
58
66
  for (const id of ["work-unit.spec-synthesis", "work-unit.ticket-decomposition", "work-unit.slice-implementation"]) {
59
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 兼容输入`);
@@ -67,6 +75,12 @@ function validateInvocationBoundary(data) {
67
75
  function validateWorkflowExecutionResult(payload, contract, workUnitRoutes) {
68
76
  for (const field of contract.required) ensure(Object.hasOwn(payload, field), `Workflow Execution Result 缺少 ${field}`);
69
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
+ }
70
84
  for (const field of contract.workflow_reference.required) ensure(typeof payload.workflow_reference?.[field] === "string" && payload.workflow_reference[field].trim(), `workflow_reference.${field} 无效`);
71
85
  const workUnit = workUnitRoutes?.[payload.work_unit];
72
86
  ensure(workUnit, `未知 Workflow Execution Result work_unit: ${payload.work_unit}`);
@@ -92,6 +106,7 @@ function validateMattProse(skill, adapter) {
92
106
  ensure(adapter.includes("仅发现旧路径资产") && adapter.includes("不得调用 `setup-matt-pocock-skills`"), "适配器缺少 setup 旧资产迁移或显式用户入口条件");
93
107
  ensure(adapter.includes("frontier 为空") && adapter.includes("双方共同理解已确认"), "适配器缺少 grill_exit 的 frontier 或共同理解条件");
94
108
  ensure(skill.includes("自然语言意向不构成上述结构化 Git 授权") && adapter.includes("本身不是结构化授权"), "主技能或适配器缺少自然语言 Git 意向不是授权的说明");
109
+ ensure(adapter.includes("禁止 detached HEAD 提交") && adapter.includes("先推子仓再更新父仓 gitlink"), "适配器缺少 git-submodule 嵌套 Git 授权说明");
95
110
  }
96
111
 
97
112
  function validateInvocationProse(skill, adapter, orchestration) {
@@ -185,6 +200,16 @@ export function runScenario(name) {
185
200
  blocking_signals: []
186
201
  };
187
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 时未被拒绝");
188
213
  const compatibleResult = structuredClone(validResult);
189
214
  compatibleResult.workflow_reference = { source: "mattpocock/skills", skill: "to-spec", invocation_mode: "reference" };
190
215
  validateWorkflowExecutionResult(compatibleResult, data.workflow_execution_result, data.work_unit_routes);
@@ -214,7 +239,13 @@ export function runScenario(name) {
214
239
  (item) => { item.matt_invocation_boundary.user_invoked_skills.push("unexpected-user-entry"); },
215
240
  (item) => { item.setup_readiness.lifecycle_may_invoke_setup = true; },
216
241
  (item) => { item.grill_exit.user_confirmation_required = false; },
217
- (item) => { delete item.git_authorization.push; }
242
+ (item) => { delete item.git_authorization.push; },
243
+ (item) => { delete item.git_authorization.git_submodule; },
244
+ (item) => { item.git_authorization.git_submodule.forbid_commit_on_detached_head = false; },
245
+ (item) => { item.git_authorization.git_submodule.force_overlay_mount = "allowed"; },
246
+ (item) => { item.git_authorization.git_submodule.write_inside_detached_head = "allowed"; },
247
+ (item) => { item.git_authorization.git_submodule.empty_gitlink_writable = true },
248
+ (item) => { item.git_authorization.git_submodule.force_overlay_regular_dir_path = "allowed"; }
218
249
  ];
219
250
  for (const mutate of mutations) {
220
251
  const candidate = structuredClone(data); mutate(candidate);
@@ -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
+ }