@mohammadhprp/system-prompt 0.10.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 (347) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +35 -0
  3. package/bin/system-prompt.js +8 -0
  4. package/framework/README.md +163 -0
  5. package/framework/agents/README.md +49 -0
  6. package/framework/agents/backend-architect.md +146 -0
  7. package/framework/agents/researcher.md +79 -0
  8. package/framework/agents/reviewer.md +183 -0
  9. package/framework/agents/security-auditor.md +131 -0
  10. package/framework/commands/README.md +43 -0
  11. package/framework/commands/changelog.md +44 -0
  12. package/framework/commands/commit.md +31 -0
  13. package/framework/commands/learn.md +24 -0
  14. package/framework/commands/mr.md +46 -0
  15. package/framework/commands/pr.md +39 -0
  16. package/framework/commands/release.md +34 -0
  17. package/framework/commands/review.md +24 -0
  18. package/framework/commands/summarize-changes.md +49 -0
  19. package/framework/mcps/README.md +78 -0
  20. package/framework/mcps/excalidraw/README.md +37 -0
  21. package/framework/mcps/excalidraw/capabilities.md +54 -0
  22. package/framework/mcps/excalidraw/configs/opencode.json +8 -0
  23. package/framework/mcps/excalidraw/install.md +92 -0
  24. package/framework/mcps/excalidraw/troubleshooting.md +67 -0
  25. package/framework/mcps/figma-mcp-go/README.md +51 -0
  26. package/framework/mcps/figma-mcp-go/capabilities.md +190 -0
  27. package/framework/mcps/figma-mcp-go/configs/opencode.json +9 -0
  28. package/framework/mcps/figma-mcp-go/install.md +74 -0
  29. package/framework/mcps/figma-mcp-go/troubleshooting.md +99 -0
  30. package/framework/mcps/github-mcp/README.md +51 -0
  31. package/framework/mcps/github-mcp/capabilities.md +83 -0
  32. package/framework/mcps/github-mcp/configs/.env.example +1 -0
  33. package/framework/mcps/github-mcp/configs/opencode.json +13 -0
  34. package/framework/mcps/github-mcp/install.md +60 -0
  35. package/framework/mcps/github-mcp/troubleshooting.md +79 -0
  36. package/framework/mcps/gitlab-mcp/README.md +54 -0
  37. package/framework/mcps/gitlab-mcp/capabilities.md +216 -0
  38. package/framework/mcps/gitlab-mcp/configs/.env.example +2 -0
  39. package/framework/mcps/gitlab-mcp/configs/opencode.json +13 -0
  40. package/framework/mcps/gitlab-mcp/install.md +99 -0
  41. package/framework/mcps/gitlab-mcp/troubleshooting.md +116 -0
  42. package/framework/mcps/jira-mcp/README.md +53 -0
  43. package/framework/mcps/jira-mcp/capabilities.md +79 -0
  44. package/framework/mcps/jira-mcp/configs/.env.example +2 -0
  45. package/framework/mcps/jira-mcp/configs/opencode.json +13 -0
  46. package/framework/mcps/jira-mcp/install.md +94 -0
  47. package/framework/mcps/jira-mcp/troubleshooting.md +113 -0
  48. package/framework/mcps/laravel-boost/README.md +53 -0
  49. package/framework/mcps/laravel-boost/capabilities.md +92 -0
  50. package/framework/mcps/laravel-boost/configs/opencode.json +9 -0
  51. package/framework/mcps/laravel-boost/install.md +106 -0
  52. package/framework/mcps/laravel-boost/troubleshooting.md +119 -0
  53. package/framework/mcps/notion-mcp/README.md +58 -0
  54. package/framework/mcps/notion-mcp/capabilities.md +118 -0
  55. package/framework/mcps/notion-mcp/configs/opencode.json +9 -0
  56. package/framework/mcps/notion-mcp/install.md +70 -0
  57. package/framework/mcps/notion-mcp/troubleshooting.md +95 -0
  58. package/framework/mcps/playwright-mcp/README.md +50 -0
  59. package/framework/mcps/playwright-mcp/capabilities.md +149 -0
  60. package/framework/mcps/playwright-mcp/configs/opencode.json +9 -0
  61. package/framework/mcps/playwright-mcp/install.md +136 -0
  62. package/framework/mcps/playwright-mcp/troubleshooting.md +154 -0
  63. package/framework/mcps/supabase-mcp/README.md +66 -0
  64. package/framework/mcps/supabase-mcp/capabilities.md +127 -0
  65. package/framework/mcps/supabase-mcp/configs/opencode.json +9 -0
  66. package/framework/mcps/supabase-mcp/install.md +85 -0
  67. package/framework/mcps/supabase-mcp/troubleshooting.md +113 -0
  68. package/framework/memory/README.md +17 -0
  69. package/framework/memory/codebase-insights.md +6 -0
  70. package/framework/memory/user-preferences.md +5 -0
  71. package/framework/modes/README.md +52 -0
  72. package/framework/modes/audit.md +88 -0
  73. package/framework/plugins/README.md +65 -0
  74. package/framework/plugins/opencode-goal-plugin/README.md +45 -0
  75. package/framework/plugins/opencode-goal-plugin/capabilities.md +127 -0
  76. package/framework/plugins/opencode-goal-plugin/install.md +71 -0
  77. package/framework/plugins/opencode-goal-plugin/troubleshooting.md +112 -0
  78. package/framework/plugins/ponytail/README.md +44 -0
  79. package/framework/plugins/ponytail/capabilities.md +112 -0
  80. package/framework/plugins/ponytail/install.md +77 -0
  81. package/framework/plugins/ponytail/troubleshooting.md +116 -0
  82. package/framework/references/standards/api.md +44 -0
  83. package/framework/references/standards/architecture.md +43 -0
  84. package/framework/references/standards/database.md +43 -0
  85. package/framework/references/standards/debugging.md +44 -0
  86. package/framework/references/standards/documentation.md +43 -0
  87. package/framework/references/standards/logging.md +43 -0
  88. package/framework/references/standards/naming.md +43 -0
  89. package/framework/references/standards/observability.md +43 -0
  90. package/framework/references/standards/performance.md +43 -0
  91. package/framework/references/standards/pull-requests.md +43 -0
  92. package/framework/references/standards/security.md +43 -0
  93. package/framework/references/standards/testing.md +43 -0
  94. package/framework/references/templates/adr.md +28 -0
  95. package/framework/references/templates/api-spec.md +56 -0
  96. package/framework/references/templates/design-document.md +39 -0
  97. package/framework/references/templates/incident-report.md +38 -0
  98. package/framework/references/templates/postmortem.md +41 -0
  99. package/framework/references/templates/pull-request.md +34 -0
  100. package/framework/references/templates/runbook.md +48 -0
  101. package/framework/references/templates/task.md +27 -0
  102. package/framework/skills/README.md +68 -0
  103. package/framework/skills/agent-browser/SKILL.md +51 -0
  104. package/framework/skills/backend-best-practices/SKILL.md +136 -0
  105. package/framework/skills/backend-best-practices/examples.md +31 -0
  106. package/framework/skills/backend-best-practices/references/api-design.md +79 -0
  107. package/framework/skills/backend-best-practices/references/architecture-review.md +77 -0
  108. package/framework/skills/backend-best-practices/references/database-design.md +78 -0
  109. package/framework/skills/backend-best-practices/references/debugging.md +76 -0
  110. package/framework/skills/backend-best-practices/references/observability.md +78 -0
  111. package/framework/skills/backend-best-practices/references/performance.md +78 -0
  112. package/framework/skills/backend-best-practices/references/refactoring.md +77 -0
  113. package/framework/skills/backend-best-practices/references/security.md +80 -0
  114. package/framework/skills/backend-best-practices/references/testing.md +77 -0
  115. package/framework/skills/backend-engineer/SKILL.md +76 -0
  116. package/framework/skills/backend-engineer/examples.md +31 -0
  117. package/framework/skills/brainstorming/SKILL.md +159 -0
  118. package/framework/skills/brainstorming/examples.md +49 -0
  119. package/framework/skills/brainstorming/scripts/frame-template.html +213 -0
  120. package/framework/skills/brainstorming/scripts/helper.js +167 -0
  121. package/framework/skills/brainstorming/scripts/server.cjs +723 -0
  122. package/framework/skills/brainstorming/scripts/start-server.sh +209 -0
  123. package/framework/skills/brainstorming/scripts/stop-server.sh +120 -0
  124. package/framework/skills/brainstorming/visual-companion.md +291 -0
  125. package/framework/skills/brand-guidelines/LICENSE.txt +202 -0
  126. package/framework/skills/brand-guidelines/SKILL.md +73 -0
  127. package/framework/skills/code-review/SKILL.md +72 -0
  128. package/framework/skills/code-review/examples.md +31 -0
  129. package/framework/skills/design/SKILL.md +399 -0
  130. package/framework/skills/design/examples.md +34 -0
  131. package/framework/skills/diagram-design/SKILL.md +485 -0
  132. package/framework/skills/diagram-design/assets/example-architecture-dark.html +180 -0
  133. package/framework/skills/diagram-design/assets/example-architecture-full.html +192 -0
  134. package/framework/skills/diagram-design/assets/example-architecture.html +181 -0
  135. package/framework/skills/diagram-design/assets/example-bar-dark.html +127 -0
  136. package/framework/skills/diagram-design/assets/example-bar-full.html +103 -0
  137. package/framework/skills/diagram-design/assets/example-bar.html +127 -0
  138. package/framework/skills/diagram-design/assets/example-data-flow-dark.html +143 -0
  139. package/framework/skills/diagram-design/assets/example-data-flow-full.html +185 -0
  140. package/framework/skills/diagram-design/assets/example-data-flow.html +143 -0
  141. package/framework/skills/diagram-design/assets/example-datalake-dark.html +241 -0
  142. package/framework/skills/diagram-design/assets/example-datalake-full.html +246 -0
  143. package/framework/skills/diagram-design/assets/example-datalake.html +267 -0
  144. package/framework/skills/diagram-design/assets/example-dp-integration-dark.html +78 -0
  145. package/framework/skills/diagram-design/assets/example-dp-integration-full.html +88 -0
  146. package/framework/skills/diagram-design/assets/example-dp-integration.html +78 -0
  147. package/framework/skills/diagram-design/assets/example-dp-security-matrix-dark.html +31 -0
  148. package/framework/skills/diagram-design/assets/example-dp-security-matrix-full.html +32 -0
  149. package/framework/skills/diagram-design/assets/example-dp-security-matrix.html +88 -0
  150. package/framework/skills/diagram-design/assets/example-er-dark.html +200 -0
  151. package/framework/skills/diagram-design/assets/example-er-full.html +203 -0
  152. package/framework/skills/diagram-design/assets/example-er.html +200 -0
  153. package/framework/skills/diagram-design/assets/example-flowchart-dark.html +154 -0
  154. package/framework/skills/diagram-design/assets/example-flowchart-full.html +157 -0
  155. package/framework/skills/diagram-design/assets/example-flowchart.html +154 -0
  156. package/framework/skills/diagram-design/assets/example-gantt-dark.html +135 -0
  157. package/framework/skills/diagram-design/assets/example-gantt-full.html +125 -0
  158. package/framework/skills/diagram-design/assets/example-gantt.html +135 -0
  159. package/framework/skills/diagram-design/assets/example-high-level-dark.html +249 -0
  160. package/framework/skills/diagram-design/assets/example-high-level-full.html +245 -0
  161. package/framework/skills/diagram-design/assets/example-high-level-vertical-dark.html +272 -0
  162. package/framework/skills/diagram-design/assets/example-high-level-vertical-full.html +250 -0
  163. package/framework/skills/diagram-design/assets/example-high-level-vertical.html +323 -0
  164. package/framework/skills/diagram-design/assets/example-high-level.html +299 -0
  165. package/framework/skills/diagram-design/assets/example-it-state-dark.html +90 -0
  166. package/framework/skills/diagram-design/assets/example-it-state-full.html +69 -0
  167. package/framework/skills/diagram-design/assets/example-it-state.html +128 -0
  168. package/framework/skills/diagram-design/assets/example-layers-dark.html +121 -0
  169. package/framework/skills/diagram-design/assets/example-layers-full.html +124 -0
  170. package/framework/skills/diagram-design/assets/example-layers.html +121 -0
  171. package/framework/skills/diagram-design/assets/example-line-dark.html +109 -0
  172. package/framework/skills/diagram-design/assets/example-line-full.html +103 -0
  173. package/framework/skills/diagram-design/assets/example-line.html +109 -0
  174. package/framework/skills/diagram-design/assets/example-loop-dark.html +100 -0
  175. package/framework/skills/diagram-design/assets/example-loop-full.html +137 -0
  176. package/framework/skills/diagram-design/assets/example-loop-terminal.html +347 -0
  177. package/framework/skills/diagram-design/assets/example-loop.html +100 -0
  178. package/framework/skills/diagram-design/assets/example-medallion-dark.html +159 -0
  179. package/framework/skills/diagram-design/assets/example-medallion-full.html +201 -0
  180. package/framework/skills/diagram-design/assets/example-medallion.html +159 -0
  181. package/framework/skills/diagram-design/assets/example-nested-dark.html +130 -0
  182. package/framework/skills/diagram-design/assets/example-nested-full.html +133 -0
  183. package/framework/skills/diagram-design/assets/example-nested.html +134 -0
  184. package/framework/skills/diagram-design/assets/example-org-chart-dark.html +45 -0
  185. package/framework/skills/diagram-design/assets/example-org-chart-full.html +45 -0
  186. package/framework/skills/diagram-design/assets/example-org-chart.html +45 -0
  187. package/framework/skills/diagram-design/assets/example-process-dark.html +62 -0
  188. package/framework/skills/diagram-design/assets/example-process-full.html +72 -0
  189. package/framework/skills/diagram-design/assets/example-process.html +62 -0
  190. package/framework/skills/diagram-design/assets/example-pyramid-dark.html +117 -0
  191. package/framework/skills/diagram-design/assets/example-pyramid-full.html +120 -0
  192. package/framework/skills/diagram-design/assets/example-pyramid.html +117 -0
  193. package/framework/skills/diagram-design/assets/example-quadrant-consultant.html +164 -0
  194. package/framework/skills/diagram-design/assets/example-quadrant-dark.html +133 -0
  195. package/framework/skills/diagram-design/assets/example-quadrant-full.html +136 -0
  196. package/framework/skills/diagram-design/assets/example-quadrant.html +133 -0
  197. package/framework/skills/diagram-design/assets/example-radar-dark.html +137 -0
  198. package/framework/skills/diagram-design/assets/example-radar-full.html +133 -0
  199. package/framework/skills/diagram-design/assets/example-radar.html +137 -0
  200. package/framework/skills/diagram-design/assets/example-scatter-dark.html +139 -0
  201. package/framework/skills/diagram-design/assets/example-scatter-full.html +114 -0
  202. package/framework/skills/diagram-design/assets/example-scatter.html +139 -0
  203. package/framework/skills/diagram-design/assets/example-sequence-dark.html +220 -0
  204. package/framework/skills/diagram-design/assets/example-sequence-full.html +386 -0
  205. package/framework/skills/diagram-design/assets/example-sequence.html +220 -0
  206. package/framework/skills/diagram-design/assets/example-state-dark.html +145 -0
  207. package/framework/skills/diagram-design/assets/example-state-full.html +148 -0
  208. package/framework/skills/diagram-design/assets/example-state.html +145 -0
  209. package/framework/skills/diagram-design/assets/example-swimlane-dark.html +170 -0
  210. package/framework/skills/diagram-design/assets/example-swimlane-full.html +173 -0
  211. package/framework/skills/diagram-design/assets/example-swimlane.html +170 -0
  212. package/framework/skills/diagram-design/assets/example-timeline-dark.html +133 -0
  213. package/framework/skills/diagram-design/assets/example-timeline-full.html +136 -0
  214. package/framework/skills/diagram-design/assets/example-timeline.html +133 -0
  215. package/framework/skills/diagram-design/assets/example-tree-dark.html +171 -0
  216. package/framework/skills/diagram-design/assets/example-tree-full.html +174 -0
  217. package/framework/skills/diagram-design/assets/example-tree.html +171 -0
  218. package/framework/skills/diagram-design/assets/example-venn-dark.html +130 -0
  219. package/framework/skills/diagram-design/assets/example-venn-full.html +133 -0
  220. package/framework/skills/diagram-design/assets/example-venn.html +108 -0
  221. package/framework/skills/diagram-design/assets/icons.html +230 -0
  222. package/framework/skills/diagram-design/assets/index.html +333 -0
  223. package/framework/skills/diagram-design/assets/template-dark.html +82 -0
  224. package/framework/skills/diagram-design/assets/template-full.html +410 -0
  225. package/framework/skills/diagram-design/assets/template-terminal.html +170 -0
  226. package/framework/skills/diagram-design/assets/template.html +83 -0
  227. package/framework/skills/diagram-design/references/export.md +107 -0
  228. package/framework/skills/diagram-design/references/onboarding.md +268 -0
  229. package/framework/skills/diagram-design/references/primitive-annotation.md +36 -0
  230. package/framework/skills/diagram-design/references/primitive-icons.md +821 -0
  231. package/framework/skills/diagram-design/references/primitive-sketchy.md +43 -0
  232. package/framework/skills/diagram-design/references/primitive-terminal.md +76 -0
  233. package/framework/skills/diagram-design/references/style-guide.md +139 -0
  234. package/framework/skills/diagram-design/references/type-architecture.md +78 -0
  235. package/framework/skills/diagram-design/references/type-bar.md +48 -0
  236. package/framework/skills/diagram-design/references/type-data-flow.md +374 -0
  237. package/framework/skills/diagram-design/references/type-dp-integration.md +410 -0
  238. package/framework/skills/diagram-design/references/type-dp-security-matrix.md +379 -0
  239. package/framework/skills/diagram-design/references/type-er.md +23 -0
  240. package/framework/skills/diagram-design/references/type-flowchart.md +23 -0
  241. package/framework/skills/diagram-design/references/type-gantt.md +45 -0
  242. package/framework/skills/diagram-design/references/type-high-level.md +458 -0
  243. package/framework/skills/diagram-design/references/type-it-state.md +470 -0
  244. package/framework/skills/diagram-design/references/type-layers.md +26 -0
  245. package/framework/skills/diagram-design/references/type-line.md +44 -0
  246. package/framework/skills/diagram-design/references/type-loop.md +223 -0
  247. package/framework/skills/diagram-design/references/type-medallion.md +356 -0
  248. package/framework/skills/diagram-design/references/type-nested.md +22 -0
  249. package/framework/skills/diagram-design/references/type-org-chart.md +44 -0
  250. package/framework/skills/diagram-design/references/type-process.md +495 -0
  251. package/framework/skills/diagram-design/references/type-pyramid.md +33 -0
  252. package/framework/skills/diagram-design/references/type-quadrant.md +81 -0
  253. package/framework/skills/diagram-design/references/type-radar.md +80 -0
  254. package/framework/skills/diagram-design/references/type-scatter.md +39 -0
  255. package/framework/skills/diagram-design/references/type-sequence.md +35 -0
  256. package/framework/skills/diagram-design/references/type-state.md +21 -0
  257. package/framework/skills/diagram-design/references/type-swimlane.md +20 -0
  258. package/framework/skills/diagram-design/references/type-timeline.md +20 -0
  259. package/framework/skills/diagram-design/references/type-tree.md +24 -0
  260. package/framework/skills/diagram-design/references/type-venn.md +26 -0
  261. package/framework/skills/documentation/SKILL.md +74 -0
  262. package/framework/skills/documentation/examples.md +31 -0
  263. package/framework/skills/find-skills/SKILL.md +141 -0
  264. package/framework/skills/find-skills/examples.md +35 -0
  265. package/framework/skills/gitlab-mcp/SKILL.md +83 -0
  266. package/framework/skills/gitlab-mcp/examples.md +31 -0
  267. package/framework/skills/gitlab-mcp/references/code-review.md +110 -0
  268. package/framework/skills/gitlab-mcp/references/issues.md +141 -0
  269. package/framework/skills/gitlab-mcp/references/merge-requests.md +120 -0
  270. package/framework/skills/gitlab-mcp/references/pipelines.md +67 -0
  271. package/framework/skills/gitlab-mcp/references/search.md +17 -0
  272. package/framework/skills/gitlab-mcp/references/webhooks.md +32 -0
  273. package/framework/skills/gitlab-mcp/references/work-items.md +50 -0
  274. package/framework/skills/jira-mcp/SKILL.md +57 -0
  275. package/framework/skills/jira-mcp/examples.md +31 -0
  276. package/framework/skills/jira-mcp/references/comments.md +27 -0
  277. package/framework/skills/jira-mcp/references/issues.md +97 -0
  278. package/framework/skills/jira-mcp/references/projects.md +39 -0
  279. package/framework/skills/laravel-best-practices/SKILL.md +229 -0
  280. package/framework/skills/laravel-best-practices/examples.md +31 -0
  281. package/framework/skills/laravel-best-practices/references/advanced-queries.md +106 -0
  282. package/framework/skills/laravel-best-practices/references/architecture.md +202 -0
  283. package/framework/skills/laravel-best-practices/references/blade-views.md +36 -0
  284. package/framework/skills/laravel-best-practices/references/caching.md +70 -0
  285. package/framework/skills/laravel-best-practices/references/collections.md +44 -0
  286. package/framework/skills/laravel-best-practices/references/config.md +73 -0
  287. package/framework/skills/laravel-best-practices/references/db-performance.md +192 -0
  288. package/framework/skills/laravel-best-practices/references/eloquent.md +148 -0
  289. package/framework/skills/laravel-best-practices/references/error-handling.md +72 -0
  290. package/framework/skills/laravel-best-practices/references/events-notifications.md +52 -0
  291. package/framework/skills/laravel-best-practices/references/http-client.md +160 -0
  292. package/framework/skills/laravel-best-practices/references/mail.md +27 -0
  293. package/framework/skills/laravel-best-practices/references/migrations.md +121 -0
  294. package/framework/skills/laravel-best-practices/references/passport.md +197 -0
  295. package/framework/skills/laravel-best-practices/references/pennant.md +61 -0
  296. package/framework/skills/laravel-best-practices/references/pest-testing.md +166 -0
  297. package/framework/skills/laravel-best-practices/references/pulse.md +196 -0
  298. package/framework/skills/laravel-best-practices/references/queue-jobs.md +144 -0
  299. package/framework/skills/laravel-best-practices/references/routing.md +99 -0
  300. package/framework/skills/laravel-best-practices/references/scheduling.md +39 -0
  301. package/framework/skills/laravel-best-practices/references/scout.md +176 -0
  302. package/framework/skills/laravel-best-practices/references/security.md +198 -0
  303. package/framework/skills/laravel-best-practices/references/spatie-laravel-backup.md +222 -0
  304. package/framework/skills/laravel-best-practices/references/spatie-laravel-permission.md +272 -0
  305. package/framework/skills/laravel-best-practices/references/spatie-medialibrary.md +672 -0
  306. package/framework/skills/laravel-best-practices/references/style.md +125 -0
  307. package/framework/skills/laravel-best-practices/references/tailwindcss.md +112 -0
  308. package/framework/skills/laravel-best-practices/references/testing.md +43 -0
  309. package/framework/skills/laravel-best-practices/references/validation.md +75 -0
  310. package/framework/skills/lavish/SKILL.md +67 -0
  311. package/framework/skills/lavish/examples.md +31 -0
  312. package/framework/skills/notion-mcp/SKILL.md +57 -0
  313. package/framework/skills/notion-mcp/examples.md +31 -0
  314. package/framework/skills/notion-mcp/references/comments.md +112 -0
  315. package/framework/skills/notion-mcp/references/databases.md +193 -0
  316. package/framework/skills/notion-mcp/references/pages.md +235 -0
  317. package/framework/skills/skill-creator/LICENSE.txt +202 -0
  318. package/framework/skills/skill-creator/SKILL.md +485 -0
  319. package/framework/skills/skill-creator/agents/analyzer.md +274 -0
  320. package/framework/skills/skill-creator/agents/comparator.md +202 -0
  321. package/framework/skills/skill-creator/agents/grader.md +223 -0
  322. package/framework/skills/skill-creator/assets/eval_review.html +146 -0
  323. package/framework/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  324. package/framework/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  325. package/framework/skills/skill-creator/examples.md +31 -0
  326. package/framework/skills/skill-creator/references/schemas.md +430 -0
  327. package/framework/skills/skill-creator/scripts/__init__.py +0 -0
  328. package/framework/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  329. package/framework/skills/skill-creator/scripts/generate_report.py +326 -0
  330. package/framework/skills/skill-creator/scripts/improve_description.py +247 -0
  331. package/framework/skills/skill-creator/scripts/package_skill.py +136 -0
  332. package/framework/skills/skill-creator/scripts/quick_validate.py +103 -0
  333. package/framework/skills/skill-creator/scripts/run_eval.py +310 -0
  334. package/framework/skills/skill-creator/scripts/run_loop.py +328 -0
  335. package/framework/skills/skill-creator/scripts/utils.py +47 -0
  336. package/framework/styles/README.md +35 -0
  337. package/framework/styles/linear/DESIGN.md +478 -0
  338. package/framework/styles/linear/README.md +36 -0
  339. package/framework/styles/linear/assets/preview.jpg +0 -0
  340. package/framework/styles/raycast/DESIGN.md +495 -0
  341. package/framework/styles/raycast/README.md +35 -0
  342. package/framework/styles/raycast/assets/preview.jpg +0 -0
  343. package/package.json +33 -0
  344. package/src/agent-configs.js +96 -0
  345. package/src/catalog.js +145 -0
  346. package/src/cli.js +254 -0
  347. package/src/installer.js +303 -0
@@ -0,0 +1,458 @@
1
+ # High-Level
2
+
3
+ **Best for:** end-to-end data stack overviews — ingestion → storage → query → analytics → visualization — deployed on a container orchestrator (Kubernetes, ECS, Nomad). Combines a phase chevron banner, deployment boundary, orchestration bar, identity footer, and (optionally) a right-side vertical chevron strip for cross-cutting concerns (Orchestration, Security, Observability).
4
+
5
+ This type is **parametric**. The diagram is fully determined by a small list of inputs (chevrons, sources, components, connections). The formulas below tell you exactly where every shape lands given those inputs — two generations from the same inputs must produce visually identical SVG.
6
+
7
+ ---
8
+
9
+ ## 1. Inputs — the parameter contract
10
+
11
+ Before drawing, collect these from the user (or accept them as a YAML/JSON block). Everything in this reference is derived from these inputs. Don't invent geometry on the fly.
12
+
13
+ ```yaml
14
+ chevrons: # ordered left → right; reserved names auto-promote to vertical
15
+ - { name: "Data sources", columns: 1 }
16
+ - { name: "Ingestion", columns: 1 }
17
+ - { name: "Storage", columns: 1 }
18
+ - { name: "Transformation", columns: 1 }
19
+ - { name: "Visualization", columns: 1 }
20
+ - { name: "Orchestration", vertical: true } # reserved → pairs with the bar
21
+ - { name: "Security", vertical: true, color: "#b85450" } # tinted to match the Identity bar below
22
+ - { name: "Observability", vertical: true } # reserved → pairs with crosscut #2
23
+
24
+ sources: # external; rendered in the dashed zone on the left
25
+ - { name: "PostgreSQL", type: "db", connects_to: ["NiFi"] }
26
+ - { name: "SFTP drop", type: "ftp", connects_to: ["NiFi"] }
27
+ - { name: "Web forms", type: "web", connects_to: ["NiFi"] }
28
+ - { name: "Legacy", type: "legacy", connects_to: ["NiFi"] }
29
+
30
+ components: # inside the cluster, plus bars and cross-cutting rows
31
+ - { name: "NiFi", chevron: "Ingestion", kind: node, icon: nifi, role: "COLL" }
32
+ - { name: "MinIO", chevron: "Storage", kind: node, icon: minio, role: "STORE", focal: true }
33
+ - { name: "Trino", chevron: "Storage", kind: node, icon: trino, role: "VIRT" }
34
+ - { name: "Notebooks", chevron: "Transformation", kind: node, icon: jupyter, role: "ANLZ" }
35
+ - { name: "Superset", chevron: "Visualization", kind: node, icon: superset, role: "DASH" }
36
+ - { name: "Airflow", chevron: "Orchestration", kind: bar, icon: airflow, subtitle: "Apache Airflow" }
37
+ - { name: "Identity", chevron: "Security", kind: cross-cutting, icon: keycloak, subtitle: "Keycloak · LDAP · OIDC", color: "#b85450" }
38
+ - { name: "Monitoring", chevron: "Observability", kind: cross-cutting, icon: prometheus, subtitle: "Prometheus · Grafana · Loki" }
39
+
40
+ connections: # explicit edges; focal-touching ones become accent automatically
41
+ - { from: "NiFi", to: "MinIO", style: "primary" }
42
+ - { from: "NiFi", to: "Trino", style: "secondary" }
43
+ - { from: "MinIO", to: "Notebooks", style: "primary" }
44
+ - { from: "Trino", to: "MinIO", style: "query" } # read-back (dashed)
45
+ - { from: "Notebooks", to: "Superset", style: "secondary" }
46
+ - { from: "Airflow", to: ["NiFi", "Trino", "Notebooks"], style: "trigger" }
47
+
48
+ focal: "MinIO" # exactly one; defaults to first kind=node under "Storage"
49
+ dark: false
50
+ ```
51
+
52
+ **Reserved chevron names** (always vertical, even if `vertical: true` is omitted): `Orchestration`, `Security`, `Observability`, `Governance`, `Backup`.
53
+
54
+ **Reserved `kind` values:**
55
+ - `node` — a standard box inside the cluster (default).
56
+ - `bar` — a horizontal strip spanning the cluster top. Typically one (Orchestration); see §5 for the pairing rule.
57
+ - `cross-cutting` — a horizontal strip spanning the body width (stops at the strip margin), stacked below the cluster. **Zero or more allowed**; each stacks 44 px below the previous (§2.5) and pairs 1:1 with a vertical chevron (§5).
58
+
59
+ **Optional `color`** (per component, hex string): tints the component's container and content while leaving connectors untouched. See §3.4. Use sparingly — a custom color is a semantic flag (e.g., red = security concern), not decoration.
60
+
61
+ **Source `type` values** → icon mapping (use `references/primitive-icons.md`):
62
+ - `db` → `database`
63
+ - `ftp` → `bucket` or upload arrow
64
+ - `web` → `internet`
65
+ - `legacy` → `server`
66
+ - `api` → `api`
67
+ - Any explicit icon name in `primitive-icons.md` is also accepted.
68
+
69
+ ---
70
+
71
+ ## 2. Layout formulas — deterministic geometry
72
+
73
+ Every coordinate below is derived from the inputs. **No hardcoded numbers in examples that aren't justified here.**
74
+
75
+ ### 2.1 Canvas
76
+
77
+ ```
78
+ has_vertical = any(c.vertical or c.name in reserved_names for c in chevrons)
79
+ right_strip_w = 28 if has_vertical else 0
80
+ strip_margin = 8 if has_vertical else 0 # gap between body and right strip
81
+ effective_w = 1000 - right_strip_w - strip_margin # 1000 or 964
82
+
83
+ n_cross = count of components with kind == "cross-cutting"
84
+ strip_y_bot = max(428, 388 + n_cross * 44 - 4) # extends to last crosscut row
85
+ viewBox_h = max(540, strip_y_bot + 112) # 112 reserved for legend
86
+ viewBox = f"0 0 1000 {viewBox_h}"
87
+ ```
88
+
89
+ Every horizontal element (chevron banner, cluster, orchestration bar, identity / cross-cutting bars) ends at `effective_w`. The right strip sits at `x = 1000 - right_strip_w` (= 972). The 8-px band between them is visual breathing room — never put content there.
90
+
91
+ `viewBox_h` grows when more than one cross-cutting bar is declared: 1 crosscut → 540, 2 → 600 (or 584 if you want it tight; the rule rounds to the next multiple of 20 for clean grids).
92
+
93
+ ### 2.2 Horizontal chevron banner
94
+
95
+ ```
96
+ y_banner = 4
97
+ h_banner = 28
98
+ horizontals = [c for c in chevrons if not c.vertical and c.name not in reserved_names]
99
+ sum_columns = sum(c.columns for c in horizontals)
100
+ base_unit = floor_to_4(effective_w / sum_columns) # multiple of 4
101
+ widths = [max(120, base_unit * c.columns) for c in horizontals]
102
+ widths[-1] += effective_w - sum(widths) # trailing absorbs remainder
103
+ x_boundaries = cumulative_sum([0] + widths) # length sum_columns+1
104
+ chevron_cx(C) = (x_boundaries[index(C)] + x_boundaries[index(C)+1]) / 2
105
+ ```
106
+
107
+ **Polygon shapes:**
108
+ - First (leftmost): `(x0,4) (x1-12,4) (x1,18) (x1-12,32) (x0,32)`
109
+ - Middle: `(x0,4) (x1-12,4) (x1,18) (x1-12,32) (x0,32) (x0+12,18)`
110
+ - Last (rightmost): `(x0,4) (effective_w,4) (effective_w,32) (x0,32) (x0+12,18)`
111
+
112
+ Fills alternate `#2d3142` / `#3d4460` (light mode) or `#3d4460` / `#4a5270` (dark mode). Labels: paper-colored mono `font-size=7`, `letter-spacing=0.14em`, `text-anchor=middle`, centered at `chevron_cx, 21`.
113
+
114
+ **Color override** (per chevron, both horizontal and vertical): a chevron may declare an optional `color: "#hex"` that replaces the alternation fill for that one chevron. Use it to flag a phase that pairs with a custom-colored component (e.g., `Security` chevron in red when the Identity bar uses `color: "#b85450"`). Rules:
115
+
116
+ - Override applies to the polygon fill only. The label stays paper-colored — never recolor chevron labels.
117
+ - The alternation index doesn't shift; neighboring chevrons keep their natural fill, even if it produces two adjacent same-fill chevrons. Don't try to "fix" this — overrides should be rare (≤ 2 per diagram).
118
+ - In dark mode, use the same hex unless contrast against paper labels suffers; if it does, pick a darker shade for dark mode and document it as a `color_dark` field on that chevron.
119
+ - A chevron color override is independent of any paired component's color, but pairing them (same hex on chevron + bar) is the conventional way to make the column "read" as one concern.
120
+
121
+ ### 2.3 Source zone (dashed, external)
122
+
123
+ ```
124
+ sources_x = 4
125
+ sources_y = 40
126
+ sources_w = x_boundaries[1] - 8 # width of the first chevron, minus 4px gutter each side
127
+ sources_h = 336
128
+ ```
129
+
130
+ Stroke: `rgba(45,49,66,0.20)`, `stroke-width=0.8`, `stroke-dasharray=6,3`, `rx=6`. Zone fill: `rgba(45,49,66,0.02)`.
131
+
132
+ ### 2.4 Cluster boundary (solid)
133
+
134
+ ```
135
+ cluster_x = x_boundaries[1] + 4 # starts at end of source zone + 4px gutter
136
+ cluster_y = 40
137
+ cluster_w = effective_w - cluster_x # extends to right strip / canvas edge
138
+ cluster_h = 336
139
+ ```
140
+
141
+ Stroke: `rgba(45,49,66,0.18)`, `stroke-width=1.2`, `rx=8`. Fill: `rgba(45,49,66,0.02)`. K8s icon + label at `(cluster_x + 16, 352)` (icon) and `(cluster_x + 40, 362)` (text).
142
+
143
+ ### 2.5 Cross-cutting bars (identity, observability, …)
144
+
145
+ Zero or more `kind: cross-cutting` components stack below the cluster. Each gets its own 40-px row with a 4-px gap.
146
+
147
+ ```
148
+ crosscuts = [c for c in components if c.kind == "cross-cutting"] # ordered as declared
149
+ cross_x = 4
150
+ cross_y(k) = 388 + k * 44 # 388, 432, 476, …
151
+ cross_w = effective_w - 4 # spans body width, stops at the strip margin
152
+ cross_h = 40
153
+ ```
154
+
155
+ Stroke: `rgba(45,49,66,0.20)`, `stroke-width=0.8`, `rx=6`. Fill: `rgba(45,49,66,0.05)`. Icon at `(16, cross_y(k) + 10)`, name centered at `(effective_w / 2, cross_y(k) + 22)`, subtitle at `(effective_w / 2, cross_y(k) + 34)`.
156
+
157
+ Reserved cross-cutting *concerns* (informational; user can name the actual bar whatever they want):
158
+ - **Identity / Security** — Keycloak, LDAP/AD, Okta, Auth0, OIDC providers
159
+ - **Observability** — Prometheus + Grafana, Datadog, OpenTelemetry, Loki
160
+ - **Backup / DR** — Velero, Restic, snapshot orchestrators
161
+ - **Governance / Lineage** — OpenMetadata, DataHub, Apache Atlas
162
+ - **Secrets / config** — Vault, Sealed Secrets, External Secrets
163
+
164
+ Each cross-cutting bar pairs 1:1 with a vertical chevron in the right strip (§5).
165
+
166
+ ### 2.6 Orchestration bar component (inside cluster)
167
+
168
+ ```
169
+ bar_x = cluster_x + 12
170
+ bar_y = 52
171
+ bar_w = cluster_w - 24
172
+ bar_h = 44
173
+ ```
174
+
175
+ Stroke: `rgba(45,49,66,0.18)`, `stroke-width=0.8`, `rx=4`. Fill: `rgba(45,49,66,0.05)`. Tool icon at the far right (`bar_x + bar_w - 50, 58`); name centered at `(bar_x + bar_w/2, 71)`; subtitle at `(bar_x + bar_w/2, 84)`.
176
+
177
+ ### 2.7 Component nodes (inside cluster)
178
+
179
+ ```
180
+ node_w = 152
181
+ node_h = 80 # focal same height, accent border
182
+ node_cx(N) = chevron_cx(N.chevron) # ← non-negotiable
183
+ node_x(N) = node_cx(N) - node_w/2
184
+ ```
185
+
186
+ If a chevron has K nodes assigned, stack them vertically:
187
+
188
+ ```
189
+ first_top_y = 120 if any bar in this column else 64
190
+ gap = 16
191
+ row_top(k) = first_top_y + k * (node_h + gap) # k = 0..K-1
192
+ ```
193
+
194
+ **Focal node:** `fill="rgba(235,108,54,0.08)"`, `stroke="#eb6c36"`, `stroke-width=1.2`. Title text in accent color. All other nodes: white fill, `stroke=rgba(45,49,66,0.25)`, `stroke-width=1`.
195
+
196
+ Role badge top-left at `(node_x+8, node_y+6)`, size 12 high. Icon top-right at `(node_x+node_w-32, node_y+6)`, 24×24, monochrome via `currentColor`. Name centered at `(node_cx, node_y+44)` size 11 sans semibold. Subtitle at `(node_cx, node_y+56)` size 8 mono muted.
197
+
198
+ ### 2.8 Source nodes (inside dashed zone)
199
+
200
+ ```
201
+ src_node_w = sources_w - 8
202
+ src_node_h = 64 # uniform; chosen to fit ≤ 4 sources
203
+ src_node_x = sources_x + 4
204
+ src_first_top_y = 60
205
+ src_gap = 16
206
+ src_row_top(k) = src_first_top_y + k * (src_node_h + src_gap)
207
+ ```
208
+
209
+ Same role-badge / icon / name / subtitle pattern as cluster nodes (icon at `src_node_x+54, row_top(k)+6`; name centered at `src_node_x+src_node_w/2, row_top(k)+42`; subtitle one line below). Role badge text: `EXT`. Caps at 4 sources; for more, split into a separate diagram.
210
+
211
+ ### 2.9 Right strip — vertical chevrons
212
+
213
+ ```
214
+ strip_x = 1000 - right_strip_w # 972 when present
215
+ strip_w = 28
216
+ verticals = [c for c in chevrons if c.vertical or c.name in reserved_names]
217
+ strip_y_top = 40
218
+ strip_y_bot = max(428, 388 + n_cross * 44 - 4) # extends to last crosscut row (see §2.1)
219
+ strip_h_total = strip_y_bot - strip_y_top
220
+ heights = [floor_to_4(strip_h_total / len(verticals))] * len(verticals)
221
+ heights[-1] += strip_h_total - sum(heights) # last absorbs remainder
222
+ ```
223
+
224
+ Examples:
225
+ - 2 verticals (Orchestration + Security), 1 crosscut → `heights = [192, 196]`, layout `[40..232, 232..428]`.
226
+ - 3 verticals (Orchestration + Security + Observability), 2 crosscuts → `strip_y_bot = 472`, `strip_h_total = 432`, `heights = [144, 144, 144]`, layout `[40..184, 184..328, 328..472]`.
227
+
228
+ Adjacent edges share the same y (no gap), like horizontal chevrons share x at their boundary.
229
+
230
+ **Polygon shapes** (top-to-bottom flow, mirrors horizontal §2.2):
231
+ - First (topmost): flat top, point at bottom — `(strip_x, y0) (strip_x+strip_w, y0) (strip_x+strip_w, y1-12) (strip_x+strip_w/2, y1) (strip_x, y1-12)`
232
+ - Middle: notch on top, point on bottom — `(strip_x, y0) (strip_x+strip_w/2, y0+12) (strip_x+strip_w, y0) (strip_x+strip_w, y1-12) (strip_x+strip_w/2, y1) (strip_x, y1-12)`
233
+ - Last (bottommost): notch on top, flat bottom — `(strip_x, y0) (strip_x+strip_w/2, y0+12) (strip_x+strip_w, y0) (strip_x+strip_w, y1) (strip_x, y1)`
234
+
235
+ Fills alternate `#2d3142` / `#3d4460` (same palette as horizontals). Labels: paper-colored mono `font-size=7`, `letter-spacing=0.14em`, **rotated −90°**, anchored at `(strip_x + strip_w/2, (y0+y1)/2)`.
236
+
237
+ Vertical chevrons honor the per-chevron `color` override documented in §2.2 — apply the hex to the polygon fill, leave the rotated label paper-colored. Pair the override with the same hex on the chevron's paired bar/crosscut to bind them visually as one concern.
238
+
239
+ ---
240
+
241
+ ## 3. Connector rules (mandatory)
242
+
243
+ These are non-negotiable. Pick the style **automatically** from the topology — do not let the user override style on focal-touching or bar-originating edges.
244
+
245
+ | `style` | Stroke | Width | Dash | Marker | When required |
246
+ |---|---|---|---|---|---|
247
+ | `primary` | `#eb6c36` | 1.2 | — | `arrow-accent` | Every edge whose endpoint is the `focal` node. |
248
+ | `secondary` | `#4f5d75` | 1.0 | — | `arrow` | Default for source→component and component→component when neither endpoint is focal. |
249
+ | `trigger` | `#4f5d75` | 1.0 | `4,3` | `arrow-sm` | Every edge originating from a `kind: bar` component. |
250
+ | `query` | `rgba(45,49,66,0.30)` | 1.0 | `4,3` | `arrow` | Read-back edges (e.g., focal ↔ Trino). |
251
+
252
+ **Defs block** (required, exactly these four markers):
253
+
254
+ ```svg
255
+ <defs>
256
+ <marker id="arrow" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#4f5d75"/></marker>
257
+ <marker id="arrow-accent" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#eb6c36"/></marker>
258
+ <marker id="arrow-sm" markerWidth="6" markerHeight="5" refX="5" refY="2.5" orient="auto"><polygon points="0 0, 6 2.5, 0 5" fill="#4f5d75"/></marker>
259
+ <marker id="arrow-dim" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="rgba(45,49,66,0.45)"/></marker>
260
+ </defs>
261
+ ```
262
+
263
+ ### 3.1 Exit / entry sides (non-negotiable)
264
+
265
+ | Edge kind | Exit side of source | Entry side of target |
266
+ |---|---|---|
267
+ | Source → cluster node | **right** of source node | **left** of target |
268
+ | Component → component (within cluster) | **right** | **left** |
269
+ | Bar component → node | **bottom** of bar | **top** of node |
270
+ | Cross-cutting bar | — (emits no edges) | — |
271
+ | Vertical chevron | — (labels only; emits no edges) | — |
272
+
273
+ ### 3.2 Routing
274
+
275
+ - Orthogonal elbows, **at most two bends** per path.
276
+ - Use a Q-bezier 8-px corner radius at every bend.
277
+ - Z-order: draw **all connectors before any node rectangle** (so node fills mask the line ends).
278
+ - Exactly one `marker-end` per `<path>` / `<line>`. Never both `marker-start` and `marker-end`.
279
+ - Labels: every `primary` and `secondary` connector gets a label (small mono, opaque paper-filled rect mask behind). `trigger` and `query` connectors are unlabelled.
280
+
281
+ ### 3.3 Crossings
282
+
283
+ - Avoid. Re-route via the chevron divider trunk (§4) before accepting a crossing.
284
+ - If unavoidable, the path drawn second carries a 6-px arc hop over the first.
285
+
286
+ ### 3.4 Component color override
287
+
288
+ A component may declare an optional `color: "#hex"` (CSS color string). The override **only** retints the component's container and content — connectors are never recolored. Edges keep their topology-driven style from §3.
289
+
290
+ **Where the color is applied** (given `C = color`):
291
+
292
+ | Element | Light mode | Dark mode |
293
+ |---|---|---|
294
+ | Container fill (`rect` body) | `rgba(C, 0.06)` | `rgba(C, 0.10)` |
295
+ | Container stroke | `rgba(C, 0.35)` (`stroke-width=1` for nodes, `0.8` for bars) | `rgba(C, 0.45)` |
296
+ | Role badge stroke (nodes) | `rgba(C, 0.40)` | `rgba(C, 0.55)` |
297
+ | Role badge text (nodes) | `rgba(C, 0.85)` | `rgba(C, 1.0)` |
298
+ | Icon fill / stroke | `C` | lighten `C` by ~15% (or use `C` if already light) |
299
+ | Name text | `C` | lighten `C` |
300
+ | Subtitle text | **unchanged** (`muted`) | **unchanged** (`muted`) |
301
+ | Connectors touching this component | **unchanged** (still topology-driven) | **unchanged** |
302
+
303
+ The subtitle stays muted because it's parenthetical metadata — only the primary identity (name + icon + border) carries the color signal.
304
+
305
+ **Rules**:
306
+
307
+ - **Never on the focal node.** The focal node is already colored with the accent (§2.7). A `color` on the focal node is ignored — accent wins.
308
+ - **Never on source nodes.** Sources live outside the cluster and stay neutral.
309
+ - **Cap at 2 custom-colored components** per diagram (in addition to the focal). Three or more colored things erases the signal — the same reason §1 limits accent to 1–2 elements.
310
+ - **No color on connectors.** If you find yourself wanting a colored edge, the right move is to pick a different `style` from §3, not to override.
311
+
312
+ **Semantic uses** (recommended):
313
+ - `#b85450` (rust-red) — Security / Identity (Keycloak, Vault)
314
+ - `#5a7d9a` (slate-blue) — Observability (Prometheus, Datadog)
315
+ - `#7a8c47` (olive-green) — Governance / Lineage (OpenMetadata)
316
+ - `#8c6d3f` (warm-brown) — Backup / DR
317
+
318
+ Stick to these unless the user's brand demands otherwise. Random hex per component is exactly the failure mode this skill avoids.
319
+
320
+ ---
321
+
322
+ ## 4. Block branching rules (fan-out)
323
+
324
+ The single biggest reproducibility hazard. Fix these rules and the diagram becomes predictable.
325
+
326
+ ### 4.1 Source fan-out (one source → N components)
327
+
328
+ ```
329
+ exit_x = source.right
330
+ trunk_x = cluster_x - 8 # 4-px gutter before cluster border
331
+ ```
332
+
333
+ Path per target: `M exit_x,source_cy → H trunk_x → V target_cy → H target.left`. Use Q-bezier corners.
334
+
335
+ ### 4.2 Component fan-out (one component → N components)
336
+
337
+ ```
338
+ exit_x = node.right
339
+ trunk_x = x_boundaries[index(source.chevron) + 1] + 4 # 4 px past the chevron divider
340
+ ```
341
+
342
+ Path per target: `M exit_x,source_cy → H trunk_x → V target_cy → H target.left`.
343
+
344
+ ### 4.3 Fan-out cap
345
+
346
+ **Max 3 outgoing edges per node.** Above 3, introduce a hub (usually the `focal` node). The chevron banner is the legend; if a node is fanning out to four downstream targets, it's secretly the hub — make it explicit.
347
+
348
+ ### 4.4 Bar drops (Airflow → N nodes)
349
+
350
+ ```
351
+ drop_x(target) = target.cx
352
+ drop_y_start = bar.bottom
353
+ drop_y_end = target.top
354
+ ```
355
+
356
+ Straight vertical line, `style: trigger`. One per target. No bends — bar drops never elbow.
357
+
358
+ ### 4.5 Source vertical staggering
359
+
360
+ When multiple sources connect to the same single target (e.g. four sources → NiFi), stagger their entry y on the target:
361
+
362
+ ```
363
+ entry_y(k) = target.top + 8 + k * (target_h - 16) / (N - 1) # k = 0..N-1, evenly spaced
364
+ ```
365
+
366
+ This avoids overlapping arrowheads at the target's left edge.
367
+
368
+ ---
369
+
370
+ ## 5. Vertical chevrons — semantics
371
+
372
+ Reserved names `Orchestration`, `Security`, `Observability`, `Governance`, `Backup` always render in the right strip (§2.9). Any chevron with `vertical: true` is treated as a reserved-style vertical regardless of name. The rules:
373
+
374
+ - **Pairing rule (mandatory, 1:1):** every vertical chevron pairs with exactly one cross-spanning component, and every cross-spanning component pairs with exactly one vertical chevron. The two component kinds that pair:
375
+ - `kind: bar` — lives inside the cluster (top row). Conventionally paired with `Orchestration`.
376
+ - `kind: cross-cutting` — lives below the cluster, one row per component. Paired with `Security`, `Observability`, `Governance`, etc.
377
+
378
+ If the inputs declare a vertical chevron without a paired component (or vice versa), halt and ask the user — the diagram is incomplete.
379
+
380
+ - **Count constraint:** `len(verticals) == len(bars) + len(crosscuts)`. The right strip is split evenly among all verticals (§2.9), so visual alignment between a chevron and its bar/row is approximate — the *label* is what matters, not the y-pixel match.
381
+
382
+ - **Ordering convention:** declare verticals top-down in the order: bar-paired first (Orchestration), then crosscut-paired in the same order the crosscuts appear below the cluster. This keeps the visual reading order consistent.
383
+
384
+ - **No edges:** vertical chevrons emit no connectors themselves. They are *labels for a column of cross-cutting concern*.
385
+
386
+ - **No node placement:** no `kind: node` may be assigned to a vertical chevron. Nodes always belong to a horizontal phase.
387
+
388
+ - **Right strip presence:** if any vertical chevron exists, the right strip is reserved (`effective_w = 964`) and **all** horizontal chevron widths and cluster geometry shrink accordingly. Do not draw a vertical chevron on top of the cluster.
389
+
390
+ The visual contract: the vertical chevron's column visually "owns" the bar/cross-cutting row at its approximate y-band. Orchestration (top of strip) ↔ Airflow bar (top of cluster). Security ↔ Identity bar. Observability ↔ monitoring bar (below identity). And so on.
391
+
392
+ ---
393
+
394
+ ## 6. Dark mode
395
+
396
+ When `dark: true`, swap these tokens:
397
+
398
+ | Token | Light | Dark |
399
+ |---|---|---|
400
+ | Page paper | `#f5f5f5` | `#1c1f2e` |
401
+ | Ink | `#2d3142` | `#f5f5f5` |
402
+ | Muted text | `#4f5d75` | `rgba(245,245,245,0.65)` |
403
+ | Chevron dark fill | `#2d3142` | `#3d4460` |
404
+ | Chevron light fill | `#3d4460` | `#4a5270` |
405
+ | Chevron label | `#f5f5f5` | `#f5f5f5` (unchanged) |
406
+ | Dashed border | `rgba(45,49,66,0.20)` | `rgba(245,245,245,0.22)` |
407
+ | Cluster border | `rgba(45,49,66,0.18)` | `rgba(245,245,245,0.18)` |
408
+ | Node fill | white | `rgba(245,245,245,0.06)` |
409
+ | Node stroke | `rgba(45,49,66,0.25)` | `rgba(245,245,245,0.20)` |
410
+ | Focal fill | `rgba(235,108,54,0.08)` | `rgba(240,138,89,0.12)` |
411
+ | Focal stroke | `#eb6c36` | `#f08a59` |
412
+ | Accent connector | `#eb6c36` | `#f08a59` |
413
+ | Dot pattern | `rgba(45,49,66,0.10)` | `rgba(245,245,245,0.10)` |
414
+
415
+ ---
416
+
417
+ ## 7. Reproducibility checklist (the taste gate)
418
+
419
+ Before emitting SVG, verify **every** item. If any fails, fix it — don't ship.
420
+
421
+ 1. Every cluster `node.cx` equals its chevron's `cx` (§2.2 + §2.7). This is what makes the chevron banner a real legend.
422
+ 2. Every chevron `width` is a multiple of 4 and ≥ 120.
423
+ 3. The reserved right strip (28 px) exists **iff** any vertical chevron is declared. If yes, `effective_w = 972`; if no, `effective_w = 1000`.
424
+ 4. Exactly **one** `focal` node. If `focal` is unset in inputs, default to the first `kind: node` under chevron "Storage".
425
+ 5. Every edge whose endpoint is the focal node uses `style: primary` (accent stroke + `arrow-accent` marker).
426
+ 6. Every edge originating from a `kind: bar` component uses `style: trigger` (dashed + `arrow-sm`).
427
+ 7. The cross-cutting bar (if any) emits **no** edges.
428
+ 8. No node has > 3 outgoing edges, or if it does, it is the declared `focal` / hub.
429
+ 9. All `<path>` and `<line>` connectors are emitted **before** any node `<rect>` (z-order).
430
+ 10. Each vertical chevron pairs **1:1** with exactly one `bar` or `cross-cutting` component (§5 pairing rule). `len(verticals) == len(bars) + len(crosscuts)`.
431
+ 11. `viewBox_h = max(540, strip_y_bot + 112)` — grow the canvas when multiple crosscuts are declared so the legend still fits.
432
+ 12. Custom component colors (§3.4) apply only to container + icon + name; connectors stay topology-driven. Cap at 2 custom-colored components in addition to the focal.
433
+ 11. The diagram passes SKILL.md §9 (4-px grid; ≤ 2 accent elements; mono only for technical content; hairlines; no shadows; no `rounded-2xl`).
434
+
435
+ ---
436
+
437
+ ## 8. Anti-patterns
438
+
439
+ - Chevron banner omitted — it's the key that maps visual columns to functional phases.
440
+ - Node x-center off-chevron (§7 #1) — breaks the "banner-as-legend" contract.
441
+ - Vertical chevron drawn on the cluster (overlay) instead of in a reserved right strip.
442
+ - More than one focal node — MinIO/S3 (or whichever storage hub) is *the* focal point.
443
+ - External zone with solid border — dashed border is the signal that these components are outside the cluster.
444
+ - Identity bar inside the cluster boundary — it applies to all components and must span the full canvas width.
445
+ - Vertical chevron without a paired bar/cross-cutting component — see §5 pairing rule.
446
+ - Bar-component edges drawn solid — orchestration triggers must be dashed.
447
+ - Source fanning out to >3 components without a hub.
448
+
449
+ ---
450
+
451
+ ## 9. Examples
452
+
453
+ - `assets/example-high-level.html` — horizontal-only, 5 phases, light skin.
454
+ - `assets/example-high-level-dark.html` — same, dark skin.
455
+ - `assets/example-high-level-full.html` — same, editorial-card frame.
456
+ - `assets/example-high-level-vertical.html` — adds vertical Orchestration + Security chevrons, Airflow bar, Keycloak cross-cutting. **Reference render of the full parametric pattern.**
457
+ - `assets/example-high-level-vertical-dark.html` — vertical pattern, dark skin.
458
+ - `assets/example-high-level-vertical-full.html` — vertical pattern, editorial-card frame.