create-yss-spec 3.0.0 → 3.0.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 (1508) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/src/cli.js +0 -1
  4. package/template/.agents/skills/.strategic-design-skills-manifest.json +35 -0
  5. package/template/.agents/skills/.yss-skills-manifest.json +0 -2
  6. package/template/.agents/skills/code-review/SKILL.md +1 -1
  7. package/template/.agents/skills/code-review/references/yss-review-standards.md +1 -1
  8. package/template/.agents/skills/lombok/SKILL.md +1 -1
  9. package/template/.agents/skills/mapstruct/SKILL.md +1 -1
  10. package/template/.agents/skills/prototype-review/SKILL.md +7 -6
  11. package/template/.agents/skills/yss-antd-design/SKILL.md +8 -7
  12. package/template/.agents/skills/yss-antd-design/references/evidence.md +11 -6
  13. package/template/.agents/skills/yss-api-integration/SKILL.md +2 -2
  14. package/template/.agents/skills/yss-application/SKILL.md +2 -2
  15. package/template/.agents/skills/yss-audit-log/SKILL.md +2 -2
  16. package/template/.agents/skills/yss-audit-log/references/source-index.md +1 -1
  17. package/template/.agents/skills/yss-cache/SKILL.md +2 -2
  18. package/template/.agents/skills/yss-cache/references/source-index.md +1 -1
  19. package/template/.agents/skills/yss-cache/scripts/check-skill-freshness.sh +1 -1
  20. package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +6 -6
  21. package/template/.agents/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  22. package/template/.agents/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +1 -1
  23. package/template/.agents/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +3 -3
  24. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  25. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +3 -3
  26. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +3 -3
  27. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +8 -8
  28. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +1 -1
  29. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  30. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +8 -8
  31. package/template/.agents/skills/yss-design-system/SKILL.md +6 -6
  32. package/template/.agents/skills/yss-distributed-id/SKILL.md +2 -2
  33. package/template/.agents/skills/yss-distributed-id/references/source-index.md +1 -1
  34. package/template/.agents/skills/yss-domain/SKILL.md +1 -1
  35. package/template/.agents/skills/yss-dto/SKILL.md +2 -2
  36. package/template/.agents/skills/yss-dto/references/source-index.md +1 -1
  37. package/template/.agents/skills/yss-excel-mvc/SKILL.md +2 -2
  38. package/template/.agents/skills/yss-excel-mvc/references/source-index.md +1 -1
  39. package/template/.agents/skills/yss-exception/SKILL.md +1 -1
  40. package/template/.agents/skills/yss-exception/references/source-index.md +1 -1
  41. package/template/.agents/skills/{yss-router → yss-implementation-contract-compiler}/SKILL.md +22 -18
  42. package/template/.agents/skills/yss-implementation-contract-compiler/agents/openai.yaml +4 -0
  43. package/template/.agents/skills/yss-implementation-contract-compiler/references/boundaries.md +134 -0
  44. package/template/{.codex/skills/yss-router/references/router-contract.yaml → .agents/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml} +59 -94
  45. package/template/{.codex/skills/yss-router → .agents/skills/yss-implementation-contract-compiler}/references/slice-implementation-contract.md +20 -8
  46. package/template/.agents/skills/{yss-router → yss-implementation-contract-compiler}/references/yss-skill-execution-result.md +5 -3
  47. package/template/.agents/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +89 -0
  48. package/template/.agents/skills/yss-mvc-scaffold-generator/SKILL.md +87 -0
  49. package/template/.agents/skills/yss-mvc-scaffold-generator/agents/openai.yaml +4 -0
  50. package/template/.agents/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +50 -0
  51. package/template/.agents/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +42 -0
  52. package/template/.agents/skills/yss-mvc-scaffold-generator/references/architecture.md +28 -0
  53. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +136 -0
  54. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +337 -0
  55. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +66 -0
  56. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +115 -0
  57. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +90 -0
  58. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +54 -0
  59. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +103 -0
  60. package/template/.agents/skills/yss-mybatis/SKILL.md +2 -2
  61. package/template/.agents/skills/yss-mybatis/references/source-index.md +1 -1
  62. package/template/.agents/skills/yss-page-module-development/SKILL.md +1 -1
  63. package/template/.agents/skills/yss-product-lifecycle/SKILL.md +6 -6
  64. package/template/.agents/skills/yss-product-lifecycle/references/matt-yss-adapter.md +5 -5
  65. package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +25 -17
  66. package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +5 -5
  67. package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +1 -1
  68. package/template/.agents/skills/yss-prototype-stage/SKILL.md +34 -24
  69. package/template/.agents/skills/yss-prototype-stage/references/product-design-adapter.md +43 -38
  70. package/template/.agents/skills/yss-prototype-stage/references/prototype-profile-routing.md +67 -0
  71. package/template/.agents/skills/yss-prototype-stage/scripts/prototype-contract.mjs +192 -103
  72. package/template/.agents/skills/yss-prototype-stage/tests/run-scenarios.mjs +87 -134
  73. package/template/.agents/skills/yss-repository/SKILL.md +2 -2
  74. package/template/.agents/skills/yss-resilience4j/SKILL.md +1 -1
  75. package/template/.agents/skills/yss-resilience4j/references/source-index.md +1 -1
  76. package/template/.agents/skills/yss-security-algorithm/SKILL.md +1 -1
  77. package/template/.agents/skills/yss-security-algorithm/references/source-index.md +1 -1
  78. package/template/.agents/skills/{yss-source-index → yss-skill-source-index-refresh}/SKILL.md +4 -4
  79. package/template/.agents/skills/yss-skill-source-index-refresh/agents/openai.yaml +4 -0
  80. package/template/{.claude/skills/yss-source-index → .agents/skills/yss-skill-source-index-refresh}/scripts/refresh-yss-skill-index.mjs +1 -1
  81. package/template/.agents/skills/yss-ui/SKILL.md +2 -1
  82. package/template/.agents/skills/yss-ui/assets/docs/guide/llms.md +0 -61
  83. package/template/.agents/skills/yss-up-springboot3/SKILL.md +1 -1
  84. package/template/.agents/skills/yss-userinfo/SKILL.md +1 -1
  85. package/template/.agents/skills/yss-userinfo/references/source-index.md +1 -1
  86. package/template/.agents/skills/yss-validation/SKILL.md +1 -1
  87. package/template/.agents/skills/yss-validation/references/source-index.md +1 -1
  88. package/template/.agents/skills/yss-web-controller/SKILL.md +2 -2
  89. package/template/.claude/skills/code-review/SKILL.md +1 -1
  90. package/template/.claude/skills/code-review/references/yss-review-standards.md +1 -1
  91. package/template/.claude/skills/lombok/SKILL.md +1 -1
  92. package/template/.claude/skills/mapstruct/SKILL.md +1 -1
  93. package/template/.claude/skills/prototype-review/SKILL.md +7 -6
  94. package/template/.claude/skills/yss-antd-design/SKILL.md +8 -7
  95. package/template/.claude/skills/yss-antd-design/references/evidence.md +11 -6
  96. package/template/.claude/skills/yss-api-integration/SKILL.md +2 -2
  97. package/template/.claude/skills/yss-application/SKILL.md +2 -2
  98. package/template/.claude/skills/yss-audit-log/SKILL.md +2 -2
  99. package/template/.claude/skills/yss-audit-log/references/source-index.md +1 -1
  100. package/template/.claude/skills/yss-cache/SKILL.md +2 -2
  101. package/template/.claude/skills/yss-cache/references/source-index.md +1 -1
  102. package/template/.claude/skills/yss-cache/scripts/check-skill-freshness.sh +1 -1
  103. package/template/.claude/skills/yss-ddd-scaffold-generator/SKILL.md +6 -6
  104. package/template/.claude/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  105. package/template/.claude/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +1 -1
  106. package/template/.claude/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +3 -3
  107. package/template/.claude/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  108. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +3 -3
  109. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +3 -3
  110. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +8 -8
  111. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +1 -1
  112. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  113. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +8 -8
  114. package/template/.claude/skills/yss-design-system/SKILL.md +6 -6
  115. package/template/.claude/skills/yss-distributed-id/SKILL.md +2 -2
  116. package/template/.claude/skills/yss-distributed-id/references/source-index.md +1 -1
  117. package/template/.claude/skills/yss-domain/SKILL.md +1 -1
  118. package/template/.claude/skills/yss-dto/SKILL.md +2 -2
  119. package/template/.claude/skills/yss-dto/references/source-index.md +1 -1
  120. package/template/.claude/skills/yss-excel-mvc/SKILL.md +2 -2
  121. package/template/.claude/skills/yss-excel-mvc/references/source-index.md +1 -1
  122. package/template/.claude/skills/yss-exception/SKILL.md +1 -1
  123. package/template/.claude/skills/yss-exception/references/source-index.md +1 -1
  124. package/template/{.codex/skills/yss-router → .claude/skills/yss-implementation-contract-compiler}/SKILL.md +22 -18
  125. package/template/.claude/skills/yss-implementation-contract-compiler/agents/openai.yaml +4 -0
  126. package/template/.claude/skills/yss-implementation-contract-compiler/references/boundaries.md +134 -0
  127. package/template/.claude/skills/{yss-router/references/router-contract.yaml → yss-implementation-contract-compiler/references/compiler-contract.yaml} +59 -94
  128. package/template/{.agents/skills/yss-router → .claude/skills/yss-implementation-contract-compiler}/references/slice-implementation-contract.md +20 -8
  129. package/template/{.codex/skills/yss-router → .claude/skills/yss-implementation-contract-compiler}/references/yss-skill-execution-result.md +5 -3
  130. package/template/.claude/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +89 -0
  131. package/template/.claude/skills/yss-mvc-scaffold-generator/SKILL.md +87 -0
  132. package/template/.claude/skills/yss-mvc-scaffold-generator/agents/openai.yaml +4 -0
  133. package/template/.claude/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +50 -0
  134. package/template/.claude/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +42 -0
  135. package/template/.claude/skills/yss-mvc-scaffold-generator/references/architecture.md +28 -0
  136. package/template/.claude/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +136 -0
  137. package/template/.claude/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +337 -0
  138. package/template/.claude/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +66 -0
  139. package/template/.claude/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +115 -0
  140. package/template/.claude/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +90 -0
  141. package/template/.claude/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +54 -0
  142. package/template/.claude/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +103 -0
  143. package/template/.claude/skills/yss-mybatis/SKILL.md +2 -2
  144. package/template/.claude/skills/yss-mybatis/references/source-index.md +1 -1
  145. package/template/.claude/skills/yss-page-module-development/SKILL.md +1 -1
  146. package/template/.claude/skills/yss-product-lifecycle/SKILL.md +6 -6
  147. package/template/.claude/skills/yss-product-lifecycle/references/matt-yss-adapter.md +5 -5
  148. package/template/.claude/skills/yss-product-lifecycle/references/orchestration-contract.yaml +25 -17
  149. package/template/.claude/skills/yss-product-lifecycle/references/orchestration.md +5 -5
  150. package/template/.claude/skills/yss-product-lifecycle/references/state-model.md +1 -1
  151. package/template/.claude/skills/yss-prototype-stage/SKILL.md +34 -24
  152. package/template/.claude/skills/yss-prototype-stage/references/product-design-adapter.md +43 -38
  153. package/template/.claude/skills/yss-prototype-stage/references/prototype-profile-routing.md +67 -0
  154. package/template/.claude/skills/yss-prototype-stage/scripts/prototype-contract.mjs +192 -103
  155. package/template/.claude/skills/yss-prototype-stage/tests/run-scenarios.mjs +87 -134
  156. package/template/.claude/skills/yss-repository/SKILL.md +2 -2
  157. package/template/.claude/skills/yss-resilience4j/SKILL.md +1 -1
  158. package/template/.claude/skills/yss-resilience4j/references/source-index.md +1 -1
  159. package/template/.claude/skills/yss-security-algorithm/SKILL.md +1 -1
  160. package/template/.claude/skills/yss-security-algorithm/references/source-index.md +1 -1
  161. package/template/.claude/skills/{yss-source-index → yss-skill-source-index-refresh}/SKILL.md +4 -4
  162. package/template/.claude/skills/yss-skill-source-index-refresh/agents/openai.yaml +4 -0
  163. package/template/{.codex/skills/yss-source-index → .claude/skills/yss-skill-source-index-refresh}/scripts/refresh-yss-skill-index.mjs +1 -1
  164. package/template/.claude/skills/yss-ui/SKILL.md +2 -1
  165. package/template/.claude/skills/yss-ui/assets/docs/guide/llms.md +0 -61
  166. package/template/.claude/skills/yss-up-springboot3/SKILL.md +1 -1
  167. package/template/.claude/skills/yss-userinfo/SKILL.md +1 -1
  168. package/template/.claude/skills/yss-userinfo/references/source-index.md +1 -1
  169. package/template/.claude/skills/yss-validation/SKILL.md +1 -1
  170. package/template/.claude/skills/yss-validation/references/source-index.md +1 -1
  171. package/template/.claude/skills/yss-web-controller/SKILL.md +2 -2
  172. package/template/.codex/skills/code-review/SKILL.md +1 -1
  173. package/template/.codex/skills/code-review/references/yss-review-standards.md +1 -1
  174. package/template/.codex/skills/lombok/SKILL.md +1 -1
  175. package/template/.codex/skills/mapstruct/SKILL.md +1 -1
  176. package/template/.codex/skills/prototype-review/SKILL.md +7 -6
  177. package/template/.codex/skills/yss-antd-design/SKILL.md +8 -7
  178. package/template/.codex/skills/yss-antd-design/references/evidence.md +11 -6
  179. package/template/.codex/skills/yss-api-integration/SKILL.md +2 -2
  180. package/template/.codex/skills/yss-application/SKILL.md +2 -2
  181. package/template/.codex/skills/yss-audit-log/SKILL.md +2 -2
  182. package/template/.codex/skills/yss-audit-log/references/source-index.md +1 -1
  183. package/template/.codex/skills/yss-cache/SKILL.md +2 -2
  184. package/template/.codex/skills/yss-cache/references/source-index.md +1 -1
  185. package/template/.codex/skills/yss-cache/scripts/check-skill-freshness.sh +1 -1
  186. package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +6 -6
  187. package/template/.codex/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  188. package/template/.codex/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +1 -1
  189. package/template/.codex/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +3 -3
  190. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  191. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +3 -3
  192. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +3 -3
  193. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +8 -8
  194. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +1 -1
  195. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  196. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +8 -8
  197. package/template/.codex/skills/yss-design-system/SKILL.md +6 -6
  198. package/template/.codex/skills/yss-distributed-id/SKILL.md +2 -2
  199. package/template/.codex/skills/yss-distributed-id/references/source-index.md +1 -1
  200. package/template/.codex/skills/yss-domain/SKILL.md +1 -1
  201. package/template/.codex/skills/yss-dto/SKILL.md +2 -2
  202. package/template/.codex/skills/yss-dto/references/source-index.md +1 -1
  203. package/template/.codex/skills/yss-excel-mvc/SKILL.md +2 -2
  204. package/template/.codex/skills/yss-excel-mvc/references/source-index.md +1 -1
  205. package/template/.codex/skills/yss-exception/SKILL.md +1 -1
  206. package/template/.codex/skills/yss-exception/references/source-index.md +1 -1
  207. package/template/{.cursor/skills/yss-router → .codex/skills/yss-implementation-contract-compiler}/SKILL.md +22 -18
  208. package/template/.codex/skills/yss-implementation-contract-compiler/agents/openai.yaml +4 -0
  209. package/template/.codex/skills/yss-implementation-contract-compiler/references/boundaries.md +134 -0
  210. package/template/{.cursor/skills/yss-router/references/router-contract.yaml → .codex/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml} +59 -94
  211. package/template/{.cursor/skills/yss-router → .codex/skills/yss-implementation-contract-compiler}/references/slice-implementation-contract.md +20 -8
  212. package/template/{.claude/skills/yss-router → .codex/skills/yss-implementation-contract-compiler}/references/yss-skill-execution-result.md +5 -3
  213. package/template/.codex/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +89 -0
  214. package/template/.codex/skills/yss-mvc-scaffold-generator/SKILL.md +87 -0
  215. package/template/.codex/skills/yss-mvc-scaffold-generator/agents/openai.yaml +4 -0
  216. package/template/.codex/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +50 -0
  217. package/template/.codex/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +42 -0
  218. package/template/.codex/skills/yss-mvc-scaffold-generator/references/architecture.md +28 -0
  219. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +136 -0
  220. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +337 -0
  221. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +66 -0
  222. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +115 -0
  223. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +90 -0
  224. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +54 -0
  225. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +103 -0
  226. package/template/.codex/skills/yss-mybatis/SKILL.md +2 -2
  227. package/template/.codex/skills/yss-mybatis/references/source-index.md +1 -1
  228. package/template/.codex/skills/yss-page-module-development/SKILL.md +1 -1
  229. package/template/.codex/skills/yss-product-lifecycle/SKILL.md +6 -6
  230. package/template/.codex/skills/yss-product-lifecycle/references/matt-yss-adapter.md +5 -5
  231. package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +25 -17
  232. package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +5 -5
  233. package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +1 -1
  234. package/template/.codex/skills/yss-prototype-stage/SKILL.md +34 -24
  235. package/template/.codex/skills/yss-prototype-stage/references/product-design-adapter.md +43 -38
  236. package/template/.codex/skills/yss-prototype-stage/references/prototype-profile-routing.md +67 -0
  237. package/template/.codex/skills/yss-prototype-stage/scripts/prototype-contract.mjs +192 -103
  238. package/template/.codex/skills/yss-prototype-stage/tests/run-scenarios.mjs +87 -134
  239. package/template/.codex/skills/yss-repository/SKILL.md +2 -2
  240. package/template/.codex/skills/yss-resilience4j/SKILL.md +1 -1
  241. package/template/.codex/skills/yss-resilience4j/references/source-index.md +1 -1
  242. package/template/.codex/skills/yss-security-algorithm/SKILL.md +1 -1
  243. package/template/.codex/skills/yss-security-algorithm/references/source-index.md +1 -1
  244. package/template/.codex/skills/{yss-source-index → yss-skill-source-index-refresh}/SKILL.md +4 -4
  245. package/template/.codex/skills/yss-skill-source-index-refresh/agents/openai.yaml +4 -0
  246. package/template/{.agents/skills/yss-source-index → .codex/skills/yss-skill-source-index-refresh}/scripts/refresh-yss-skill-index.mjs +1 -1
  247. package/template/.codex/skills/yss-ui/SKILL.md +2 -1
  248. package/template/.codex/skills/yss-ui/assets/docs/guide/llms.md +0 -61
  249. package/template/.codex/skills/yss-up-springboot3/SKILL.md +1 -1
  250. package/template/.codex/skills/yss-userinfo/SKILL.md +1 -1
  251. package/template/.codex/skills/yss-userinfo/references/source-index.md +1 -1
  252. package/template/.codex/skills/yss-validation/SKILL.md +1 -1
  253. package/template/.codex/skills/yss-validation/references/source-index.md +1 -1
  254. package/template/.codex/skills/yss-web-controller/SKILL.md +2 -2
  255. package/template/.cursor/skills/code-review/SKILL.md +1 -1
  256. package/template/.cursor/skills/code-review/references/yss-review-standards.md +1 -1
  257. package/template/.cursor/skills/lombok/SKILL.md +1 -1
  258. package/template/.cursor/skills/mapstruct/SKILL.md +1 -1
  259. package/template/.cursor/skills/prototype-review/SKILL.md +7 -6
  260. package/template/.cursor/skills/yss-antd-design/SKILL.md +8 -7
  261. package/template/.cursor/skills/yss-antd-design/references/evidence.md +11 -6
  262. package/template/.cursor/skills/yss-api-integration/SKILL.md +2 -2
  263. package/template/.cursor/skills/yss-application/SKILL.md +2 -2
  264. package/template/.cursor/skills/yss-audit-log/SKILL.md +2 -2
  265. package/template/.cursor/skills/yss-audit-log/references/source-index.md +1 -1
  266. package/template/.cursor/skills/yss-cache/SKILL.md +2 -2
  267. package/template/.cursor/skills/yss-cache/references/source-index.md +1 -1
  268. package/template/.cursor/skills/yss-cache/scripts/check-skill-freshness.sh +1 -1
  269. package/template/.cursor/skills/yss-ddd-scaffold-generator/SKILL.md +6 -6
  270. package/template/.cursor/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  271. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +1 -1
  272. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +3 -3
  273. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  274. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +3 -3
  275. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +3 -3
  276. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +8 -8
  277. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +1 -1
  278. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  279. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +8 -8
  280. package/template/.cursor/skills/yss-design-system/SKILL.md +6 -6
  281. package/template/.cursor/skills/yss-distributed-id/SKILL.md +2 -2
  282. package/template/.cursor/skills/yss-distributed-id/references/source-index.md +1 -1
  283. package/template/.cursor/skills/yss-domain/SKILL.md +1 -1
  284. package/template/.cursor/skills/yss-dto/SKILL.md +2 -2
  285. package/template/.cursor/skills/yss-dto/references/source-index.md +1 -1
  286. package/template/.cursor/skills/yss-excel-mvc/SKILL.md +2 -2
  287. package/template/.cursor/skills/yss-excel-mvc/references/source-index.md +1 -1
  288. package/template/.cursor/skills/yss-exception/SKILL.md +1 -1
  289. package/template/.cursor/skills/yss-exception/references/source-index.md +1 -1
  290. package/template/{.claude/skills/yss-router → .cursor/skills/yss-implementation-contract-compiler}/SKILL.md +22 -18
  291. package/template/.cursor/skills/yss-implementation-contract-compiler/agents/openai.yaml +4 -0
  292. package/template/.cursor/skills/yss-implementation-contract-compiler/references/boundaries.md +134 -0
  293. package/template/{.agents/skills/yss-router/references/router-contract.yaml → .cursor/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml} +59 -94
  294. package/template/{.claude/skills/yss-router → .cursor/skills/yss-implementation-contract-compiler}/references/slice-implementation-contract.md +20 -8
  295. package/template/.cursor/skills/{yss-router → yss-implementation-contract-compiler}/references/yss-skill-execution-result.md +5 -3
  296. package/template/.cursor/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +89 -0
  297. package/template/.cursor/skills/yss-mvc-scaffold-generator/SKILL.md +87 -0
  298. package/template/.cursor/skills/yss-mvc-scaffold-generator/agents/openai.yaml +4 -0
  299. package/template/.cursor/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +50 -0
  300. package/template/.cursor/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +42 -0
  301. package/template/.cursor/skills/yss-mvc-scaffold-generator/references/architecture.md +28 -0
  302. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +136 -0
  303. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +337 -0
  304. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +66 -0
  305. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +115 -0
  306. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +90 -0
  307. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +54 -0
  308. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +103 -0
  309. package/template/.cursor/skills/yss-mybatis/SKILL.md +2 -2
  310. package/template/.cursor/skills/yss-mybatis/references/source-index.md +1 -1
  311. package/template/.cursor/skills/yss-page-module-development/SKILL.md +1 -1
  312. package/template/.cursor/skills/yss-product-lifecycle/SKILL.md +6 -6
  313. package/template/.cursor/skills/yss-product-lifecycle/references/matt-yss-adapter.md +5 -5
  314. package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +25 -17
  315. package/template/.cursor/skills/yss-product-lifecycle/references/orchestration.md +5 -5
  316. package/template/.cursor/skills/yss-product-lifecycle/references/state-model.md +1 -1
  317. package/template/.cursor/skills/yss-prototype-stage/SKILL.md +34 -24
  318. package/template/.cursor/skills/yss-prototype-stage/references/product-design-adapter.md +43 -38
  319. package/template/.cursor/skills/yss-prototype-stage/references/prototype-profile-routing.md +67 -0
  320. package/template/.cursor/skills/yss-prototype-stage/scripts/prototype-contract.mjs +192 -103
  321. package/template/.cursor/skills/yss-prototype-stage/tests/run-scenarios.mjs +87 -134
  322. package/template/.cursor/skills/yss-repository/SKILL.md +2 -2
  323. package/template/.cursor/skills/yss-resilience4j/SKILL.md +1 -1
  324. package/template/.cursor/skills/yss-resilience4j/references/source-index.md +1 -1
  325. package/template/.cursor/skills/yss-security-algorithm/SKILL.md +1 -1
  326. package/template/.cursor/skills/yss-security-algorithm/references/source-index.md +1 -1
  327. package/template/.cursor/skills/{yss-source-index → yss-skill-source-index-refresh}/SKILL.md +4 -4
  328. package/template/.cursor/skills/yss-skill-source-index-refresh/agents/openai.yaml +4 -0
  329. package/template/.cursor/skills/{yss-source-index → yss-skill-source-index-refresh}/scripts/refresh-yss-skill-index.mjs +1 -1
  330. package/template/.cursor/skills/yss-ui/SKILL.md +2 -1
  331. package/template/.cursor/skills/yss-ui/assets/docs/guide/llms.md +0 -61
  332. package/template/.cursor/skills/yss-up-springboot3/SKILL.md +1 -1
  333. package/template/.cursor/skills/yss-userinfo/SKILL.md +1 -1
  334. package/template/.cursor/skills/yss-userinfo/references/source-index.md +1 -1
  335. package/template/.cursor/skills/yss-validation/SKILL.md +1 -1
  336. package/template/.cursor/skills/yss-validation/references/source-index.md +1 -1
  337. package/template/.cursor/skills/yss-web-controller/SKILL.md +2 -2
  338. package/template/.pi/skills/code-review/SKILL.md +1 -1
  339. package/template/.pi/skills/code-review/references/yss-review-standards.md +1 -1
  340. package/template/.pi/skills/lombok/SKILL.md +1 -1
  341. package/template/.pi/skills/mapstruct/SKILL.md +1 -1
  342. package/template/.pi/skills/prototype-review/SKILL.md +7 -6
  343. package/template/.pi/skills/yss-antd-design/SKILL.md +8 -7
  344. package/template/.pi/skills/yss-antd-design/references/evidence.md +11 -6
  345. package/template/.pi/skills/yss-api-integration/SKILL.md +2 -2
  346. package/template/.pi/skills/yss-application/SKILL.md +2 -2
  347. package/template/.pi/skills/yss-audit-log/SKILL.md +2 -2
  348. package/template/.pi/skills/yss-audit-log/references/source-index.md +1 -1
  349. package/template/.pi/skills/yss-cache/SKILL.md +2 -2
  350. package/template/.pi/skills/yss-cache/references/source-index.md +1 -1
  351. package/template/.pi/skills/yss-cache/scripts/check-skill-freshness.sh +1 -1
  352. package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +6 -6
  353. package/template/.pi/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  354. package/template/.pi/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +1 -1
  355. package/template/.pi/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +3 -3
  356. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  357. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +3 -3
  358. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +3 -3
  359. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +8 -8
  360. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +1 -1
  361. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  362. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +8 -8
  363. package/template/.pi/skills/yss-design-system/SKILL.md +6 -6
  364. package/template/.pi/skills/yss-distributed-id/SKILL.md +2 -2
  365. package/template/.pi/skills/yss-distributed-id/references/source-index.md +1 -1
  366. package/template/.pi/skills/yss-domain/SKILL.md +1 -1
  367. package/template/.pi/skills/yss-dto/SKILL.md +2 -2
  368. package/template/.pi/skills/yss-dto/references/source-index.md +1 -1
  369. package/template/.pi/skills/yss-excel-mvc/SKILL.md +2 -2
  370. package/template/.pi/skills/yss-excel-mvc/references/source-index.md +1 -1
  371. package/template/.pi/skills/yss-exception/SKILL.md +1 -1
  372. package/template/.pi/skills/yss-exception/references/source-index.md +1 -1
  373. package/template/.pi/skills/yss-implementation-contract-compiler/SKILL.md +55 -0
  374. package/template/.pi/skills/yss-implementation-contract-compiler/agents/openai.yaml +4 -0
  375. package/template/.pi/skills/yss-implementation-contract-compiler/references/boundaries.md +134 -0
  376. package/template/.pi/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +314 -0
  377. package/template/.pi/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +197 -0
  378. package/template/.pi/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +69 -0
  379. package/template/.pi/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +89 -0
  380. package/template/.pi/skills/yss-mvc-scaffold-generator/SKILL.md +87 -0
  381. package/template/.pi/skills/yss-mvc-scaffold-generator/agents/openai.yaml +4 -0
  382. package/template/.pi/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +50 -0
  383. package/template/.pi/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +42 -0
  384. package/template/.pi/skills/yss-mvc-scaffold-generator/references/architecture.md +28 -0
  385. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +136 -0
  386. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +337 -0
  387. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +66 -0
  388. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +115 -0
  389. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +90 -0
  390. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +54 -0
  391. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +103 -0
  392. package/template/.pi/skills/yss-mybatis/SKILL.md +2 -2
  393. package/template/.pi/skills/yss-mybatis/references/source-index.md +1 -1
  394. package/template/.pi/skills/yss-page-module-development/SKILL.md +1 -1
  395. package/template/.pi/skills/yss-product-lifecycle/SKILL.md +6 -6
  396. package/template/.pi/skills/yss-product-lifecycle/references/matt-yss-adapter.md +5 -5
  397. package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +25 -17
  398. package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +5 -5
  399. package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +1 -1
  400. package/template/.pi/skills/yss-prototype-stage/SKILL.md +34 -24
  401. package/template/.pi/skills/yss-prototype-stage/references/product-design-adapter.md +43 -38
  402. package/template/.pi/skills/yss-prototype-stage/references/prototype-profile-routing.md +67 -0
  403. package/template/.pi/skills/yss-prototype-stage/scripts/prototype-contract.mjs +192 -103
  404. package/template/.pi/skills/yss-prototype-stage/tests/run-scenarios.mjs +87 -134
  405. package/template/.pi/skills/yss-repository/SKILL.md +2 -2
  406. package/template/.pi/skills/yss-resilience4j/SKILL.md +1 -1
  407. package/template/.pi/skills/yss-resilience4j/references/source-index.md +1 -1
  408. package/template/.pi/skills/yss-security-algorithm/SKILL.md +1 -1
  409. package/template/.pi/skills/yss-security-algorithm/references/source-index.md +1 -1
  410. package/template/.pi/skills/yss-skill-source-index-refresh/SKILL.md +63 -0
  411. package/template/.pi/skills/yss-skill-source-index-refresh/agents/openai.yaml +4 -0
  412. package/template/.pi/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +24 -0
  413. package/template/.pi/skills/yss-ui/SKILL.md +2 -1
  414. package/template/.pi/skills/yss-ui/assets/docs/guide/llms.md +0 -61
  415. package/template/.pi/skills/yss-up-springboot3/SKILL.md +1 -1
  416. package/template/.pi/skills/yss-userinfo/SKILL.md +1 -1
  417. package/template/.pi/skills/yss-userinfo/references/source-index.md +1 -1
  418. package/template/.pi/skills/yss-validation/SKILL.md +1 -1
  419. package/template/.pi/skills/yss-validation/references/source-index.md +1 -1
  420. package/template/.pi/skills/yss-web-controller/SKILL.md +2 -2
  421. package/template/.qoder/skills/code-review/SKILL.md +1 -1
  422. package/template/.qoder/skills/code-review/references/yss-review-standards.md +1 -1
  423. package/template/.qoder/skills/lombok/SKILL.md +1 -1
  424. package/template/.qoder/skills/mapstruct/SKILL.md +1 -1
  425. package/template/.qoder/skills/prototype-review/SKILL.md +7 -6
  426. package/template/.qoder/skills/yss-antd-design/SKILL.md +8 -7
  427. package/template/.qoder/skills/yss-antd-design/references/evidence.md +11 -6
  428. package/template/.qoder/skills/yss-api-integration/SKILL.md +2 -2
  429. package/template/.qoder/skills/yss-application/SKILL.md +2 -2
  430. package/template/.qoder/skills/yss-audit-log/SKILL.md +2 -2
  431. package/template/.qoder/skills/yss-audit-log/references/source-index.md +1 -1
  432. package/template/.qoder/skills/yss-cache/SKILL.md +2 -2
  433. package/template/.qoder/skills/yss-cache/references/source-index.md +1 -1
  434. package/template/.qoder/skills/yss-cache/scripts/check-skill-freshness.sh +1 -1
  435. package/template/.qoder/skills/yss-ddd-scaffold-generator/SKILL.md +6 -6
  436. package/template/.qoder/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  437. package/template/.qoder/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +1 -1
  438. package/template/.qoder/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +3 -3
  439. package/template/.qoder/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  440. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +3 -3
  441. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +3 -3
  442. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +8 -8
  443. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +1 -1
  444. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  445. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +8 -8
  446. package/template/.qoder/skills/yss-design-system/SKILL.md +6 -6
  447. package/template/.qoder/skills/yss-distributed-id/SKILL.md +2 -2
  448. package/template/.qoder/skills/yss-distributed-id/references/source-index.md +1 -1
  449. package/template/.qoder/skills/yss-domain/SKILL.md +1 -1
  450. package/template/.qoder/skills/yss-dto/SKILL.md +2 -2
  451. package/template/.qoder/skills/yss-dto/references/source-index.md +1 -1
  452. package/template/.qoder/skills/yss-excel-mvc/SKILL.md +2 -2
  453. package/template/.qoder/skills/yss-excel-mvc/references/source-index.md +1 -1
  454. package/template/.qoder/skills/yss-exception/SKILL.md +1 -1
  455. package/template/.qoder/skills/yss-exception/references/source-index.md +1 -1
  456. package/template/.qoder/skills/yss-implementation-contract-compiler/SKILL.md +55 -0
  457. package/template/.qoder/skills/yss-implementation-contract-compiler/agents/openai.yaml +4 -0
  458. package/template/.qoder/skills/yss-implementation-contract-compiler/references/boundaries.md +134 -0
  459. package/template/.qoder/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +314 -0
  460. package/template/.qoder/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +197 -0
  461. package/template/.qoder/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +69 -0
  462. package/template/.qoder/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +89 -0
  463. package/template/.qoder/skills/yss-mvc-scaffold-generator/SKILL.md +87 -0
  464. package/template/.qoder/skills/yss-mvc-scaffold-generator/agents/openai.yaml +4 -0
  465. package/template/.qoder/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +50 -0
  466. package/template/.qoder/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +42 -0
  467. package/template/.qoder/skills/yss-mvc-scaffold-generator/references/architecture.md +28 -0
  468. package/template/.qoder/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +136 -0
  469. package/template/.qoder/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +337 -0
  470. package/template/.qoder/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +66 -0
  471. package/template/.qoder/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +115 -0
  472. package/template/.qoder/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +90 -0
  473. package/template/.qoder/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +54 -0
  474. package/template/.qoder/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +103 -0
  475. package/template/.qoder/skills/yss-mybatis/SKILL.md +2 -2
  476. package/template/.qoder/skills/yss-mybatis/references/source-index.md +1 -1
  477. package/template/.qoder/skills/yss-page-module-development/SKILL.md +1 -1
  478. package/template/.qoder/skills/yss-product-lifecycle/SKILL.md +6 -6
  479. package/template/.qoder/skills/yss-product-lifecycle/references/matt-yss-adapter.md +5 -5
  480. package/template/.qoder/skills/yss-product-lifecycle/references/orchestration-contract.yaml +25 -17
  481. package/template/.qoder/skills/yss-product-lifecycle/references/orchestration.md +5 -5
  482. package/template/.qoder/skills/yss-product-lifecycle/references/state-model.md +1 -1
  483. package/template/.qoder/skills/yss-prototype-stage/SKILL.md +34 -24
  484. package/template/.qoder/skills/yss-prototype-stage/references/product-design-adapter.md +43 -38
  485. package/template/.qoder/skills/yss-prototype-stage/references/prototype-profile-routing.md +67 -0
  486. package/template/.qoder/skills/yss-prototype-stage/scripts/prototype-contract.mjs +192 -103
  487. package/template/.qoder/skills/yss-prototype-stage/tests/run-scenarios.mjs +87 -134
  488. package/template/.qoder/skills/yss-repository/SKILL.md +2 -2
  489. package/template/.qoder/skills/yss-resilience4j/SKILL.md +1 -1
  490. package/template/.qoder/skills/yss-resilience4j/references/source-index.md +1 -1
  491. package/template/.qoder/skills/yss-security-algorithm/SKILL.md +1 -1
  492. package/template/.qoder/skills/yss-security-algorithm/references/source-index.md +1 -1
  493. package/template/.qoder/skills/yss-skill-source-index-refresh/SKILL.md +63 -0
  494. package/template/.qoder/skills/yss-skill-source-index-refresh/agents/openai.yaml +4 -0
  495. package/template/.qoder/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +24 -0
  496. package/template/.qoder/skills/yss-ui/SKILL.md +2 -1
  497. package/template/.qoder/skills/yss-ui/assets/docs/guide/llms.md +0 -61
  498. package/template/.qoder/skills/yss-up-springboot3/SKILL.md +1 -1
  499. package/template/.qoder/skills/yss-userinfo/SKILL.md +1 -1
  500. package/template/.qoder/skills/yss-userinfo/references/source-index.md +1 -1
  501. package/template/.qoder/skills/yss-validation/SKILL.md +1 -1
  502. package/template/.qoder/skills/yss-validation/references/source-index.md +1 -1
  503. package/template/.qoder/skills/yss-web-controller/SKILL.md +2 -2
  504. package/template/.trae/skills/code-review/SKILL.md +1 -1
  505. package/template/.trae/skills/code-review/references/yss-review-standards.md +1 -1
  506. package/template/.trae/skills/lombok/SKILL.md +1 -1
  507. package/template/.trae/skills/mapstruct/SKILL.md +1 -1
  508. package/template/.trae/skills/prototype-review/SKILL.md +7 -6
  509. package/template/.trae/skills/yss-antd-design/SKILL.md +8 -7
  510. package/template/.trae/skills/yss-antd-design/references/evidence.md +11 -6
  511. package/template/.trae/skills/yss-api-integration/SKILL.md +2 -2
  512. package/template/.trae/skills/yss-application/SKILL.md +2 -2
  513. package/template/.trae/skills/yss-audit-log/SKILL.md +2 -2
  514. package/template/.trae/skills/yss-audit-log/references/source-index.md +1 -1
  515. package/template/.trae/skills/yss-cache/SKILL.md +2 -2
  516. package/template/.trae/skills/yss-cache/references/source-index.md +1 -1
  517. package/template/.trae/skills/yss-cache/scripts/check-skill-freshness.sh +1 -1
  518. package/template/.trae/skills/yss-ddd-scaffold-generator/SKILL.md +6 -6
  519. package/template/.trae/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  520. package/template/.trae/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +1 -1
  521. package/template/.trae/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +3 -3
  522. package/template/.trae/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  523. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +3 -3
  524. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +3 -3
  525. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +8 -8
  526. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +1 -1
  527. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  528. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +8 -8
  529. package/template/.trae/skills/yss-design-system/SKILL.md +6 -6
  530. package/template/.trae/skills/yss-distributed-id/SKILL.md +2 -2
  531. package/template/.trae/skills/yss-distributed-id/references/source-index.md +1 -1
  532. package/template/.trae/skills/yss-domain/SKILL.md +1 -1
  533. package/template/.trae/skills/yss-dto/SKILL.md +2 -2
  534. package/template/.trae/skills/yss-dto/references/source-index.md +1 -1
  535. package/template/.trae/skills/yss-excel-mvc/SKILL.md +2 -2
  536. package/template/.trae/skills/yss-excel-mvc/references/source-index.md +1 -1
  537. package/template/.trae/skills/yss-exception/SKILL.md +1 -1
  538. package/template/.trae/skills/yss-exception/references/source-index.md +1 -1
  539. package/template/.trae/skills/yss-implementation-contract-compiler/SKILL.md +55 -0
  540. package/template/.trae/skills/yss-implementation-contract-compiler/agents/openai.yaml +4 -0
  541. package/template/.trae/skills/yss-implementation-contract-compiler/references/boundaries.md +134 -0
  542. package/template/.trae/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +314 -0
  543. package/template/.trae/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +197 -0
  544. package/template/.trae/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +69 -0
  545. package/template/.trae/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +89 -0
  546. package/template/.trae/skills/yss-mvc-scaffold-generator/SKILL.md +87 -0
  547. package/template/.trae/skills/yss-mvc-scaffold-generator/agents/openai.yaml +4 -0
  548. package/template/.trae/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +50 -0
  549. package/template/.trae/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +42 -0
  550. package/template/.trae/skills/yss-mvc-scaffold-generator/references/architecture.md +28 -0
  551. package/template/.trae/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +136 -0
  552. package/template/.trae/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +337 -0
  553. package/template/.trae/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +66 -0
  554. package/template/.trae/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +115 -0
  555. package/template/.trae/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +90 -0
  556. package/template/.trae/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +54 -0
  557. package/template/.trae/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +103 -0
  558. package/template/.trae/skills/yss-mybatis/SKILL.md +2 -2
  559. package/template/.trae/skills/yss-mybatis/references/source-index.md +1 -1
  560. package/template/.trae/skills/yss-page-module-development/SKILL.md +1 -1
  561. package/template/.trae/skills/yss-product-lifecycle/SKILL.md +6 -6
  562. package/template/.trae/skills/yss-product-lifecycle/references/matt-yss-adapter.md +5 -5
  563. package/template/.trae/skills/yss-product-lifecycle/references/orchestration-contract.yaml +25 -17
  564. package/template/.trae/skills/yss-product-lifecycle/references/orchestration.md +5 -5
  565. package/template/.trae/skills/yss-product-lifecycle/references/state-model.md +1 -1
  566. package/template/.trae/skills/yss-prototype-stage/SKILL.md +34 -24
  567. package/template/.trae/skills/yss-prototype-stage/references/product-design-adapter.md +43 -38
  568. package/template/.trae/skills/yss-prototype-stage/references/prototype-profile-routing.md +67 -0
  569. package/template/.trae/skills/yss-prototype-stage/scripts/prototype-contract.mjs +192 -103
  570. package/template/.trae/skills/yss-prototype-stage/tests/run-scenarios.mjs +87 -134
  571. package/template/.trae/skills/yss-repository/SKILL.md +2 -2
  572. package/template/.trae/skills/yss-resilience4j/SKILL.md +1 -1
  573. package/template/.trae/skills/yss-resilience4j/references/source-index.md +1 -1
  574. package/template/.trae/skills/yss-security-algorithm/SKILL.md +1 -1
  575. package/template/.trae/skills/yss-security-algorithm/references/source-index.md +1 -1
  576. package/template/.trae/skills/yss-skill-source-index-refresh/SKILL.md +63 -0
  577. package/template/.trae/skills/yss-skill-source-index-refresh/agents/openai.yaml +4 -0
  578. package/template/.trae/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +24 -0
  579. package/template/.trae/skills/yss-ui/SKILL.md +2 -1
  580. package/template/.trae/skills/yss-ui/assets/docs/guide/llms.md +0 -61
  581. package/template/.trae/skills/yss-up-springboot3/SKILL.md +1 -1
  582. package/template/.trae/skills/yss-userinfo/SKILL.md +1 -1
  583. package/template/.trae/skills/yss-userinfo/references/source-index.md +1 -1
  584. package/template/.trae/skills/yss-validation/SKILL.md +1 -1
  585. package/template/.trae/skills/yss-validation/references/source-index.md +1 -1
  586. package/template/.trae/skills/yss-web-controller/SKILL.md +2 -2
  587. package/template/AGENTS.md +11 -11
  588. package/template/CONTEXT.md +8 -7
  589. package/template/README.md +0 -1
  590. package/template/docs/agents/digital-human-roles.md +3 -3
  591. package/template/docs/agents/digital-human-roles.yaml +3 -3
  592. package/template/docs/agents/skill-migrations.md +18 -5
  593. package/template/docs/agents/skills-maintenance.md +3 -3
  594. package/template/docs/agents/strategic-design-skills-integration.md +41 -0
  595. package/template/docs/agents/yss-skill-registry.yaml +134 -28
  596. package/template/docs/api/templates/openapi-draft-review-checklist.md +3 -3
  597. package/template/docs/architecture/templates/engineering-baseline-review-template.md +3 -3
  598. package/template/docs/design/README.md +7 -7
  599. package/template/docs/design/design.md +25 -17
  600. package/template/docs/design/templates/interaction-spec-template.md +4 -4
  601. package/template/docs/design/templates/prototype-confirmation-template.md +13 -15
  602. package/template/docs/design/templates/prototype-evidence-template.yaml +99 -75
  603. package/template/docs/design/templates/prototype-review-checklist.md +5 -4
  604. package/template/docs/design/templates/state-matrix-template.md +11 -0
  605. package/template/docs/discovery/reports/agent-governance-options.md +8 -8
  606. package/template/docs/process/MATT-POCOCK-ENGINEERING-SKILLS.md +1 -1
  607. package/template/docs/process/implementation-repo-integration.md +1 -1
  608. package/template/docs/process/lifecycle-artifact-map.md +4 -2
  609. package/template/docs/process/lifecycle-registry-baseline.json +4 -1
  610. package/template/docs/process/lifecycle-registry.yaml +15 -9
  611. package/template/docs/process/template-engineering-overview.md +2 -2
  612. package/template/docs/process/template-verification-profiles.yaml +27 -6
  613. package/template/docs/templates/build-architecture-checklist-template.md +6 -6
  614. package/template/docs/templates/implementation-routing-template.md +8 -8
  615. package/template/docs/templates/requirement-freeze-template.md +2 -2
  616. package/template/docs/templates/review-report-template.md +4 -4
  617. package/template/docs/templates/spec-template.md +1 -1
  618. package/template/docs/templates/vertical-slice-ticket-template.md +4 -4
  619. package/template/docs/user-guide/yss-ui-mcp.md +0 -2
  620. package/template/docs/user-guide//346/210/230/346/234/257/350/256/276/350/256/241/345/255/220/351/241/271/347/233/256/347/224/250/346/210/267/346/211/213/345/206/214.md +2 -2
  621. package/template/docs/user-guide//347/224/250/346/210/267/346/211/213/345/206/214.md +4 -4
  622. package/template/docs/user-guide//347/224/250/346/210/267/346/211/213/345/206/214/347/264/242/345/274/225.md +4 -4
  623. package/template/scripts/audit-yss-backend-skills +56 -0
  624. package/template/scripts/generate-yss-skill-boundaries +67 -0
  625. package/template/scripts/lib/export-skills.mjs +4 -4
  626. package/template/scripts/lib/implementation-contract-compiler.mjs +194 -0
  627. package/template/scripts/lib/scenario-checks.mjs +9 -6
  628. package/template/scripts/lib/skill-governance.mjs +27 -5
  629. package/template/scripts/lib/skill-registry.mjs +107 -63
  630. package/template/scripts/lib/skill-supply-chain.mjs +45 -5
  631. package/template/scripts/verify-repository-scope-scenarios +2 -2
  632. package/template/scripts/verify-retired-skill-ids +37 -0
  633. package/template/scripts/verify-scaffold-generator-scenarios +18 -18
  634. package/template/scripts/verify-template-verification-scenarios +4 -1
  635. package/template/scripts/verify-yss-implementation-contract-compiler-scenarios +14 -0
  636. package/template/skills-lock.json +87 -157
  637. package/template/yss-public-skills.json +4 -4
  638. package/template.manifest.json +0 -3
  639. package/template.snapshot.json +5 -5
  640. package/template/.agents/skills/yss-router/agents/openai.yaml +0 -4
  641. package/template/.agents/skills/yss-router/references/boundaries.md +0 -50
  642. package/template/.agents/skills/yss-source-index/agents/openai.yaml +0 -4
  643. package/template/.claude/skills/yss-router/agents/openai.yaml +0 -4
  644. package/template/.claude/skills/yss-router/references/boundaries.md +0 -50
  645. package/template/.claude/skills/yss-source-index/agents/openai.yaml +0 -4
  646. package/template/.codex/skills/yss-router/agents/openai.yaml +0 -4
  647. package/template/.codex/skills/yss-router/references/boundaries.md +0 -50
  648. package/template/.codex/skills/yss-source-index/agents/openai.yaml +0 -4
  649. package/template/.cursor/skills/yss-router/agents/openai.yaml +0 -4
  650. package/template/.cursor/skills/yss-router/references/boundaries.md +0 -50
  651. package/template/.cursor/skills/yss-source-index/agents/openai.yaml +0 -4
  652. package/template/.gemini/settings.json +0 -8
  653. package/template/.hermes/skills/alibaba-java-code-style/SKILL.md +0 -51
  654. package/template/.hermes/skills/alibaba-java-code-style/agents/openai.yaml +0 -4
  655. package/template/.hermes/skills/alibaba-java-code-style/references/database-engineering-design.md +0 -147
  656. package/template/.hermes/skills/alibaba-java-code-style/references/java-programming.md +0 -178
  657. package/template/.hermes/skills/alibaba-java-code-style/references/reliability-test-security.md +0 -89
  658. package/template/.hermes/skills/archify/LICENSE +0 -22
  659. package/template/.hermes/skills/archify/SKILL.md +0 -156
  660. package/template/.hermes/skills/archify/assets/template.html +0 -14787
  661. package/template/.hermes/skills/archify/bin/archify.mjs +0 -1990
  662. package/template/.hermes/skills/archify/bin/open-artifact.mjs +0 -86
  663. package/template/.hermes/skills/archify/bin/preview.mjs +0 -648
  664. package/template/.hermes/skills/archify/bin/visual-check.mjs +0 -829
  665. package/template/.hermes/skills/archify/brand-marks/README.md +0 -31
  666. package/template/.hermes/skills/archify/brand-marks/catalog.json +0 -131
  667. package/template/.hermes/skills/archify/delta/architecture-delta.mjs +0 -1214
  668. package/template/.hermes/skills/archify/examples/agent-run.lifecycle.json +0 -71
  669. package/template/.hermes/skills/archify/examples/agent-tool-call.workflow.json +0 -94
  670. package/template/.hermes/skills/archify/examples/async-job-roundtrip.sequence.json +0 -61
  671. package/template/.hermes/skills/archify/examples/brand-aware-delivery.architecture.json +0 -47
  672. package/template/.hermes/skills/archify/examples/cache-miss-request.sequence.json +0 -81
  673. package/template/.hermes/skills/archify/examples/checkout-platform.base.architecture.json +0 -31
  674. package/template/.hermes/skills/archify/examples/checkout-platform.head.architecture.json +0 -31
  675. package/template/.hermes/skills/archify/examples/dataflow-product-analytics.html +0 -14898
  676. package/template/.hermes/skills/archify/examples/deployment-release.lifecycle.json +0 -49
  677. package/template/.hermes/skills/archify/examples/event-stream.dataflow.json +0 -57
  678. package/template/.hermes/skills/archify/examples/incident-response.workflow.json +0 -64
  679. package/template/.hermes/skills/archify/examples/lifecycle-agent-run.html +0 -14847
  680. package/template/.hermes/skills/archify/examples/product-analytics.dataflow.json +0 -76
  681. package/template/.hermes/skills/archify/examples/production-deployment.architecture.json +0 -71
  682. package/template/.hermes/skills/archify/examples/release-delivery.workflow.json +0 -62
  683. package/template/.hermes/skills/archify/examples/sequence-cache-miss-request.html +0 -14913
  684. package/template/.hermes/skills/archify/examples/web-app-rendered.html +0 -14862
  685. package/template/.hermes/skills/archify/examples/web-app.architecture.json +0 -46
  686. package/template/.hermes/skills/archify/examples/workflow-agent-tool-call-rendered.html +0 -14904
  687. package/template/.hermes/skills/archify/migrations/workflow-v2.mjs +0 -279
  688. package/template/.hermes/skills/archify/package-lock.json +0 -149
  689. package/template/.hermes/skills/archify/package.json +0 -37
  690. package/template/.hermes/skills/archify/recipes/scenarios.mjs +0 -391
  691. package/template/.hermes/skills/archify/references/authoring-contract.md +0 -191
  692. package/template/.hermes/skills/archify/references/brand-marks.md +0 -65
  693. package/template/.hermes/skills/archify/references/delivery-contract.md +0 -112
  694. package/template/.hermes/skills/archify/references/viewer-runtime.md +0 -45
  695. package/template/.hermes/skills/archify/renderers/architecture/grid.mjs +0 -62
  696. package/template/.hermes/skills/archify/renderers/architecture/render-architecture.mjs +0 -1078
  697. package/template/.hermes/skills/archify/renderers/dataflow/README.md +0 -104
  698. package/template/.hermes/skills/archify/renderers/dataflow/render-dataflow.mjs +0 -483
  699. package/template/.hermes/skills/archify/renderers/lifecycle/README.md +0 -115
  700. package/template/.hermes/skills/archify/renderers/lifecycle/render-lifecycle.mjs +0 -561
  701. package/template/.hermes/skills/archify/renderers/sequence/README.md +0 -114
  702. package/template/.hermes/skills/archify/renderers/sequence/render-sequence.mjs +0 -453
  703. package/template/.hermes/skills/archify/renderers/shared/brand-marks.mjs +0 -563
  704. package/template/.hermes/skills/archify/renderers/shared/cli.mjs +0 -218
  705. package/template/.hermes/skills/archify/renderers/shared/desktop-readability.mjs +0 -26
  706. package/template/.hermes/skills/archify/renderers/shared/diagnostics.mjs +0 -127
  707. package/template/.hermes/skills/archify/renderers/shared/engineering-profiles.mjs +0 -157
  708. package/template/.hermes/skills/archify/renderers/shared/generated-brand-marks.mjs +0 -2003
  709. package/template/.hermes/skills/archify/renderers/shared/generated-validators.mjs +0 -13
  710. package/template/.hermes/skills/archify/renderers/shared/geometry.mjs +0 -1423
  711. package/template/.hermes/skills/archify/renderers/shared/i18n.mjs +0 -594
  712. package/template/.hermes/skills/archify/renderers/shared/layout-report.mjs +0 -40
  713. package/template/.hermes/skills/archify/renderers/shared/legend.mjs +0 -217
  714. package/template/.hermes/skills/archify/renderers/shared/output-path.mjs +0 -321
  715. package/template/.hermes/skills/archify/renderers/shared/repository-evidence.mjs +0 -235
  716. package/template/.hermes/skills/archify/renderers/shared/text-fit.mjs +0 -49
  717. package/template/.hermes/skills/archify/renderers/shared/utils.mjs +0 -232
  718. package/template/.hermes/skills/archify/renderers/shared/validator.mjs +0 -86
  719. package/template/.hermes/skills/archify/renderers/workflow/README.md +0 -223
  720. package/template/.hermes/skills/archify/renderers/workflow/render-workflow.mjs +0 -35
  721. package/template/.hermes/skills/archify/renderers/workflow/workflow-compiler.mjs +0 -4400
  722. package/template/.hermes/skills/archify/renderers/workflow/workflow-migration-geometry.mjs +0 -144
  723. package/template/.hermes/skills/archify/schemas/README.md +0 -211
  724. package/template/.hermes/skills/archify/schemas/architecture.schema.json +0 -176
  725. package/template/.hermes/skills/archify/schemas/common.schema.json +0 -115
  726. package/template/.hermes/skills/archify/schemas/dataflow.schema.json +0 -243
  727. package/template/.hermes/skills/archify/schemas/lifecycle.schema.json +0 -266
  728. package/template/.hermes/skills/archify/schemas/sequence.schema.json +0 -223
  729. package/template/.hermes/skills/archify/schemas/workflow.schema.json +0 -428
  730. package/template/.hermes/skills/archify/scripts/check-render-output.mjs +0 -835
  731. package/template/.hermes/skills/archify/scripts/check-update.mjs +0 -1667
  732. package/template/.hermes/skills/archify/scripts/generate-brand-marks.mjs +0 -141
  733. package/template/.hermes/skills/archify/scripts/generate-validators.mjs +0 -66
  734. package/template/.hermes/skills/archify/scripts/render-examples.mjs +0 -26
  735. package/template/.hermes/skills/archify/scripts/update-contract.mjs +0 -182
  736. package/template/.hermes/skills/archify/scripts/yss-safe-deliver.mjs +0 -214
  737. package/template/.hermes/skills/archify/skill-release.json +0 -10
  738. package/template/.hermes/skills/archify/test/adaptive-reader-layout.test.mjs +0 -86
  739. package/template/.hermes/skills/archify/test/animation.test.mjs +0 -179
  740. package/template/.hermes/skills/archify/test/architecture-delta.test.mjs +0 -518
  741. package/template/.hermes/skills/archify/test/authored-reachability.test.mjs +0 -95
  742. package/template/.hermes/skills/archify/test/authoring-safety-contract.test.mjs +0 -54
  743. package/template/.hermes/skills/archify/test/automatic-port-spread.test.mjs +0 -376
  744. package/template/.hermes/skills/archify/test/base-input-compatibility.test.mjs +0 -42
  745. package/template/.hermes/skills/archify/test/brand-marks.test.mjs +0 -654
  746. package/template/.hermes/skills/archify/test/chapter-delta-preview.test.mjs +0 -157
  747. package/template/.hermes/skills/archify/test/chapter-handoff.test.mjs +0 -97
  748. package/template/.hermes/skills/archify/test/chapter-rail.test.mjs +0 -86
  749. package/template/.hermes/skills/archify/test/checkout-line-endings.test.mjs +0 -72
  750. package/template/.hermes/skills/archify/test/clean-skill-staging.test.mjs +0 -244
  751. package/template/.hermes/skills/archify/test/cli.test.mjs +0 -809
  752. package/template/.hermes/skills/archify/test/community-proof-intake.test.mjs +0 -104
  753. package/template/.hermes/skills/archify/test/cursor-onboarding.test.mjs +0 -74
  754. package/template/.hermes/skills/archify/test/degraded.test.mjs +0 -161
  755. package/template/.hermes/skills/archify/test/delivery-contract.test.mjs +0 -52
  756. package/template/.hermes/skills/archify/test/desktop-reader-browser.test.mjs +0 -58
  757. package/template/.hermes/skills/archify/test/diagram-guide.test.mjs +0 -92
  758. package/template/.hermes/skills/archify/test/engineering-profile.test.mjs +0 -209
  759. package/template/.hermes/skills/archify/test/finder.test.mjs +0 -104
  760. package/template/.hermes/skills/archify/test/fixtures/automatic-routing-node-border-clearance.workflow.json +0 -40
  761. package/template/.hermes/skills/archify/test/fixtures/fail-migration-cleanup.mjs +0 -17
  762. package/template/.hermes/skills/archify/test/fixtures/issue-126/custom-widths.workflow.json +0 -18
  763. package/template/.hermes/skills/archify/test/fixtures/issue-126/explicit-route.workflow.json +0 -28
  764. package/template/.hermes/skills/archify/test/fixtures/issue-126/explicit-viewbox.workflow.json +0 -19
  765. package/template/.hermes/skills/archify/test/fixtures/issue-126/labels.workflow.json +0 -18
  766. package/template/.hermes/skills/archify/test/fixtures/v1-baseline/agent-run.lifecycle.json +0 -64
  767. package/template/.hermes/skills/archify/test/fixtures/v1-baseline/agent-tool-call.workflow.json +0 -88
  768. package/template/.hermes/skills/archify/test/fixtures/v1-baseline/cache-miss-request.sequence.json +0 -75
  769. package/template/.hermes/skills/archify/test/fixtures/v1-baseline/event-stream.dataflow.json +0 -57
  770. package/template/.hermes/skills/archify/test/fixtures/v1-baseline/product-analytics.dataflow.json +0 -70
  771. package/template/.hermes/skills/archify/test/fixtures/v1-baseline/production-deployment.architecture.json +0 -71
  772. package/template/.hermes/skills/archify/test/fixtures/v1-baseline/web-app.architecture.json +0 -41
  773. package/template/.hermes/skills/archify/test/fixtures/v1-workflow-700x400.workflow.json +0 -22
  774. package/template/.hermes/skills/archify/test/fixtures/v1-workflow-explicit-coordinates.workflow.json +0 -47
  775. package/template/.hermes/skills/archify/test/gallery.test.mjs +0 -130
  776. package/template/.hermes/skills/archify/test/generate-validators.test.mjs +0 -59
  777. package/template/.hermes/skills/archify/test/generated-artifact-xml.test.mjs +0 -88
  778. package/template/.hermes/skills/archify/test/geometry.test.mjs +0 -739
  779. package/template/.hermes/skills/archify/test/golden.mjs +0 -207
  780. package/template/.hermes/skills/archify/test/grid.test.mjs +0 -47
  781. package/template/.hermes/skills/archify/test/guide-page.test.mjs +0 -59
  782. package/template/.hermes/skills/archify/test/guide.test.mjs +0 -81
  783. package/template/.hermes/skills/archify/test/guided-views.test.mjs +0 -144
  784. package/template/.hermes/skills/archify/test/helpers/xml.mjs +0 -37
  785. package/template/.hermes/skills/archify/test/i18n.test.mjs +0 -422
  786. package/template/.hermes/skills/archify/test/intent-trace.test.mjs +0 -111
  787. package/template/.hermes/skills/archify/test/landing.test.mjs +0 -97
  788. package/template/.hermes/skills/archify/test/layout-rules.test.mjs +0 -1449
  789. package/template/.hermes/skills/archify/test/legend-contract.test.mjs +0 -404
  790. package/template/.hermes/skills/archify/test/motion-governor.test.mjs +0 -111
  791. package/template/.hermes/skills/archify/test/open-artifact.test.mjs +0 -118
  792. package/template/.hermes/skills/archify/test/ordinary-model-floor.test.mjs +0 -1024
  793. package/template/.hermes/skills/archify/test/output-path.test.mjs +0 -587
  794. package/template/.hermes/skills/archify/test/presentation.test.mjs +0 -71
  795. package/template/.hermes/skills/archify/test/preset-tryon.test.mjs +0 -113
  796. package/template/.hermes/skills/archify/test/preview-contract.test.mjs +0 -40
  797. package/template/.hermes/skills/archify/test/preview.test.mjs +0 -499
  798. package/template/.hermes/skills/archify/test/proof-aperture.test.mjs +0 -78
  799. package/template/.hermes/skills/archify/test/reach-share-card.test.mjs +0 -149
  800. package/template/.hermes/skills/archify/test/readme-showcase.test.mjs +0 -318
  801. package/template/.hermes/skills/archify/test/real-repository-proof.test.mjs +0 -209
  802. package/template/.hermes/skills/archify/test/relationship-direct-explorer.test.mjs +0 -115
  803. package/template/.hermes/skills/archify/test/relationship-lens.test.mjs +0 -128
  804. package/template/.hermes/skills/archify/test/relationship-permalink.test.mjs +0 -130
  805. package/template/.hermes/skills/archify/test/relationship-pulse.test.mjs +0 -122
  806. package/template/.hermes/skills/archify/test/release-identity.test.mjs +0 -504
  807. package/template/.hermes/skills/archify/test/release-package-gates.test.mjs +0 -508
  808. package/template/.hermes/skills/archify/test/render-output-checks.test.mjs +0 -435
  809. package/template/.hermes/skills/archify/test/repair-receipt.test.mjs +0 -181
  810. package/template/.hermes/skills/archify/test/repository-evidence.test.mjs +0 -217
  811. package/template/.hermes/skills/archify/test/repository-language-metadata.test.mjs +0 -52
  812. package/template/.hermes/skills/archify/test/route-journey.test.mjs +0 -123
  813. package/template/.hermes/skills/archify/test/route-probe.test.mjs +0 -114
  814. package/template/.hermes/skills/archify/test/route-share-card.test.mjs +0 -163
  815. package/template/.hermes/skills/archify/test/semantic-camera.test.mjs +0 -88
  816. package/template/.hermes/skills/archify/test/semantic-flow.test.mjs +0 -90
  817. package/template/.hermes/skills/archify/test/semantic-legend-gateway.test.mjs +0 -156
  818. package/template/.hermes/skills/archify/test/semantic-lens.test.mjs +0 -103
  819. package/template/.hermes/skills/archify/test/semantic-passport.test.mjs +0 -99
  820. package/template/.hermes/skills/archify/test/semantic-radar.test.mjs +0 -575
  821. package/template/.hermes/skills/archify/test/semantic-zoom.test.mjs +0 -86
  822. package/template/.hermes/skills/archify/test/sequence-column-fit.test.mjs +0 -137
  823. package/template/.hermes/skills/archify/test/settled-flow.test.mjs +0 -97
  824. package/template/.hermes/skills/archify/test/share-card-export.test.mjs +0 -132
  825. package/template/.hermes/skills/archify/test/site-language-continuity.test.mjs +0 -562
  826. package/template/.hermes/skills/archify/test/site-language-integration.mjs +0 -9
  827. package/template/.hermes/skills/archify/test/skill-metadata.test.mjs +0 -84
  828. package/template/.hermes/skills/archify/test/stable-update-manifest.test.mjs +0 -167
  829. package/template/.hermes/skills/archify/test/start-page.test.mjs +0 -312
  830. package/template/.hermes/skills/archify/test/story-beat-navigator.test.mjs +0 -103
  831. package/template/.hermes/skills/archify/test/story-carrier.test.mjs +0 -90
  832. package/template/.hermes/skills/archify/test/story-director-strip.test.mjs +0 -91
  833. package/template/.hermes/skills/archify/test/story-follow-camera.test.mjs +0 -103
  834. package/template/.hermes/skills/archify/test/story-horizon.test.mjs +0 -89
  835. package/template/.hermes/skills/archify/test/story-moment-link.test.mjs +0 -93
  836. package/template/.hermes/skills/archify/test/story-shelf.test.mjs +0 -84
  837. package/template/.hermes/skills/archify/test/story-trail.test.mjs +0 -81
  838. package/template/.hermes/skills/archify/test/toolbar-polish.test.mjs +0 -57
  839. package/template/.hermes/skills/archify/test/update-contract.test.mjs +0 -133
  840. package/template/.hermes/skills/archify/test/update-notifier.test.mjs +0 -3317
  841. package/template/.hermes/skills/archify/test/v1-compatibility.test.mjs +0 -329
  842. package/template/.hermes/skills/archify/test/vertical-edge.test.mjs +0 -68
  843. package/template/.hermes/skills/archify/test/viewer-chrome-layout.test.mjs +0 -872
  844. package/template/.hermes/skills/archify/test/visual-check.test.mjs +0 -400
  845. package/template/.hermes/skills/archify/test/webm-artifact.smoke.mjs +0 -1840
  846. package/template/.hermes/skills/archify/test/workflow-compiler-hard-contract.test.mjs +0 -2135
  847. package/template/.hermes/skills/archify/test/workflow-compiler.test.mjs +0 -1163
  848. package/template/.hermes/skills/archify/test/workflow-migration.test.mjs +0 -620
  849. package/template/.hermes/skills/archify/test/workflow-semantic-contract.test.mjs +0 -131
  850. package/template/.hermes/skills/archify/test/yss-safe-deliver.test.mjs +0 -153
  851. package/template/.hermes/skills/ask-matt/PHASE-BOUNDARIES.md +0 -55
  852. package/template/.hermes/skills/ask-matt/SKILL.md +0 -95
  853. package/template/.hermes/skills/ask-matt/agents/openai.yaml +0 -5
  854. package/template/.hermes/skills/code-review/SKILL.md +0 -122
  855. package/template/.hermes/skills/code-review/agents/openai.yaml +0 -3
  856. package/template/.hermes/skills/code-review/references/yss-review-standards.md +0 -54
  857. package/template/.hermes/skills/codebase-design/DEEPENING.md +0 -37
  858. package/template/.hermes/skills/codebase-design/DESIGN-IT-TWICE.md +0 -44
  859. package/template/.hermes/skills/codebase-design/SKILL.md +0 -118
  860. package/template/.hermes/skills/codebase-design/agents/openai.yaml +0 -3
  861. package/template/.hermes/skills/competitive-intelligence/SKILL.md +0 -94
  862. package/template/.hermes/skills/component-selection-imports/SKILL.md +0 -64
  863. package/template/.hermes/skills/cross-repo-implementation-routing/SKILL.md +0 -51
  864. package/template/.hermes/skills/diagnosing-bugs/SKILL.md +0 -138
  865. package/template/.hermes/skills/diagnosing-bugs/agents/openai.yaml +0 -3
  866. package/template/.hermes/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +0 -44
  867. package/template/.hermes/skills/dispatching-parallel-agents/SKILL.md +0 -185
  868. package/template/.hermes/skills/domain-modeling/ADR-FORMAT.md +0 -47
  869. package/template/.hermes/skills/domain-modeling/CONTEXT-FORMAT.md +0 -60
  870. package/template/.hermes/skills/domain-modeling/SKILL.md +0 -74
  871. package/template/.hermes/skills/domain-modeling/agents/openai.yaml +0 -3
  872. package/template/.hermes/skills/file-export-download/SKILL.md +0 -160
  873. package/template/.hermes/skills/file-export-download/agents/openai.yaml +0 -4
  874. package/template/.hermes/skills/formily-foundation/SKILL.md +0 -176
  875. package/template/.hermes/skills/formily-foundation/references/examples.md +0 -486
  876. package/template/.hermes/skills/formily-linkage-effects/SKILL.md +0 -167
  877. package/template/.hermes/skills/formily-mode-slot-detail/SKILL.md +0 -137
  878. package/template/.hermes/skills/formily-step-flow/SKILL.md +0 -194
  879. package/template/.hermes/skills/frontend-commit/SKILL.md +0 -118
  880. package/template/.hermes/skills/frontend-commit/agents/openai.yaml +0 -7
  881. package/template/.hermes/skills/frontend-commit/references/scope-and-examples.md +0 -111
  882. package/template/.hermes/skills/grill-me/SKILL.md +0 -7
  883. package/template/.hermes/skills/grill-me/agents/openai.yaml +0 -5
  884. package/template/.hermes/skills/grill-with-docs/SKILL.md +0 -19
  885. package/template/.hermes/skills/grill-with-docs/agents/openai.yaml +0 -5
  886. package/template/.hermes/skills/grilling/SKILL.md +0 -28
  887. package/template/.hermes/skills/grilling/agents/openai.yaml +0 -3
  888. package/template/.hermes/skills/handoff/SKILL.md +0 -16
  889. package/template/.hermes/skills/handoff/agents/openai.yaml +0 -5
  890. package/template/.hermes/skills/implement/SKILL.md +0 -15
  891. package/template/.hermes/skills/implement/agents/openai.yaml +0 -5
  892. package/template/.hermes/skills/implementation-repo-onboarding/SKILL.md +0 -50
  893. package/template/.hermes/skills/improve-codebase-architecture/HTML-REPORT.md +0 -123
  894. package/template/.hermes/skills/improve-codebase-architecture/SKILL.md +0 -71
  895. package/template/.hermes/skills/improve-codebase-architecture/agents/openai.yaml +0 -5
  896. package/template/.hermes/skills/java-backend-commit/SKILL.md +0 -121
  897. package/template/.hermes/skills/java-backend-commit/agents/openai.yaml +0 -7
  898. package/template/.hermes/skills/java-backend-commit/references/scope-and-examples.md +0 -118
  899. package/template/.hermes/skills/llm-wiki/SKILL.md +0 -60
  900. package/template/.hermes/skills/llm-wiki/assets/CLAUDE.md.template +0 -26
  901. package/template/.hermes/skills/llm-wiki/assets/fixtures/broken-wiki/wiki/CLAUDE.md +0 -3
  902. package/template/.hermes/skills/llm-wiki/assets/fixtures/broken-wiki/wiki/index.md +0 -5
  903. package/template/.hermes/skills/llm-wiki/assets/fixtures/broken-wiki/wiki/log.md +0 -1
  904. package/template/.hermes/skills/llm-wiki/assets/fixtures/broken-wiki/wiki//345/255/230/345/234/250/347/232/204/351/241/265.md +0 -7
  905. package/template/.hermes/skills/llm-wiki/references/compile.md +0 -126
  906. package/template/.hermes/skills/llm-wiki/references/discover.md +0 -42
  907. package/template/.hermes/skills/llm-wiki/references/ingest.md +0 -36
  908. package/template/.hermes/skills/llm-wiki/references/lint.md +0 -54
  909. package/template/.hermes/skills/llm-wiki/references/query.md +0 -21
  910. package/template/.hermes/skills/llm-wiki/references/schema.md +0 -45
  911. package/template/.hermes/skills/llm-wiki/references/writing.md +0 -35
  912. package/template/.hermes/skills/llm-wiki/scripts/advise.mjs +0 -196
  913. package/template/.hermes/skills/llm-wiki/scripts/advise.test.mjs +0 -91
  914. package/template/.hermes/skills/llm-wiki/scripts/extract.mjs +0 -55
  915. package/template/.hermes/skills/llm-wiki/scripts/extract.test.mjs +0 -34
  916. package/template/.hermes/skills/llm-wiki/scripts/inventory.mjs +0 -174
  917. package/template/.hermes/skills/llm-wiki/scripts/inventory.test.mjs +0 -98
  918. package/template/.hermes/skills/llm-wiki/scripts/lint-wikilinks.mjs +0 -177
  919. package/template/.hermes/skills/llm-wiki/scripts/lint-wikilinks.test.mjs +0 -212
  920. package/template/.hermes/skills/lombok/SKILL.md +0 -351
  921. package/template/.hermes/skills/loop-me/SKILL.md +0 -32
  922. package/template/.hermes/skills/loop-me/agents/openai.yaml +0 -5
  923. package/template/.hermes/skills/maintaining-skills/SKILL.md +0 -27
  924. package/template/.hermes/skills/mapstruct/SKILL.md +0 -334
  925. package/template/.hermes/skills/migrate-to-shoehorn/SKILL.md +0 -118
  926. package/template/.hermes/skills/migrate-to-shoehorn/agents/openai.yaml +0 -3
  927. package/template/.hermes/skills/page-form-module/SKILL.md +0 -168
  928. package/template/.hermes/skills/page-list-module/SKILL.md +0 -137
  929. package/template/.hermes/skills/page-skeleton/SKILL.md +0 -76
  930. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +0 -34
  931. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -75
  932. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/index.vue +0 -107
  933. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
  934. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/style.less +0 -30
  935. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/constant.ts +0 -28
  936. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -58
  937. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +0 -65
  938. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/index.vue +0 -91
  939. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/style.less +0 -49
  940. package/template/.hermes/skills/prototype/LOGIC.md +0 -67
  941. package/template/.hermes/skills/prototype/SKILL.md +0 -26
  942. package/template/.hermes/skills/prototype/UI.md +0 -112
  943. package/template/.hermes/skills/prototype/agents/openai.yaml +0 -3
  944. package/template/.hermes/skills/prototype-page-acceptance/SKILL.md +0 -62
  945. package/template/.hermes/skills/prototype-review/SKILL.md +0 -74
  946. package/template/.hermes/skills/prototype-review/agents/openai.yaml +0 -4
  947. package/template/.hermes/skills/resolving-merge-conflicts/SKILL.md +0 -14
  948. package/template/.hermes/skills/resolving-merge-conflicts/agents/openai.yaml +0 -3
  949. package/template/.hermes/skills/scaffold-exercises/SKILL.md +0 -106
  950. package/template/.hermes/skills/scaffold-exercises/agents/openai.yaml +0 -3
  951. package/template/.hermes/skills/setup-matt-pocock-skills/SKILL.md +0 -125
  952. package/template/.hermes/skills/setup-matt-pocock-skills/agents/openai.yaml +0 -5
  953. package/template/.hermes/skills/setup-matt-pocock-skills/domain.md +0 -51
  954. package/template/.hermes/skills/setup-matt-pocock-skills/issue-tracker-github.md +0 -45
  955. package/template/.hermes/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +0 -46
  956. package/template/.hermes/skills/setup-matt-pocock-skills/issue-tracker-local.md +0 -66
  957. package/template/.hermes/skills/setup-matt-pocock-skills/triage-labels.md +0 -15
  958. package/template/.hermes/skills/setup-pre-commit/SKILL.md +0 -91
  959. package/template/.hermes/skills/setup-pre-commit/agents/openai.yaml +0 -3
  960. package/template/.hermes/skills/setup-ts-deep-modules/SKILL.md +0 -102
  961. package/template/.hermes/skills/setup-ts-deep-modules/agents/openai.yaml +0 -5
  962. package/template/.hermes/skills/setup-ts-deep-modules/dependency-cruiser.config.cjs +0 -95
  963. package/template/.hermes/skills/tdd/SKILL.md +0 -38
  964. package/template/.hermes/skills/tdd/agents/openai.yaml +0 -3
  965. package/template/.hermes/skills/tdd/mocking.md +0 -59
  966. package/template/.hermes/skills/tdd/tests.md +0 -77
  967. package/template/.hermes/skills/teach/GLOSSARY-FORMAT.md +0 -35
  968. package/template/.hermes/skills/teach/LEARNING-RECORD-FORMAT.md +0 -46
  969. package/template/.hermes/skills/teach/MISSION-FORMAT.md +0 -31
  970. package/template/.hermes/skills/teach/RESOURCES-FORMAT.md +0 -32
  971. package/template/.hermes/skills/teach/SKILL.md +0 -140
  972. package/template/.hermes/skills/teach/agents/openai.yaml +0 -5
  973. package/template/.hermes/skills/theme-token-usage/SKILL.md +0 -123
  974. package/template/.hermes/skills/theme-token-usage/agents/openai.yaml +0 -4
  975. package/template/.hermes/skills/to-questionnaire/SKILL.md +0 -53
  976. package/template/.hermes/skills/to-questionnaire/agents/openai.yaml +0 -5
  977. package/template/.hermes/skills/to-spec/SKILL.md +0 -75
  978. package/template/.hermes/skills/to-spec/agents/openai.yaml +0 -5
  979. package/template/.hermes/skills/to-tickets/SKILL.md +0 -105
  980. package/template/.hermes/skills/to-tickets/agents/openai.yaml +0 -5
  981. package/template/.hermes/skills/triage/AGENT-BRIEF.md +0 -207
  982. package/template/.hermes/skills/triage/OUT-OF-SCOPE.md +0 -105
  983. package/template/.hermes/skills/triage/SKILL.md +0 -112
  984. package/template/.hermes/skills/triage/agents/openai.yaml +0 -5
  985. package/template/.hermes/skills/using-git-worktrees/SKILL.md +0 -202
  986. package/template/.hermes/skills/vue3-best-practices/SKILL.md +0 -68
  987. package/template/.hermes/skills/wait-what/SKILL.md +0 -7
  988. package/template/.hermes/skills/wait-what/agents/openai.yaml +0 -5
  989. package/template/.hermes/skills/wayfinder/SKILL.md +0 -128
  990. package/template/.hermes/skills/wayfinder/agents/openai.yaml +0 -5
  991. package/template/.hermes/skills/writing-beats/SKILL.md +0 -67
  992. package/template/.hermes/skills/writing-beats/agents/openai.yaml +0 -5
  993. package/template/.hermes/skills/writing-for-agents/SKILL-MECHANICS.md +0 -22
  994. package/template/.hermes/skills/writing-for-agents/SKILL.md +0 -81
  995. package/template/.hermes/skills/writing-for-agents/agents/openai.yaml +0 -3
  996. package/template/.hermes/skills/writing-fragments/SKILL.md +0 -79
  997. package/template/.hermes/skills/writing-fragments/agents/openai.yaml +0 -5
  998. package/template/.hermes/skills/writing-shape/SKILL.md +0 -79
  999. package/template/.hermes/skills/writing-shape/agents/openai.yaml +0 -5
  1000. package/template/.hermes/skills/yedit-table-usage/SKILL.md +0 -227
  1001. package/template/.hermes/skills/yss-antd-design/SKILL.md +0 -34
  1002. package/template/.hermes/skills/yss-antd-design/references/boundaries.md +0 -30
  1003. package/template/.hermes/skills/yss-antd-design/references/cli-matrix.md +0 -38
  1004. package/template/.hermes/skills/yss-antd-design/references/evidence.md +0 -30
  1005. package/template/.hermes/skills/yss-antd-design/scripts/validate-frontmatter.mjs +0 -46
  1006. package/template/.hermes/skills/yss-antd-design/scripts/validate-frontmatter.test.mjs +0 -27
  1007. package/template/.hermes/skills/yss-api-integration/SKILL.md +0 -185
  1008. package/template/.hermes/skills/yss-api-integration/agents/openai.yaml +0 -5
  1009. package/template/.hermes/skills/yss-application/SKILL.md +0 -54
  1010. package/template/.hermes/skills/yss-application/agents/openai.yaml +0 -5
  1011. package/template/.hermes/skills/yss-application/references/application-layer-guide.md +0 -87
  1012. package/template/.hermes/skills/yss-audit-log/SKILL.md +0 -67
  1013. package/template/.hermes/skills/yss-audit-log/agents/openai.yaml +0 -5
  1014. package/template/.hermes/skills/yss-audit-log/assets/AuditLogAspect.java +0 -262
  1015. package/template/.hermes/skills/yss-audit-log/assets/YssAuditLogPrintSubscriberImpl.java +0 -37
  1016. package/template/.hermes/skills/yss-audit-log/assets/YssAuditLogSysManagerSubscriberImpl.java +0 -18
  1017. package/template/.hermes/skills/yss-audit-log/assets/YssAuditPublishService.java +0 -69
  1018. package/template/.hermes/skills/yss-audit-log/references/README.md +0 -69
  1019. package/template/.hermes/skills/yss-audit-log/references/source-index.md +0 -43
  1020. package/template/.hermes/skills/yss-cache/SKILL.md +0 -44
  1021. package/template/.hermes/skills/yss-cache/agents/openai.yaml +0 -5
  1022. package/template/.hermes/skills/yss-cache/references/annotations.md +0 -39
  1023. package/template/.hermes/skills/yss-cache/references/architecture.md +0 -25
  1024. package/template/.hermes/skills/yss-cache/references/configuration.md +0 -34
  1025. package/template/.hermes/skills/yss-cache/references/redis-fallback.md +0 -23
  1026. package/template/.hermes/skills/yss-cache/references/redis-topology.md +0 -62
  1027. package/template/.hermes/skills/yss-cache/references/serialization.md +0 -17
  1028. package/template/.hermes/skills/yss-cache/references/source-index.md +0 -67
  1029. package/template/.hermes/skills/yss-cache/references/troubleshooting.md +0 -33
  1030. package/template/.hermes/skills/yss-cache/references/verification.md +0 -34
  1031. package/template/.hermes/skills/yss-cache/scripts/check-skill-freshness.sh +0 -84
  1032. package/template/.hermes/skills/yss-cache/scripts/inspect-cache-usage.sh +0 -96
  1033. package/template/.hermes/skills/yss-cache/scripts/verify-cache-component.sh +0 -101
  1034. package/template/.hermes/skills/yss-components/SKILL.md +0 -386
  1035. package/template/.hermes/skills/yss-components/agents/openai.yaml +0 -5
  1036. package/template/.hermes/skills/yss-components/references/frontend-docs.md +0 -9
  1037. package/template/.hermes/skills/yss-ddd-scaffold-generator/SKILL.md +0 -121
  1038. package/template/.hermes/skills/yss-ddd-scaffold-generator/agents/openai.yaml +0 -5
  1039. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/config/application-local.yml.template +0 -8
  1040. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +0 -36
  1041. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/config/logback-spring.xml.template +0 -15
  1042. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +0 -36
  1043. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/java/bootstrap-application.java.template +0 -15
  1044. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/adapter-pom.xml.template +0 -19
  1045. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +0 -52
  1046. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +0 -70
  1047. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/domain-pom.xml.template +0 -22
  1048. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/infrastructure-pom.xml.template +0 -54
  1049. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +0 -155
  1050. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +0 -58
  1051. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/jvm.config +0 -1
  1052. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/maven.config +0 -2
  1053. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/settings.xml +0 -41
  1054. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/MavenWrapperDownloader.java +0 -117
  1055. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.jar +0 -0
  1056. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.properties +0 -20
  1057. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/mvnw +0 -316
  1058. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/mvnw.cmd +0 -188
  1059. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +0 -116
  1060. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +0 -125
  1061. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +0 -31
  1062. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/agents/openai.yaml +0 -5
  1063. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/SKILL.md +0 -8
  1064. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/agents/openai.yaml +0 -5
  1065. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/SKILL.md +0 -8
  1066. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/agents/openai.yaml +0 -5
  1067. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/SKILL.md +0 -8
  1068. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/agents/openai.yaml +0 -5
  1069. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +0 -58
  1070. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/agents/openai.yaml +0 -5
  1071. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/SKILL.md +0 -8
  1072. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/agents/openai.yaml +0 -5
  1073. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +0 -225
  1074. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +0 -164
  1075. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +0 -126
  1076. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +0 -363
  1077. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +0 -172
  1078. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +0 -112
  1079. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +0 -401
  1080. package/template/.hermes/skills/yss-design-system/SKILL.md +0 -105
  1081. package/template/.hermes/skills/yss-design-system/agents/openai.yaml +0 -5
  1082. package/template/.hermes/skills/yss-design-system/references/design-qa-theme.md +0 -64
  1083. package/template/.hermes/skills/yss-design-system/references/design-system.md +0 -245
  1084. package/template/.hermes/skills/yss-design-system/scripts/validate-frontmatter.mjs +0 -36
  1085. package/template/.hermes/skills/yss-design-system/scripts/validate-frontmatter.test.mjs +0 -12
  1086. package/template/.hermes/skills/yss-distributed-id/SKILL.md +0 -69
  1087. package/template/.hermes/skills/yss-distributed-id/agents/openai.yaml +0 -5
  1088. package/template/.hermes/skills/yss-distributed-id/assets/AutoIdInterceptor.java +0 -246
  1089. package/template/.hermes/skills/yss-distributed-id/assets/EnableDistributedId.java +0 -25
  1090. package/template/.hermes/skills/yss-distributed-id/assets/LeafConf.java +0 -36
  1091. package/template/.hermes/skills/yss-distributed-id/references/README.md +0 -51
  1092. package/template/.hermes/skills/yss-distributed-id/references/source-index.md +0 -86
  1093. package/template/.hermes/skills/yss-domain/SKILL.md +0 -70
  1094. package/template/.hermes/skills/yss-domain/agents/openai.yaml +0 -5
  1095. package/template/.hermes/skills/yss-domain/references/domain-layer-guide.md +0 -101
  1096. package/template/.hermes/skills/yss-dto/SKILL.md +0 -92
  1097. package/template/.hermes/skills/yss-dto/agents/openai.yaml +0 -5
  1098. package/template/.hermes/skills/yss-dto/assets/CommandDTO.java +0 -8
  1099. package/template/.hermes/skills/yss-dto/assets/PageQuery.java +0 -133
  1100. package/template/.hermes/skills/yss-dto/assets/QueryDTO.java +0 -6
  1101. package/template/.hermes/skills/yss-dto/assets/Result.java +0 -105
  1102. package/template/.hermes/skills/yss-dto/references/README.md +0 -67
  1103. package/template/.hermes/skills/yss-dto/references/openapi-wire-profile.yaml +0 -187
  1104. package/template/.hermes/skills/yss-dto/references/source-index.md +0 -55
  1105. package/template/.hermes/skills/yss-excel-mvc/SKILL.md +0 -66
  1106. package/template/.hermes/skills/yss-excel-mvc/agents/openai.yaml +0 -5
  1107. package/template/.hermes/skills/yss-excel-mvc/assets/ExcelDynamicData.java +0 -66
  1108. package/template/.hermes/skills/yss-excel-mvc/assets/RequestExcel.java +0 -33
  1109. package/template/.hermes/skills/yss-excel-mvc/assets/RequestFastExcelArgumentResolver.java +0 -272
  1110. package/template/.hermes/skills/yss-excel-mvc/assets/ResponseExcel.java +0 -46
  1111. package/template/.hermes/skills/yss-excel-mvc/assets/ResponseFastExcelReturnValueHandler.java +0 -154
  1112. package/template/.hermes/skills/yss-excel-mvc/references/README.md +0 -5
  1113. package/template/.hermes/skills/yss-excel-mvc/references/source-index.md +0 -74
  1114. package/template/.hermes/skills/yss-exception/SKILL.md +0 -57
  1115. package/template/.hermes/skills/yss-exception/agents/openai.yaml +0 -4
  1116. package/template/.hermes/skills/yss-exception/references/source-index.md +0 -35
  1117. package/template/.hermes/skills/yss-formily/SKILL.md +0 -272
  1118. package/template/.hermes/skills/yss-formily-schema-generator/SKILL.md +0 -189
  1119. package/template/.hermes/skills/yss-formily-schema-generator/agents/openai.yaml +0 -5
  1120. package/template/.hermes/skills/yss-formily-schema-generator/assets/java-sdk/ExampleUsage.java +0 -111
  1121. package/template/.hermes/skills/yss-formily-schema-generator/assets/java-sdk/YssFormilyDsl.java +0 -1219
  1122. package/template/.hermes/skills/yss-formily-schema-generator/references/workflow.md +0 -240
  1123. package/template/.hermes/skills/yss-frontend-scaffold-generator/SKILL.md +0 -76
  1124. package/template/.hermes/skills/yss-hook/SKILL.md +0 -200
  1125. package/template/.hermes/skills/yss-hook/agents/openai.yaml +0 -5
  1126. package/template/.hermes/skills/yss-hook/references/frontend-docs.md +0 -10
  1127. package/template/.hermes/skills/yss-microapp-commit/SKILL.md +0 -201
  1128. package/template/.hermes/skills/yss-microapp-commit/agents/openai.yaml +0 -5
  1129. package/template/.hermes/skills/yss-microapp-commit/references/scope-mapping.md +0 -204
  1130. package/template/.hermes/skills/yss-mybatis/SKILL.md +0 -77
  1131. package/template/.hermes/skills/yss-mybatis/agents/openai.yaml +0 -5
  1132. package/template/.hermes/skills/yss-mybatis/assets/BaseRepository.java +0 -112
  1133. package/template/.hermes/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
  1134. package/template/.hermes/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
  1135. package/template/.hermes/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
  1136. package/template/.hermes/skills/yss-mybatis/references/README.md +0 -57
  1137. package/template/.hermes/skills/yss-mybatis/references/source-index.md +0 -93
  1138. package/template/.hermes/skills/yss-openapi-draft-review/SKILL.md +0 -82
  1139. package/template/.hermes/skills/yss-openapi-governance/SKILL.md +0 -130
  1140. package/template/.hermes/skills/yss-openapi-governance/agents/openai.yaml +0 -4
  1141. package/template/.hermes/skills/yss-page-module-development/SKILL.md +0 -165
  1142. package/template/.hermes/skills/yss-page-module-development/agents/openai.yaml +0 -5
  1143. package/template/.hermes/skills/yss-page-module-development/examples/AdvancedFormPage/constant.ts +0 -32
  1144. package/template/.hermes/skills/yss-page-module-development/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -158
  1145. package/template/.hermes/skills/yss-page-module-development/examples/AdvancedFormPage/index.vue +0 -188
  1146. package/template/.hermes/skills/yss-page-module-development/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
  1147. package/template/.hermes/skills/yss-page-module-development/examples/AdvancedFormPage/style.less +0 -76
  1148. package/template/.hermes/skills/yss-page-module-development/examples/StandardListPage/constant.ts +0 -128
  1149. package/template/.hermes/skills/yss-page-module-development/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -144
  1150. package/template/.hermes/skills/yss-page-module-development/examples/StandardListPage/hooks/useRuleActions.ts +0 -141
  1151. package/template/.hermes/skills/yss-page-module-development/examples/StandardListPage/index.vue +0 -175
  1152. package/template/.hermes/skills/yss-page-module-development/examples/StandardListPage/style.less +0 -83
  1153. package/template/.hermes/skills/yss-page-module-development/references/component-map.md +0 -34
  1154. package/template/.hermes/skills/yss-page-module-development/references/frontend-docs.md +0 -11
  1155. package/template/.hermes/skills/yss-page-module-development/references/hooks-map.md +0 -11
  1156. package/template/.hermes/skills/yss-page-module-development/references/utils-map.md +0 -14
  1157. package/template/.hermes/skills/yss-product-lifecycle/SKILL.md +0 -52
  1158. package/template/.hermes/skills/yss-product-lifecycle/agents/openai.yaml +0 -4
  1159. package/template/.hermes/skills/yss-product-lifecycle/references/artifact-dependencies.md +0 -36
  1160. package/template/.hermes/skills/yss-product-lifecycle/references/matt-yss-adapter.md +0 -122
  1161. package/template/.hermes/skills/yss-product-lifecycle/references/orchestration-contract.yaml +0 -865
  1162. package/template/.hermes/skills/yss-product-lifecycle/references/orchestration.md +0 -116
  1163. package/template/.hermes/skills/yss-product-lifecycle/references/state-model.md +0 -112
  1164. package/template/.hermes/skills/yss-prototype-stage/SKILL.md +0 -47
  1165. package/template/.hermes/skills/yss-prototype-stage/references/product-design-adapter.md +0 -54
  1166. package/template/.hermes/skills/yss-prototype-stage/scripts/prototype-contract.mjs +0 -207
  1167. package/template/.hermes/skills/yss-prototype-stage/tests/run-scenarios.mjs +0 -154
  1168. package/template/.hermes/skills/yss-repository/SKILL.md +0 -80
  1169. package/template/.hermes/skills/yss-repository/agents/openai.yaml +0 -5
  1170. package/template/.hermes/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
  1171. package/template/.hermes/skills/yss-research/SKILL.md +0 -73
  1172. package/template/.hermes/skills/yss-research/agents/openai.yaml +0 -3
  1173. package/template/.hermes/skills/yss-research/assets/evidence-template.yaml +0 -68
  1174. package/template/.hermes/skills/yss-research/assets/research-brief-template.md +0 -36
  1175. package/template/.hermes/skills/yss-research/references/evidence-contract.md +0 -42
  1176. package/template/.hermes/skills/yss-research/scripts/validate-research-package.mjs +0 -128
  1177. package/template/.hermes/skills/yss-research/tests/run-scenarios.mjs +0 -81
  1178. package/template/.hermes/skills/yss-resilience4j/SKILL.md +0 -46
  1179. package/template/.hermes/skills/yss-resilience4j/agents/openai.yaml +0 -4
  1180. package/template/.hermes/skills/yss-resilience4j/references/source-index.md +0 -33
  1181. package/template/.hermes/skills/yss-router/SKILL.md +0 -51
  1182. package/template/.hermes/skills/yss-router/agents/openai.yaml +0 -4
  1183. package/template/.hermes/skills/yss-router/references/boundaries.md +0 -50
  1184. package/template/.hermes/skills/yss-router/references/router-contract.yaml +0 -349
  1185. package/template/.hermes/skills/yss-router/references/slice-implementation-contract.md +0 -185
  1186. package/template/.hermes/skills/yss-router/references/yss-skill-execution-result.md +0 -67
  1187. package/template/.hermes/skills/yss-security-algorithm/SKILL.md +0 -52
  1188. package/template/.hermes/skills/yss-security-algorithm/agents/openai.yaml +0 -4
  1189. package/template/.hermes/skills/yss-security-algorithm/references/source-index.md +0 -35
  1190. package/template/.hermes/skills/yss-source-index/SKILL.md +0 -63
  1191. package/template/.hermes/skills/yss-source-index/agents/openai.yaml +0 -4
  1192. package/template/.hermes/skills/yss-source-index/scripts/refresh-yss-skill-index.mjs +0 -24
  1193. package/template/.hermes/skills/yss-stage-decision/SKILL.md +0 -51
  1194. package/template/.hermes/skills/yss-stage-decision/references/domain-strategy-contract.md +0 -26
  1195. package/template/.hermes/skills/yss-stage-decision/references/domain-strategy.schema.json +0 -128
  1196. package/template/.hermes/skills/yss-stage-decision/references/stage-decision-package-contract.md +0 -19
  1197. package/template/.hermes/skills/yss-stage-decision/references/stage-decision-package.schema.json +0 -86
  1198. package/template/.hermes/skills/yss-stage-decision/references/validation-rules.md +0 -18
  1199. package/template/.hermes/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +0 -169
  1200. package/template/.hermes/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +0 -100
  1201. package/template/.hermes/skills/yss-stage-decision/tests/fixtures/domain-strategy-approval.yaml +0 -15
  1202. package/template/.hermes/skills/yss-stage-decision/tests/fixtures/invalid-direction.yaml +0 -58
  1203. package/template/.hermes/skills/yss-stage-decision/tests/fixtures/invalid-stage-decision-blocker.yaml +0 -44
  1204. package/template/.hermes/skills/yss-stage-decision/tests/fixtures/stage-decision-approval.yaml +0 -15
  1205. package/template/.hermes/skills/yss-stage-decision/tests/fixtures/valid-stage-decision-package.yaml +0 -49
  1206. package/template/.hermes/skills/yss-stage-decision/tests/fixtures/valid-supplier-domain.yaml +0 -108
  1207. package/template/.hermes/skills/yss-stage-decision/tests/run-scenarios.mjs +0 -68
  1208. package/template/.hermes/skills/yss-tactical-design/SKILL.md +0 -35
  1209. package/template/.hermes/skills/yss-tactical-design/agents/openai.yaml +0 -4
  1210. package/template/.hermes/skills/yss-tactical-design/references/output-template.md +0 -28
  1211. package/template/.hermes/skills/yss-tactical-design/references/tactical-design-contract.md +0 -41
  1212. package/template/.hermes/skills/yss-tactical-design/references/tactical-design.schema.json +0 -31
  1213. package/template/.hermes/skills/yss-tactical-design/references/validation-rules.md +0 -13
  1214. package/template/.hermes/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +0 -213
  1215. package/template/.hermes/skills/yss-tactical-design/tests/fixtures/invalid-api-leaks-aggregate.yaml +0 -21
  1216. package/template/.hermes/skills/yss-tactical-design/tests/fixtures/invalid-missing-consistency-policy.yaml +0 -21
  1217. package/template/.hermes/skills/yss-tactical-design/tests/fixtures/invalid-missing-invariant.yaml +0 -21
  1218. package/template/.hermes/skills/yss-tactical-design/tests/fixtures/invalid-stale-upstream-ref.yaml +0 -21
  1219. package/template/.hermes/skills/yss-tactical-design/tests/fixtures/invalid-strategic-as-tactical.yaml +0 -21
  1220. package/template/.hermes/skills/yss-tactical-design/tests/fixtures/valid-tactical-design.yaml +0 -80
  1221. package/template/.hermes/skills/yss-tactical-design/tests/run-scenarios.mjs +0 -47
  1222. package/template/.hermes/skills/yss-ui/SKILL.md +0 -170
  1223. package/template/.hermes/skills/yss-ui/agents/openai.yaml +0 -5
  1224. package/template/.hermes/skills/yss-ui/assets/demos/button/auth-basic.vue +0 -24
  1225. package/template/.hermes/skills/yss-ui/assets/demos/button/auth-dropdown.vue +0 -29
  1226. package/template/.hermes/skills/yss-ui/assets/demos/button/permission.vue +0 -10
  1227. package/template/.hermes/skills/yss-ui/assets/demos/button/size.vue +0 -12
  1228. package/template/.hermes/skills/yss-ui/assets/demos/button/states.vue +0 -12
  1229. package/template/.hermes/skills/yss-ui/assets/demos/card/basic/index.vue +0 -54
  1230. package/template/.hermes/skills/yss-ui/assets/demos/card/basic/style.less +0 -41
  1231. package/template/.hermes/skills/yss-ui/assets/demos/card/cover/index.vue +0 -25
  1232. package/template/.hermes/skills/yss-ui/assets/demos/card/flexible-layout/index.vue +0 -122
  1233. package/template/.hermes/skills/yss-ui/assets/demos/card/flexible-layout/style.less +0 -191
  1234. package/template/.hermes/skills/yss-ui/assets/demos/card/header-extra/index.vue +0 -260
  1235. package/template/.hermes/skills/yss-ui/assets/demos/card/header-extra/style.less +0 -124
  1236. package/template/.hermes/skills/yss-ui/assets/demos/card/layout-metrics/constants.ts +0 -61
  1237. package/template/.hermes/skills/yss-ui/assets/demos/card/layout-metrics/index.vue +0 -72
  1238. package/template/.hermes/skills/yss-ui/assets/demos/card/layout-metrics/metrics-cards.vue +0 -70
  1239. package/template/.hermes/skills/yss-ui/assets/demos/card/layout-metrics/style.less +0 -232
  1240. package/template/.hermes/skills/yss-ui/assets/demos/card/loading/index.vue +0 -19
  1241. package/template/.hermes/skills/yss-ui/assets/demos/card/meta/index.vue +0 -19
  1242. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/basic/constants.ts +0 -44
  1243. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/basic/hooks/useConditionBasic.ts +0 -18
  1244. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/basic/index.vue +0 -100
  1245. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/linked/constants.ts +0 -51
  1246. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/linked/hooks/useConditionLinked.ts +0 -29
  1247. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/linked/index.vue +0 -23
  1248. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/nesting-between/constants.ts +0 -35
  1249. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/nesting-between/hooks/useConditionNesting.ts +0 -25
  1250. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/nesting-between/index.vue +0 -24
  1251. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/remote/constants.ts +0 -7
  1252. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/remote/hooks/useConditionRemote.ts +0 -75
  1253. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/remote/index.vue +0 -23
  1254. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/validation/constants.ts +0 -42
  1255. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/validation/hooks/useConditionBasic.ts +0 -22
  1256. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/validation/index.vue +0 -138
  1257. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/validation-custom/constants.ts +0 -42
  1258. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/validation-custom/hooks/useConditionBasic.ts +0 -22
  1259. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/validation-custom/index.vue +0 -134
  1260. package/template/.hermes/skills/yss-ui/assets/demos/cron/basic/index.vue +0 -54
  1261. package/template/.hermes/skills/yss-ui/assets/demos/cron/select/index.vue +0 -145
  1262. package/template/.hermes/skills/yss-ui/assets/demos/echarts/basic.vue +0 -30
  1263. package/template/.hermes/skills/yss-ui/assets/demos/echarts/calendar-heatmap.vue +0 -49
  1264. package/template/.hermes/skills/yss-ui/assets/demos/echarts/candlestick.vue +0 -30
  1265. package/template/.hermes/skills/yss-ui/assets/demos/echarts/dark.vue +0 -40
  1266. package/template/.hermes/skills/yss-ui/assets/demos/echarts/expose-methods.vue +0 -97
  1267. package/template/.hermes/skills/yss-ui/assets/demos/echarts/funnel.vue +0 -42
  1268. package/template/.hermes/skills/yss-ui/assets/demos/echarts/gauge.vue +0 -25
  1269. package/template/.hermes/skills/yss-ui/assets/demos/echarts/line.vue +0 -24
  1270. package/template/.hermes/skills/yss-ui/assets/demos/echarts/mix.vue +0 -33
  1271. package/template/.hermes/skills/yss-ui/assets/demos/echarts/pie.vue +0 -34
  1272. package/template/.hermes/skills/yss-ui/assets/demos/echarts/radar.vue +0 -38
  1273. package/template/.hermes/skills/yss-ui/assets/demos/echarts/ring-segment.vue +0 -77
  1274. package/template/.hermes/skills/yss-ui/assets/demos/echarts/scatter.vue +0 -23
  1275. package/template/.hermes/skills/yss-ui/assets/demos/echarts/stacked-area.vue +0 -55
  1276. package/template/.hermes/skills/yss-ui/assets/demos/echarts/stacked-bar.vue +0 -52
  1277. package/template/.hermes/skills/yss-ui/assets/demos/echarts/treemap.vue +0 -30
  1278. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/all-types/hooks/useAllTypes.ts +0 -259
  1279. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/all-types/index.vue +0 -33
  1280. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/async-remote/hooks/useAsyncRemote.ts +0 -201
  1281. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/async-remote/index.vue +0 -45
  1282. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/basic/index.vue +0 -104
  1283. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/big-data/index.vue +0 -82
  1284. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/custom-rule/index.vue +0 -114
  1285. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/direct-editable/index.vue +0 -94
  1286. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/drag/index.vue +0 -125
  1287. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/filter/index.vue +0 -107
  1288. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/linkage/index.vue +0 -181
  1289. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/pagination-action/index.vue +0 -131
  1290. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/required/index.vue +0 -95
  1291. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/row-edit/index.vue +0 -220
  1292. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/row-options/index.vue +0 -165
  1293. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/slot-linkage/index.vue +0 -184
  1294. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/submit-view/index.vue +0 -107
  1295. package/template/.hermes/skills/yss-ui/assets/demos/file-import/basic.vue +0 -54
  1296. package/template/.hermes/skills/yss-ui/assets/demos/file-import/formily.vue +0 -42
  1297. package/template/.hermes/skills/yss-ui/assets/demos/file-import/multiple.vue +0 -33
  1298. package/template/.hermes/skills/yss-ui/assets/demos/file-import/result-slot.vue +0 -30
  1299. package/template/.hermes/skills/yss-ui/assets/demos/formily/actions.vue +0 -61
  1300. package/template/.hermes/skills/yss-ui/assets/demos/formily/align.vue +0 -56
  1301. package/template/.hermes/skills/yss-ui/assets/demos/formily/async-validate.vue +0 -69
  1302. package/template/.hermes/skills/yss-ui/assets/demos/formily/basic.vue +0 -317
  1303. package/template/.hermes/skills/yss-ui/assets/demos/formily/collapse.vue +0 -104
  1304. package/template/.hermes/skills/yss-ui/assets/demos/formily/custom-component.vue +0 -75
  1305. package/template/.hermes/skills/yss-ui/assets/demos/formily/disabled.vue +0 -71
  1306. package/template/.hermes/skills/yss-ui/assets/demos/formily/dynamic-array.vue +0 -74
  1307. package/template/.hermes/skills/yss-ui/assets/demos/formily/dynamic.vue +0 -59
  1308. package/template/.hermes/skills/yss-ui/assets/demos/formily/effects.vue +0 -117
  1309. package/template/.hermes/skills/yss-ui/assets/demos/formily/events-inline.vue +0 -82
  1310. package/template/.hermes/skills/yss-ui/assets/demos/formily/events-scope.vue +0 -101
  1311. package/template/.hermes/skills/yss-ui/assets/demos/formily/grid.vue +0 -71
  1312. package/template/.hermes/skills/yss-ui/assets/demos/formily/group.vue +0 -102
  1313. package/template/.hermes/skills/yss-ui/assets/demos/formily/helper-slot.vue +0 -50
  1314. package/template/.hermes/skills/yss-ui/assets/demos/formily/label-tip.vue +0 -42
  1315. package/template/.hermes/skills/yss-ui/assets/demos/formily/linkage-multi.vue +0 -127
  1316. package/template/.hermes/skills/yss-ui/assets/demos/formily/linkage.vue +0 -78
  1317. package/template/.hermes/skills/yss-ui/assets/demos/formily/modes.vue +0 -72
  1318. package/template/.hermes/skills/yss-ui/assets/demos/formily/remote-enum.vue +0 -88
  1319. package/template/.hermes/skills/yss-ui/assets/demos/formily/slot.vue +0 -54
  1320. package/template/.hermes/skills/yss-ui/assets/demos/formily/steps.vue +0 -135
  1321. package/template/.hermes/skills/yss-ui/assets/demos/formily/submit-failed.vue +0 -72
  1322. package/template/.hermes/skills/yss-ui/assets/demos/monaco/basic.vue +0 -40
  1323. package/template/.hermes/skills/yss-ui/assets/demos/monaco/diff-basic.vue +0 -143
  1324. package/template/.hermes/skills/yss-ui/assets/demos/monaco/fullscreen.vue +0 -84
  1325. package/template/.hermes/skills/yss-ui/assets/demos/monaco/history-log-viewer.vue +0 -586
  1326. package/template/.hermes/skills/yss-ui/assets/demos/monaco/log-viewer.vue +0 -260
  1327. package/template/.hermes/skills/yss-ui/assets/demos/monaco/mock/mockLogApi.ts +0 -199
  1328. package/template/.hermes/skills/yss-ui/assets/demos/monaco/monaco.vue +0 -66
  1329. package/template/.hermes/skills/yss-ui/assets/demos/monaco/readonly.vue +0 -20
  1330. package/template/.hermes/skills/yss-ui/assets/demos/monaco/resizable.vue +0 -22
  1331. package/template/.hermes/skills/yss-ui/assets/demos/monaco/sql-schema.vue +0 -20
  1332. package/template/.hermes/skills/yss-ui/assets/demos/monaco/switch-lang-theme.vue +0 -48
  1333. package/template/.hermes/skills/yss-ui/assets/demos/split-pane/tree-table/constant.ts +0 -18
  1334. package/template/.hermes/skills/yss-ui/assets/demos/split-pane/tree-table/index.vue +0 -60
  1335. package/template/.hermes/skills/yss-ui/assets/demos/split-pane/tree-table/style.less +0 -39
  1336. package/template/.hermes/skills/yss-ui/assets/demos/split-pane/tree-table-layout/hooks/useTreeTable.ts +0 -158
  1337. package/template/.hermes/skills/yss-ui/assets/demos/split-pane/tree-table-layout/index.vue +0 -88
  1338. package/template/.hermes/skills/yss-ui/assets/demos/split-pane/tree-table-layout/style.less +0 -73
  1339. package/template/.hermes/skills/yss-ui/assets/demos/table/action/index.vue +0 -83
  1340. package/template/.hermes/skills/yss-ui/assets/demos/table/action/style.less +0 -3
  1341. package/template/.hermes/skills/yss-ui/assets/demos/table/action-auth/index.vue +0 -41
  1342. package/template/.hermes/skills/yss-ui/assets/demos/table/action-slot/index.vue +0 -62
  1343. package/template/.hermes/skills/yss-ui/assets/demos/table/action-slot/style.less +0 -36
  1344. package/template/.hermes/skills/yss-ui/assets/demos/table/basic/hooks/useBasicTable.ts +0 -205
  1345. package/template/.hermes/skills/yss-ui/assets/demos/table/basic/index.vue +0 -89
  1346. package/template/.hermes/skills/yss-ui/assets/demos/table/basic/style.less +0 -28
  1347. package/template/.hermes/skills/yss-ui/assets/demos/table/column-custom-search/hooks/useColumnCustomSearch.ts +0 -236
  1348. package/template/.hermes/skills/yss-ui/assets/demos/table/column-custom-search/index.vue +0 -141
  1349. package/template/.hermes/skills/yss-ui/assets/demos/table/column-custom-search/style.less +0 -48
  1350. package/template/.hermes/skills/yss-ui/assets/demos/table/drag/index.vue +0 -42
  1351. package/template/.hermes/skills/yss-ui/assets/demos/table/expand/action-expand.vue +0 -142
  1352. package/template/.hermes/skills/yss-ui/assets/demos/table/expand/index.vue +0 -35
  1353. package/template/.hermes/skills/yss-ui/assets/demos/table/filter-async/index.vue +0 -93
  1354. package/template/.hermes/skills/yss-ui/assets/demos/table/filter-auto/index.vue +0 -99
  1355. package/template/.hermes/skills/yss-ui/assets/demos/table/filter-custom/index.vue +0 -72
  1356. package/template/.hermes/skills/yss-ui/assets/demos/table/filter-local/index.vue +0 -112
  1357. package/template/.hermes/skills/yss-ui/assets/demos/table/filter-mixed/index.vue +0 -142
  1358. package/template/.hermes/skills/yss-ui/assets/demos/table/filter-remote/constant.ts +0 -129
  1359. package/template/.hermes/skills/yss-ui/assets/demos/table/filter-remote/hooks/useTableData.ts +0 -186
  1360. package/template/.hermes/skills/yss-ui/assets/demos/table/filter-remote/index.vue +0 -73
  1361. package/template/.hermes/skills/yss-ui/assets/demos/table/group-header/index.vue +0 -86
  1362. package/template/.hermes/skills/yss-ui/assets/demos/table/group-header/style.less +0 -3
  1363. package/template/.hermes/skills/yss-ui/assets/demos/table/header-height/index.vue +0 -29
  1364. package/template/.hermes/skills/yss-ui/assets/demos/table/header-height/style.less +0 -9
  1365. package/template/.hermes/skills/yss-ui/assets/demos/table/merge-cells/hooks/useMergeCells.ts +0 -183
  1366. package/template/.hermes/skills/yss-ui/assets/demos/table/merge-cells/index.vue +0 -17
  1367. package/template/.hermes/skills/yss-ui/assets/demos/table/merge-cells/style.less +0 -3
  1368. package/template/.hermes/skills/yss-ui/assets/demos/table/pagination-remote/hooks/usePaginationRemote.ts +0 -106
  1369. package/template/.hermes/skills/yss-ui/assets/demos/table/pagination-remote/index.vue +0 -24
  1370. package/template/.hermes/skills/yss-ui/assets/demos/table/renderers/index.vue +0 -64
  1371. package/template/.hermes/skills/yss-ui/assets/demos/table/selection-checkbox/index.vue +0 -88
  1372. package/template/.hermes/skills/yss-ui/assets/demos/table/selection-checkbox/style.less +0 -9
  1373. package/template/.hermes/skills/yss-ui/assets/demos/table/selection-radio/index.vue +0 -57
  1374. package/template/.hermes/skills/yss-ui/assets/demos/table/selection-radio/style.less +0 -9
  1375. package/template/.hermes/skills/yss-ui/assets/demos/table/transform/index.vue +0 -32
  1376. package/template/.hermes/skills/yss-ui/assets/demos/tree/basic-left/index.vue +0 -124
  1377. package/template/.hermes/skills/yss-ui/assets/demos/tree/datasource-group/index.vue +0 -31
  1378. package/template/.hermes/skills/yss-ui/assets/demos/tree/multi-checkable/index.vue +0 -86
  1379. package/template/.hermes/skills/yss-ui/assets/demos/tree/multiple-select/index.vue +0 -76
  1380. package/template/.hermes/skills/yss-ui/assets/demos/tree/resource-list/index.vue +0 -41
  1381. package/template/.hermes/skills/yss-ui/assets/demos/tree/search-toolbar/index.vue +0 -156
  1382. package/template/.hermes/skills/yss-ui/assets/demos/tree/slot-icon/index.vue +0 -36
  1383. package/template/.hermes/skills/yss-ui/assets/demos/tree/slot-switcher-icon/index.vue +0 -34
  1384. package/template/.hermes/skills/yss-ui/assets/docs/components/button.md +0 -79
  1385. package/template/.hermes/skills/yss-ui/assets/docs/components/card.md +0 -162
  1386. package/template/.hermes/skills/yss-ui/assets/docs/components/conditionBuilder.md +0 -114
  1387. package/template/.hermes/skills/yss-ui/assets/docs/components/cron.md +0 -77
  1388. package/template/.hermes/skills/yss-ui/assets/docs/components/echarts.md +0 -110
  1389. package/template/.hermes/skills/yss-ui/assets/docs/components/editTable.md +0 -212
  1390. package/template/.hermes/skills/yss-ui/assets/docs/components/fileImport.md +0 -85
  1391. package/template/.hermes/skills/yss-ui/assets/docs/components/formily.md +0 -370
  1392. package/template/.hermes/skills/yss-ui/assets/docs/components/monaco.md +0 -369
  1393. package/template/.hermes/skills/yss-ui/assets/docs/components/sheet.md +0 -169
  1394. package/template/.hermes/skills/yss-ui/assets/docs/components/split-pane.md +0 -45
  1395. package/template/.hermes/skills/yss-ui/assets/docs/components/table.md +0 -398
  1396. package/template/.hermes/skills/yss-ui/assets/docs/components/tree.md +0 -102
  1397. package/template/.hermes/skills/yss-ui/assets/docs/guide/gitlab-ci-integration.md +0 -166
  1398. package/template/.hermes/skills/yss-ui/assets/docs/guide/index.md +0 -132
  1399. package/template/.hermes/skills/yss-ui/assets/docs/guide/installation.md +0 -97
  1400. package/template/.hermes/skills/yss-ui/assets/docs/guide/jsp.md +0 -227
  1401. package/template/.hermes/skills/yss-ui/assets/docs/guide/llms.md +0 -295
  1402. package/template/.hermes/skills/yss-ui/assets/docs/guide/monorepo-versioning.md +0 -149
  1403. package/template/.hermes/skills/yss-ui/assets/docs/guide/release-workflow.md +0 -251
  1404. package/template/.hermes/skills/yss-ui/assets/docs/hooks/use-table-height.md +0 -101
  1405. package/template/.hermes/skills/yss-ui/assets/docs/hooks/use-tree-height.md +0 -115
  1406. package/template/.hermes/skills/yss-ui/assets/docs/hooks/useFullscreen.md +0 -130
  1407. package/template/.hermes/skills/yss-ui/assets/docs/hooks/useLoading.md +0 -97
  1408. package/template/.hermes/skills/yss-ui/assets/docs/root/resources.md +0 -18
  1409. package/template/.hermes/skills/yss-ui/assets/keyword-index.json +0 -53
  1410. package/template/.hermes/skills/yss-ui/assets/keyword-index.md +0 -47
  1411. package/template/.hermes/skills/yss-ui/assets/reference-index.json +0 -55
  1412. package/template/.hermes/skills/yss-ui/assets/reference-index.md +0 -74
  1413. package/template/.hermes/skills/yss-ui/assets/scenario-index.json +0 -50
  1414. package/template/.hermes/skills/yss-ui/assets/scenario-index.md +0 -41
  1415. package/template/.hermes/skills/yss-ui/references/accessibility.md +0 -23
  1416. package/template/.hermes/skills/yss-ui/references/antdv-compatibility.md +0 -39
  1417. package/template/.hermes/skills/yss-ui/references/checklist.md +0 -110
  1418. package/template/.hermes/skills/yss-ui/references/component-routing.md +0 -31
  1419. package/template/.hermes/skills/yss-ui/references/frontend-docs.md +0 -11
  1420. package/template/.hermes/skills/yss-ui/references/migration-antdv-to-yss.md +0 -20
  1421. package/template/.hermes/skills/yss-ui/references/quick-recipes.md +0 -280
  1422. package/template/.hermes/skills/yss-ui/references/theme-locale-overlay.md +0 -25
  1423. package/template/.hermes/skills/yss-ui/references/verification.md +0 -20
  1424. package/template/.hermes/skills/yss-ui-business-page-generation/SKILL.md +0 -159
  1425. package/template/.hermes/skills/yss-ui-business-page-generation/references/component-map.md +0 -39
  1426. package/template/.hermes/skills/yss-ui-business-page-generation/references/hooks-map.md +0 -70
  1427. package/template/.hermes/skills/yss-ui-business-page-generation/references/utils-map.md +0 -51
  1428. package/template/.hermes/skills/yss-up-springboot3/SKILL.md +0 -40
  1429. package/template/.hermes/skills/yss-up-springboot3/agents/openai.yaml +0 -4
  1430. package/template/.hermes/skills/yss-use-table-height/SKILL.md +0 -130
  1431. package/template/.hermes/skills/yss-use-table-height/agents/openai.yaml +0 -5
  1432. package/template/.hermes/skills/yss-use-table-height/references/frontend-docs.md +0 -9
  1433. package/template/.hermes/skills/yss-use-tree-height/SKILL.md +0 -98
  1434. package/template/.hermes/skills/yss-use-tree-height/agents/openai.yaml +0 -5
  1435. package/template/.hermes/skills/yss-use-tree-height/references/frontend-docs.md +0 -9
  1436. package/template/.hermes/skills/yss-userinfo/SKILL.md +0 -49
  1437. package/template/.hermes/skills/yss-userinfo/agents/openai.yaml +0 -4
  1438. package/template/.hermes/skills/yss-userinfo/references/source-index.md +0 -34
  1439. package/template/.hermes/skills/yss-validation/SKILL.md +0 -56
  1440. package/template/.hermes/skills/yss-validation/agents/openai.yaml +0 -4
  1441. package/template/.hermes/skills/yss-validation/references/source-index.md +0 -33
  1442. package/template/.hermes/skills/yss-web-controller/SKILL.md +0 -85
  1443. package/template/.hermes/skills/yss-web-controller/agents/openai.yaml +0 -5
  1444. package/template/.hermes/skills/yss-web-controller/assets/templates/Controller.java.template +0 -72
  1445. package/template/.hermes/skills/yss-web-controller/assets/templates/WebConvertor.java.template +0 -30
  1446. package/template/.hermes/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +0 -19
  1447. package/template/.hermes/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +0 -21
  1448. package/template/.hermes/skills/yss-web-controller/assets/templates/web/dto/Response.java.template +0 -18
  1449. package/template/.hermes/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +0 -19
  1450. package/template/.hermes/skills/yss-web-controller/references/web-adapter-layer-guide.md +0 -86
  1451. package/template/.hermes/skills/yss-web-controller/references/web-generation-contract.schema.json +0 -97
  1452. package/template/.hermes/skills/yss-web-controller/scripts/generate_controller.mjs +0 -226
  1453. package/template/.hermes/skills/yss-web-controller/scripts/generate_controller.test.mjs +0 -156
  1454. package/template/.hermes/skills/ytable-usage/SKILL.md +0 -251
  1455. package/template/.hermes/skills/ytree-usage/SKILL.md +0 -132
  1456. package/template/.kiro/settings/mcp.json +0 -8
  1457. package/template/.pi/skills/yss-router/SKILL.md +0 -51
  1458. package/template/.pi/skills/yss-router/agents/openai.yaml +0 -4
  1459. package/template/.pi/skills/yss-router/references/boundaries.md +0 -50
  1460. package/template/.pi/skills/yss-router/references/router-contract.yaml +0 -349
  1461. package/template/.pi/skills/yss-router/references/slice-implementation-contract.md +0 -185
  1462. package/template/.pi/skills/yss-router/references/yss-skill-execution-result.md +0 -67
  1463. package/template/.pi/skills/yss-source-index/SKILL.md +0 -63
  1464. package/template/.pi/skills/yss-source-index/agents/openai.yaml +0 -4
  1465. package/template/.pi/skills/yss-source-index/scripts/refresh-yss-skill-index.mjs +0 -24
  1466. package/template/.qoder/skills/yss-router/SKILL.md +0 -51
  1467. package/template/.qoder/skills/yss-router/agents/openai.yaml +0 -4
  1468. package/template/.qoder/skills/yss-router/references/boundaries.md +0 -50
  1469. package/template/.qoder/skills/yss-router/references/router-contract.yaml +0 -349
  1470. package/template/.qoder/skills/yss-router/references/slice-implementation-contract.md +0 -185
  1471. package/template/.qoder/skills/yss-router/references/yss-skill-execution-result.md +0 -67
  1472. package/template/.qoder/skills/yss-source-index/SKILL.md +0 -63
  1473. package/template/.qoder/skills/yss-source-index/agents/openai.yaml +0 -4
  1474. package/template/.qoder/skills/yss-source-index/scripts/refresh-yss-skill-index.mjs +0 -24
  1475. package/template/.trae/skills/yss-router/SKILL.md +0 -51
  1476. package/template/.trae/skills/yss-router/agents/openai.yaml +0 -4
  1477. package/template/.trae/skills/yss-router/references/boundaries.md +0 -50
  1478. package/template/.trae/skills/yss-router/references/router-contract.yaml +0 -349
  1479. package/template/.trae/skills/yss-router/references/slice-implementation-contract.md +0 -185
  1480. package/template/.trae/skills/yss-router/references/yss-skill-execution-result.md +0 -67
  1481. package/template/.trae/skills/yss-source-index/SKILL.md +0 -63
  1482. package/template/.trae/skills/yss-source-index/agents/openai.yaml +0 -4
  1483. package/template/.trae/skills/yss-source-index/references/source-location.md +0 -18
  1484. package/template/.trae/skills/yss-source-index/references/source-map-config.md +0 -30
  1485. package/template/.trae/skills/yss-source-index/scripts/refresh-yss-skill-index.mjs +0 -24
  1486. package/template/.trae/skills/yss-source-index/scripts/refresh-yss-skill-index.test.mjs +0 -15
  1487. package/template/scripts/verify-yss-router-scenarios +0 -3
  1488. /package/template/.agents/skills/{yss-source-index → yss-skill-source-index-refresh}/references/source-location.md +0 -0
  1489. /package/template/.agents/skills/{yss-source-index → yss-skill-source-index-refresh}/references/source-map-config.md +0 -0
  1490. /package/template/.agents/skills/{yss-source-index → yss-skill-source-index-refresh}/scripts/refresh-yss-skill-index.test.mjs +0 -0
  1491. /package/template/.claude/skills/{yss-source-index → yss-skill-source-index-refresh}/references/source-location.md +0 -0
  1492. /package/template/.claude/skills/{yss-source-index → yss-skill-source-index-refresh}/references/source-map-config.md +0 -0
  1493. /package/template/.claude/skills/{yss-source-index → yss-skill-source-index-refresh}/scripts/refresh-yss-skill-index.test.mjs +0 -0
  1494. /package/template/.codex/skills/{yss-source-index → yss-skill-source-index-refresh}/references/source-location.md +0 -0
  1495. /package/template/.codex/skills/{yss-source-index → yss-skill-source-index-refresh}/references/source-map-config.md +0 -0
  1496. /package/template/.codex/skills/{yss-source-index → yss-skill-source-index-refresh}/scripts/refresh-yss-skill-index.test.mjs +0 -0
  1497. /package/template/.cursor/skills/{yss-source-index → yss-skill-source-index-refresh}/references/source-location.md +0 -0
  1498. /package/template/.cursor/skills/{yss-source-index → yss-skill-source-index-refresh}/references/source-map-config.md +0 -0
  1499. /package/template/.cursor/skills/{yss-source-index → yss-skill-source-index-refresh}/scripts/refresh-yss-skill-index.test.mjs +0 -0
  1500. /package/template/{.hermes/skills/yss-source-index → .pi/skills/yss-skill-source-index-refresh}/references/source-location.md +0 -0
  1501. /package/template/{.hermes/skills/yss-source-index → .pi/skills/yss-skill-source-index-refresh}/references/source-map-config.md +0 -0
  1502. /package/template/{.hermes/skills/yss-source-index → .pi/skills/yss-skill-source-index-refresh}/scripts/refresh-yss-skill-index.test.mjs +0 -0
  1503. /package/template/{.pi/skills/yss-source-index → .qoder/skills/yss-skill-source-index-refresh}/references/source-location.md +0 -0
  1504. /package/template/{.pi/skills/yss-source-index → .qoder/skills/yss-skill-source-index-refresh}/references/source-map-config.md +0 -0
  1505. /package/template/{.pi/skills/yss-source-index → .qoder/skills/yss-skill-source-index-refresh}/scripts/refresh-yss-skill-index.test.mjs +0 -0
  1506. /package/template/{.qoder/skills/yss-source-index → .trae/skills/yss-skill-source-index-refresh}/references/source-location.md +0 -0
  1507. /package/template/{.qoder/skills/yss-source-index → .trae/skills/yss-skill-source-index-refresh}/references/source-map-config.md +0 -0
  1508. /package/template/{.qoder/skills/yss-source-index → .trae/skills/yss-skill-source-index-refresh}/scripts/refresh-yss-skill-index.test.mjs +0 -0
@@ -1,1840 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import { execFileSync, spawn } from 'node:child_process';
3
- import { once } from 'node:events';
4
- import fs from 'node:fs';
5
- import net from 'node:net';
6
- import os from 'node:os';
7
- import path from 'node:path';
8
- import { pathToFileURL, fileURLToPath } from 'node:url';
9
-
10
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
11
- const skillRoot = path.resolve(__dirname, '..');
12
- const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'archify-webm-artifact-'));
13
- const externalReachSource = process.env.ARCHIFY_REACH_CARD_SOURCE
14
- ? path.resolve(process.env.ARCHIFY_REACH_CARD_SOURCE)
15
- : '';
16
- const externalReachOutput = process.env.ARCHIFY_REACH_CARD_OUTPUT
17
- ? path.resolve(process.env.ARCHIFY_REACH_CARD_OUTPUT)
18
- : '';
19
- assert.equal(Boolean(externalReachSource), Boolean(externalReachOutput), 'ARCHIFY_REACH_CARD_SOURCE and ARCHIFY_REACH_CARD_OUTPUT must be set together');
20
-
21
- function executable(candidates) {
22
- for (const candidate of candidates) {
23
- if (!candidate) continue;
24
- if (candidate.includes(path.sep)) {
25
- if (fs.existsSync(candidate)) return candidate;
26
- continue;
27
- }
28
- try {
29
- return execFileSync('sh', ['-c', `command -v "$1"`, 'archify-which', candidate], { encoding: 'utf8' }).trim();
30
- } catch (_) {
31
- // Try the next platform-specific name.
32
- }
33
- }
34
- return '';
35
- }
36
-
37
- const chrome = executable([
38
- process.env.ARCHIFY_CHROME,
39
- 'google-chrome',
40
- 'google-chrome-stable',
41
- 'chromium',
42
- 'chromium-browser',
43
- '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
44
- ]);
45
- const ffmpeg = executable([process.env.ARCHIFY_FFMPEG, 'ffmpeg']);
46
-
47
- assert.ok(chrome, 'Chrome/Chromium is required for the WebM artifact smoke test (or set ARCHIFY_CHROME)');
48
- assert.ok(ffmpeg, 'ffmpeg is required for the WebM artifact smoke test (or set ARCHIFY_FFMPEG)');
49
-
50
- const source = JSON.parse(fs.readFileSync(path.join(skillRoot, 'examples/web-app.architecture.json'), 'utf8'));
51
- source.meta.animation = 'trace';
52
- source.meta.visual_preset = 'signal-flow';
53
-
54
- const input = path.join(tmp, 'motion.architecture.json');
55
- const output = path.join(tmp, 'motion.html');
56
- fs.writeFileSync(input, JSON.stringify(source));
57
- execFileSync(process.execPath, [
58
- path.join(skillRoot, 'renderers/architecture/render-architecture.mjs'),
59
- input,
60
- output,
61
- ], { stdio: ['ignore', 'ignore', 'pipe'] });
62
-
63
- const sequenceOutput = path.join(tmp, 'sequence.html');
64
- execFileSync(process.execPath, [
65
- path.join(skillRoot, 'renderers/sequence/render-sequence.mjs'),
66
- path.join(skillRoot, 'examples/cache-miss-request.sequence.json'),
67
- sequenceOutput,
68
- ], { stdio: ['ignore', 'ignore', 'pipe'] });
69
-
70
- const routeOutputs = {
71
- architecture: output,
72
- sequence: sequenceOutput,
73
- };
74
- for (const [mode, example] of Object.entries({
75
- workflow: 'agent-tool-call.workflow.json',
76
- dataflow: 'product-analytics.dataflow.json',
77
- lifecycle: 'agent-run.lifecycle.json',
78
- })) {
79
- const rendered = path.join(tmp, `${mode}.html`);
80
- execFileSync(process.execPath, [
81
- path.join(skillRoot, `renderers/${mode}/render-${mode}.mjs`),
82
- path.join(skillRoot, 'examples', example),
83
- rendered,
84
- ], { stdio: ['ignore', 'ignore', 'pipe'] });
85
- routeOutputs[mode] = rendered;
86
- }
87
-
88
- function renderLegendFixture(mode, name, document) {
89
- const inputPath = path.join(tmp, `${name}.${mode}.json`);
90
- const outputPath = path.join(tmp, `${name}.${mode}.html`);
91
- fs.writeFileSync(inputPath, JSON.stringify(document));
92
- execFileSync(process.execPath, [
93
- path.join(skillRoot, `renderers/${mode}/render-${mode}.mjs`),
94
- inputPath,
95
- outputPath,
96
- ], { stdio: ['ignore', 'ignore', 'pipe'] });
97
- return outputPath;
98
- }
99
-
100
- const legendOutputs = {
101
- dataflow: renderLegendFixture('dataflow', 'issue-52-default-flow', {
102
- schema_version: 1,
103
- diagram_type: 'dataflow',
104
- meta: { title: 'Default Flow With Store' },
105
- stages: [{ label: 'Input' }, { label: 'Output' }],
106
- nodes: [
107
- { id: 'input', type: 'backend', label: 'Input', stage: 0, row: 0 },
108
- { id: 'output', type: 'database', label: 'Output Store', stage: 1, row: 0 },
109
- ],
110
- flows: [{ from: 'input', to: 'output', label: 'request', route: 'straight' }],
111
- }),
112
- lifecycle: renderLegendFixture('lifecycle', 'issue-52-no-waiting', {
113
- schema_version: 1,
114
- diagram_type: 'lifecycle',
115
- meta: { title: 'No Waiting or Failure', viewBox: [720, 566] },
116
- lanes: [{ id: 'main', label: 'Lifecycle' }],
117
- states: [
118
- { id: 'started', type: 'start', label: 'Started', lane: 'main', col: 0 },
119
- { id: 'running', type: 'active', label: 'Running', lane: 'main', col: 1 },
120
- { id: 'completed', type: 'success', label: 'Completed', lane: 'main', col: 2 },
121
- ],
122
- transitions: [{ from: 'started', to: 'running' }, { from: 'running', to: 'completed' }],
123
- }),
124
- custom: renderLegendFixture('architecture', 'issue-52-custom-label', {
125
- schema_version: 1,
126
- diagram_type: 'architecture',
127
- meta: {
128
- title: 'Custom Legend Label',
129
- viewBox: [720, 420],
130
- legend: {
131
- entries: {
132
- frontend: { label: 'Reader <UI> & ops' },
133
- external: { label: 'Future integration', visible: true },
134
- },
135
- },
136
- views: [{ id: 'main', label: 'Main', focus: ['ui', 'store'] }],
137
- },
138
- components: [
139
- { id: 'ui', type: 'frontend', label: 'UI', pos: [60, 90] },
140
- { id: 'store', type: 'database', label: 'Store', pos: [300, 90] },
141
- ],
142
- connections: [],
143
- }),
144
- hidden: renderLegendFixture('dataflow', 'issue-52-hidden', {
145
- schema_version: 1,
146
- diagram_type: 'dataflow',
147
- meta: { title: 'Hidden Legend', legend: { mode: 'hidden', entries: { database: { visible: true } } } },
148
- stages: [{ label: 'Input' }, { label: 'Output' }],
149
- nodes: [
150
- { id: 'input', type: 'backend', label: 'Input', stage: 0, row: 0 },
151
- { id: 'output', type: 'backend', label: 'Output', stage: 1, row: 0 },
152
- ],
153
- flows: [{ from: 'input', to: 'output', label: 'request', route: 'straight' }],
154
- }),
155
- };
156
-
157
- const parallelSource = JSON.parse(JSON.stringify(source));
158
- parallelSource.meta.title = 'Parallel Route Identity';
159
- parallelSource.connections[0].label = '';
160
- parallelSource.connections.splice(1, 0, {
161
- id: 'users-to-cdn-alternate',
162
- from: 'users',
163
- to: 'cdn',
164
- label: '',
165
- });
166
- const parallelInput = path.join(tmp, 'parallel.architecture.json');
167
- const parallelOutput = path.join(tmp, 'parallel.html');
168
- fs.writeFileSync(parallelInput, JSON.stringify(parallelSource));
169
- execFileSync(process.execPath, [
170
- path.join(skillRoot, 'renderers/architecture/render-architecture.mjs'),
171
- parallelInput,
172
- parallelOutput,
173
- ], { stdio: ['ignore', 'ignore', 'pipe'] });
174
-
175
- const specialSourceLabel = '入口 <script>window.__routeLabelExecuted = true</script> 汉字 🚀 with an intentionally very long endpoint label';
176
- const specialTargetLabel = '终点服务 ✅ emoji + CJK + a second deliberately long endpoint label for header fitting';
177
- const specialComponents = Array.from({ length: 11 }, (_, index) => ({
178
- id: index === 0 ? 'Route_Source-01' : index === 10 ? 'Route_Target-10' : `route_step-${index}`,
179
- type: index === 0 ? 'external' : index === 10 ? 'database' : 'backend',
180
- label: index === 0 ? specialSourceLabel : index === 10 ? specialTargetLabel : `步骤 ${index} · service_${index} ⚙️`,
181
- sublabel: `hop ${index}`,
182
- pos: [40 + index * 820, 280],
183
- size: [index === 0 || index === 10 ? 780 : 220, 72],
184
- }));
185
- const specialRouteSource = {
186
- schema_version: 1,
187
- diagram_type: 'architecture',
188
- meta: {
189
- title: '多语言 Route Share Card 🚀 with a deliberately long original diagram title that must fit safely',
190
- subtitle: 'Ten exact authored hops',
191
- animation: 'trace',
192
- },
193
- components: specialComponents,
194
- boundaries: [],
195
- connections: specialComponents.slice(0, -1).map((component, index) => ({
196
- id: `route_edge-${index + 1}`,
197
- from: component.id,
198
- to: specialComponents[index + 1].id,
199
- label: '',
200
- })),
201
- cards: [],
202
- };
203
- const specialRouteInput = path.join(tmp, 'special-route.architecture.json');
204
- const specialRouteOutput = path.join(tmp, 'special-route.html');
205
- fs.writeFileSync(specialRouteInput, JSON.stringify(specialRouteSource));
206
- execFileSync(process.execPath, [
207
- path.join(skillRoot, 'renderers/architecture/render-architecture.mjs'),
208
- specialRouteInput,
209
- specialRouteOutput,
210
- ], { stdio: ['ignore', 'ignore', 'pipe'] });
211
-
212
- assert.equal(typeof WebSocket, 'function', 'Node.js 22+ is required for the Chrome DevTools smoke harness');
213
-
214
- function delay(ms) {
215
- return new Promise((resolve) => setTimeout(resolve, ms));
216
- }
217
-
218
- async function waitForExit(child, timeoutMs) {
219
- if (child.exitCode !== null || child.signalCode !== null) return true;
220
- return Promise.race([
221
- once(child, 'exit').then(() => true),
222
- delay(timeoutMs).then(() => false),
223
- ]);
224
- }
225
-
226
- async function removeTempTree(directory) {
227
- const transientCodes = new Set(['EBUSY', 'ENOTEMPTY', 'EPERM']);
228
- let lastError;
229
- for (let attempt = 0; attempt < 8; attempt += 1) {
230
- try {
231
- fs.rmSync(directory, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 });
232
- return;
233
- } catch (error) {
234
- if (!transientCodes.has(error?.code)) throw error;
235
- lastError = error;
236
- await delay(100 * (attempt + 1));
237
- }
238
- }
239
- console.warn(`warning: temporary Chrome profile cleanup deferred (${lastError?.code || 'unknown'}): ${directory}`);
240
- }
241
-
242
- async function withTimeout(promise, ms, label) {
243
- let timer;
244
- try {
245
- return await Promise.race([
246
- promise,
247
- new Promise((_, reject) => {
248
- timer = setTimeout(() => reject(new Error(`${label} timed out after ${ms}ms`)), ms);
249
- }),
250
- ]);
251
- } finally {
252
- clearTimeout(timer);
253
- }
254
- }
255
-
256
- async function freePort() {
257
- const server = net.createServer();
258
- await new Promise((resolve, reject) => {
259
- server.once('error', reject);
260
- server.listen(0, '127.0.0.1', resolve);
261
- });
262
- const port = server.address().port;
263
- await new Promise((resolve) => server.close(resolve));
264
- return port;
265
- }
266
-
267
- async function devtoolsEndpoint(port, chromeProcess, diagnostics) {
268
- for (let attempt = 0; attempt < 100; attempt += 1) {
269
- try {
270
- const response = await fetch(`http://127.0.0.1:${port}/json/version`);
271
- if (response.ok) return (await response.json()).webSocketDebuggerUrl;
272
- } catch (_) {
273
- // Chrome may need a moment to bind the debugging port.
274
- }
275
- if (chromeProcess.exitCode !== null) break;
276
- await delay(50);
277
- }
278
- const stderr = diagnostics().trim();
279
- const exit = chromeProcess.exitCode === null ? 'still running' : `exited with code ${chromeProcess.exitCode}`;
280
- throw new Error(`Chrome did not expose a DevTools endpoint (${exit})${stderr ? `:\n${stderr}` : ''}`);
281
- }
282
-
283
- async function connectCdp(webSocketUrl) {
284
- const socket = new WebSocket(webSocketUrl);
285
- await new Promise((resolve, reject) => {
286
- socket.addEventListener('open', resolve, { once: true });
287
- socket.addEventListener('error', reject, { once: true });
288
- });
289
- let nextId = 0;
290
- const pending = new Map();
291
- socket.addEventListener('message', (event) => {
292
- const message = JSON.parse(String(event.data));
293
- if (!message.id || !pending.has(message.id)) return;
294
- const request = pending.get(message.id);
295
- pending.delete(message.id);
296
- if (message.error) request.reject(new Error(message.error.message));
297
- else request.resolve(message.result);
298
- });
299
- socket.addEventListener('close', () => {
300
- for (const request of pending.values()) request.reject(new Error('Chrome DevTools connection closed'));
301
- pending.clear();
302
- });
303
- return {
304
- socket,
305
- send(method, params = {}, sessionId) {
306
- const id = ++nextId;
307
- return new Promise((resolve, reject) => {
308
- pending.set(id, { resolve, reject });
309
- socket.send(JSON.stringify({ id, method, params, ...(sessionId ? { sessionId } : {}) }));
310
- });
311
- },
312
- };
313
- }
314
-
315
- async function evaluate(cdp, sessionId, expression, awaitPromise = false) {
316
- const response = await cdp.send('Runtime.evaluate', {
317
- expression,
318
- awaitPromise,
319
- returnByValue: true,
320
- }, sessionId);
321
- if (response.exceptionDetails) {
322
- throw new Error(response.exceptionDetails.exception?.description || response.exceptionDetails.text || 'browser evaluation failed');
323
- }
324
- return response.result?.value;
325
- }
326
-
327
- const port = await freePort();
328
- let chromeStderr = '';
329
- const chromeProcess = spawn(chrome, [
330
- '--headless=new',
331
- '--disable-gpu',
332
- '--disable-dev-shm-usage',
333
- '--no-sandbox',
334
- '--allow-file-access-from-files',
335
- '--autoplay-policy=no-user-gesture-required',
336
- '--log-level=3',
337
- `--user-data-dir=${path.join(tmp, 'chrome-profile')}`,
338
- '--remote-debugging-address=127.0.0.1',
339
- `--remote-debugging-port=${port}`,
340
- 'about:blank',
341
- ], { stdio: ['ignore', 'ignore', 'pipe'] });
342
- chromeProcess.stderr.setEncoding('utf8');
343
- chromeProcess.stderr.on('data', (chunk) => {
344
- chromeStderr = `${chromeStderr}${chunk}`.slice(-64 * 1024);
345
- });
346
-
347
- let cdp;
348
- let targetId;
349
-
350
- try {
351
- cdp = await connectCdp(await devtoolsEndpoint(port, chromeProcess, () => chromeStderr));
352
- ({ targetId } = await cdp.send('Target.createTarget', { url: 'about:blank' }));
353
- await cdp.send('Target.activateTarget', { targetId });
354
- const { sessionId } = await cdp.send('Target.attachToTarget', { targetId, flatten: true });
355
- await cdp.send('Page.enable', {}, sessionId);
356
- await cdp.send('Runtime.enable', {}, sessionId);
357
-
358
- async function navigateReady(file, condition, label) {
359
- const url = file instanceof URL ? file.href : pathToFileURL(file).href;
360
- await cdp.send('Page.navigate', { url }, sessionId);
361
- await cdp.send('Page.bringToFront', {}, sessionId);
362
- await cdp.send('Emulation.setFocusEmulationEnabled', { enabled: true }, sessionId);
363
- let ready = false;
364
- for (let attempt = 0; attempt < 100 && !ready; attempt += 1) {
365
- ready = await evaluate(cdp, sessionId, `document.readyState === "complete" && (${condition})`);
366
- if (!ready) await delay(50);
367
- }
368
- assert.equal(ready, true, `${label} did not expose its browser export surface`);
369
- }
370
-
371
- async function verifyResolvedLegendContract(outputs) {
372
- async function inspectKinds(file, expectedKinds, theme) {
373
- const url = new URL(pathToFileURL(file).href);
374
- url.searchParams.set('theme', theme);
375
- await navigateReady(url, '!!(window.Archify && Archify.semanticLens)', `legend ${theme}`);
376
- const result = await evaluate(cdp, sessionId, `(() => {
377
- var svg = document.querySelector('.diagram-container > svg');
378
- var entries = Array.from(svg.querySelectorAll('[data-legend-semantic-kind]'));
379
- var vb = svg.viewBox.baseVal;
380
- return {
381
- theme: document.documentElement.getAttribute('data-theme'),
382
- kinds: entries.map(function (entry) { return entry.getAttribute('data-legend-semantic-kind'); }),
383
- bridge: !!svg.querySelector('[data-legend-bridge]'),
384
- roles: entries.map(function (entry) { return entry.getAttribute('role'); }),
385
- aria: entries.map(function (entry) { return entry.getAttribute('aria-label'); }),
386
- counts: entries.map(function (entry) { return entry.getAttribute('data-legend-count'); }),
387
- tabStops: entries.filter(function (entry) { return entry.getAttribute('tabindex') === '0'; }).length,
388
- inside: entries.every(function (entry) {
389
- var box = entry.getBBox();
390
- return box.x >= vb.x && box.y >= vb.y && box.x + box.width <= vb.x + vb.width && box.y + box.height <= vb.y + vb.height;
391
- })
392
- };
393
- })()`);
394
- assert.equal(result.theme, theme);
395
- assert.deepEqual(result.kinds, expectedKinds);
396
- assert.equal(result.inside, true);
397
- return result;
398
- }
399
-
400
- for (const theme of ['dark', 'light']) {
401
- const dataflow = await inspectKinds(outputs.dataflow, ['database', 'default'], theme);
402
- assert.equal(dataflow.bridge, true);
403
- assert.deepEqual(dataflow.roles, ['button', null]);
404
- assert.deepEqual(dataflow.aria, ['Inspect data store, 1 node', null]);
405
- assert.deepEqual(dataflow.counts, ['1', null]);
406
- assert.equal(dataflow.tabStops, 1);
407
- const lifecycle = await inspectKinds(outputs.lifecycle, ['start', 'active', 'success'], theme);
408
- assert.equal(lifecycle.bridge, true);
409
- }
410
-
411
- await navigateReady(outputs.dataflow, '!!(window.Archify && Archify.semanticLens && Archify.exportMenu)', 'Dataflow database legend runtime');
412
- const databaseRuntime = await evaluate(cdp, sessionId, String.raw`(async function () {
413
- var entry = document.querySelector('[data-legend-kind="database"]');
414
- entry.focus();
415
- entry.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', bubbles: true }));
416
- var originalCreateObjectURL = URL.createObjectURL;
417
- var originalAnchorClick = HTMLAnchorElement.prototype.click;
418
- var captured;
419
- URL.createObjectURL = function (blob) {
420
- captured = blob.text();
421
- return 'blob:archify-dataflow-legend-smoke';
422
- };
423
- HTMLAnchorElement.prototype.click = function () {};
424
- try {
425
- await Archify.exportMenu.run('svg');
426
- var exportedText = await captured;
427
- var exported = new DOMParser().parseFromString(exportedText, 'image/svg+xml').documentElement;
428
- return {
429
- selected: Archify.semanticLens.active(),
430
- lensOpen: Archify.semanticLens.isOpen(),
431
- exportedKinds: Array.from(exported.querySelectorAll('[data-legend-semantic-kind]')).map(function (item) { return item.getAttribute('data-legend-semantic-kind'); }),
432
- exportedBridgeResidue: exported.querySelectorAll('[data-legend-bridge], [data-legend-kind], [data-legend-label], [data-legend-count], [data-legend-bridge-runtime]').length
433
- };
434
- } finally {
435
- URL.createObjectURL = originalCreateObjectURL;
436
- HTMLAnchorElement.prototype.click = originalAnchorClick;
437
- }
438
- })()`, true);
439
- assert.deepEqual(databaseRuntime.selected, ['database']);
440
- assert.equal(databaseRuntime.lensOpen, true);
441
- assert.deepEqual(databaseRuntime.exportedKinds, ['database', 'default']);
442
- assert.equal(databaseRuntime.exportedBridgeResidue, 0);
443
-
444
- await navigateReady(outputs.custom, '!!(window.Archify && Archify.semanticLens && Archify.exportMenu)', 'custom legend runtime');
445
- const runtime = await evaluate(cdp, sessionId, String.raw`(async function () {
446
- var svg = document.querySelector('.diagram-container > svg');
447
- var entries = Array.from(svg.querySelectorAll('[data-legend-semantic-kind]'));
448
- var interactive = entries.filter(function (entry) { return entry.hasAttribute('data-legend-kind'); });
449
- var first = interactive[0];
450
- var second = interactive[1];
451
- first.focus();
452
- first.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true }));
453
- var arrowMoved = document.activeElement === second;
454
- second.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', bubbles: true }));
455
- var selected = Archify.semanticLens.active();
456
- var guidedActivated = Archify.guidedViews.activate('main', { updateUrl: false });
457
- var guidedActive = Archify.guidedViews.active();
458
- var visualMatrix = [];
459
- for (var preset of ['classic', 'signal-flow', 'blueprint', 'editorial']) {
460
- if (!Archify.preset.apply(preset)) throw new Error('could not apply preset ' + preset);
461
- for (var theme of ['dark', 'light']) {
462
- document.documentElement.setAttribute('data-theme', theme);
463
- visualMatrix.push({
464
- preset: preset,
465
- theme: theme,
466
- kinds: entries.map(function (entry) { return entry.getAttribute('data-legend-semantic-kind'); }),
467
- labels: entries.map(function (entry) { return entry.querySelector('text').textContent; })
468
- });
469
- }
470
- }
471
-
472
- var originalCreateObjectURL = URL.createObjectURL;
473
- var originalAnchorClick = HTMLAnchorElement.prototype.click;
474
- var captured;
475
- URL.createObjectURL = function (blob) {
476
- captured = blob.text();
477
- return 'blob:archify-legend-smoke';
478
- };
479
- HTMLAnchorElement.prototype.click = function () {};
480
- try {
481
- await Archify.exportMenu.run('svg');
482
- var exportedText = await captured;
483
- var exported = new DOMParser().parseFromString(exportedText, 'image/svg+xml').documentElement;
484
- return {
485
- labels: interactive.map(function (entry) { return entry.getAttribute('aria-label'); }),
486
- roles: entries.map(function (entry) { return entry.getAttribute('role'); }),
487
- counts: interactive.map(function (entry) { return entry.getAttribute('data-legend-count'); }),
488
- tabStops: interactive.filter(function (entry) { return entry.getAttribute('tabindex') === '0'; }).length,
489
- arrowMoved: arrowMoved,
490
- selected: selected,
491
- lensOpen: Archify.semanticLens.isOpen(),
492
- guidedActivated: guidedActivated,
493
- guidedActive: guidedActive,
494
- visualMatrix: visualMatrix,
495
- forcedUnusedInteractive: entries.at(-1).hasAttribute('data-legend-kind'),
496
- exportedKinds: Array.from(exported.querySelectorAll('[data-legend-semantic-kind]')).map(function (entry) { return entry.getAttribute('data-legend-semantic-kind'); }),
497
- exportedBridgeResidue: exported.querySelectorAll('[data-legend-bridge], [data-legend-kind], [data-legend-label], [data-legend-count], [data-legend-bridge-runtime]').length,
498
- exportedLabels: Array.from(exported.querySelectorAll('[data-legend-semantic-kind] text')).map(function (text) { return text.textContent; })
499
- };
500
- } finally {
501
- URL.createObjectURL = originalCreateObjectURL;
502
- HTMLAnchorElement.prototype.click = originalAnchorClick;
503
- }
504
- })()`, true);
505
- assert.deepEqual(runtime.labels, ['Inspect Reader <UI> & ops, 1 node', 'Inspect Database, 1 node']);
506
- assert.deepEqual(runtime.roles, ['button', 'button', null]);
507
- assert.deepEqual(runtime.counts, ['1', '1']);
508
- assert.equal(runtime.tabStops, 1);
509
- assert.equal(runtime.arrowMoved, true);
510
- assert.deepEqual(runtime.selected, ['database']);
511
- assert.equal(runtime.lensOpen, false);
512
- assert.equal(runtime.guidedActivated, true);
513
- assert.equal(runtime.guidedActive, 'main');
514
- assert.equal(runtime.visualMatrix.length, 8);
515
- for (const entry of runtime.visualMatrix) {
516
- assert.deepEqual(entry.kinds, ['frontend', 'database', 'external']);
517
- assert.deepEqual(entry.labels, ['Reader <UI> & ops', 'Database', 'Future integration']);
518
- }
519
- assert.equal(runtime.forcedUnusedInteractive, false);
520
- assert.deepEqual(runtime.exportedKinds, ['frontend', 'database', 'external']);
521
- assert.equal(runtime.exportedBridgeResidue, 0);
522
- assert.deepEqual(runtime.exportedLabels, ['Reader <UI> & ops', 'Database', 'Future integration']);
523
-
524
- await cdp.send('Emulation.setEmulatedMedia', { media: 'print' }, sessionId);
525
- const printState = await evaluate(cdp, sessionId, `(() => ({
526
- legendDisplay: getComputedStyle(document.querySelector('[data-legend]')).display,
527
- runtimeBadgesHidden: Array.from(document.querySelectorAll('[data-legend-bridge-runtime]')).every(function (entry) { return getComputedStyle(entry).display === 'none'; })
528
- }))()`);
529
- assert.notEqual(printState.legendDisplay, 'none');
530
- assert.equal(printState.runtimeBadgesHidden, true);
531
- await cdp.send('Emulation.setEmulatedMedia', { media: '' }, sessionId);
532
-
533
- const embedUrl = new URL(pathToFileURL(outputs.custom).href);
534
- embedUrl.searchParams.set('embed', '1');
535
- await navigateReady(embedUrl, '!!(window.Archify && Archify.semanticLens)', 'embedded legend');
536
- const embed = await evaluate(cdp, sessionId, `(() => ({
537
- roles: document.querySelectorAll('[data-legend-kind][role]').length,
538
- runtime: document.querySelectorAll('[data-legend-bridge-runtime]').length,
539
- kinds: Array.from(document.querySelectorAll('[data-legend-semantic-kind]')).map(function (entry) { return entry.getAttribute('data-legend-semantic-kind'); })
540
- }))()`);
541
- assert.deepEqual(embed, { roles: 0, runtime: 0, kinds: ['frontend', 'database', 'external'] });
542
-
543
- await navigateReady(outputs.hidden, '!!(window.Archify && Archify.semanticLens)', 'hidden legend');
544
- const hidden = await evaluate(cdp, sessionId, `(() => ({
545
- root: !!document.querySelector('[data-legend]'),
546
- bridge: !!document.querySelector('[data-legend-bridge]'),
547
- title: Array.from(document.querySelectorAll('.diagram-container svg text')).some(function (text) { return text.textContent.trim() === 'Legend'; })
548
- }))()`);
549
- assert.deepEqual(hidden, { root: false, bridge: false, title: false });
550
- console.log('ok legend runtime: labels, counts, keyboard, export, print, embed, hidden, and dual themes');
551
- }
552
-
553
- async function verifySemanticPassportDismissal(file) {
554
- await navigateReady(file, '!!(window.Archify && Archify.focus && document.querySelector("#btn-focus-clear"))', 'Semantic Passport dismissal');
555
- const result = await evaluate(cdp, sessionId, `(() => {
556
- var chip = document.querySelector('#focus-chip');
557
- var close = document.querySelector('#btn-focus-clear');
558
- var container = document.querySelector('.diagram-container');
559
- var svg = container.querySelector(':scope > svg');
560
- var origin = svg.querySelector('[data-node-id="clients"]');
561
- var neighbor = svg.querySelector('[data-node-id]:not([data-node-id="clients"])');
562
- if (!origin || !neighbor) return { ok: false, error: 'missing smoke-test nodes' };
563
- function state() {
564
- return { hidden: chip.hidden, active: Archify.focus.active() };
565
- }
566
-
567
- Archify.focus.set('clients', { toggle: false, updateUrl: false });
568
- var cardRect = chip.getBoundingClientRect();
569
- var closeRect = close.getBoundingClientRect();
570
- var layout = {
571
- topGap: Math.round(closeRect.top - cardRect.top),
572
- rightGap: Math.round(cardRect.right - closeRect.right),
573
- label: close.getAttribute('aria-label'),
574
- title: close.getAttribute('title'),
575
- text: close.textContent.trim()
576
- };
577
- close.click();
578
- var afterClose = state();
579
- var restoredFocus = document.activeElement && document.activeElement.getAttribute('data-node-id');
580
-
581
- Archify.focus.set('clients', { toggle: false, updateUrl: false });
582
- chip.querySelector('.relationship-lens-head').dispatchEvent(new MouseEvent('click', { bubbles: true }));
583
- var afterInside = state();
584
- container.dispatchEvent(new MouseEvent('click', { bubbles: true }));
585
- var afterOutside = state();
586
-
587
- Archify.focus.set('clients', { toggle: false, updateUrl: false });
588
- neighbor.dispatchEvent(new MouseEvent('click', { bubbles: true }));
589
- var afterNode = state();
590
- return {
591
- ok: true,
592
- layout: layout,
593
- afterClose: afterClose,
594
- restoredFocus: restoredFocus,
595
- afterInside: afterInside,
596
- afterOutside: afterOutside,
597
- afterNode: afterNode,
598
- neighborId: neighbor.getAttribute('data-node-id')
599
- };
600
- })()`);
601
- assert.equal(result?.ok, true, result?.error || 'Semantic Passport smoke failed');
602
- assert.equal(result.layout.label, 'Close semantic passport');
603
- assert.equal(result.layout.title, 'Close');
604
- assert.equal(result.layout.text, '×');
605
- assert.ok(result.layout.topGap >= 0 && result.layout.topGap <= 16, `Semantic Passport close top gap ${result.layout.topGap}px`);
606
- assert.ok(result.layout.rightGap >= 0 && result.layout.rightGap <= 16, `Semantic Passport close right gap ${result.layout.rightGap}px`);
607
- assert.deepEqual(result.afterClose, { hidden: true, active: null });
608
- assert.equal(result.restoredFocus, 'clients');
609
- assert.deepEqual(result.afterInside, { hidden: false, active: 'clients' });
610
- assert.deepEqual(result.afterOutside, { hidden: true, active: null });
611
- assert.deepEqual(result.afterNode, { hidden: false, active: result.neighborId });
612
- console.log('ok Semantic Passport: close control, focus return, inside preservation, and outside dismissal');
613
- }
614
-
615
- async function verifyArchitectureDeltaNavigator(file) {
616
- await cdp.send('Emulation.setEmulatedMedia', {
617
- media: 'screen',
618
- features: [{ name: 'prefers-reduced-motion', value: 'no-preference' }],
619
- }, sessionId);
620
- const readyCondition = '!!document.querySelector("#review-play") && !document.querySelector("#review-play").disabled';
621
- async function waitForSelected(changeKey, label) {
622
- for (let attempt = 0; attempt < 80; attempt += 1) {
623
- if (await evaluate(cdp, sessionId, `document.querySelector('.change-row[aria-current="step"]')?.dataset.changeKey === ${JSON.stringify(changeKey)}`)) return;
624
- await delay(50);
625
- }
626
- const observed = await evaluate(cdp, sessionId, `({
627
- selected: document.querySelector('.change-row[aria-current="step"]')?.dataset.changeKey || null,
628
- pressed: document.querySelector('#review-play')?.getAttribute('aria-pressed'),
629
- label: document.querySelector('#review-play')?.textContent,
630
- status: document.querySelector('#review-status')?.textContent,
631
- reducedMotion: matchMedia('(prefers-reduced-motion: reduce)').matches,
632
- hidden: document.hidden
633
- })`);
634
- assert.fail(`${label} did not select ${changeKey} within the bounded wait: ${JSON.stringify(observed)}`);
635
- }
636
- async function waitForReviewFinished(label) {
637
- for (let attempt = 0; attempt < 400; attempt += 1) {
638
- const done = await evaluate(cdp, sessionId, `document.querySelector('#review-play').getAttribute('aria-pressed') === 'false' && document.querySelector('#review-play').textContent === 'Replay'`);
639
- if (done) return;
640
- await delay(50);
641
- }
642
- assert.fail(`${label} did not finish within the bounded wait`);
643
- }
644
- await navigateReady(file, readyCondition, 'architecture-delta navigator');
645
- const initial = await evaluate(cdp, sessionId, `({
646
- status: document.querySelector('#review-status').textContent,
647
- selected: document.querySelectorAll('.change-row[aria-current="step"]').length,
648
- current: document.querySelectorAll('[data-delta-review-current]').length,
649
- rows: document.querySelectorAll('.change-row').length
650
- })`);
651
- assert.deepEqual(initial, { status: 'Overview · 11 authored changes', selected: 0, current: 0, rows: 11 });
652
-
653
- await evaluate(cdp, sessionId, `document.querySelector('#review-play').click()`);
654
- await waitForSelected('relationship:fraud-check', 'architecture-delta initial playback');
655
- const advanced = await evaluate(cdp, sessionId, `({
656
- selected: document.querySelector('.change-row[aria-current="step"]')?.dataset.changeKey,
657
- pressed: document.querySelector('#review-play').getAttribute('aria-pressed')
658
- })`);
659
- assert.deepEqual(advanced, { selected: 'relationship:fraud-check', pressed: 'true' });
660
-
661
- await evaluate(cdp, sessionId, `document.querySelector('[role="tab"][data-target="base"]').click()`);
662
- const pausedKey = await evaluate(cdp, sessionId, `document.querySelector('.change-row[aria-current="step"]')?.dataset.changeKey`);
663
- await delay(1550);
664
- assert.equal(await evaluate(cdp, sessionId, `document.querySelector('.change-row[aria-current="step"]')?.dataset.changeKey`), pausedKey);
665
- assert.equal(await evaluate(cdp, sessionId, `document.querySelector('#review-play').getAttribute('aria-pressed')`), 'false');
666
-
667
- const overview = await evaluate(cdp, sessionId, `(() => {
668
- document.querySelector('[role="tab"][data-target="delta"]').click();
669
- document.querySelector('#review-overview').click();
670
- return {
671
- active: document.querySelector('[data-view="delta"]').hasAttribute('data-delta-review-active'),
672
- current: document.querySelectorAll('[data-delta-review-current]').length,
673
- selected: document.querySelectorAll('.change-row[aria-current="step"]').length
674
- };
675
- })()`);
676
- assert.deepEqual(overview, { active: false, current: 0, selected: 0 });
677
-
678
- await navigateReady(file, readyCondition, 'architecture-delta manual lifecycle navigator');
679
- await evaluate(cdp, sessionId, `document.querySelector('#review-play').click()`);
680
- await waitForSelected('relationship:fraud-check', 'architecture-delta previous control');
681
- const previousPause = await evaluate(cdp, sessionId, `(() => {
682
- document.querySelector('#review-previous').click();
683
- return {
684
- selected: document.querySelector('.change-row[aria-current="step"]')?.dataset.changeKey,
685
- pressed: document.querySelector('#review-play').getAttribute('aria-pressed')
686
- };
687
- })()`);
688
- assert.deepEqual(previousPause, { selected: 'component:fraud', pressed: 'false' });
689
- await delay(1450);
690
- assert.equal(await evaluate(cdp, sessionId, `document.querySelector('.change-row[aria-current="step"]')?.dataset.changeKey`), 'component:fraud');
691
-
692
- await evaluate(cdp, sessionId, `document.querySelector('#review-play').click()`);
693
- const nextPause = await evaluate(cdp, sessionId, `(() => {
694
- document.querySelector('#review-next').click();
695
- return {
696
- selected: document.querySelector('.change-row[aria-current="step"]')?.dataset.changeKey,
697
- pressed: document.querySelector('#review-play').getAttribute('aria-pressed')
698
- };
699
- })()`);
700
- assert.deepEqual(nextPause, { selected: 'relationship:fraud-check', pressed: 'false' });
701
-
702
- await evaluate(cdp, sessionId, `document.querySelector('#review-play').click()`);
703
- const rowPause = await evaluate(cdp, sessionId, `(() => {
704
- document.querySelector('.change-row[data-change-key="component:queue"]').click();
705
- return {
706
- selected: document.querySelector('.change-row[aria-current="step"]')?.dataset.changeKey,
707
- pressed: document.querySelector('#review-play').getAttribute('aria-pressed')
708
- };
709
- })()`);
710
- assert.deepEqual(rowPause, { selected: 'component:queue', pressed: 'false' });
711
-
712
- await navigateReady(file, readyCondition, 'architecture-delta focus lifecycle navigator');
713
- const focusedPause = await evaluate(cdp, sessionId, `(() => {
714
- document.querySelector('#review-play').click();
715
- document.querySelector('#review-next').focus();
716
- return {
717
- selected: document.querySelector('.change-row[aria-current="step"]')?.dataset.changeKey,
718
- pressed: document.querySelector('#review-play').getAttribute('aria-pressed')
719
- };
720
- })()`);
721
- assert.deepEqual(focusedPause, { selected: 'component:fraud', pressed: 'false' });
722
- await delay(1450);
723
- assert.equal(await evaluate(cdp, sessionId, `document.querySelector('.change-row[aria-current="step"]')?.dataset.changeKey`), 'component:fraud');
724
-
725
- await navigateReady(file, readyCondition, 'architecture-delta hidden lifecycle navigator');
726
- const hiddenPause = await evaluate(cdp, sessionId, `(() => {
727
- document.querySelector('#review-play').click();
728
- Object.defineProperty(document, 'hidden', { configurable: true, get: function () { return true; } });
729
- document.dispatchEvent(new Event('visibilitychange'));
730
- return {
731
- hidden: document.hidden,
732
- selected: document.querySelector('.change-row[aria-current="step"]')?.dataset.changeKey,
733
- pressed: document.querySelector('#review-play').getAttribute('aria-pressed')
734
- };
735
- })()`);
736
- assert.deepEqual(hiddenPause, { hidden: true, selected: 'component:fraud', pressed: 'false' });
737
- await delay(1450);
738
- assert.equal(await evaluate(cdp, sessionId, `document.querySelector('.change-row[aria-current="step"]')?.dataset.changeKey`), 'component:fraud');
739
-
740
- await navigateReady(file, readyCondition, 'architecture-delta print lifecycle navigator');
741
- const printPause = await evaluate(cdp, sessionId, `(() => {
742
- document.querySelector('#review-play').click();
743
- window.dispatchEvent(new Event('beforeprint'));
744
- return {
745
- status: document.querySelector('#review-status').textContent,
746
- selected: document.querySelectorAll('.change-row[aria-current="step"]').length,
747
- pressed: document.querySelector('#review-play').getAttribute('aria-pressed')
748
- };
749
- })()`);
750
- assert.deepEqual(printPause, { status: 'Overview · 11 authored changes', selected: 0, pressed: 'false' });
751
- await delay(1450);
752
- assert.equal(await evaluate(cdp, sessionId, `document.querySelectorAll('.change-row[aria-current="step"]').length`), 0);
753
-
754
- const keyboard = await evaluate(cdp, sessionId, `(() => {
755
- document.querySelector('details').open = true;
756
- var first = document.querySelector('.change-row');
757
- first.click();
758
- first.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }));
759
- var focused = document.activeElement.dataset.changeKey;
760
- document.activeElement.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', bubbles: true }));
761
- return { focused: focused, selected: document.querySelector('.change-row[aria-current="step"]').dataset.changeKey };
762
- })()`);
763
- assert.deepEqual(keyboard, { focused: 'relationship:fraud-check', selected: 'relationship:fraud-check' });
764
-
765
- await cdp.send('Emulation.setEmulatedMedia', { features: [{ name: 'prefers-reduced-motion', value: 'reduce' }] }, sessionId);
766
- await navigateReady(file, readyCondition, 'architecture-delta reduced-motion navigator');
767
- await evaluate(cdp, sessionId, `document.querySelector('#review-play').click()`);
768
- await delay(1550);
769
- const reduced = await evaluate(cdp, sessionId, `({
770
- selected: document.querySelector('.change-row[aria-current="step"]')?.dataset.changeKey,
771
- pressed: document.querySelector('#review-play').getAttribute('aria-pressed'),
772
- nextDisabled: document.querySelector('#review-next').disabled
773
- })`);
774
- assert.deepEqual(reduced, { selected: 'component:fraud', pressed: 'false', nextDisabled: false });
775
- await evaluate(cdp, sessionId, `document.querySelector('#review-next').click()`);
776
-
777
- await evaluate(cdp, sessionId, `document.querySelector('.change-row').click()`);
778
- await cdp.send('Emulation.setEmulatedMedia', { media: 'print' }, sessionId);
779
- await delay(200);
780
- const printState = await evaluate(cdp, sessionId, `({
781
- strip: getComputedStyle(document.querySelector('.review-strip')).display,
782
- base: getComputedStyle(document.querySelector('[data-view="base"]')).display,
783
- delta: getComputedStyle(document.querySelector('[data-view="delta"]')).display,
784
- head: getComputedStyle(document.querySelector('[data-view="head"]')).display,
785
- current: getComputedStyle(document.querySelector('[data-delta-review-current]')).opacity,
786
- same: getComputedStyle(document.querySelector('[data-view="delta"] [data-delta-state="same"]')).opacity
787
- })`);
788
- assert.deepEqual(printState, { strip: 'none', base: 'none', delta: 'block', head: 'none', current: '1', same: '1' });
789
- await cdp.send('Emulation.setEmulatedMedia', {
790
- media: 'screen',
791
- features: [{ name: 'prefers-reduced-motion', value: 'no-preference' }],
792
- }, sessionId);
793
-
794
- await navigateReady(file, readyCondition, 'architecture-delta tamper navigator');
795
- const tampered = await evaluate(cdp, sessionId, `(() => {
796
- var companion = document.querySelector('[data-view="delta"] g[data-edge-id="fraud-check"]');
797
- companion.parentNode.insertBefore(companion.cloneNode(true), companion.nextSibling);
798
- document.querySelector('.change-row[data-change-key="relationship:fraud-check"]').click();
799
- return {
800
- status: document.querySelector('#review-status').textContent,
801
- disabled: Array.from(document.querySelectorAll('.review-step,.change-row')).every(function (button) { return button.disabled; }),
802
- canvases: document.querySelectorAll('[data-view]').length
803
- };
804
- })()`);
805
- assert.deepEqual(tampered, { status: 'Review unavailable · compare identity mismatch', disabled: true, canvases: 3 });
806
-
807
- await navigateReady(file, readyCondition, 'architecture-delta finite navigator');
808
- await evaluate(cdp, sessionId, `document.querySelector('#review-play').click()`);
809
- await waitForReviewFinished('architecture-delta finite playback');
810
- const finished = await evaluate(cdp, sessionId, `({
811
- selected: document.querySelector('.change-row[aria-current="step"]')?.dataset.changeKey,
812
- label: document.querySelector('#review-play').textContent,
813
- pressed: document.querySelector('#review-play').getAttribute('aria-pressed')
814
- })`);
815
- assert.deepEqual(finished, { selected: 'relationship:publish-order', label: 'Replay', pressed: 'false' });
816
- await evaluate(cdp, sessionId, `document.querySelector('#review-play').click()`);
817
- const replayStarted = await evaluate(cdp, sessionId, `({
818
- selected: document.querySelector('.change-row[aria-current="step"]')?.dataset.changeKey,
819
- label: document.querySelector('#review-play').textContent,
820
- pressed: document.querySelector('#review-play').getAttribute('aria-pressed')
821
- })`);
822
- assert.deepEqual(replayStarted, { selected: 'component:fraud', label: 'Pause', pressed: 'true' });
823
- await waitForReviewFinished('architecture-delta replay playback');
824
- const replayFinished = await evaluate(cdp, sessionId, `({
825
- selected: document.querySelector('.change-row[aria-current="step"]')?.dataset.changeKey,
826
- label: document.querySelector('#review-play').textContent,
827
- pressed: document.querySelector('#review-play').getAttribute('aria-pressed')
828
- })`);
829
- assert.deepEqual(replayFinished, { selected: 'relationship:publish-order', label: 'Replay', pressed: 'false' });
830
-
831
- const exportProof = await withTimeout(evaluate(cdp, sessionId, String.raw`(async function () {
832
- var frames = Array.from(document.querySelectorAll('.snapshot-frame'));
833
- var explorers = frames.map(function (frame) {
834
- var child = frame.contentWindow;
835
- return Boolean(child && child.Archify && child.Archify.focus && child.Archify.routeProbe && child.document.querySelector('#btn-node-finder') && child.document.querySelector('#guided-view-play'));
836
- });
837
- var svgA = Archify.deltaExport.canonicalSvg();
838
- document.querySelector('#theme').click();
839
- document.querySelector('#preset').click();
840
- document.querySelector('.change-row').click();
841
- var svgB = Archify.deltaExport.canonicalSvg();
842
- var parsed = new DOMParser().parseFromString(svgB, 'image/svg+xml');
843
- var exportStyle = parsed.querySelector('style')?.textContent || '';
844
- var blob = await Archify.deltaExport.shareCard();
845
- var bytes = new Uint8Array(await blob.arrayBuffer());
846
- return {
847
- explorers: explorers,
848
- stable: svgA === svgB,
849
- reviewResidue: parsed.querySelectorAll('[data-delta-review-current]').length,
850
- boundaryStyle: exportStyle.includes('text[data-delta-boundary-state="added"]{fill:#34d399!important}'),
851
- markerStyle: exportStyle.includes('.delta-edge-marker[data-delta-state],.delta-boundary-marker[data-delta-state]{color:var(--delta)}'),
852
- frameStyle: exportStyle.includes('rect[data-graph-role="structural-frame"]'),
853
- boundaryMarkers: Array.from(parsed.querySelectorAll('.delta-boundary-marker')).map(function (marker) { return marker.textContent; }),
854
- type: blob.type,
855
- size: blob.size,
856
- signature: Array.from(bytes.slice(0, 8)).map(function (byte) { return byte.toString(16).padStart(2, '0'); }).join('')
857
- };
858
- })()`, true), 15_000, 'Architecture Delta export');
859
- assert.deepEqual(exportProof.explorers, [true, true]);
860
- assert.equal(exportProof.stable, true);
861
- assert.equal(exportProof.reviewResidue, 0);
862
- assert.equal(exportProof.boundaryStyle, true);
863
- assert.equal(exportProof.markerStyle, true);
864
- assert.equal(exportProof.frameStyle, true);
865
- assert.deepEqual(exportProof.boundaryMarkers, ['~', '~']);
866
- assert.equal(exportProof.type, 'image/png');
867
- assert.ok(exportProof.size > 20_000, `Architecture Delta Share Card is unexpectedly small (${exportProof.size} bytes)`);
868
- assert.equal(exportProof.signature, '89504e470d0a1a0a');
869
- console.log(`ok Architecture Delta navigator + export: exact identity, complete explorers, static SVG, and ${exportProof.size}-byte Share Card`);
870
- }
871
-
872
- async function captureShareCard(file, label) {
873
- await navigateReady(file, '!!(window.Archify && Archify.exportMenu && Archify.exportMenu.shareCard)', label);
874
- const sharePayload = await withTimeout(evaluate(cdp, sessionId, String.raw`(async function () {
875
- try {
876
- var blob = await Archify.exportMenu.shareCard();
877
- var bytes = new Uint8Array(await blob.arrayBuffer());
878
- var binary = '';
879
- for (var offset = 0; offset < bytes.length; offset += 32768) {
880
- binary += String.fromCharCode.apply(null, bytes.subarray(offset, offset + 32768));
881
- }
882
- return { ok: true, type: blob.type, size: blob.size, base64: btoa(binary) };
883
- } catch (error) {
884
- return { ok: false, error: String(error && error.message || error) };
885
- }
886
- })()`, true), 10_000, `${label} Share Card export`);
887
-
888
- assert.equal(sharePayload?.ok, true, sharePayload?.error || `${label} Share Card export failed`);
889
- assert.equal(sharePayload.type, 'image/png');
890
- assert.ok(sharePayload.size > 20_000, `${label} Share Card is unexpectedly small (${sharePayload.size} bytes)`);
891
-
892
- const png = Buffer.from(sharePayload.base64, 'base64');
893
- assert.equal(png.subarray(0, 8).toString('hex'), '89504e470d0a1a0a', `${label} output is not a PNG`);
894
- assert.equal(png.readUInt32BE(16), 1200, `${label} Share Card width`);
895
- assert.equal(png.readUInt32BE(20), 630, `${label} Share Card height`);
896
-
897
- const pngPath = path.join(tmp, `${label}.share-card.png`);
898
- fs.writeFileSync(pngPath, png);
899
- const pixels = execFileSync(ffmpeg, [
900
- '-v', 'error',
901
- '-i', pngPath,
902
- '-vf', 'scale=120:63',
903
- '-frames:v', '1',
904
- '-f', 'rawvideo',
905
- '-pix_fmt', 'rgb24',
906
- '-',
907
- ], { maxBuffer: 4 * 1024 * 1024 });
908
- const colors = new Set();
909
- const counts = new Map();
910
- for (let offset = 0; offset < pixels.length; offset += 3) {
911
- const color = pixels.subarray(offset, offset + 3).toString('hex');
912
- colors.add(color);
913
- counts.set(color, (counts.get(color) || 0) + 1);
914
- }
915
- const largestColorShare = Math.max(...counts.values()) / (pixels.length / 3);
916
- assert.ok(colors.size >= 24, `${label} Share Card has only ${colors.size} sampled colors`);
917
- assert.ok(largestColorShare < 0.96, `${label} Share Card is visually near-blank (${Math.round(largestColorShare * 100)}% one color)`);
918
- console.log(`ok ${label} Share Card: ${sharePayload.size} bytes, 1200x630, ${colors.size} sampled colors`);
919
- }
920
-
921
- async function captureCopiedShareCard(file, label) {
922
- await navigateReady(file, '!!(window.Archify && Archify.exportMenu && Archify.exportMenu.copyShareCard)', label);
923
- const copiedPayload = await withTimeout(evaluate(cdp, sessionId, String.raw`(async function () {
924
- try {
925
- Object.defineProperty(window, 'ClipboardItem', {
926
- configurable: true,
927
- value: function ClipboardItem(items) { this.items = items; }
928
- });
929
- Object.defineProperty(navigator, 'clipboard', {
930
- configurable: true,
931
- value: {
932
- write: async function (items) {
933
- window.__archifyCopiedShareCard = await Promise.resolve(items[0].items['image/png']);
934
- }
935
- }
936
- });
937
- window.alert = function (message) { window.__archifyCopyAlert = message; };
938
- await Archify.exportMenu.copyShareCard();
939
- var blob = window.__archifyCopiedShareCard;
940
- if (!blob) throw new Error(window.__archifyCopyAlert || 'clipboard received no blob');
941
- var bytes = new Uint8Array(await blob.arrayBuffer());
942
- var binary = '';
943
- for (var offset = 0; offset < bytes.length; offset += 32768) {
944
- binary += String.fromCharCode.apply(null, bytes.subarray(offset, offset + 32768));
945
- }
946
- return {
947
- ok: true,
948
- type: blob.type,
949
- size: blob.size,
950
- base64: btoa(binary),
951
- receipt: {
952
- format: document.documentElement.getAttribute('data-last-export-format'),
953
- width: document.documentElement.getAttribute('data-last-export-width'),
954
- height: document.documentElement.getAttribute('data-last-export-height'),
955
- canonical: document.documentElement.getAttribute('data-last-export-canonical'),
956
- error: document.documentElement.getAttribute('data-last-export-error')
957
- }
958
- };
959
- } catch (error) {
960
- return { ok: false, error: String(error && error.message || error) };
961
- }
962
- })()`, true), 10_000, `${label} Copy Share Card`);
963
-
964
- assert.equal(copiedPayload?.ok, true, copiedPayload?.error || `${label} Copy Share Card failed`);
965
- assert.equal(copiedPayload.type, 'image/png');
966
- assert.ok(copiedPayload.size > 20_000, `${label} copied Share Card is unexpectedly small`);
967
- const png = Buffer.from(copiedPayload.base64, 'base64');
968
- assert.equal(png.subarray(0, 8).toString('hex'), '89504e470d0a1a0a', `${label} copied output is not a PNG`);
969
- assert.equal(png.readUInt32BE(16), 1200, `${label} copied Share Card width`);
970
- assert.equal(png.readUInt32BE(20), 630, `${label} copied Share Card height`);
971
- assert.deepEqual(copiedPayload.receipt, {
972
- format: 'share-card',
973
- width: '1200',
974
- height: '630',
975
- canonical: 'true',
976
- error: null,
977
- });
978
- console.log(`ok ${label} Copy Share Card: ${copiedPayload.size} bytes, image/png, truthful receipt`);
979
- }
980
-
981
- async function captureRouteShareCard(file, label, sourceId, targetId, options = {}) {
982
- await navigateReady(file, '!!(window.Archify && Archify.routeProbe && Archify.exportMenu && Archify.exportMenu.downloadRouteShareCard)', label);
983
- const routePayload = await withTimeout(evaluate(cdp, sessionId, String.raw`(async function () {
984
- try {
985
- window.alert = function (message) { window.__archifyRouteAlert = message; };
986
- Archify.routeProbe.begin({ source: ${JSON.stringify(sourceId)}, focusNode: false });
987
- if (!Archify.routeProbe.choose(${JSON.stringify(targetId)}, { updateUrl: false })) {
988
- throw new Error('route did not resolve');
989
- }
990
- var snapshot = Archify.routeProbe.exportSnapshot();
991
- if (!snapshot) throw new Error('resolved route exposed no export snapshot');
992
- Archify.exportMenu.syncRouteShare();
993
- var routeMenuItem = document.querySelector('[data-action="route-share-card"]');
994
- var menuResolved = !!routeMenuItem && !routeMenuItem.hidden && !routeMenuItem.disabled;
995
- var svg = document.querySelector('.diagram-container svg');
996
- var firstEdgeKey = snapshot.edges[0].key;
997
- var primaryCarrier = Array.from(svg.querySelectorAll('[data-edge-key]')).find(function (element) {
998
- return element.getAttribute('data-edge-key') === firstEdgeKey && hasDrawableGeometry(element);
999
- });
1000
- if (!primaryCarrier) throw new Error('route exposed no primary geometry carrier');
1001
- var duplicateCarrier = primaryCarrier.cloneNode(true);
1002
- var duplicateGeometry = /^(path|line|polyline)$/i.test(duplicateCarrier.tagName)
1003
- ? duplicateCarrier
1004
- : duplicateCarrier.querySelector('path, line, polyline');
1005
- if (duplicateGeometry.tagName.toLowerCase() === 'path') {
1006
- duplicateGeometry.setAttribute('d', duplicateGeometry.getAttribute('d') + ' M 0 0 L 1 1');
1007
- }
1008
- svg.appendChild(duplicateCarrier);
1009
- var duplicateGeometryRejected = Archify.routeProbe.exportSnapshot() === null;
1010
- var duplicateExportError = '';
1011
- try { await Archify.exportMenu.shareCard({ variant: 'route' }); }
1012
- catch (error) { duplicateExportError = String(error && error.message || error); }
1013
- duplicateCarrier.remove();
1014
- var primaryGeometry = /^(path|line|polyline)$/i.test(primaryCarrier.tagName)
1015
- ? primaryCarrier
1016
- : primaryCarrier.querySelector('path, line, polyline');
1017
- var geometryAttribute = primaryGeometry.tagName.toLowerCase() === 'path' ? 'd' :
1018
- primaryGeometry.tagName.toLowerCase() === 'polyline' ? 'points' : 'x2';
1019
- var originalGeometry = primaryGeometry.getAttribute(geometryAttribute);
1020
- primaryGeometry.setAttribute(geometryAttribute, '');
1021
- var emptyGeometryRejected = Archify.routeProbe.exportSnapshot() === null;
1022
- var emptyGeometryExportError = '';
1023
- try { await Archify.exportMenu.shareCard({ variant: 'route' }); }
1024
- catch (error) { emptyGeometryExportError = String(error && error.message || error); }
1025
- primaryGeometry.setAttribute(geometryAttribute, originalGeometry);
1026
- await new Promise(function (resolve) {
1027
- requestAnimationFrame(function () { requestAnimationFrame(resolve); });
1028
- });
1029
- function stableLiveSnapshot() {
1030
- var clone = svg.cloneNode(true);
1031
- clone.style.removeProperty('transform');
1032
- clone.style.removeProperty('clip-path');
1033
- clone.removeAttribute('data-view-scale');
1034
- Array.from(clone.querySelectorAll('[data-legend-bridge-runtime]')).forEach(function (element) { element.remove(); });
1035
- return clone.outerHTML;
1036
- }
1037
- var liveBefore = stableLiveSnapshot();
1038
- var captured = [];
1039
- var downloads = [];
1040
- var originalCreateObjectURL = URL.createObjectURL.bind(URL);
1041
- var originalAnchorClick = HTMLAnchorElement.prototype.click;
1042
- var originalFillText = CanvasRenderingContext2D.prototype.fillText;
1043
- var headerMetrics = [];
1044
- URL.createObjectURL = function (blob) {
1045
- if (blob && blob.type && blob.type.indexOf('image/svg+xml') === 0) {
1046
- captured.push(blob.text());
1047
- }
1048
- return originalCreateObjectURL(blob);
1049
- };
1050
- HTMLAnchorElement.prototype.click = function () { downloads.push(this.download); };
1051
- CanvasRenderingContext2D.prototype.fillText = function (text, x, y) {
1052
- if (headerMetrics.length < 2 && (y === 62 || y === 87)) {
1053
- headerMetrics.push({
1054
- y: y,
1055
- text: String(text),
1056
- width: this.measureText(String(text)).width,
1057
- maxWidth: y === 62 ? 798 : 848
1058
- });
1059
- }
1060
- return originalFillText.apply(this, arguments);
1061
- };
1062
-
1063
- var blob;
1064
- var canonicalBlob;
1065
- var routeReceipt;
1066
- var ordinaryReceipt;
1067
- var routeFingerprints = [];
1068
- try {
1069
- blob = await Archify.exportMenu.downloadRouteShareCard();
1070
- routeReceipt = {
1071
- format: document.documentElement.getAttribute('data-last-export-format'),
1072
- variant: document.documentElement.getAttribute('data-last-export-variant'),
1073
- width: document.documentElement.getAttribute('data-last-export-width'),
1074
- height: document.documentElement.getAttribute('data-last-export-height'),
1075
- canonical: document.documentElement.getAttribute('data-last-export-canonical'),
1076
- routeStateClean: document.documentElement.getAttribute('data-last-export-route-state-clean'),
1077
- error: document.documentElement.getAttribute('data-last-export-error')
1078
- };
1079
- var routeSvgText = captured[0] ? await captured[0] : '';
1080
- function fingerprint(text) {
1081
- var hash = 2166136261;
1082
- for (var index = 0; index < text.length; index++) {
1083
- hash ^= text.charCodeAt(index);
1084
- hash = Math.imul(hash, 16777619);
1085
- }
1086
- return (hash >>> 0).toString(16);
1087
- }
1088
- routeFingerprints.push(fingerprint(routeSvgText));
1089
-
1090
- if (${JSON.stringify(options.journeyInvariance === true)}) {
1091
- async function captureJourneySource(action) {
1092
- action();
1093
- var captureIndex = captured.length;
1094
- await Archify.exportMenu.shareCard({ variant: 'route' });
1095
- routeFingerprints.push(fingerprint(await captured[captureIndex]));
1096
- }
1097
- await captureJourneySource(function () { Archify.routeProbe.selectJourneyIndex(0); });
1098
- await captureJourneySource(function () { Archify.routeProbe.selectJourneyIndex(Math.floor(snapshot.nodeIds.length / 2)); });
1099
- await captureJourneySource(function () { Archify.routeProbe.selectJourneyIndex(snapshot.nodeIds.length - 1); });
1100
- Archify.routeProbe.showOverview({ reveal: false });
1101
- var started = Archify.routeProbe.playJourney();
1102
- if (!started) throw new Error('Route Journey could not enter playing state for invariance check');
1103
- await captureJourneySource(function () {});
1104
- Archify.routeProbe.pauseJourney({ preserveElapsed: false });
1105
- await captureJourneySource(function () {});
1106
- document.documentElement.setAttribute('data-motion', 'still');
1107
- await captureJourneySource(function () {});
1108
- document.documentElement.setAttribute('data-motion', 'live');
1109
- Archify.routeProbe.showOverview({ reveal: false });
1110
- }
1111
-
1112
- var toBlobError = '';
1113
- var originalToBlob = HTMLCanvasElement.prototype.toBlob;
1114
- HTMLCanvasElement.prototype.toBlob = function (callback) { callback(null); };
1115
- try { await Archify.exportMenu.shareCard({ variant: 'route' }); }
1116
- catch (error) { toBlobError = String(error && error.message || error); }
1117
- finally { HTMLCanvasElement.prototype.toBlob = originalToBlob; }
1118
-
1119
- var missingToBlobError = '';
1120
- HTMLCanvasElement.prototype.toBlob = undefined;
1121
- try { await Archify.exportMenu.shareCard({ variant: 'route' }); }
1122
- catch (error) { missingToBlobError = String(error && error.message || error); }
1123
- finally { HTMLCanvasElement.prototype.toBlob = originalToBlob; }
1124
-
1125
- var missingContextError = '';
1126
- var originalGetContext = HTMLCanvasElement.prototype.getContext;
1127
- HTMLCanvasElement.prototype.getContext = function () { return null; };
1128
- try { await Archify.exportMenu.shareCard({ variant: 'route' }); }
1129
- catch (error) { missingContextError = String(error && error.message || error); }
1130
- finally { HTMLCanvasElement.prototype.getContext = originalGetContext; }
1131
-
1132
- var imageDecodeError = '';
1133
- var OriginalImage = window.Image;
1134
- function FailingImage() {}
1135
- Object.defineProperty(FailingImage.prototype, 'src', {
1136
- set: function () {
1137
- var instance = this;
1138
- queueMicrotask(function () {
1139
- if (typeof instance.onerror === 'function') instance.onerror(new Event('error'));
1140
- });
1141
- }
1142
- });
1143
- window.Image = FailingImage;
1144
- try { await Archify.exportMenu.shareCard({ variant: 'route' }); }
1145
- catch (error) { imageDecodeError = String(error && error.message || error); }
1146
- finally { window.Image = OriginalImage; }
1147
-
1148
- var unknownVariantError = '';
1149
- try { await Archify.exportMenu.shareCard({ variant: 'unknown' }); }
1150
- catch (error) { unknownVariantError = String(error && error.message || error); }
1151
-
1152
- var canonicalIndex = captured.length;
1153
- canonicalBlob = await Archify.exportMenu.shareCard();
1154
- var canonicalSvgText = captured[canonicalIndex] ? await captured[canonicalIndex] : '';
1155
- await Archify.exportMenu.run('share-card');
1156
- ordinaryReceipt = {
1157
- format: document.documentElement.getAttribute('data-last-export-format'),
1158
- variant: document.documentElement.getAttribute('data-last-export-variant'),
1159
- width: document.documentElement.getAttribute('data-last-export-width'),
1160
- height: document.documentElement.getAttribute('data-last-export-height'),
1161
- canonical: document.documentElement.getAttribute('data-last-export-canonical'),
1162
- routeStateClean: document.documentElement.getAttribute('data-last-export-route-state-clean'),
1163
- error: document.documentElement.getAttribute('data-last-export-error')
1164
- };
1165
- var svgDownloadIndex = captured.length;
1166
- await Archify.exportMenu.run('svg');
1167
- var exportedSvgText = captured[svgDownloadIndex] ? await captured[svgDownloadIndex] : '';
1168
- var svgReceipt = {
1169
- format: document.documentElement.getAttribute('data-last-export-format'),
1170
- variant: document.documentElement.getAttribute('data-last-export-variant'),
1171
- canonical: document.documentElement.getAttribute('data-last-export-canonical')
1172
- };
1173
- await Archify.exportMenu.run('png');
1174
- var pngReceipt = {
1175
- format: document.documentElement.getAttribute('data-last-export-format'),
1176
- variant: document.documentElement.getAttribute('data-last-export-variant'),
1177
- canonical: document.documentElement.getAttribute('data-last-export-canonical')
1178
- };
1179
-
1180
- var parser = new DOMParser();
1181
- var routeSvg = parser.parseFromString(routeSvgText, 'image/svg+xml').documentElement;
1182
- var canonicalSvg = parser.parseFromString(canonicalSvgText, 'image/svg+xml').documentElement;
1183
- var exportedSvg = parser.parseFromString(exportedSvgText, 'image/svg+xml').documentElement;
1184
- var matchedNodeIds = Array.from(routeSvg.querySelectorAll('[data-node-id][data-share-route-match]')).map(function (node) {
1185
- return { id: node.getAttribute('data-node-id'), step: Number(node.getAttribute('data-share-route-step')) };
1186
- }).sort(function (a, b) { return a.step - b.step; }).map(function (item) { return item.id; });
1187
- var edgeSteps = new Map();
1188
- Array.from(routeSvg.querySelectorAll('[data-edge-key][data-share-route-match]')).forEach(function (edge) {
1189
- edgeSteps.set(edge.getAttribute('data-edge-key'), Number(edge.getAttribute('data-share-route-step')));
1190
- });
1191
- var matchedEdgeKeys = Array.from(edgeSteps).sort(function (a, b) { return a[1] - b[1]; }).map(function (entry) { return entry[0]; });
1192
- var expectedEdgeKeys = snapshot.edges.map(function (edge) { return edge.key; });
1193
- var routeNodeIds = Array.from(routeSvg.querySelectorAll('[data-node-id]')).map(function (node) { return node.getAttribute('data-node-id'); }).sort();
1194
- var liveNodeIds = Array.from(svg.querySelectorAll('[data-node-id]')).map(function (node) { return node.getAttribute('data-node-id'); }).sort();
1195
- var routeEdgeKeys = Array.from(new Set(Array.from(routeSvg.querySelectorAll('[data-edge-key]')).map(function (edge) { return edge.getAttribute('data-edge-key'); }))).sort();
1196
- var liveEdgeKeys = Array.from(new Set(Array.from(svg.querySelectorAll('[data-edge-key]')).map(function (edge) { return edge.getAttribute('data-edge-key'); }))).sort();
1197
-
1198
- var bytes = new Uint8Array(await blob.arrayBuffer());
1199
- var binary = '';
1200
- for (var offset = 0; offset < bytes.length; offset += 32768) {
1201
- binary += String.fromCharCode.apply(null, bytes.subarray(offset, offset + 32768));
1202
- }
1203
-
1204
- await new Promise(function (resolve) {
1205
- requestAnimationFrame(function () { requestAnimationFrame(resolve); });
1206
- });
1207
- var liveAfter = stableLiveSnapshot();
1208
- var liveUnchanged = liveBefore === liveAfter;
1209
- var liveDiff = '';
1210
- if (!liveUnchanged) {
1211
- var diffIndex = 0;
1212
- while (diffIndex < liveBefore.length && diffIndex < liveAfter.length && liveBefore[diffIndex] === liveAfter[diffIndex]) diffIndex++;
1213
- liveDiff = 'at ' + diffIndex + ': before=' + liveBefore.slice(Math.max(0, diffIndex - 80), diffIndex + 160) +
1214
- ' after=' + liveAfter.slice(Math.max(0, diffIndex - 80), diffIndex + 160);
1215
- }
1216
-
1217
- var asyncClearIndex = captured.length;
1218
- var asyncClearPromise = Archify.exportMenu.shareCard({ variant: 'route' });
1219
- Archify.routeProbe.clear({ updateUrl: false, preserveView: true });
1220
- var asyncClearBlob = await asyncClearPromise;
1221
- var asyncClearFingerprint = fingerprint(await captured[asyncClearIndex]);
1222
- var hiddenAfterClear = routeMenuItem.hidden && routeMenuItem.disabled &&
1223
- getComputedStyle(routeMenuItem).display === 'none';
1224
- var staleError = '';
1225
- try { await Archify.exportMenu.shareCard({ variant: 'route' }); }
1226
- catch (error) { staleError = String(error && error.message || error); }
1227
- await Archify.exportMenu.downloadRouteShareCard();
1228
- var failedReceipt = {
1229
- format: document.documentElement.getAttribute('data-last-export-format'),
1230
- variant: document.documentElement.getAttribute('data-last-export-variant'),
1231
- errorFormat: document.documentElement.getAttribute('data-last-export-error-format'),
1232
- error: document.documentElement.getAttribute('data-last-export-error')
1233
- };
1234
-
1235
- return {
1236
- ok: true,
1237
- type: blob.type,
1238
- size: blob.size,
1239
- base64: btoa(binary),
1240
- snapshot: snapshot,
1241
- matchedNodeIds: matchedNodeIds,
1242
- matchedEdgeKeys: matchedEdgeKeys,
1243
- expectedEdgeKeys: expectedEdgeKeys,
1244
- routeShare: routeSvg.hasAttribute('data-share-route'),
1245
- routeLiveResidue: routeSvg.querySelectorAll('[data-route-match], [data-route-step], [data-route-start], [data-route-end], [data-route-journey-state], [data-route-journey-current], [data-route-journey-overlay]').length,
1246
- routeMotionResidue: (routeSvg.hasAttribute('data-animation') ? 1 : 0) + routeSvg.querySelectorAll('[data-animate]').length,
1247
- routeNodeIds: routeNodeIds,
1248
- liveNodeIds: liveNodeIds,
1249
- routeEdgeKeys: routeEdgeKeys,
1250
- liveEdgeKeys: liveEdgeKeys,
1251
- canonicalRouteResidue: canonicalSvg.querySelectorAll('[data-route-match], [data-route-step], [data-route-start], [data-route-end], [data-share-route-match], [data-share-route-step], [data-share-route-start], [data-share-route-end], [data-share-route-middle]').length,
1252
- canonicalRouteActive: canonicalSvg.hasAttribute('data-route-active') || canonicalSvg.hasAttribute('data-share-route'),
1253
- canonicalSize: canonicalBlob.size,
1254
- liveUnchanged: liveUnchanged,
1255
- liveDiff: liveDiff,
1256
- menuResolved: menuResolved,
1257
- duplicateGeometryRejected: duplicateGeometryRejected,
1258
- duplicateExportError: duplicateExportError,
1259
- emptyGeometryRejected: emptyGeometryRejected,
1260
- emptyGeometryExportError: emptyGeometryExportError,
1261
- toBlobError: toBlobError,
1262
- missingToBlobError: missingToBlobError,
1263
- missingContextError: missingContextError,
1264
- imageDecodeError: imageDecodeError,
1265
- unknownVariantError: unknownVariantError,
1266
- headerMetrics: headerMetrics,
1267
- routeLabelExecuted: !!window.__routeLabelExecuted,
1268
- svgReceipt: svgReceipt,
1269
- pngReceipt: pngReceipt,
1270
- exportedSvgRouteResidue: exportedSvg.hasAttribute('data-route-active') ||
1271
- exportedSvg.hasAttribute('data-share-route') ||
1272
- exportedSvg.querySelectorAll('[data-route-match], [data-route-step], [data-route-start], [data-route-end], [data-share-route-match], [data-share-route-step], [data-share-route-start], [data-share-route-end], [data-share-route-middle]').length > 0,
1273
- exportedSvgDualTheme: /prefers-color-scheme:\s*light/.test(Array.from(exportedSvg.querySelectorAll('style')).map(function (style) { return style.textContent; }).join('\n')),
1274
- asyncClearStable: asyncClearBlob && asyncClearBlob.type === 'image/png' && asyncClearFingerprint === routeFingerprints[0],
1275
- hiddenAfterClear: hiddenAfterClear,
1276
- staleSnapshot: Archify.routeProbe.exportSnapshot(),
1277
- staleError: staleError,
1278
- routeFingerprints: routeFingerprints,
1279
- downloads: downloads,
1280
- routeReceipt: routeReceipt,
1281
- ordinaryReceipt: ordinaryReceipt,
1282
- failedReceipt: failedReceipt
1283
- };
1284
- } finally {
1285
- URL.createObjectURL = originalCreateObjectURL;
1286
- HTMLAnchorElement.prototype.click = originalAnchorClick;
1287
- CanvasRenderingContext2D.prototype.fillText = originalFillText;
1288
- }
1289
- } catch (error) {
1290
- return { ok: false, error: String(error && error.message || error) };
1291
- }
1292
- })()`, true), 25_000, `${label} Route Card export`);
1293
-
1294
- assert.equal(routePayload?.ok, true, routePayload?.error || `${label} Route Card export failed`);
1295
- assert.equal(routePayload.type, 'image/png');
1296
- assert.ok(routePayload.size > 20_000, `${label} Route Card is unexpectedly small (${routePayload.size} bytes)`);
1297
- const png = Buffer.from(routePayload.base64, 'base64');
1298
- assert.equal(png.subarray(0, 8).toString('hex'), '89504e470d0a1a0a', `${label} Route Card is not a PNG`);
1299
- assert.equal(png.readUInt32BE(16), 1200, `${label} Route Card width`);
1300
- assert.equal(png.readUInt32BE(20), 630, `${label} Route Card height`);
1301
- const pngPath = path.join(tmp, `${label}.route-share-card.png`);
1302
- fs.writeFileSync(pngPath, png);
1303
- const sampledPixels = execFileSync(ffmpeg, [
1304
- '-v', 'error',
1305
- '-i', pngPath,
1306
- '-vf', 'scale=120:63',
1307
- '-frames:v', '1',
1308
- '-f', 'rawvideo',
1309
- '-pix_fmt', 'rgb24',
1310
- '-',
1311
- ], { maxBuffer: 4 * 1024 * 1024 });
1312
- const sampledColors = new Set();
1313
- for (let offset = 0; offset < sampledPixels.length; offset += 3) {
1314
- sampledColors.add(sampledPixels.subarray(offset, offset + 3).toString('hex'));
1315
- }
1316
- assert.ok(sampledColors.size >= 20, `${label} Route Card has only ${sampledColors.size} sampled colors`);
1317
- assert.equal(routePayload.routeShare, true);
1318
- assert.deepEqual(routePayload.matchedNodeIds, routePayload.snapshot.nodeIds);
1319
- assert.deepEqual(routePayload.matchedEdgeKeys, routePayload.expectedEdgeKeys);
1320
- assert.equal(routePayload.routeLiveResidue, 0);
1321
- assert.equal(routePayload.routeMotionResidue, 0);
1322
- assert.deepEqual(routePayload.routeNodeIds, routePayload.liveNodeIds);
1323
- assert.deepEqual(routePayload.routeEdgeKeys, routePayload.liveEdgeKeys);
1324
- assert.equal(routePayload.canonicalRouteResidue, 0);
1325
- assert.equal(routePayload.canonicalRouteActive, false);
1326
- assert.equal(routePayload.liveUnchanged, true, routePayload.liveDiff);
1327
- assert.equal(routePayload.menuResolved, true);
1328
- assert.equal(routePayload.duplicateGeometryRejected, true);
1329
- assert.match(routePayload.duplicateExportError, /Trace a route before exporting a Route Share Card/);
1330
- assert.equal(routePayload.emptyGeometryRejected, true);
1331
- assert.match(routePayload.emptyGeometryExportError, /Trace a route before exporting a Route Share Card/);
1332
- assert.match(routePayload.toBlobError, /canvas\.toBlob returned no data for Share Card/);
1333
- assert.match(routePayload.missingToBlobError, /canvas\.toBlob unavailable for Share Card/);
1334
- assert.match(routePayload.missingContextError, /2D canvas context unavailable for Share Card/);
1335
- assert.ok(routePayload.imageDecodeError);
1336
- assert.match(routePayload.unknownVariantError, /Unknown Share Card variant: unknown/);
1337
- assert.equal(routePayload.routeLabelExecuted, false);
1338
- assert.deepEqual(routePayload.headerMetrics.map((metric) => metric.y), [62, 87]);
1339
- assert.ok(routePayload.headerMetrics.every((metric) => metric.width <= metric.maxWidth + 0.5), `${label} title/subtitle overflowed the Share Card header`);
1340
- assert.deepEqual(routePayload.svgReceipt, { format: 'svg', variant: null, canonical: 'true' });
1341
- assert.deepEqual(routePayload.pngReceipt, { format: 'png', variant: null, canonical: 'true' });
1342
- assert.equal(routePayload.exportedSvgRouteResidue, false);
1343
- assert.equal(routePayload.exportedSvgDualTheme, true);
1344
- assert.equal(routePayload.asyncClearStable, true);
1345
- assert.equal(routePayload.hiddenAfterClear, true);
1346
- assert.equal(routePayload.staleSnapshot, null);
1347
- assert.match(routePayload.staleError, /Trace a route before exporting a Route Share Card/);
1348
- assert.ok(routePayload.routeFingerprints.every((fingerprint) => fingerprint === routePayload.routeFingerprints[0]), `${label} Route source changed across Journey state`);
1349
- assert.match(routePayload.downloads[0], /-route-share-card\.png$/);
1350
- assert.doesNotMatch(routePayload.downloads[0], /-route-.+-to-.+\.png$/);
1351
- assert.deepEqual(routePayload.routeReceipt, {
1352
- format: 'share-card',
1353
- variant: 'route',
1354
- width: '1200',
1355
- height: '630',
1356
- canonical: 'false',
1357
- routeStateClean: 'true',
1358
- error: null,
1359
- });
1360
- assert.deepEqual(routePayload.ordinaryReceipt, {
1361
- format: 'share-card',
1362
- variant: null,
1363
- width: '1200',
1364
- height: '630',
1365
- canonical: 'true',
1366
- routeStateClean: null,
1367
- error: null,
1368
- });
1369
- assert.equal(routePayload.failedReceipt.format, null);
1370
- assert.equal(routePayload.failedReceipt.variant, null);
1371
- assert.equal(routePayload.failedReceipt.errorFormat, 'share-card');
1372
- assert.match(routePayload.failedReceipt.error, /Trace a route before exporting a Route Share Card/);
1373
- if (options.expectedHops !== undefined) assert.equal(routePayload.snapshot.hops, options.expectedHops);
1374
- if (options.expectedSourceLabel !== undefined) assert.equal(routePayload.snapshot.source.label, options.expectedSourceLabel);
1375
- if (options.expectedTargetLabel !== undefined) assert.equal(routePayload.snapshot.target.label, options.expectedTargetLabel);
1376
- console.log(`ok ${label} Route Card: ${routePayload.size} bytes, ${routePayload.snapshot.nodeIds.length} nodes, ${routePayload.snapshot.edges.length} exact hops`);
1377
- }
1378
-
1379
- async function verifyDynamicReducedMotionRoute(file, label, sourceId, targetId) {
1380
- await cdp.send('Emulation.setEmulatedMedia', {
1381
- features: [{ name: 'prefers-reduced-motion', value: 'no-preference' }],
1382
- }, sessionId);
1383
- await navigateReady(file, '!!(window.Archify && Archify.routeProbe && Archify.exportMenu && Archify.motionGovernor)', label);
1384
-
1385
- async function sourceFingerprint() {
1386
- return withTimeout(evaluate(cdp, sessionId, String.raw`(async function () {
1387
- var originalCreateObjectURL = URL.createObjectURL.bind(URL);
1388
- var sourcePromise = null;
1389
- URL.createObjectURL = function (blob) {
1390
- if (!sourcePromise && blob && blob.type && blob.type.indexOf('image/svg+xml') === 0) sourcePromise = blob.text();
1391
- return originalCreateObjectURL(blob);
1392
- };
1393
- try {
1394
- await Archify.exportMenu.shareCard({ variant: 'route' });
1395
- var source = await sourcePromise;
1396
- var hash = 2166136261;
1397
- for (var index = 0; index < source.length; index++) {
1398
- hash ^= source.charCodeAt(index);
1399
- hash = Math.imul(hash, 16777619);
1400
- }
1401
- return (hash >>> 0).toString(16);
1402
- } finally {
1403
- URL.createObjectURL = originalCreateObjectURL;
1404
- }
1405
- })()`, true), 10_000, `${label} source fingerprint`);
1406
- }
1407
-
1408
- const setup = await evaluate(cdp, sessionId, `(function () {
1409
- Archify.routeProbe.begin({ source: ${JSON.stringify(sourceId)}, focusNode: false });
1410
- if (!Archify.routeProbe.choose(${JSON.stringify(targetId)}, { updateUrl: false })) return { resolved: false };
1411
- Archify.routeProbe.showOverview({ reveal: false });
1412
- return {
1413
- resolved: true,
1414
- started: Archify.routeProbe.playJourney(),
1415
- playing: Archify.routeProbe.isJourneyPlaying(),
1416
- motion: document.documentElement.getAttribute('data-motion')
1417
- };
1418
- })()`);
1419
- assert.deepEqual(setup, { resolved: true, started: true, playing: true, motion: 'live' });
1420
- const before = await sourceFingerprint();
1421
-
1422
- await cdp.send('Emulation.setEmulatedMedia', {
1423
- features: [{ name: 'prefers-reduced-motion', value: 'reduce' }],
1424
- }, sessionId);
1425
- let reduced = null;
1426
- for (let attempt = 0; attempt < 50; attempt += 1) {
1427
- reduced = await evaluate(cdp, sessionId, `({
1428
- matches: matchMedia('(prefers-reduced-motion: reduce)').matches,
1429
- motion: document.documentElement.getAttribute('data-motion'),
1430
- playing: Archify.routeProbe.isJourneyPlaying()
1431
- })`);
1432
- if (reduced.matches && reduced.motion === 'still' && !reduced.playing) break;
1433
- await delay(20);
1434
- }
1435
- assert.deepEqual(reduced, { matches: true, motion: 'still', playing: false });
1436
- const after = await sourceFingerprint();
1437
- assert.equal(after, before, `${label} source changed after dynamic reduced-motion paused Journey`);
1438
-
1439
- await cdp.send('Emulation.setEmulatedMedia', {
1440
- features: [{ name: 'prefers-reduced-motion', value: 'no-preference' }],
1441
- }, sessionId);
1442
- console.log(`ok ${label}: dynamic reduced-motion paused Journey without changing Route Card source`);
1443
- }
1444
-
1445
- async function captureRouteVisualMatrix(file, label, sourceId, targetId) {
1446
- await navigateReady(file, '!!(window.Archify && Archify.preset && Archify.routeProbe && Archify.exportMenu)', label);
1447
- const matrix = await withTimeout(evaluate(cdp, sessionId, String.raw`(async function () {
1448
- Archify.routeProbe.begin({ source: ${JSON.stringify(sourceId)}, focusNode: false });
1449
- if (!Archify.routeProbe.choose(${JSON.stringify(targetId)}, { updateUrl: false })) {
1450
- throw new Error('route did not resolve');
1451
- }
1452
- var identity = JSON.stringify(Archify.routeProbe.exportSnapshot());
1453
- var results = [];
1454
- for (var preset of ['classic', 'signal-flow', 'blueprint', 'editorial']) {
1455
- if (!Archify.preset.apply(preset)) throw new Error('could not apply preset ' + preset);
1456
- for (var theme of ['dark', 'light']) {
1457
- document.documentElement.setAttribute('data-theme', theme);
1458
- var blob = await Archify.exportMenu.shareCard({ variant: 'route' });
1459
- var bytes = new Uint8Array(await blob.arrayBuffer());
1460
- var hash = 2166136261;
1461
- for (var index = 0; index < bytes.length; index++) {
1462
- hash ^= bytes[index];
1463
- hash = Math.imul(hash, 16777619);
1464
- }
1465
- var view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
1466
- results.push({
1467
- preset: preset,
1468
- theme: theme,
1469
- type: blob.type,
1470
- size: blob.size,
1471
- width: view.getUint32(16),
1472
- height: view.getUint32(20),
1473
- hash: (hash >>> 0).toString(16),
1474
- identity: JSON.stringify(Archify.routeProbe.exportSnapshot())
1475
- });
1476
- }
1477
- }
1478
- return { identity: identity, results: results };
1479
- })()`, true), 20_000, `${label} Route visual matrix`);
1480
-
1481
- assert.equal(matrix.results.length, 8);
1482
- for (const result of matrix.results) {
1483
- assert.equal(result.type, 'image/png', `${label} ${result.preset}/${result.theme} MIME`);
1484
- assert.equal(result.width, 1200, `${label} ${result.preset}/${result.theme} width`);
1485
- assert.equal(result.height, 630, `${label} ${result.preset}/${result.theme} height`);
1486
- assert.ok(result.size > 20_000, `${label} ${result.preset}/${result.theme} is unexpectedly small`);
1487
- assert.equal(result.identity, matrix.identity, `${label} ${result.preset}/${result.theme} changed route identity`);
1488
- }
1489
- assert.equal(new Set(matrix.results.map((result) => result.hash)).size, 8, `${label} presets/themes should produce eight distinct PNGs`);
1490
- console.log(`ok ${label} Route visual matrix: Classic/Flow/Blueprint/Editorial x dark/light`);
1491
- }
1492
-
1493
- async function captureReachShareCard(file, label, originId, direction, options = {}) {
1494
- await navigateReady(file, '!!(window.Archify && Archify.focus && Archify.focus.reachabilitySnapshot && Archify.exportMenu && Archify.exportMenu.downloadReachShareCard)', label);
1495
- const reachPayload = await withTimeout(evaluate(cdp, sessionId, String.raw`(async function () {
1496
- try {
1497
- window.alert = function (message) { window.__archifyReachAlert = String(message); };
1498
- if (!Archify.focus.set(${JSON.stringify(originId)}, { toggle: false, updateUrl: false })) {
1499
- throw new Error('focus origin did not resolve');
1500
- }
1501
- if (!Archify.focus.reach(${JSON.stringify(direction)}, { toggle: false, updateUrl: false, reveal: false })) {
1502
- throw new Error('authored reach did not resolve');
1503
- }
1504
- var snapshot = Archify.focus.reachabilitySnapshot();
1505
- if (!snapshot) throw new Error('active authored reach exposed no export snapshot');
1506
- Archify.exportMenu.syncReachShare();
1507
- var reachMenuItem = document.querySelector('[data-action="reach-share-card"]');
1508
- var menuResolved = !!reachMenuItem && !reachMenuItem.hidden && !reachMenuItem.disabled &&
1509
- getComputedStyle(reachMenuItem).display !== 'none';
1510
- var svg = document.querySelector('.diagram-container svg');
1511
-
1512
- var firstEdge = snapshot.edges[0];
1513
- var primaryCarrier = Array.from(svg.querySelectorAll('[data-edge-key]')).find(function (element) {
1514
- return element.getAttribute('data-edge-key') === firstEdge.key && hasDrawableGeometry(element);
1515
- });
1516
- if (!primaryCarrier) throw new Error('reach exposed no primary geometry carrier');
1517
- var duplicateCarrier = primaryCarrier.cloneNode(true);
1518
- var duplicateGeometry = /^(path|line|polyline)$/i.test(duplicateCarrier.tagName)
1519
- ? duplicateCarrier
1520
- : duplicateCarrier.querySelector('path, line, polyline');
1521
- if (duplicateGeometry.tagName.toLowerCase() === 'path') {
1522
- duplicateGeometry.setAttribute('d', duplicateGeometry.getAttribute('d') + ' M 0 0 L 1 1');
1523
- }
1524
- svg.appendChild(duplicateCarrier);
1525
- var duplicateGeometryRejected = Archify.focus.reachabilitySnapshot() === null;
1526
- var duplicateExportError = '';
1527
- try { await Archify.exportMenu.shareCard({ variant: 'reach' }); }
1528
- catch (error) { duplicateExportError = String(error && error.message || error); }
1529
- duplicateCarrier.remove();
1530
- snapshot = Archify.focus.reachabilitySnapshot();
1531
- if (!snapshot) throw new Error('reach snapshot did not recover after geometry restoration');
1532
-
1533
- function stableLiveSnapshot() {
1534
- var clone = svg.cloneNode(true);
1535
- clone.style.removeProperty('transform');
1536
- clone.style.removeProperty('clip-path');
1537
- clone.removeAttribute('data-view-scale');
1538
- Array.from(clone.querySelectorAll('[data-legend-bridge-runtime]')).forEach(function (element) { element.remove(); });
1539
- return clone.outerHTML;
1540
- }
1541
- function fingerprintBytes(bytes) {
1542
- var hash = 2166136261;
1543
- for (var index = 0; index < bytes.length; index++) {
1544
- hash ^= bytes[index];
1545
- hash = Math.imul(hash, 16777619);
1546
- }
1547
- return (hash >>> 0).toString(16);
1548
- }
1549
- var liveBefore = stableLiveSnapshot();
1550
- var captured = [];
1551
- var downloads = [];
1552
- var originalCreateObjectURL = URL.createObjectURL.bind(URL);
1553
- var originalAnchorClick = HTMLAnchorElement.prototype.click;
1554
- URL.createObjectURL = function (blob) {
1555
- if (blob && blob.type && blob.type.indexOf('image/svg+xml') === 0) captured.push(blob.text());
1556
- return originalCreateObjectURL(blob);
1557
- };
1558
- HTMLAnchorElement.prototype.click = function () { downloads.push(this.download); };
1559
-
1560
- try {
1561
- var blob = await Archify.exportMenu.shareCard({ variant: 'reach' });
1562
- var reachSvgText = captured[0] ? await captured[0] : '';
1563
- var downloadedBlob = await Archify.exportMenu.downloadReachShareCard();
1564
- var reachReceipt = {
1565
- format: document.documentElement.getAttribute('data-last-export-format'),
1566
- variant: document.documentElement.getAttribute('data-last-export-variant'),
1567
- width: document.documentElement.getAttribute('data-last-export-width'),
1568
- height: document.documentElement.getAttribute('data-last-export-height'),
1569
- canonical: document.documentElement.getAttribute('data-last-export-canonical'),
1570
- routeStateClean: document.documentElement.getAttribute('data-last-export-route-state-clean'),
1571
- reachStateClean: document.documentElement.getAttribute('data-last-export-reach-state-clean'),
1572
- error: document.documentElement.getAttribute('data-last-export-error')
1573
- };
1574
-
1575
- var parser = new DOMParser();
1576
- var reachSvg = parser.parseFromString(reachSvgText, 'image/svg+xml').documentElement;
1577
- var matchedNodeIds = Array.from(reachSvg.querySelectorAll('[data-node-id][data-share-reach-match]')).map(function (node) {
1578
- return node.getAttribute('data-node-id');
1579
- });
1580
- var matchedEdgeKeys = Array.from(new Set(Array.from(reachSvg.querySelectorAll('[data-edge-key][data-share-reach-match]')).map(function (edge) {
1581
- return edge.getAttribute('data-edge-key');
1582
- })));
1583
- var reachNodeIds = Array.from(reachSvg.querySelectorAll('[data-node-id]')).map(function (node) {
1584
- return node.getAttribute('data-node-id');
1585
- }).sort();
1586
- var liveNodeIds = Array.from(svg.querySelectorAll('[data-node-id]')).map(function (node) {
1587
- return node.getAttribute('data-node-id');
1588
- }).sort();
1589
- var reachEdgeKeys = Array.from(new Set(Array.from(reachSvg.querySelectorAll('[data-edge-key]')).map(function (edge) {
1590
- return edge.getAttribute('data-edge-key');
1591
- }))).sort();
1592
- var liveEdgeKeys = Array.from(new Set(Array.from(svg.querySelectorAll('[data-edge-key]')).map(function (edge) {
1593
- return edge.getAttribute('data-edge-key');
1594
- }))).sort();
1595
- var reachStyles = Array.from(reachSvg.querySelectorAll('style')).map(function (style) { return style.textContent; }).join('\n');
1596
-
1597
- await new Promise(function (resolve) {
1598
- requestAnimationFrame(function () { requestAnimationFrame(resolve); });
1599
- });
1600
- var liveAfter = stableLiveSnapshot();
1601
-
1602
- var matrix = [];
1603
- if (${JSON.stringify(options.matrix === true)}) {
1604
- var identity = JSON.stringify(snapshot);
1605
- for (var preset of ['classic', 'signal-flow', 'blueprint', 'editorial']) {
1606
- if (!Archify.preset.apply(preset)) throw new Error('could not apply preset ' + preset);
1607
- for (var theme of ['dark', 'light']) {
1608
- document.documentElement.setAttribute('data-theme', theme);
1609
- var matrixBlob = await Archify.exportMenu.shareCard({ variant: 'reach' });
1610
- var matrixBytes = new Uint8Array(await matrixBlob.arrayBuffer());
1611
- var matrixView = new DataView(matrixBytes.buffer, matrixBytes.byteOffset, matrixBytes.byteLength);
1612
- matrix.push({
1613
- preset: preset,
1614
- theme: theme,
1615
- type: matrixBlob.type,
1616
- size: matrixBlob.size,
1617
- width: matrixView.getUint32(16),
1618
- height: matrixView.getUint32(20),
1619
- hash: fingerprintBytes(matrixBytes),
1620
- identity: JSON.stringify(Archify.focus.reachabilitySnapshot())
1621
- });
1622
- }
1623
- }
1624
- if (matrix.some(function (entry) { return entry.identity !== identity; })) {
1625
- throw new Error('visual matrix changed authored reach identity');
1626
- }
1627
- }
1628
-
1629
- Archify.focus.clearReach({ updateUrl: false });
1630
- Archify.exportMenu.syncReachShare();
1631
- var hiddenAfterClear = reachMenuItem.hidden && reachMenuItem.disabled &&
1632
- getComputedStyle(reachMenuItem).display === 'none';
1633
- var staleError = '';
1634
- try { await Archify.exportMenu.shareCard({ variant: 'reach' }); }
1635
- catch (error) { staleError = String(error && error.message || error); }
1636
- await Archify.exportMenu.downloadReachShareCard();
1637
- var failedReceipt = {
1638
- format: document.documentElement.getAttribute('data-last-export-format'),
1639
- variant: document.documentElement.getAttribute('data-last-export-variant'),
1640
- errorFormat: document.documentElement.getAttribute('data-last-export-error-format'),
1641
- error: document.documentElement.getAttribute('data-last-export-error')
1642
- };
1643
- var canonicalIndex = captured.length;
1644
- var canonicalBlob = await Archify.exportMenu.shareCard();
1645
- var canonicalSvgText = captured[canonicalIndex] ? await captured[canonicalIndex] : '';
1646
- var canonicalSvg = parser.parseFromString(canonicalSvgText, 'image/svg+xml').documentElement;
1647
- var canonicalReachResidue = canonicalSvg.hasAttribute('data-share-reach') ||
1648
- canonicalSvg.hasAttribute('data-reach-active') ||
1649
- canonicalSvg.querySelectorAll('[data-share-reach-match], [data-share-reach-origin], [data-share-reach-depth], [data-reach-match], [data-reach-origin], [data-reach-depth]').length > 0;
1650
-
1651
- var bytes = new Uint8Array(await blob.arrayBuffer());
1652
- var binary = '';
1653
- for (var offset = 0; offset < bytes.length; offset += 32768) {
1654
- binary += String.fromCharCode.apply(null, bytes.subarray(offset, offset + 32768));
1655
- }
1656
- return {
1657
- ok: true,
1658
- type: blob.type,
1659
- size: blob.size,
1660
- base64: btoa(binary),
1661
- snapshot: snapshot,
1662
- matchedNodeIds: matchedNodeIds,
1663
- matchedEdgeKeys: matchedEdgeKeys,
1664
- expectedEdgeKeys: snapshot.edges.map(function (edge) { return edge.key; }),
1665
- reachDirection: reachSvg.getAttribute('data-share-reach'),
1666
- originCount: reachSvg.querySelectorAll('[data-node-id][data-share-reach-origin]').length,
1667
- reachLiveResidue: reachSvg.hasAttribute('data-reach-active') || reachSvg.querySelectorAll('[data-reach-match], [data-reach-origin], [data-reach-depth]').length > 0,
1668
- routeResidue: reachSvg.hasAttribute('data-share-route') || reachSvg.querySelectorAll('[data-share-route-match], [data-share-route-step], [data-route-match], [data-route-step]').length > 0,
1669
- motionResidue: reachSvg.hasAttribute('data-animation') || reachSvg.querySelectorAll('[data-animate]').length > 0,
1670
- blueprintStaticRule: /data-preset=\"blueprint\"\]\[data-share-reach\][^}]*filter:\s*none/.test(reachStyles),
1671
- reachNodeIds: reachNodeIds,
1672
- liveNodeIds: liveNodeIds,
1673
- reachEdgeKeys: reachEdgeKeys,
1674
- liveEdgeKeys: liveEdgeKeys,
1675
- liveUnchanged: liveBefore === liveAfter,
1676
- menuResolved: menuResolved,
1677
- duplicateGeometryRejected: duplicateGeometryRejected,
1678
- duplicateExportError: duplicateExportError,
1679
- downloadStable: downloadedBlob && downloadedBlob.type === 'image/png',
1680
- downloads: downloads,
1681
- reachReceipt: reachReceipt,
1682
- hiddenAfterClear: hiddenAfterClear,
1683
- staleSnapshot: Archify.focus.reachabilitySnapshot(),
1684
- staleError: staleError,
1685
- failedReceipt: failedReceipt,
1686
- canonicalSize: canonicalBlob.size,
1687
- canonicalReachResidue: canonicalReachResidue,
1688
- matrix: matrix
1689
- };
1690
- } finally {
1691
- URL.createObjectURL = originalCreateObjectURL;
1692
- HTMLAnchorElement.prototype.click = originalAnchorClick;
1693
- }
1694
- } catch (error) {
1695
- return { ok: false, error: String(error && error.message || error) };
1696
- }
1697
- })()`, true), options.matrix ? 35_000 : 15_000, `${label} Reach Card export`);
1698
-
1699
- assert.equal(reachPayload?.ok, true, reachPayload?.error || `${label} Reach Card export failed`);
1700
- assert.equal(reachPayload.type, 'image/png');
1701
- assert.ok(reachPayload.size > 20_000, `${label} Reach Card is unexpectedly small (${reachPayload.size} bytes)`);
1702
- const png = Buffer.from(reachPayload.base64, 'base64');
1703
- assert.equal(png.subarray(0, 8).toString('hex'), '89504e470d0a1a0a', `${label} Reach Card is not a PNG`);
1704
- assert.equal(png.readUInt32BE(16), 1200, `${label} Reach Card width`);
1705
- assert.equal(png.readUInt32BE(20), 630, `${label} Reach Card height`);
1706
- if (options.outputPath) {
1707
- fs.mkdirSync(path.dirname(options.outputPath), { recursive: true });
1708
- fs.writeFileSync(options.outputPath, png);
1709
- }
1710
- assert.equal(reachPayload.reachDirection, direction);
1711
- assert.deepEqual(reachPayload.matchedNodeIds.slice().sort(), reachPayload.snapshot.nodeIds.slice().sort());
1712
- assert.deepEqual(reachPayload.matchedEdgeKeys.slice().sort(), reachPayload.expectedEdgeKeys.slice().sort());
1713
- assert.equal(reachPayload.originCount, 1);
1714
- assert.equal(reachPayload.reachLiveResidue, false);
1715
- assert.equal(reachPayload.routeResidue, false);
1716
- assert.equal(reachPayload.motionResidue, false);
1717
- assert.equal(reachPayload.blueprintStaticRule, true);
1718
- assert.deepEqual(reachPayload.reachNodeIds, reachPayload.liveNodeIds);
1719
- assert.deepEqual(reachPayload.reachEdgeKeys, reachPayload.liveEdgeKeys);
1720
- assert.equal(reachPayload.liveUnchanged, true);
1721
- assert.equal(reachPayload.menuResolved, true);
1722
- assert.equal(reachPayload.duplicateGeometryRejected, true);
1723
- assert.match(reachPayload.duplicateExportError, /Trace authored reach before exporting a Reach Share Card/);
1724
- assert.equal(reachPayload.downloadStable, true);
1725
- assert.match(reachPayload.downloads[0], new RegExp(`-${direction}-reach-share-card\\.png$`));
1726
- assert.deepEqual(reachPayload.reachReceipt, {
1727
- format: 'share-card',
1728
- variant: 'reach',
1729
- width: '1200',
1730
- height: '630',
1731
- canonical: 'false',
1732
- routeStateClean: null,
1733
- reachStateClean: 'true',
1734
- error: null,
1735
- });
1736
- assert.equal(reachPayload.hiddenAfterClear, true);
1737
- assert.equal(reachPayload.staleSnapshot, null);
1738
- assert.match(reachPayload.staleError, /Trace authored reach before exporting a Reach Share Card/);
1739
- assert.equal(reachPayload.failedReceipt.format, null);
1740
- assert.equal(reachPayload.failedReceipt.variant, null);
1741
- assert.equal(reachPayload.failedReceipt.errorFormat, 'share-card');
1742
- assert.match(reachPayload.failedReceipt.error, /Trace authored reach before exporting a Reach Share Card/);
1743
- assert.ok(reachPayload.canonicalSize > 20_000);
1744
- assert.equal(reachPayload.canonicalReachResidue, false);
1745
- if (options.matrix) {
1746
- assert.equal(reachPayload.matrix.length, 8);
1747
- assert.equal(new Set(reachPayload.matrix.map((entry) => entry.hash)).size, 8, `${label} Reach presets/themes should produce eight distinct PNGs`);
1748
- for (const entry of reachPayload.matrix) {
1749
- assert.equal(entry.type, 'image/png');
1750
- assert.equal(entry.width, 1200);
1751
- assert.equal(entry.height, 630);
1752
- assert.ok(entry.size > 20_000);
1753
- }
1754
- }
1755
- console.log(`ok ${label} Reach Card: ${reachPayload.size} bytes, ${reachPayload.snapshot.nodeIds.length} nodes, ${reachPayload.snapshot.edges.length} authored links`);
1756
- }
1757
-
1758
- await verifyResolvedLegendContract(legendOutputs);
1759
- await verifySemanticPassportDismissal(path.resolve(skillRoot, '../docs/gallery/artifacts/production-deployment.architecture.html'));
1760
- await verifyArchitectureDeltaNavigator(path.resolve(skillRoot, '../examples/checkout-platform-delta.html'));
1761
- await captureShareCard(output, 'architecture-wide');
1762
- await captureShareCard(sequenceOutput, 'sequence-tall');
1763
- await captureCopiedShareCard(output, 'architecture-wide');
1764
- await captureRouteShareCard(routeOutputs.architecture, 'architecture-route', 'users', 'api', { journeyInvariance: true });
1765
- await captureRouteShareCard(routeOutputs.workflow, 'workflow-route', 'user', 'approval');
1766
- await captureRouteShareCard(routeOutputs.sequence, 'sequence-route', 'web', 'db');
1767
- await captureRouteShareCard(routeOutputs.dataflow, 'dataflow-route', 'web', 'dashboard');
1768
- await captureRouteShareCard(routeOutputs.lifecycle, 'lifecycle-route', 'executing', 'cancelled');
1769
- await captureRouteShareCard(parallelOutput, 'parallel-route', 'users', 'cdn');
1770
- await captureRouteShareCard(specialRouteOutput, 'special-10-hop-route', 'Route_Source-01', 'Route_Target-10', {
1771
- expectedHops: 10,
1772
- expectedSourceLabel: specialSourceLabel,
1773
- expectedTargetLabel: specialTargetLabel,
1774
- });
1775
- await captureRouteVisualMatrix(routeOutputs.architecture, 'architecture-route', 'users', 'api');
1776
- await captureRouteVisualMatrix(routeOutputs.sequence, 'sequence-route', 'web', 'db');
1777
- await captureReachShareCard(routeOutputs.architecture, 'architecture-reach', 'users', 'downstream', { matrix: true });
1778
- await captureReachShareCard(routeOutputs.workflow, 'workflow-reach', 'user', 'downstream');
1779
- await captureReachShareCard(routeOutputs.sequence, 'sequence-reach', 'web', 'downstream');
1780
- await captureReachShareCard(routeOutputs.dataflow, 'dataflow-reach', 'web', 'downstream');
1781
- await captureReachShareCard(routeOutputs.lifecycle, 'lifecycle-reach', 'executing', 'downstream');
1782
- if (externalReachSource) {
1783
- assert.ok(fs.existsSync(externalReachSource), `external Reach Card source does not exist: ${externalReachSource}`);
1784
- await captureReachShareCard(
1785
- externalReachSource,
1786
- 'external-reach',
1787
- process.env.ARCHIFY_REACH_CARD_ORIGIN || 'router',
1788
- process.env.ARCHIFY_REACH_CARD_DIRECTION || 'downstream',
1789
- { outputPath: externalReachOutput },
1790
- );
1791
- console.log(`ok external Reach Card artifact: ${externalReachOutput}`);
1792
- }
1793
- await verifyDynamicReducedMotionRoute(routeOutputs.architecture, 'architecture-route reduced motion', 'users', 'api');
1794
- await navigateReady(output, '!!(window.Archify && Archify.motion && Archify.motion.canRecord())', 'motion artifact');
1795
-
1796
- const payload = await withTimeout(evaluate(cdp, sessionId, String.raw`(async function () {
1797
- try {
1798
- var blob = await Archify.motion.recordWebm({ duration: 1400, fps: 12 });
1799
- var bytes = new Uint8Array(await blob.arrayBuffer());
1800
- var binary = '';
1801
- for (var offset = 0; offset < bytes.length; offset += 32768) {
1802
- binary += String.fromCharCode.apply(null, bytes.subarray(offset, offset + 32768));
1803
- }
1804
- return { ok: true, type: blob.type, size: blob.size, base64: btoa(binary) };
1805
- } catch (error) {
1806
- return { ok: false, error: String(error && error.message || error) };
1807
- }
1808
- })()`, true), 20_000, 'WebM recording');
1809
- assert.equal(payload?.ok, true, payload?.error || 'WebM recording failed');
1810
- assert.match(payload.type, /^video\/webm/);
1811
- assert.ok(payload.size > 10_000, `WebM is unexpectedly small (${payload.size} bytes)`);
1812
-
1813
- const webm = path.join(tmp, 'motion.webm');
1814
- fs.writeFileSync(webm, Buffer.from(payload.base64, 'base64'));
1815
- const frameMd5 = execFileSync(ffmpeg, [
1816
- '-v', 'error',
1817
- '-i', webm,
1818
- '-vf', 'fps=6,scale=320:-2',
1819
- '-f', 'framemd5',
1820
- '-',
1821
- ], { encoding: 'utf8', maxBuffer: 4 * 1024 * 1024 });
1822
- const hashes = frameMd5
1823
- .split('\n')
1824
- .filter((line) => line && !line.startsWith('#'))
1825
- .map((line) => line.split(',').at(-1).trim());
1826
- const uniqueFrames = new Set(hashes);
1827
-
1828
- assert.ok(hashes.length >= 4, `decoded only ${hashes.length} WebM frames`);
1829
- assert.ok(uniqueFrames.size >= 2, 'decoded WebM frames are static');
1830
- console.log(`ok WebM artifact: ${payload.size} bytes, ${hashes.length} sampled frames, ${uniqueFrames.size} unique`);
1831
- } finally {
1832
- if (cdp && targetId) await withTimeout(cdp.send('Target.closeTarget', { targetId }), 500, 'target close').catch(() => {});
1833
- if (cdp) cdp.socket.close();
1834
- chromeProcess.kill('SIGTERM');
1835
- if (!(await waitForExit(chromeProcess, 1000))) {
1836
- chromeProcess.kill('SIGKILL');
1837
- await waitForExit(chromeProcess, 1000);
1838
- }
1839
- await removeTempTree(tmp);
1840
- }