create-yss-spec 3.5.6 → 3.5.9

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 (578) hide show
  1. package/bin/create-yss-spec.js +3 -1
  2. package/cli-core.lock.json +10 -6
  3. package/package.json +4 -1
  4. package/src/api/_sync-service.js +3 -1
  5. package/src/command-runner.mjs +44 -9
  6. package/src/commands/doctor.js +40 -0
  7. package/src/commands/skills.js +7 -2
  8. package/src/content-identity.js +111 -0
  9. package/src/runtime-store.mjs +650 -0
  10. package/src/template/asset-runtime.js +124 -22
  11. package/src/template/instance-runtime.js +23 -7
  12. package/src/validation/metadata.js +8 -0
  13. package/template/.agents/skills/.strategic-design-skills-manifest.json +3 -3
  14. package/template/.agents/skills/alibaba-java-code-style/SKILL.md +30 -36
  15. package/template/.agents/skills/archify/SKILL.md +2 -2
  16. package/template/.agents/skills/archify/scripts/yss-safe-deliver.mjs +10 -6
  17. package/template/.agents/skills/archify/test/yss-safe-deliver.test.mjs +9 -2
  18. package/template/.agents/skills/code-review/SKILL.md +19 -11
  19. package/template/.agents/skills/code-review/references/candidate-capture.md +1 -1
  20. package/template/.agents/skills/code-review/references/legacy-convergence.md +3 -1
  21. package/template/.agents/skills/code-review/references/review-axis-checklists.md +2 -0
  22. package/template/.agents/skills/code-review/references/yss-review-standards.md +4 -2
  23. package/template/.agents/skills/competitive-intelligence/SKILL.md +32 -74
  24. package/template/.agents/skills/file-export-download/SKILL.md +4 -73
  25. package/template/.agents/skills/file-export-download/references/binary-contract-example.md +26 -0
  26. package/template/.agents/skills/file-export-download/references/download-call-example.md +45 -0
  27. package/template/.agents/skills/formily-foundation/SKILL.md +6 -105
  28. package/template/.agents/skills/formily-foundation/references/async-save-example.md +57 -0
  29. package/template/.agents/skills/formily-foundation/references/query-layout.md +50 -0
  30. package/template/.agents/skills/formily-linkage-effects/SKILL.md +3 -116
  31. package/template/.agents/skills/formily-linkage-effects/references/linkage-example.md +116 -0
  32. package/template/.agents/skills/formily-mode-slot-detail/SKILL.md +3 -81
  33. package/template/.agents/skills/formily-mode-slot-detail/references/mode-slot-example.md +81 -0
  34. package/template/.agents/skills/formily-step-flow/SKILL.md +3 -143
  35. package/template/.agents/skills/formily-step-flow/references/step-flow-example.md +143 -0
  36. package/template/.agents/skills/handoff/SKILL.md +3 -1
  37. package/template/.agents/skills/i-have-adhd/SKILL.md +2 -2
  38. package/template/.agents/skills/i-have-adhd/references/yss-adaptation.md +2 -2
  39. package/template/.agents/skills/i-have-adhd/tests/verify-integration.mjs +7 -2
  40. package/template/.agents/skills/implement/SKILL.md +2 -2
  41. package/template/.agents/skills/llm-wiki/references/transactions.md +2 -2
  42. package/template/.agents/skills/llm-wiki/scripts/core.mjs +40 -2
  43. package/template/.agents/skills/llm-wiki/scripts/transaction.mjs +30 -27
  44. package/template/.agents/skills/llm-wiki/scripts/v2.test.mjs +38 -2
  45. package/template/.agents/skills/lombok/SKILL.md +2 -0
  46. package/template/.agents/skills/mapstruct/SKILL.md +2 -0
  47. package/template/.agents/skills/tdd/SKILL.md +2 -2
  48. package/template/.agents/skills/theme-token-usage/SKILL.md +6 -5
  49. package/template/.agents/skills/wayfinder/references/chart-map.md +2 -2
  50. package/template/.agents/skills/wayfinder/references/ticket-types.md +1 -1
  51. package/template/.agents/skills/yss-api-integration/SKILL.md +13 -50
  52. package/template/.agents/skills/yss-api-integration/references/orval-list-example.md +38 -0
  53. package/template/.agents/skills/yss-application/SKILL.md +11 -5
  54. package/template/.agents/skills/yss-audit-log/SKILL.md +8 -6
  55. package/template/.agents/skills/yss-audit-log/references/README.md +5 -5
  56. package/template/.agents/skills/yss-cache/SKILL.md +4 -4
  57. package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +7 -8
  58. package/template/.agents/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +13 -6
  59. package/template/.agents/skills/yss-ddd-scaffold-generator/references/command-examples.md +2 -0
  60. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +28 -1
  61. package/template/.agents/skills/yss-design-system/SKILL.md +2 -2
  62. package/template/.agents/skills/yss-distributed-id/SKILL.md +4 -4
  63. package/template/.agents/skills/yss-dto/SKILL.md +9 -9
  64. package/template/.agents/skills/yss-dto/references/README.md +4 -4
  65. package/template/.agents/skills/yss-dto/references/wire-validation-checklist.md +4 -4
  66. package/template/.agents/skills/yss-excel-mvc/SKILL.md +4 -4
  67. package/template/.agents/skills/yss-exception/SKILL.md +42 -48
  68. package/template/.agents/skills/yss-formily-schema-generator/SKILL.md +26 -170
  69. package/template/.agents/skills/yss-formily-schema-generator/references/workflow.md +49 -193
  70. package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +14 -10
  71. package/template/.agents/skills/yss-implementation-contract-compiler/SKILL.md +4 -6
  72. package/template/.agents/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +15 -1
  73. package/template/.agents/skills/yss-layered-mvc-scaffold-generator/SKILL.md +1 -1
  74. package/template/.agents/skills/yss-mybatis/SKILL.md +4 -4
  75. package/template/.agents/skills/yss-openapi-draft-review/SKILL.md +6 -4
  76. package/template/.agents/skills/yss-openapi-draft-review/references/review-output.md +2 -0
  77. package/template/.agents/skills/yss-openapi-draft-review/references/semantic-review.md +3 -3
  78. package/template/.agents/skills/yss-openapi-governance/SKILL.md +5 -7
  79. package/template/.agents/skills/yss-openapi-governance/references/governance-output.md +2 -0
  80. package/template/.agents/skills/yss-openapi-governance/references/governance-workflow.md +3 -3
  81. package/template/.agents/skills/yss-product-lifecycle/SKILL.md +32 -26
  82. package/template/.agents/skills/yss-product-lifecycle/references/artifact-dependencies.md +1 -1
  83. package/template/.agents/skills/yss-product-lifecycle/references/matt-yss-adapter.md +28 -6
  84. package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +143 -4
  85. package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +38 -13
  86. package/template/.agents/skills/yss-product-lifecycle/references/plan-requirements.md +7 -6
  87. package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +3 -1
  88. package/template/.agents/skills/yss-product-lifecycle/references/user-decisions.md +3 -3
  89. package/template/.agents/skills/yss-prototype-stage/SKILL.md +1 -5
  90. package/template/.agents/skills/yss-prototype-stage/scripts/verify-prototype-design.mjs +1 -0
  91. package/template/.agents/skills/yss-repository/SKILL.md +2 -2
  92. package/template/.agents/skills/yss-research/SKILL.md +39 -48
  93. package/template/.agents/skills/yss-research/assets/competitive-evidence-template.yaml +146 -0
  94. package/template/.agents/skills/yss-research/references/competitive-analysis.md +76 -0
  95. package/template/.agents/skills/yss-research/references/competitive-analysis.schema.json +324 -0
  96. package/template/.agents/skills/yss-research/references/evidence-contract.md +8 -0
  97. package/template/.agents/skills/yss-research/scripts/lib/competitive-analysis.mjs +185 -0
  98. package/template/.agents/skills/yss-research/scripts/render-competitive-outputs.mjs +16 -0
  99. package/template/.agents/skills/yss-research/scripts/validate-research-package.mjs +6 -2
  100. package/template/.agents/skills/yss-research/tests/competitive-scenarios.test.mjs +270 -0
  101. package/template/.agents/skills/yss-resilience4j/SKILL.md +25 -31
  102. package/template/.agents/skills/yss-security-algorithm/SKILL.md +37 -43
  103. package/template/.agents/skills/yss-skill-source-index-refresh/SKILL.md +29 -36
  104. package/template/.agents/skills/yss-skill-source-index-refresh/references/backend-component-platform-compatibility.md +1 -1
  105. package/template/.agents/skills/yss-stage-decision/SKILL.md +2 -5
  106. package/template/.agents/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +8 -5
  107. package/template/.agents/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +8 -5
  108. package/template/.agents/skills/yss-stage-decision/tests/run-scenarios.mjs +83 -13
  109. package/template/.agents/skills/yss-tactical-design/SKILL.md +1 -1
  110. package/template/.agents/skills/yss-tactical-design/references/output-template.md +3 -3
  111. package/template/.agents/skills/yss-tactical-design/references/tactical-design-contract.md +1 -1
  112. package/template/.agents/skills/yss-technical-design/SKILL.md +6 -5
  113. package/template/.agents/skills/yss-ui/SKILL.md +7 -1
  114. package/template/.agents/skills/yss-ui/assets/docs/guide/gitlab-ci-integration.md +2 -2
  115. package/template/.agents/skills/yss-ui/references/checklist.md +38 -96
  116. package/template/.agents/skills/yss-ui/references/component-routing.md +3 -1
  117. package/template/.agents/skills/yss-ui/references/quick-recipes.md +17 -272
  118. package/template/.agents/skills/yss-ui/references/specialized-components.md +3 -3
  119. package/template/.agents/skills/yss-ui-business-page-generation/SKILL.md +1 -1
  120. package/template/.agents/skills/yss-up-springboot3/SKILL.md +19 -21
  121. package/template/.agents/skills/yss-userinfo/SKILL.md +27 -33
  122. package/template/.agents/skills/yss-validation/SKILL.md +26 -32
  123. package/template/.agents/skills/yss-web-controller/SKILL.md +11 -44
  124. package/template/.agents/skills/yss-web-controller/references/crud-generation.md +38 -0
  125. package/template/.agents/skills/ytable-usage/SKILL.md +2 -2
  126. package/template/.agents/skills/ytree-usage/SKILL.md +2 -80
  127. package/template/.agents/skills/ytree-usage/references/tree-and-confirmation-example.md +81 -0
  128. package/template/.codex/skills/alibaba-java-code-style/SKILL.md +30 -36
  129. package/template/.codex/skills/archify/SKILL.md +2 -2
  130. package/template/.codex/skills/archify/scripts/yss-safe-deliver.mjs +10 -6
  131. package/template/.codex/skills/archify/test/yss-safe-deliver.test.mjs +9 -2
  132. package/template/.codex/skills/code-review/SKILL.md +19 -11
  133. package/template/.codex/skills/code-review/references/candidate-capture.md +1 -1
  134. package/template/.codex/skills/code-review/references/legacy-convergence.md +3 -1
  135. package/template/.codex/skills/code-review/references/review-axis-checklists.md +2 -0
  136. package/template/.codex/skills/code-review/references/yss-review-standards.md +4 -2
  137. package/template/.codex/skills/competitive-intelligence/SKILL.md +32 -74
  138. package/template/.codex/skills/file-export-download/SKILL.md +4 -73
  139. package/template/.codex/skills/file-export-download/references/binary-contract-example.md +26 -0
  140. package/template/.codex/skills/file-export-download/references/download-call-example.md +45 -0
  141. package/template/.codex/skills/formily-foundation/SKILL.md +6 -105
  142. package/template/.codex/skills/formily-foundation/references/async-save-example.md +57 -0
  143. package/template/.codex/skills/formily-foundation/references/query-layout.md +50 -0
  144. package/template/.codex/skills/formily-linkage-effects/SKILL.md +3 -116
  145. package/template/.codex/skills/formily-linkage-effects/references/linkage-example.md +116 -0
  146. package/template/.codex/skills/formily-mode-slot-detail/SKILL.md +3 -81
  147. package/template/.codex/skills/formily-mode-slot-detail/references/mode-slot-example.md +81 -0
  148. package/template/.codex/skills/formily-step-flow/SKILL.md +3 -143
  149. package/template/.codex/skills/formily-step-flow/references/step-flow-example.md +143 -0
  150. package/template/.codex/skills/handoff/SKILL.md +3 -1
  151. package/template/.codex/skills/i-have-adhd/SKILL.md +2 -2
  152. package/template/.codex/skills/i-have-adhd/references/yss-adaptation.md +2 -2
  153. package/template/.codex/skills/i-have-adhd/tests/verify-integration.mjs +7 -2
  154. package/template/.codex/skills/implement/SKILL.md +2 -2
  155. package/template/.codex/skills/llm-wiki/references/transactions.md +2 -2
  156. package/template/.codex/skills/llm-wiki/scripts/core.mjs +40 -2
  157. package/template/.codex/skills/llm-wiki/scripts/transaction.mjs +30 -27
  158. package/template/.codex/skills/llm-wiki/scripts/v2.test.mjs +38 -2
  159. package/template/.codex/skills/lombok/SKILL.md +2 -0
  160. package/template/.codex/skills/mapstruct/SKILL.md +2 -0
  161. package/template/.codex/skills/product-design/references/communication-protocol.md +3 -3
  162. package/template/.codex/skills/product-design/references/critical-overrides.md +4 -5
  163. package/template/.codex/skills/product-design/skills/audit/SKILL.md +2 -4
  164. package/template/.codex/skills/product-design/skills/get-context/SKILL.md +6 -8
  165. package/template/.codex/skills/product-design/skills/ideate/SKILL.md +3 -3
  166. package/template/.codex/skills/product-design/skills/image-to-code/SKILL.md +3 -5
  167. package/template/.codex/skills/product-design/skills/index/SKILL.md +1 -1
  168. package/template/.codex/skills/product-design/skills/prototype/SKILL.md +2 -4
  169. package/template/.codex/skills/product-design/skills/research/SKILL.md +4 -6
  170. package/template/.codex/skills/product-design/skills/research/assets/research-brief-template.md +3 -3
  171. package/template/.codex/skills/product-design/skills/share/SKILL.md +2 -4
  172. package/template/.codex/skills/product-design/skills/url-to-code/SKILL.md +2 -4
  173. package/template/.codex/skills/product-design/skills/user-context/SKILL.md +1 -1
  174. package/template/.codex/skills/tdd/SKILL.md +2 -2
  175. package/template/.codex/skills/theme-token-usage/SKILL.md +6 -5
  176. package/template/.codex/skills/wayfinder/references/chart-map.md +2 -2
  177. package/template/.codex/skills/wayfinder/references/ticket-types.md +1 -1
  178. package/template/.codex/skills/yss-api-integration/SKILL.md +13 -50
  179. package/template/.codex/skills/yss-api-integration/references/orval-list-example.md +38 -0
  180. package/template/.codex/skills/yss-application/SKILL.md +11 -5
  181. package/template/.codex/skills/yss-audit-log/SKILL.md +8 -6
  182. package/template/.codex/skills/yss-audit-log/references/README.md +5 -5
  183. package/template/.codex/skills/yss-cache/SKILL.md +4 -4
  184. package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +7 -8
  185. package/template/.codex/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +13 -6
  186. package/template/.codex/skills/yss-ddd-scaffold-generator/references/command-examples.md +2 -0
  187. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +28 -1
  188. package/template/.codex/skills/yss-design-system/SKILL.md +2 -2
  189. package/template/.codex/skills/yss-distributed-id/SKILL.md +4 -4
  190. package/template/.codex/skills/yss-dto/SKILL.md +9 -9
  191. package/template/.codex/skills/yss-dto/references/README.md +4 -4
  192. package/template/.codex/skills/yss-dto/references/wire-validation-checklist.md +4 -4
  193. package/template/.codex/skills/yss-excel-mvc/SKILL.md +4 -4
  194. package/template/.codex/skills/yss-exception/SKILL.md +42 -48
  195. package/template/.codex/skills/yss-formily-schema-generator/SKILL.md +26 -170
  196. package/template/.codex/skills/yss-formily-schema-generator/references/workflow.md +49 -193
  197. package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +14 -10
  198. package/template/.codex/skills/yss-implementation-contract-compiler/SKILL.md +4 -6
  199. package/template/.codex/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +15 -1
  200. package/template/.codex/skills/yss-layered-mvc-scaffold-generator/SKILL.md +1 -1
  201. package/template/.codex/skills/yss-mybatis/SKILL.md +4 -4
  202. package/template/.codex/skills/yss-openapi-draft-review/SKILL.md +6 -4
  203. package/template/.codex/skills/yss-openapi-draft-review/references/review-output.md +2 -0
  204. package/template/.codex/skills/yss-openapi-draft-review/references/semantic-review.md +3 -3
  205. package/template/.codex/skills/yss-openapi-governance/SKILL.md +5 -7
  206. package/template/.codex/skills/yss-openapi-governance/references/governance-output.md +2 -0
  207. package/template/.codex/skills/yss-openapi-governance/references/governance-workflow.md +3 -3
  208. package/template/.codex/skills/yss-product-lifecycle/SKILL.md +32 -26
  209. package/template/.codex/skills/yss-product-lifecycle/references/artifact-dependencies.md +1 -1
  210. package/template/.codex/skills/yss-product-lifecycle/references/matt-yss-adapter.md +28 -6
  211. package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +143 -4
  212. package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +38 -13
  213. package/template/.codex/skills/yss-product-lifecycle/references/plan-requirements.md +7 -6
  214. package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +3 -1
  215. package/template/.codex/skills/yss-product-lifecycle/references/user-decisions.md +3 -3
  216. package/template/.codex/skills/yss-prototype-stage/SKILL.md +1 -5
  217. package/template/.codex/skills/yss-prototype-stage/scripts/verify-prototype-design.mjs +1 -0
  218. package/template/.codex/skills/yss-repository/SKILL.md +2 -2
  219. package/template/.codex/skills/yss-research/SKILL.md +39 -48
  220. package/template/.codex/skills/yss-research/assets/competitive-evidence-template.yaml +146 -0
  221. package/template/.codex/skills/yss-research/references/competitive-analysis.md +76 -0
  222. package/template/.codex/skills/yss-research/references/competitive-analysis.schema.json +324 -0
  223. package/template/.codex/skills/yss-research/references/evidence-contract.md +8 -0
  224. package/template/.codex/skills/yss-research/scripts/lib/competitive-analysis.mjs +185 -0
  225. package/template/.codex/skills/yss-research/scripts/render-competitive-outputs.mjs +16 -0
  226. package/template/.codex/skills/yss-research/scripts/validate-research-package.mjs +6 -2
  227. package/template/.codex/skills/yss-research/tests/competitive-scenarios.test.mjs +270 -0
  228. package/template/.codex/skills/yss-resilience4j/SKILL.md +25 -31
  229. package/template/.codex/skills/yss-security-algorithm/SKILL.md +37 -43
  230. package/template/.codex/skills/yss-skill-source-index-refresh/SKILL.md +29 -36
  231. package/template/.codex/skills/yss-skill-source-index-refresh/references/backend-component-platform-compatibility.md +1 -1
  232. package/template/.codex/skills/yss-stage-decision/SKILL.md +2 -5
  233. package/template/.codex/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +8 -5
  234. package/template/.codex/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +8 -5
  235. package/template/.codex/skills/yss-stage-decision/tests/run-scenarios.mjs +83 -13
  236. package/template/.codex/skills/yss-tactical-design/SKILL.md +1 -1
  237. package/template/.codex/skills/yss-tactical-design/references/output-template.md +3 -3
  238. package/template/.codex/skills/yss-tactical-design/references/tactical-design-contract.md +1 -1
  239. package/template/.codex/skills/yss-technical-design/SKILL.md +6 -5
  240. package/template/.codex/skills/yss-ui/SKILL.md +7 -1
  241. package/template/.codex/skills/yss-ui/assets/docs/guide/gitlab-ci-integration.md +2 -2
  242. package/template/.codex/skills/yss-ui/references/checklist.md +38 -96
  243. package/template/.codex/skills/yss-ui/references/component-routing.md +3 -1
  244. package/template/.codex/skills/yss-ui/references/quick-recipes.md +17 -272
  245. package/template/.codex/skills/yss-ui/references/specialized-components.md +3 -3
  246. package/template/.codex/skills/yss-ui-business-page-generation/SKILL.md +1 -1
  247. package/template/.codex/skills/yss-up-springboot3/SKILL.md +19 -21
  248. package/template/.codex/skills/yss-userinfo/SKILL.md +27 -33
  249. package/template/.codex/skills/yss-validation/SKILL.md +26 -32
  250. package/template/.codex/skills/yss-web-controller/SKILL.md +11 -44
  251. package/template/.codex/skills/yss-web-controller/references/crud-generation.md +38 -0
  252. package/template/.codex/skills/ytable-usage/SKILL.md +2 -2
  253. package/template/.codex/skills/ytree-usage/SKILL.md +2 -80
  254. package/template/.codex/skills/ytree-usage/references/tree-and-confirmation-example.md +81 -0
  255. package/template/.cursor/skills/alibaba-java-code-style/SKILL.md +30 -36
  256. package/template/.cursor/skills/archify/SKILL.md +2 -2
  257. package/template/.cursor/skills/archify/scripts/yss-safe-deliver.mjs +10 -6
  258. package/template/.cursor/skills/archify/test/yss-safe-deliver.test.mjs +9 -2
  259. package/template/.cursor/skills/code-review/SKILL.md +19 -11
  260. package/template/.cursor/skills/code-review/references/candidate-capture.md +1 -1
  261. package/template/.cursor/skills/code-review/references/legacy-convergence.md +3 -1
  262. package/template/.cursor/skills/code-review/references/review-axis-checklists.md +2 -0
  263. package/template/.cursor/skills/code-review/references/yss-review-standards.md +4 -2
  264. package/template/.cursor/skills/competitive-intelligence/SKILL.md +32 -74
  265. package/template/.cursor/skills/file-export-download/SKILL.md +4 -73
  266. package/template/.cursor/skills/file-export-download/references/binary-contract-example.md +26 -0
  267. package/template/.cursor/skills/file-export-download/references/download-call-example.md +45 -0
  268. package/template/.cursor/skills/formily-foundation/SKILL.md +6 -105
  269. package/template/.cursor/skills/formily-foundation/references/async-save-example.md +57 -0
  270. package/template/.cursor/skills/formily-foundation/references/query-layout.md +50 -0
  271. package/template/.cursor/skills/formily-linkage-effects/SKILL.md +3 -116
  272. package/template/.cursor/skills/formily-linkage-effects/references/linkage-example.md +116 -0
  273. package/template/.cursor/skills/formily-mode-slot-detail/SKILL.md +3 -81
  274. package/template/.cursor/skills/formily-mode-slot-detail/references/mode-slot-example.md +81 -0
  275. package/template/.cursor/skills/formily-step-flow/SKILL.md +3 -143
  276. package/template/.cursor/skills/formily-step-flow/references/step-flow-example.md +143 -0
  277. package/template/.cursor/skills/handoff/SKILL.md +3 -1
  278. package/template/.cursor/skills/i-have-adhd/SKILL.md +2 -2
  279. package/template/.cursor/skills/i-have-adhd/references/yss-adaptation.md +2 -2
  280. package/template/.cursor/skills/i-have-adhd/tests/verify-integration.mjs +7 -2
  281. package/template/.cursor/skills/implement/SKILL.md +2 -2
  282. package/template/.cursor/skills/llm-wiki/references/transactions.md +2 -2
  283. package/template/.cursor/skills/llm-wiki/scripts/core.mjs +40 -2
  284. package/template/.cursor/skills/llm-wiki/scripts/transaction.mjs +30 -27
  285. package/template/.cursor/skills/llm-wiki/scripts/v2.test.mjs +38 -2
  286. package/template/.cursor/skills/lombok/SKILL.md +2 -0
  287. package/template/.cursor/skills/mapstruct/SKILL.md +2 -0
  288. package/template/.cursor/skills/tdd/SKILL.md +2 -2
  289. package/template/.cursor/skills/theme-token-usage/SKILL.md +6 -5
  290. package/template/.cursor/skills/wayfinder/references/chart-map.md +2 -2
  291. package/template/.cursor/skills/wayfinder/references/ticket-types.md +1 -1
  292. package/template/.cursor/skills/yss-api-integration/SKILL.md +13 -50
  293. package/template/.cursor/skills/yss-api-integration/references/orval-list-example.md +38 -0
  294. package/template/.cursor/skills/yss-application/SKILL.md +11 -5
  295. package/template/.cursor/skills/yss-audit-log/SKILL.md +8 -6
  296. package/template/.cursor/skills/yss-audit-log/references/README.md +5 -5
  297. package/template/.cursor/skills/yss-cache/SKILL.md +4 -4
  298. package/template/.cursor/skills/yss-ddd-scaffold-generator/SKILL.md +7 -8
  299. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +13 -6
  300. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/command-examples.md +2 -0
  301. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +28 -1
  302. package/template/.cursor/skills/yss-design-system/SKILL.md +2 -2
  303. package/template/.cursor/skills/yss-distributed-id/SKILL.md +4 -4
  304. package/template/.cursor/skills/yss-dto/SKILL.md +9 -9
  305. package/template/.cursor/skills/yss-dto/references/README.md +4 -4
  306. package/template/.cursor/skills/yss-dto/references/wire-validation-checklist.md +4 -4
  307. package/template/.cursor/skills/yss-excel-mvc/SKILL.md +4 -4
  308. package/template/.cursor/skills/yss-exception/SKILL.md +42 -48
  309. package/template/.cursor/skills/yss-formily-schema-generator/SKILL.md +26 -170
  310. package/template/.cursor/skills/yss-formily-schema-generator/references/workflow.md +49 -193
  311. package/template/.cursor/skills/yss-frontend-scaffold-generator/SKILL.md +14 -10
  312. package/template/.cursor/skills/yss-implementation-contract-compiler/SKILL.md +4 -6
  313. package/template/.cursor/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +15 -1
  314. package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/SKILL.md +1 -1
  315. package/template/.cursor/skills/yss-mybatis/SKILL.md +4 -4
  316. package/template/.cursor/skills/yss-openapi-draft-review/SKILL.md +6 -4
  317. package/template/.cursor/skills/yss-openapi-draft-review/references/review-output.md +2 -0
  318. package/template/.cursor/skills/yss-openapi-draft-review/references/semantic-review.md +3 -3
  319. package/template/.cursor/skills/yss-openapi-governance/SKILL.md +5 -7
  320. package/template/.cursor/skills/yss-openapi-governance/references/governance-output.md +2 -0
  321. package/template/.cursor/skills/yss-openapi-governance/references/governance-workflow.md +3 -3
  322. package/template/.cursor/skills/yss-product-lifecycle/SKILL.md +32 -26
  323. package/template/.cursor/skills/yss-product-lifecycle/references/artifact-dependencies.md +1 -1
  324. package/template/.cursor/skills/yss-product-lifecycle/references/matt-yss-adapter.md +28 -6
  325. package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +143 -4
  326. package/template/.cursor/skills/yss-product-lifecycle/references/orchestration.md +38 -13
  327. package/template/.cursor/skills/yss-product-lifecycle/references/plan-requirements.md +7 -6
  328. package/template/.cursor/skills/yss-product-lifecycle/references/state-model.md +3 -1
  329. package/template/.cursor/skills/yss-product-lifecycle/references/user-decisions.md +3 -3
  330. package/template/.cursor/skills/yss-prototype-stage/SKILL.md +1 -5
  331. package/template/.cursor/skills/yss-prototype-stage/scripts/verify-prototype-design.mjs +1 -0
  332. package/template/.cursor/skills/yss-repository/SKILL.md +2 -2
  333. package/template/.cursor/skills/yss-research/SKILL.md +39 -48
  334. package/template/.cursor/skills/yss-research/assets/competitive-evidence-template.yaml +146 -0
  335. package/template/.cursor/skills/yss-research/references/competitive-analysis.md +76 -0
  336. package/template/.cursor/skills/yss-research/references/competitive-analysis.schema.json +324 -0
  337. package/template/.cursor/skills/yss-research/references/evidence-contract.md +8 -0
  338. package/template/.cursor/skills/yss-research/scripts/lib/competitive-analysis.mjs +185 -0
  339. package/template/.cursor/skills/yss-research/scripts/render-competitive-outputs.mjs +16 -0
  340. package/template/.cursor/skills/yss-research/scripts/validate-research-package.mjs +6 -2
  341. package/template/.cursor/skills/yss-research/tests/competitive-scenarios.test.mjs +270 -0
  342. package/template/.cursor/skills/yss-resilience4j/SKILL.md +25 -31
  343. package/template/.cursor/skills/yss-security-algorithm/SKILL.md +37 -43
  344. package/template/.cursor/skills/yss-skill-source-index-refresh/SKILL.md +29 -36
  345. package/template/.cursor/skills/yss-skill-source-index-refresh/references/backend-component-platform-compatibility.md +1 -1
  346. package/template/.cursor/skills/yss-stage-decision/SKILL.md +2 -5
  347. package/template/.cursor/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +8 -5
  348. package/template/.cursor/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +8 -5
  349. package/template/.cursor/skills/yss-stage-decision/tests/run-scenarios.mjs +83 -13
  350. package/template/.cursor/skills/yss-tactical-design/SKILL.md +1 -1
  351. package/template/.cursor/skills/yss-tactical-design/references/output-template.md +3 -3
  352. package/template/.cursor/skills/yss-tactical-design/references/tactical-design-contract.md +1 -1
  353. package/template/.cursor/skills/yss-technical-design/SKILL.md +6 -5
  354. package/template/.cursor/skills/yss-ui/SKILL.md +7 -1
  355. package/template/.cursor/skills/yss-ui/assets/docs/guide/gitlab-ci-integration.md +2 -2
  356. package/template/.cursor/skills/yss-ui/references/checklist.md +38 -96
  357. package/template/.cursor/skills/yss-ui/references/component-routing.md +3 -1
  358. package/template/.cursor/skills/yss-ui/references/quick-recipes.md +17 -272
  359. package/template/.cursor/skills/yss-ui/references/specialized-components.md +3 -3
  360. package/template/.cursor/skills/yss-ui-business-page-generation/SKILL.md +1 -1
  361. package/template/.cursor/skills/yss-up-springboot3/SKILL.md +19 -21
  362. package/template/.cursor/skills/yss-userinfo/SKILL.md +27 -33
  363. package/template/.cursor/skills/yss-validation/SKILL.md +26 -32
  364. package/template/.cursor/skills/yss-web-controller/SKILL.md +11 -44
  365. package/template/.cursor/skills/yss-web-controller/references/crud-generation.md +38 -0
  366. package/template/.cursor/skills/ytable-usage/SKILL.md +2 -2
  367. package/template/.cursor/skills/ytree-usage/SKILL.md +2 -80
  368. package/template/.cursor/skills/ytree-usage/references/tree-and-confirmation-example.md +81 -0
  369. package/template/.pi/skills/alibaba-java-code-style/SKILL.md +30 -36
  370. package/template/.pi/skills/archify/SKILL.md +2 -2
  371. package/template/.pi/skills/archify/scripts/yss-safe-deliver.mjs +10 -6
  372. package/template/.pi/skills/archify/test/yss-safe-deliver.test.mjs +9 -2
  373. package/template/.pi/skills/code-review/SKILL.md +19 -11
  374. package/template/.pi/skills/code-review/references/candidate-capture.md +1 -1
  375. package/template/.pi/skills/code-review/references/legacy-convergence.md +3 -1
  376. package/template/.pi/skills/code-review/references/review-axis-checklists.md +2 -0
  377. package/template/.pi/skills/code-review/references/yss-review-standards.md +4 -2
  378. package/template/.pi/skills/competitive-intelligence/SKILL.md +32 -74
  379. package/template/.pi/skills/file-export-download/SKILL.md +4 -73
  380. package/template/.pi/skills/file-export-download/references/binary-contract-example.md +26 -0
  381. package/template/.pi/skills/file-export-download/references/download-call-example.md +45 -0
  382. package/template/.pi/skills/formily-foundation/SKILL.md +6 -105
  383. package/template/.pi/skills/formily-foundation/references/async-save-example.md +57 -0
  384. package/template/.pi/skills/formily-foundation/references/query-layout.md +50 -0
  385. package/template/.pi/skills/formily-linkage-effects/SKILL.md +3 -116
  386. package/template/.pi/skills/formily-linkage-effects/references/linkage-example.md +116 -0
  387. package/template/.pi/skills/formily-mode-slot-detail/SKILL.md +3 -81
  388. package/template/.pi/skills/formily-mode-slot-detail/references/mode-slot-example.md +81 -0
  389. package/template/.pi/skills/formily-step-flow/SKILL.md +3 -143
  390. package/template/.pi/skills/formily-step-flow/references/step-flow-example.md +143 -0
  391. package/template/.pi/skills/handoff/SKILL.md +3 -1
  392. package/template/.pi/skills/i-have-adhd/SKILL.md +2 -2
  393. package/template/.pi/skills/i-have-adhd/references/yss-adaptation.md +2 -2
  394. package/template/.pi/skills/i-have-adhd/tests/verify-integration.mjs +7 -2
  395. package/template/.pi/skills/implement/SKILL.md +2 -2
  396. package/template/.pi/skills/llm-wiki/references/transactions.md +2 -2
  397. package/template/.pi/skills/llm-wiki/scripts/core.mjs +40 -2
  398. package/template/.pi/skills/llm-wiki/scripts/transaction.mjs +30 -27
  399. package/template/.pi/skills/llm-wiki/scripts/v2.test.mjs +38 -2
  400. package/template/.pi/skills/lombok/SKILL.md +2 -0
  401. package/template/.pi/skills/mapstruct/SKILL.md +2 -0
  402. package/template/.pi/skills/tdd/SKILL.md +2 -2
  403. package/template/.pi/skills/theme-token-usage/SKILL.md +6 -5
  404. package/template/.pi/skills/wayfinder/references/chart-map.md +2 -2
  405. package/template/.pi/skills/wayfinder/references/ticket-types.md +1 -1
  406. package/template/.pi/skills/yss-api-integration/SKILL.md +13 -50
  407. package/template/.pi/skills/yss-api-integration/references/orval-list-example.md +38 -0
  408. package/template/.pi/skills/yss-application/SKILL.md +11 -5
  409. package/template/.pi/skills/yss-audit-log/SKILL.md +8 -6
  410. package/template/.pi/skills/yss-audit-log/references/README.md +5 -5
  411. package/template/.pi/skills/yss-cache/SKILL.md +4 -4
  412. package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +7 -8
  413. package/template/.pi/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +13 -6
  414. package/template/.pi/skills/yss-ddd-scaffold-generator/references/command-examples.md +2 -0
  415. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +28 -1
  416. package/template/.pi/skills/yss-design-system/SKILL.md +2 -2
  417. package/template/.pi/skills/yss-distributed-id/SKILL.md +4 -4
  418. package/template/.pi/skills/yss-dto/SKILL.md +9 -9
  419. package/template/.pi/skills/yss-dto/references/README.md +4 -4
  420. package/template/.pi/skills/yss-dto/references/wire-validation-checklist.md +4 -4
  421. package/template/.pi/skills/yss-excel-mvc/SKILL.md +4 -4
  422. package/template/.pi/skills/yss-exception/SKILL.md +42 -48
  423. package/template/.pi/skills/yss-formily-schema-generator/SKILL.md +26 -170
  424. package/template/.pi/skills/yss-formily-schema-generator/references/workflow.md +49 -193
  425. package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +14 -10
  426. package/template/.pi/skills/yss-implementation-contract-compiler/SKILL.md +4 -6
  427. package/template/.pi/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +15 -1
  428. package/template/.pi/skills/yss-layered-mvc-scaffold-generator/SKILL.md +1 -1
  429. package/template/.pi/skills/yss-mybatis/SKILL.md +4 -4
  430. package/template/.pi/skills/yss-openapi-draft-review/SKILL.md +6 -4
  431. package/template/.pi/skills/yss-openapi-draft-review/references/review-output.md +2 -0
  432. package/template/.pi/skills/yss-openapi-draft-review/references/semantic-review.md +3 -3
  433. package/template/.pi/skills/yss-openapi-governance/SKILL.md +5 -7
  434. package/template/.pi/skills/yss-openapi-governance/references/governance-output.md +2 -0
  435. package/template/.pi/skills/yss-openapi-governance/references/governance-workflow.md +3 -3
  436. package/template/.pi/skills/yss-product-lifecycle/SKILL.md +32 -26
  437. package/template/.pi/skills/yss-product-lifecycle/references/artifact-dependencies.md +1 -1
  438. package/template/.pi/skills/yss-product-lifecycle/references/matt-yss-adapter.md +28 -6
  439. package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +143 -4
  440. package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +38 -13
  441. package/template/.pi/skills/yss-product-lifecycle/references/plan-requirements.md +7 -6
  442. package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +3 -1
  443. package/template/.pi/skills/yss-product-lifecycle/references/user-decisions.md +3 -3
  444. package/template/.pi/skills/yss-prototype-stage/SKILL.md +1 -5
  445. package/template/.pi/skills/yss-prototype-stage/scripts/verify-prototype-design.mjs +1 -0
  446. package/template/.pi/skills/yss-repository/SKILL.md +2 -2
  447. package/template/.pi/skills/yss-research/SKILL.md +39 -48
  448. package/template/.pi/skills/yss-research/assets/competitive-evidence-template.yaml +146 -0
  449. package/template/.pi/skills/yss-research/references/competitive-analysis.md +76 -0
  450. package/template/.pi/skills/yss-research/references/competitive-analysis.schema.json +324 -0
  451. package/template/.pi/skills/yss-research/references/evidence-contract.md +8 -0
  452. package/template/.pi/skills/yss-research/scripts/lib/competitive-analysis.mjs +185 -0
  453. package/template/.pi/skills/yss-research/scripts/render-competitive-outputs.mjs +16 -0
  454. package/template/.pi/skills/yss-research/scripts/validate-research-package.mjs +6 -2
  455. package/template/.pi/skills/yss-research/tests/competitive-scenarios.test.mjs +270 -0
  456. package/template/.pi/skills/yss-resilience4j/SKILL.md +25 -31
  457. package/template/.pi/skills/yss-security-algorithm/SKILL.md +37 -43
  458. package/template/.pi/skills/yss-skill-source-index-refresh/SKILL.md +29 -36
  459. package/template/.pi/skills/yss-skill-source-index-refresh/references/backend-component-platform-compatibility.md +1 -1
  460. package/template/.pi/skills/yss-stage-decision/SKILL.md +2 -5
  461. package/template/.pi/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +8 -5
  462. package/template/.pi/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +8 -5
  463. package/template/.pi/skills/yss-stage-decision/tests/run-scenarios.mjs +83 -13
  464. package/template/.pi/skills/yss-tactical-design/SKILL.md +1 -1
  465. package/template/.pi/skills/yss-tactical-design/references/output-template.md +3 -3
  466. package/template/.pi/skills/yss-tactical-design/references/tactical-design-contract.md +1 -1
  467. package/template/.pi/skills/yss-technical-design/SKILL.md +6 -5
  468. package/template/.pi/skills/yss-ui/SKILL.md +7 -1
  469. package/template/.pi/skills/yss-ui/assets/docs/guide/gitlab-ci-integration.md +2 -2
  470. package/template/.pi/skills/yss-ui/references/checklist.md +38 -96
  471. package/template/.pi/skills/yss-ui/references/component-routing.md +3 -1
  472. package/template/.pi/skills/yss-ui/references/quick-recipes.md +17 -272
  473. package/template/.pi/skills/yss-ui/references/specialized-components.md +3 -3
  474. package/template/.pi/skills/yss-ui-business-page-generation/SKILL.md +1 -1
  475. package/template/.pi/skills/yss-up-springboot3/SKILL.md +19 -21
  476. package/template/.pi/skills/yss-userinfo/SKILL.md +27 -33
  477. package/template/.pi/skills/yss-validation/SKILL.md +26 -32
  478. package/template/.pi/skills/yss-web-controller/SKILL.md +11 -44
  479. package/template/.pi/skills/yss-web-controller/references/crud-generation.md +38 -0
  480. package/template/.pi/skills/ytable-usage/SKILL.md +2 -2
  481. package/template/.pi/skills/ytree-usage/SKILL.md +2 -80
  482. package/template/.pi/skills/ytree-usage/references/tree-and-confirmation-example.md +81 -0
  483. package/template/.template-spec/agents/backend-architecture-profiles.md +1 -1
  484. package/template/.template-spec/agents/digital-human-roles.md +5 -1
  485. package/template/.template-spec/agents/digital-human-roles.yaml +49 -1
  486. package/template/.template-spec/engineering/backend-platforms.json +1 -1
  487. package/template/.template-spec/plan/entry-review.md +2 -1
  488. package/template/.template-spec/plan/templates/competitive-analysis-template.md +38 -36
  489. package/template/.template-spec/plan/templates/competitive-matrix-template.md +37 -17
  490. package/template/.template-spec/plan/templates/plan-template.md +11 -5
  491. package/template/.template-spec/process/document-writing.md +22 -3
  492. package/template/.template-spec/process/harness-process-tailoring.md +5 -1
  493. package/template/.template-spec/process/implementation-repo-integration.md +26 -8
  494. package/template/.template-spec/process/research-completion.md +2 -0
  495. package/template/.template-spec/process/runtime-storage.md +78 -0
  496. package/template/.template-spec/process/schemas/approval-context.schema.json +67 -0
  497. package/template/.template-spec/process/schemas/approval-record.schema.json +179 -16
  498. package/template/.template-spec/process/schemas/backend-delivery.schema.json +16 -0
  499. package/template/.template-spec/process/schemas/delivery-preflight-input.schema.json +4 -0
  500. package/template/.template-spec/process/schemas/digital-human-task-package.schema.json +236 -1
  501. package/template/.template-spec/process/schemas/implementation-repository-preparation-result.schema.json +335 -52
  502. package/template/.template-spec/process/schemas/lifecycle-checkpoint.schema.json +11 -0
  503. package/template/.template-spec/process/schemas/project-scaffold-contract.schema.json +3 -0
  504. package/template/.template-spec/process/schemas/review-bundle.schema.json +347 -35
  505. package/template/.template-spec/process/schemas/strategic-design-handoff-v3.schema.json +504 -0
  506. package/template/.template-spec/process/schemas/strategic-design-handoff-v4.schema.json +544 -8
  507. package/template/.template-spec/process/schemas/strategic-design-handoff-v5.schema.json +616 -0
  508. package/template/.template-spec/process/schemas/strategic-design-handoff.schema.json +616 -0
  509. package/template/.template-spec/process/schemas/strategic-handoff-domain-strategy-v3.schema.json +712 -109
  510. package/template/.template-spec/process/schemas/strategic-handoff-domain-strategy.schema.json +595 -90
  511. package/template/.template-spec/process/schemas/strategic-handoff-export-v2.schema.json +448 -0
  512. package/template/.template-spec/process/schemas/strategic-handoff-export.schema.json +392 -0
  513. package/template/.template-spec/process/schemas/strategic-handoff-stage-decision-package-v3.schema.json +556 -83
  514. package/template/.template-spec/process/schemas/strategic-handoff-stage-decision-package.schema.json +418 -57
  515. package/template/.template-spec/process/script-execution.md +37 -0
  516. package/template/.template-spec/process/subagent-collaboration.md +7 -1
  517. package/template/.template-spec/templates/approval-record-template.json +7 -3
  518. package/template/.template-spec/templates/approval-record-template.yaml +8 -2
  519. package/template/.template-spec/templates/examples/lifecycle-writing-examples.md +92 -2
  520. package/template/.template-spec/templates/retro-report-template.md +10 -3
  521. package/template/.template-spec/templates/review-bundle-template.yaml +19 -10
  522. package/template/.template-spec/user-guide//347/224/250/346/210/267/346/211/213/345/206/214.md +2 -0
  523. package/template/AGENTS.md +4 -3
  524. package/template/CONTEXT.md +2 -2
  525. package/template/README.md +2 -2
  526. package/template/scripts/advance-maintenance-iteration +51 -0
  527. package/template/scripts/lib/approval-checkpoint-discovery.mjs +26 -0
  528. package/template/scripts/lib/approval-consumption.mjs +35 -0
  529. package/template/scripts/lib/approval-current.mjs +111 -0
  530. package/template/scripts/lib/approval-record-io.mjs +56 -0
  531. package/template/scripts/lib/approval-record.mjs +79 -184
  532. package/template/scripts/lib/approved-execution-context.mjs +8 -6
  533. package/template/scripts/lib/asset-transactions.mjs +5 -1
  534. package/template/scripts/lib/backend-delivery.mjs +1 -1
  535. package/template/scripts/lib/backend-review.mjs +2 -1
  536. package/template/scripts/lib/backend-scaffold-prerequisites.mjs +3 -2
  537. package/template/scripts/lib/business-ticket-lifecycle.mjs +2 -1
  538. package/template/scripts/lib/checkpoint-commit.mjs +50 -0
  539. package/template/scripts/lib/command-runner.mjs +44 -9
  540. package/template/scripts/lib/content-identity.mjs +273 -0
  541. package/template/scripts/lib/delivery-preflight.mjs +2 -1
  542. package/template/scripts/lib/digital-human-roles.mjs +12 -5
  543. package/template/scripts/lib/drift-report.mjs +110 -0
  544. package/template/scripts/lib/existing-backend-architecture.mjs +4 -1
  545. package/template/scripts/lib/lifecycle-context-query.mjs +172 -11
  546. package/template/scripts/lib/lifecycle-controls.mjs +9 -19
  547. package/template/scripts/lib/lifecycle-presentation.mjs +5 -0
  548. package/template/scripts/lib/lifecycle-status.mjs +63 -12
  549. package/template/scripts/lib/lifecycle-transition.mjs +2 -1
  550. package/template/scripts/lib/maintenance-candidate.mjs +24 -30
  551. package/template/scripts/lib/maintenance-research.mjs +52 -8
  552. package/template/scripts/lib/maintenance-storage.mjs +81 -0
  553. package/template/scripts/lib/plan-spec-entry.mjs +2 -1
  554. package/template/scripts/lib/project-governance.mjs +2 -1
  555. package/template/scripts/lib/read-only-intake.mjs +44 -9
  556. package/template/scripts/lib/review-capabilities.mjs +234 -0
  557. package/template/scripts/lib/review-package.mjs +100 -0
  558. package/template/scripts/lib/runtime-store.mjs +650 -0
  559. package/template/scripts/lib/skill-registry.mjs +4 -4
  560. package/template/scripts/lib/strategic-handoff.mjs +22 -9
  561. package/template/scripts/lib/task-package.mjs +47 -16
  562. package/template/scripts/lifecycle-status +26 -1
  563. package/template/scripts/maintenance-path +11 -0
  564. package/template/scripts/prepare-review-package +8 -0
  565. package/template/scripts/project-ci +13 -3
  566. package/template/scripts/query-lifecycle-context +8 -1
  567. package/template/scripts/run-read-only-intake +2 -2
  568. package/template/scripts/runtime-store +40 -0
  569. package/template/scripts/verify-approval-record +21 -13
  570. package/template/scripts/verify-lifecycle-checkpoint +7 -3
  571. package/template/scripts/verify-project-instance +21 -1
  572. package/template/skills-lock.json +64 -63
  573. package/template.snapshot.json +4 -4
  574. package/vendor/cli-core/cli.mjs +2 -0
  575. package/vendor/cli-core/command-runner.mjs +44 -9
  576. package/vendor/cli-core/package.json +1 -1
  577. package/vendor/cli-core/runtime-store.mjs +650 -0
  578. package/vendor/cli-core/scaffold.mjs +4 -2
@@ -0,0 +1,324 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://yss.example/schemas/competitive-analysis-v1.schema.json",
4
+ "title": "YSS competitive analysis evidence extension v1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schema_version",
9
+ "output_selection",
10
+ "as_of",
11
+ "comparison_scope",
12
+ "competitors",
13
+ "capabilities",
14
+ "assessments",
15
+ "artifacts"
16
+ ],
17
+ "properties": {
18
+ "schema_version": {
19
+ "const": 1
20
+ },
21
+ "output_selection": {
22
+ "enum": [
23
+ "matrix",
24
+ "report",
25
+ "both"
26
+ ]
27
+ },
28
+ "as_of": {
29
+ "type": "string",
30
+ "format": "date"
31
+ },
32
+ "comparison_scope": {
33
+ "$ref": "#/$defs/text"
34
+ },
35
+ "competitors": {
36
+ "type": "array",
37
+ "minItems": 1,
38
+ "items": {
39
+ "type": "object",
40
+ "additionalProperties": false,
41
+ "required": [
42
+ "id",
43
+ "name",
44
+ "type",
45
+ "product",
46
+ "version",
47
+ "edition",
48
+ "region"
49
+ ],
50
+ "properties": {
51
+ "id": {
52
+ "$ref": "#/$defs/id"
53
+ },
54
+ "name": {
55
+ "$ref": "#/$defs/text"
56
+ },
57
+ "type": {
58
+ "enum": [
59
+ "direct",
60
+ "indirect",
61
+ "substitute",
62
+ "adjacent",
63
+ "our-product"
64
+ ]
65
+ },
66
+ "product": {
67
+ "$ref": "#/$defs/text"
68
+ },
69
+ "version": {
70
+ "$ref": "#/$defs/text"
71
+ },
72
+ "edition": {
73
+ "$ref": "#/$defs/text"
74
+ },
75
+ "region": {
76
+ "$ref": "#/$defs/text"
77
+ }
78
+ }
79
+ }
80
+ },
81
+ "capabilities": {
82
+ "type": "array",
83
+ "minItems": 1,
84
+ "items": {
85
+ "type": "object",
86
+ "additionalProperties": false,
87
+ "required": [
88
+ "id",
89
+ "module",
90
+ "name",
91
+ "definition",
92
+ "user_value"
93
+ ],
94
+ "properties": {
95
+ "id": {
96
+ "$ref": "#/$defs/id"
97
+ },
98
+ "module": {
99
+ "$ref": "#/$defs/text"
100
+ },
101
+ "name": {
102
+ "$ref": "#/$defs/text"
103
+ },
104
+ "definition": {
105
+ "$ref": "#/$defs/text"
106
+ },
107
+ "user_value": {
108
+ "$ref": "#/$defs/text"
109
+ }
110
+ }
111
+ }
112
+ },
113
+ "assessments": {
114
+ "type": "array",
115
+ "minItems": 1,
116
+ "items": {
117
+ "type": "object",
118
+ "additionalProperties": false,
119
+ "required": [
120
+ "competitor_id",
121
+ "capability_id",
122
+ "status",
123
+ "claim_refs",
124
+ "limitations",
125
+ "gap"
126
+ ],
127
+ "properties": {
128
+ "competitor_id": {
129
+ "$ref": "#/$defs/id"
130
+ },
131
+ "capability_id": {
132
+ "$ref": "#/$defs/id"
133
+ },
134
+ "status": {
135
+ "enum": [
136
+ "supported",
137
+ "partial",
138
+ "absent",
139
+ "unknown"
140
+ ]
141
+ },
142
+ "claim_refs": {
143
+ "type": "array",
144
+ "uniqueItems": true,
145
+ "items": {
146
+ "$ref": "#/$defs/text"
147
+ }
148
+ },
149
+ "limitations": {
150
+ "type": "array",
151
+ "uniqueItems": true,
152
+ "items": {
153
+ "$ref": "#/$defs/text"
154
+ }
155
+ },
156
+ "gap": {
157
+ "oneOf": [
158
+ {
159
+ "type": "null"
160
+ },
161
+ {
162
+ "$ref": "#/$defs/gap"
163
+ }
164
+ ]
165
+ }
166
+ },
167
+ "allOf": [
168
+ {
169
+ "if": {
170
+ "properties": {
171
+ "status": {
172
+ "const": "unknown"
173
+ }
174
+ }
175
+ },
176
+ "then": {
177
+ "properties": {
178
+ "gap": {
179
+ "$ref": "#/$defs/gap"
180
+ }
181
+ }
182
+ },
183
+ "else": {
184
+ "properties": {
185
+ "claim_refs": {
186
+ "minItems": 1
187
+ }
188
+ }
189
+ }
190
+ },
191
+ {
192
+ "if": {
193
+ "properties": {
194
+ "status": {
195
+ "const": "partial"
196
+ }
197
+ }
198
+ },
199
+ "then": {
200
+ "properties": {
201
+ "limitations": {
202
+ "minItems": 1
203
+ }
204
+ }
205
+ }
206
+ }
207
+ ]
208
+ }
209
+ },
210
+ "artifacts": {
211
+ "type": "object",
212
+ "additionalProperties": false,
213
+ "properties": {
214
+ "matrix": {
215
+ "$ref": "#/$defs/filename"
216
+ },
217
+ "report": {
218
+ "$ref": "#/$defs/filename"
219
+ }
220
+ }
221
+ }
222
+ },
223
+ "allOf": [
224
+ {
225
+ "if": {
226
+ "properties": {
227
+ "output_selection": {
228
+ "const": "matrix"
229
+ }
230
+ }
231
+ },
232
+ "then": {
233
+ "properties": {
234
+ "artifacts": {
235
+ "required": [
236
+ "matrix"
237
+ ],
238
+ "properties": {
239
+ "report": false
240
+ }
241
+ }
242
+ }
243
+ }
244
+ },
245
+ {
246
+ "if": {
247
+ "properties": {
248
+ "output_selection": {
249
+ "const": "report"
250
+ }
251
+ }
252
+ },
253
+ "then": {
254
+ "properties": {
255
+ "artifacts": {
256
+ "required": [
257
+ "report"
258
+ ],
259
+ "properties": {
260
+ "matrix": false
261
+ }
262
+ }
263
+ }
264
+ }
265
+ },
266
+ {
267
+ "if": {
268
+ "properties": {
269
+ "output_selection": {
270
+ "const": "both"
271
+ }
272
+ }
273
+ },
274
+ "then": {
275
+ "properties": {
276
+ "artifacts": {
277
+ "required": [
278
+ "matrix",
279
+ "report"
280
+ ]
281
+ }
282
+ }
283
+ }
284
+ }
285
+ ],
286
+ "$defs": {
287
+ "text": {
288
+ "type": "string",
289
+ "minLength": 1,
290
+ "pattern": "\\S"
291
+ },
292
+ "id": {
293
+ "type": "string",
294
+ "pattern": "^[a-z][a-z0-9._-]*$",
295
+ "not": {
296
+ "pattern": "\\s"
297
+ }
298
+ },
299
+ "filename": {
300
+ "type": "string",
301
+ "minLength": 1,
302
+ "pattern": "^[^/\\\\]+\\.md$",
303
+ "not": {
304
+ "pattern": "[\\u0000-\\u001f\\u007f]"
305
+ }
306
+ },
307
+ "gap": {
308
+ "type": "object",
309
+ "additionalProperties": false,
310
+ "required": [
311
+ "reason",
312
+ "next_step"
313
+ ],
314
+ "properties": {
315
+ "reason": {
316
+ "$ref": "#/$defs/text"
317
+ },
318
+ "next_step": {
319
+ "$ref": "#/$defs/text"
320
+ }
321
+ }
322
+ }
323
+ }
324
+ }
@@ -37,6 +37,14 @@ The package names its downstream owner and optional decision reference. It does
37
37
 
38
38
  The evidence file uses JSON syntax, which is valid YAML 1.2, so validation is portable and dependency-free.
39
39
 
40
+ ## 竞品附属产物
41
+
42
+ 现有 evidence v1 可选增加 `competitive_analysis`,合同见 [competitive-analysis.md](competitive-analysis.md)。不含扩展的历史包保持原校验行为;`search_log`、`evidence_items`、`claims` 仍是唯一台账。完整 JSON Schema 校验后,检查比较覆盖、Claim 引用、状态条件、选定文件和工具管理区一致性。
43
+
44
+ `yss-research` 持有研究包,`competitive-intelligence` 执行专项分析。审计模式保留 brief / evidence 双文件,按 `matrix / report / both` 追加功能矩阵和深度报告;附属报告不能替代简报。确定的能力状态必须引用适用范围内的已审计 Claim;未知必须记录原因和补证计划。`none-found` 不能证明不支持。
45
+
46
+ 矩阵和报告共用结构化结果,工具只更新唯一完整管理区,区外分析正文保留。历史文件没有管理区时拒绝覆盖。正式收尾条件追加选定产物及新增校验依赖的摘要;当前字节漂移后旧验证失效。机械一致性不替代来源语义审核,研究产物不授予下游批准。
47
+
40
48
  ## Design provenance
41
49
 
42
50
  The Search Log, evidence passport, and claim-source alignment concepts are adapted from [Academic Research Skills](https://github.com/Imbad0202/academic-research-skills). This YSS contract omits academic writing, publication, fixed agent teams, and cross-model review machinery, and retains YSS lifecycle ownership boundaries.
@@ -0,0 +1,185 @@
1
+ import { lstatSync, readFileSync, realpathSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { validateJsonSchema } from '../../../../../scripts/lib/json-schema.mjs';
5
+
6
+ const skillRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../..');
7
+ const repositoryRoot = path.resolve(skillRoot, '../../..');
8
+ const schemaFile = path.join(skillRoot, 'references/competitive-analysis.schema.json');
9
+ const START = '<!-- YSS-COMPETITIVE:START -->';
10
+ const END = '<!-- YSS-COMPETITIVE:END -->';
11
+ const SYMBOLS = { supported: '✅ 明确支持', partial: '⚠️ 部分支持', absent: '❌ 明确不支持', unknown: '❓ 未知' };
12
+ const TYPES = { direct: '直接竞品', indirect: '间接竞品', substitute: '替代方案', adjacent: '相邻产品', 'our-product': '本方产品' };
13
+
14
+ function fail(message) { throw new TypeError(`competitive_analysis: ${message}`); }
15
+ function indexById(items, label) {
16
+ const result = new Map();
17
+ for (const item of items) {
18
+ if (result.has(item.id)) fail(`${label} contains duplicate id: ${item.id}`);
19
+ result.set(item.id, item);
20
+ }
21
+ return result;
22
+ }
23
+ function fileInfo(file) {
24
+ try { return lstatSync(file); } catch (error) { if (error.code === 'ENOENT') return null; throw error; }
25
+ }
26
+ function evidenceSlug(evidenceFile) {
27
+ const name = path.basename(evidenceFile);
28
+ if (!name.endsWith('-evidence.yaml') || name === '-evidence.yaml') fail('expected <slug>-evidence.yaml');
29
+ return name.slice(0, -'-evidence.yaml'.length);
30
+ }
31
+ function artifactPath(evidenceFile, filename, kind) {
32
+ const evidencePath = path.resolve(evidenceFile);
33
+ const slug = evidenceSlug(evidencePath);
34
+ const expected = `${slug}-competitive-${kind === 'matrix' ? 'matrix' : 'analysis'}.md`;
35
+ if (filename !== expected || path.basename(filename) !== filename || filename.includes('\\')) fail(`artifacts.${kind} must be adjacent same-slug filename: ${expected}`);
36
+ const directory = path.dirname(evidencePath);
37
+ const output = path.resolve(directory, filename);
38
+ if (path.dirname(output) !== directory) fail(`artifacts.${kind} escapes evidence directory`);
39
+ const info = fileInfo(output);
40
+ if (info?.isSymbolicLink()) fail(`artifacts.${kind} symbolic link is not allowed: ${filename}`);
41
+ if (info && !info.isFile()) fail(`artifacts.${kind} must be a regular file: ${filename}`);
42
+ if (info && path.dirname(realpathSync(output)) !== realpathSync(directory)) fail(`artifacts.${kind} escapes real evidence directory`);
43
+ return output;
44
+ }
45
+ function selectedArtifacts(extension, evidenceFile) {
46
+ return Object.entries(extension.artifacts).map(([kind, filename]) => ({ kind, filename, file: artifactPath(evidenceFile, filename, kind) }));
47
+ }
48
+ function validateStructure(data) {
49
+ if (!Object.hasOwn(data, 'competitive_analysis')) return null;
50
+ try { validateJsonSchema(data.competitive_analysis, schemaFile); } catch (error) { fail(`Schema: ${error.message}`); }
51
+ return data.competitive_analysis;
52
+ }
53
+ function validateReferences(data, extension) {
54
+ const competitors = indexById(extension.competitors, 'competitors');
55
+ const capabilities = indexById(extension.capabilities, 'capabilities');
56
+ const claims = indexById(data.claims || [], 'claims');
57
+ const evidence = indexById(data.evidence_items || [], 'evidence_items');
58
+ const searches = indexById(data.search_log || [], 'search_log');
59
+ const audited = new Set(data.audit_summary?.audited_claim_ids || []);
60
+ const pairs = new Set();
61
+ for (const assessment of extension.assessments) {
62
+ const label = `${assessment.competitor_id}/${assessment.capability_id}`;
63
+ if (!competitors.has(assessment.competitor_id)) fail(`${label} has unknown competitor_id`);
64
+ if (!capabilities.has(assessment.capability_id)) fail(`${label} has unknown capability_id`);
65
+ if (pairs.has(label)) fail(`assessments contains duplicate pair: ${label}`);
66
+ pairs.add(label);
67
+ for (const ref of assessment.claim_refs) {
68
+ const claim = claims.get(ref);
69
+ if (!claim) fail(`${label} has unresolved claim ref: ${ref}`);
70
+ if (assessment.status === 'unknown') continue;
71
+ if (data.audit_summary?.status !== 'complete' || !audited.has(ref) || !['supported', 'partially-supported'].includes(claim.audit_status)) fail(`${label} requires an audited supported claim: ${ref}`);
72
+ if (claim.audit_status === 'partially-supported' && (claim.disposition !== 'qualify' || assessment.limitations.length === 0)) fail(`${label} partially-supported claim must use qualify and assessment limitations: ${ref}`);
73
+ if (!Array.isArray(claim.evidence_refs) || claim.evidence_refs.length === 0) fail(`${label} claim requires supporting evidence: ${ref}`);
74
+ for (const evidenceRef of claim.evidence_refs) {
75
+ const item = evidence.get(evidenceRef);
76
+ if (!item || item.stance !== 'support' || item.source_level === 'lead-only') fail(`${label} has invalid supporting evidence: ${evidenceRef}`);
77
+ if (assessment.status === 'absent' && (['search', 'search-log', 'search-result'].includes(item.source_class) || searches.get(item.source_ref)?.result === 'none-found')) fail(`${label} absent cannot use none-found search as absence evidence: ${evidenceRef}`);
78
+ }
79
+ if (claim.claim_kind === 'technical-fact' && !claim.evidence_refs.some(evidenceRef => evidence.get(evidenceRef).source_level === 'primary')) fail(`${label} technical-fact claim requires primary supporting evidence: ${ref}`);
80
+ }
81
+ const competitor = competitors.get(assessment.competitor_id);
82
+ if (assessment.status !== 'unknown' && ['version', 'edition', 'region'].some(field => ['unknown', '未知'].includes(competitor[field].trim().toLowerCase())) && assessment.limitations.length === 0) fail(`${label} unknown version/edition/region requires limitations`);
83
+ }
84
+ for (const competitor of competitors.keys()) for (const capability of capabilities.keys()) {
85
+ if (!pairs.has(`${competitor}/${capability}`)) fail(`missing assessment coverage: ${competitor}/${capability}`);
86
+ }
87
+ }
88
+ function cell(value) {
89
+ return String(value).replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;').replaceAll('\\', '\\\\').replaceAll('|', '\\|').replaceAll('[', '\\[').replaceAll(']', '\\]').replace(/\r?\n/g, '<br>');
90
+ }
91
+ function table(headers, rows) {
92
+ return [`| ${headers.map(cell).join(' | ')} |`, `| ${headers.map(() => '---').join(' | ')} |`, ...rows.map(row => `| ${row.map(cell).join(' | ')} |`)].join('\n');
93
+ }
94
+ function managedBody(data, kind) {
95
+ const extension = data.competitive_analysis;
96
+ const lines = [
97
+ `调研截至日期:${cell(extension.as_of)}`,
98
+ `比较范围:${cell(extension.comparison_scope)}`,
99
+ '本区由证据台账生成;结构与引用校验不替代来源语义审核。',
100
+ '',
101
+ '### 比较对象与适用范围',
102
+ '',
103
+ table(['竞品 ID', '竞品', '类型', '产品', '版本', '套餐', '地区'], extension.competitors.map(item => [item.id, item.name, TYPES[item.type], item.product, item.version, item.edition, item.region])),
104
+ '',
105
+ '### 能力定义',
106
+ '',
107
+ table(['能力 ID', '功能模块', '功能点', '定义', '用户价值'], extension.capabilities.map(item => [item.id, item.module, item.name, item.definition, item.user_value])),
108
+ ''
109
+ ];
110
+ if (kind === 'report' && extension.output_selection === 'both') {
111
+ lines.push(`完整功能矩阵:[${cell(extension.artifacts.matrix)}](<${encodeURI(extension.artifacts.matrix)}>)`, '');
112
+ } else {
113
+ const pairs = new Map(extension.assessments.map(item => [`${item.competitor_id}/${item.capability_id}`, item]));
114
+ lines.push('### 功能比较', '', table(['功能模块', '能力 ID / 功能点', ...extension.competitors.map(item => `${item.id} / ${item.name}`)], extension.capabilities.map(capability => [capability.module, `${capability.id} / ${capability.name}`, ...extension.competitors.map(competitor => {
115
+ const assessment = pairs.get(`${competitor.id}/${capability.id}`);
116
+ return `${SYMBOLS[assessment.status]};Claim: ${assessment.claim_refs.join(', ') || '无(来源缺口见下表)'}`;
117
+ })])), '', '状态:✅ 明确支持;⚠️ 在注明条件下部分支持;❌ 有明确不支持证据;❓ 尚未确认。未搜索到资料不构成不支持证据。', '');
118
+ }
119
+ lines.push('### 限定条件与补证计划', '', table(['竞品 / 能力', '状态', 'Claim', '限定条件', '来源缺口', '补证计划'], extension.assessments.map(item => [`${item.competitor_id}/${item.capability_id}`, SYMBOLS[item.status], item.claim_refs.join(', ') || '无', item.limitations.join(';') || '无已登记限定', item.gap?.reason || '无已登记缺口', item.gap?.next_step || '无'])), '');
120
+ const claims = new Map((data.claims || []).map(item => [item.id, item]));
121
+ const refs = [...new Set(extension.assessments.flatMap(item => item.claim_refs))];
122
+ lines.push('### Claim 与证据摘要', '', table(['Claim', '陈述', '审核 / 处置', '支持证据', '反证 / 反向搜索'], refs.map(ref => {
123
+ const claim = claims.get(ref);
124
+ return [ref, claim.statement, `${claim.audit_status} / ${claim.disposition}`, claim.evidence_refs.join(', '), claim.counter_signal_refs.join(', ')];
125
+ })), '');
126
+ const evidenceRefs = new Set(refs.flatMap(ref => [...claims.get(ref).evidence_refs, ...claims.get(ref).counter_signal_refs]));
127
+ lines.push(table(['证据 / 搜索 ID', '来源与定位', '日期', '观察 / 搜索结果', '限制'], [...evidenceRefs].map(ref => {
128
+ const item = (data.evidence_items || []).find(entry => entry.id === ref);
129
+ if (item) return [ref, `${item.source_ref} / ${item.locator}`, item.evidence_date || item.observed_at, item.observation, (item.limitations || []).join(';') || '无已登记限制'];
130
+ const search = (data.search_log || []).find(entry => entry.id === ref);
131
+ return [ref, `${search.channel} / ${search.query_or_corpus}`, search.searched_at, search.result, '搜索结果仅记录反向检索,不能证明能力缺失'];
132
+ })));
133
+ return `${START}\n${lines.join('\n')}\n${END}`;
134
+ }
135
+ function managedRegion(content, label) {
136
+ if (content.split(START).length !== 2 || content.split(END).length !== 2) fail(`${label} requires exactly one complete managed region; refusing to overwrite an unmarked legacy file`);
137
+ const start = content.indexOf(START), end = content.indexOf(END);
138
+ if (end < start) fail(`${label} managed region markers are out of order`);
139
+ return { start, end: end + END.length, text: content.slice(start, end + END.length) };
140
+ }
141
+
142
+ /** Validate the complete extension Schema before references and current artifacts. */
143
+ export function validateCompetitiveAnalysis(data, evidenceFile, { checkArtifacts = true } = {}) {
144
+ const extension = validateStructure(data);
145
+ if (!extension) return { enabled: false, artifacts: [] };
146
+ validateReferences(data, extension);
147
+ const artifacts = selectedArtifacts(extension, evidenceFile);
148
+ if (checkArtifacts) for (const artifact of artifacts) {
149
+ if (!fileInfo(artifact.file)) fail(`missing output artifact: ${artifact.filename}`);
150
+ const content = readFileSync(artifact.file, 'utf8');
151
+ if (managedRegion(content, artifact.filename).text !== managedBody(data, artifact.kind)) fail(`managed content drift: ${artifact.filename}; rerun render-competitive-outputs.mjs`);
152
+ }
153
+ return { enabled: true, output_selection: extension.output_selection, artifacts: artifacts.map(item => item.file), competitors: extension.competitors.length, capabilities: extension.capabilities.length, assessments: extension.assessments.length };
154
+ }
155
+
156
+ /** Preflight all outputs before the CLI writes any file, preserving manual prose. */
157
+ export function prepareCompetitiveOutputs(data, evidenceFile) {
158
+ validateCompetitiveAnalysis(data, evidenceFile, { checkArtifacts: false });
159
+ if (!Object.hasOwn(data, 'competitive_analysis')) fail('evidence package has no competitive_analysis extension');
160
+ return selectedArtifacts(data.competitive_analysis, evidenceFile).map(artifact => {
161
+ const templateFile = path.join(repositoryRoot, `.template-spec/plan/templates/competitive-${artifact.kind === 'matrix' ? 'matrix' : 'analysis'}-template.md`);
162
+ const content = readFileSync(fileInfo(artifact.file) ? artifact.file : templateFile, 'utf8');
163
+ const region = managedRegion(content, artifact.filename);
164
+ return { ...artifact, content: `${content.slice(0, region.start)}${managedBody(data, artifact.kind)}${content.slice(region.end)}` };
165
+ });
166
+ }
167
+
168
+ /** Files whose current bytes govern competitive output verification. */
169
+ export function competitiveVerificationFiles(evidenceFile, { root = repositoryRoot } = {}) {
170
+ const data = JSON.parse(readFileSync(evidenceFile, 'utf8'));
171
+ const extension = validateStructure(data);
172
+ if (!extension) return [];
173
+ const artifacts = selectedArtifacts(extension, evidenceFile).map(item => item.file);
174
+ const dependencies = [
175
+ '.agents/skills/yss-research/references/competitive-analysis.schema.json',
176
+ '.agents/skills/yss-research/scripts/lib/competitive-analysis.mjs',
177
+ '.agents/skills/yss-research/scripts/render-competitive-outputs.mjs',
178
+ '.template-spec/plan/templates/competitive-matrix-template.md',
179
+ '.template-spec/plan/templates/competitive-analysis-template.md',
180
+ 'scripts/lib/json-schema.mjs',
181
+ 'scripts/lib/validation-phase.mjs'
182
+ ].map(ref => path.resolve(root, ref));
183
+ for (const file of [...artifacts, ...dependencies]) readFileSync(file);
184
+ return [...artifacts, ...dependencies];
185
+ }
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync, writeFileSync } from 'node:fs';
3
+ import path from 'node:path';
4
+ import { prepareCompetitiveOutputs } from './lib/competitive-analysis.mjs';
5
+
6
+ try {
7
+ if (process.argv.length !== 3) throw new TypeError('usage: render-competitive-outputs.mjs <slug>-evidence.yaml');
8
+ const evidenceFile = path.resolve(process.argv[2]);
9
+ const data = JSON.parse(readFileSync(evidenceFile, 'utf8'));
10
+ const outputs = prepareCompetitiveOutputs(data, evidenceFile);
11
+ for (const output of outputs) writeFileSync(output.file, output.content, 'utf8');
12
+ process.stdout.write(`YSS competitive outputs rendered (${outputs.map(output => output.filename).join(', ')})\n`);
13
+ } catch (error) {
14
+ process.stderr.write(`YSS competitive outputs invalid: ${error.message}\n`);
15
+ process.exitCode = 1;
16
+ }
@@ -33,7 +33,7 @@ function readEvidence(file) {
33
33
  }
34
34
  }
35
35
 
36
- function validate(briefFile, evidenceFile) {
36
+ async function validate(briefFile, evidenceFile) {
37
37
  if (!briefFile || !evidenceFile) fail("usage: validate-research-package.mjs <brief.md> <evidence.yaml>");
38
38
  const briefPath = path.resolve(briefFile);
39
39
  const evidencePath = path.resolve(evidenceFile);
@@ -116,11 +116,15 @@ function validate(briefFile, evidenceFile) {
116
116
  if (claim.decision_bearing && !audited.has(id)) fail(`audit_summary is missing decision-bearing claim: ${id}`);
117
117
  if (claim.decision_bearing && claim.audit_status === "not-audited") fail(`${id} remains not-audited`);
118
118
  });
119
+ if (Object.hasOwn(data, "competitive_analysis")) {
120
+ const { validateCompetitiveAnalysis } = await import('./lib/competitive-analysis.mjs');
121
+ validateCompetitiveAnalysis(data, evidencePath);
122
+ }
119
123
  return { claims: claims.size, evidence: evidence.size, searches: searches.size, profile: data.profile };
120
124
  }
121
125
 
122
126
  try {
123
- const result = validate(process.argv[2], process.argv[3]);
127
+ const result = await validate(process.argv[2], process.argv[3]);
124
128
  process.stdout.write(`YSS research package valid (${result.profile}, ${result.claims} claims, ${result.evidence} evidence items, ${result.searches} searches)\n`);
125
129
  } catch (error) {
126
130
  process.stderr.write(`YSS research package invalid: ${error.message}\n`);