@ketecode/loom 0.0.0-stage → 0.2.0

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 (851) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +616 -2
  3. package/agents/accessibility-reviewer/AGENT.md +70 -0
  4. package/agents/accessibility-reviewer/evals/triggers.json +15 -0
  5. package/agents/agent-evaluator/AGENT.md +74 -0
  6. package/agents/agent-evaluator/evals/triggers.json +15 -0
  7. package/agents/architect/AGENT.md +82 -0
  8. package/agents/architect/evals/triggers.json +17 -0
  9. package/agents/billing-reviewer/AGENT.md +68 -0
  10. package/agents/billing-reviewer/evals/triggers.json +16 -0
  11. package/agents/code-reviewer/AGENT.md +51 -0
  12. package/agents/code-reviewer/evals/behavior.json +60 -0
  13. package/agents/code-reviewer/evals/triggers.json +14 -0
  14. package/agents/code-simplifier/AGENT.md +74 -0
  15. package/agents/code-simplifier/evals/triggers.json +15 -0
  16. package/agents/cpp-build-resolver/AGENT.md +73 -0
  17. package/agents/cpp-build-resolver/evals/triggers.json +16 -0
  18. package/agents/cpp-reviewer/AGENT.md +59 -0
  19. package/agents/cpp-reviewer/evals/triggers.json +16 -0
  20. package/agents/csharp-build-resolver/AGENT.md +84 -0
  21. package/agents/csharp-build-resolver/evals/triggers.json +17 -0
  22. package/agents/csharp-reviewer/AGENT.md +88 -0
  23. package/agents/csharp-reviewer/evals/triggers.json +17 -0
  24. package/agents/dart-build-resolver/AGENT.md +80 -0
  25. package/agents/dart-build-resolver/evals/triggers.json +17 -0
  26. package/agents/dart-reviewer/AGENT.md +66 -0
  27. package/agents/dart-reviewer/evals/triggers.json +17 -0
  28. package/agents/database-reviewer/AGENT.md +72 -0
  29. package/agents/database-reviewer/evals/triggers.json +16 -0
  30. package/agents/django-reviewer/AGENT.md +61 -0
  31. package/agents/django-reviewer/evals/triggers.json +15 -0
  32. package/agents/doc-updater/AGENT.md +92 -0
  33. package/agents/doc-updater/evals/triggers.json +14 -0
  34. package/agents/e2e-runner/AGENT.md +88 -0
  35. package/agents/e2e-runner/evals/triggers.json +16 -0
  36. package/agents/fastapi-reviewer/AGENT.md +63 -0
  37. package/agents/fastapi-reviewer/evals/triggers.json +15 -0
  38. package/agents/flutter-reviewer/AGENT.md +70 -0
  39. package/agents/flutter-reviewer/evals/triggers.json +15 -0
  40. package/agents/fsharp-build-resolver/AGENT.md +81 -0
  41. package/agents/fsharp-build-resolver/evals/triggers.json +15 -0
  42. package/agents/fsharp-reviewer/AGENT.md +77 -0
  43. package/agents/fsharp-reviewer/evals/triggers.json +15 -0
  44. package/agents/go-build-resolver/AGENT.md +85 -0
  45. package/agents/go-build-resolver/evals/triggers.json +16 -0
  46. package/agents/go-reviewer/AGENT.md +66 -0
  47. package/agents/go-reviewer/evals/triggers.json +16 -0
  48. package/agents/healthcare-reviewer/AGENT.md +65 -0
  49. package/agents/healthcare-reviewer/evals/triggers.json +16 -0
  50. package/agents/i18n-reviewer/AGENT.md +64 -0
  51. package/agents/i18n-reviewer/evals/triggers.json +16 -0
  52. package/agents/inbox-triager/AGENT.md +98 -0
  53. package/agents/inbox-triager/evals/triggers.json +16 -0
  54. package/agents/infra-reviewer/AGENT.md +93 -0
  55. package/agents/infra-reviewer/evals/triggers.json +15 -0
  56. package/agents/java-build-resolver/AGENT.md +82 -0
  57. package/agents/java-build-resolver/evals/triggers.json +16 -0
  58. package/agents/java-reviewer/AGENT.md +64 -0
  59. package/agents/java-reviewer/evals/triggers.json +16 -0
  60. package/agents/kotlin-build-resolver/AGENT.md +89 -0
  61. package/agents/kotlin-build-resolver/evals/triggers.json +16 -0
  62. package/agents/kotlin-reviewer/AGENT.md +75 -0
  63. package/agents/kotlin-reviewer/evals/triggers.json +16 -0
  64. package/agents/mle-reviewer/AGENT.md +68 -0
  65. package/agents/mle-reviewer/evals/triggers.json +16 -0
  66. package/agents/network-config-reviewer/AGENT.md +68 -0
  67. package/agents/network-config-reviewer/evals/triggers.json +17 -0
  68. package/agents/payments-reviewer/AGENT.md +64 -0
  69. package/agents/payments-reviewer/evals/triggers.json +16 -0
  70. package/agents/performance-optimizer/AGENT.md +86 -0
  71. package/agents/performance-optimizer/evals/triggers.json +16 -0
  72. package/agents/perl-build-resolver/AGENT.md +84 -0
  73. package/agents/perl-build-resolver/evals/triggers.json +15 -0
  74. package/agents/perl-reviewer/AGENT.md +77 -0
  75. package/agents/perl-reviewer/evals/triggers.json +15 -0
  76. package/agents/php-build-resolver/AGENT.md +88 -0
  77. package/agents/php-build-resolver/evals/triggers.json +16 -0
  78. package/agents/php-reviewer/AGENT.md +61 -0
  79. package/agents/php-reviewer/evals/triggers.json +15 -0
  80. package/agents/planner/AGENT.md +75 -0
  81. package/agents/planner/evals/triggers.json +17 -0
  82. package/agents/pr-test-analyzer/AGENT.md +82 -0
  83. package/agents/pr-test-analyzer/evals/triggers.json +16 -0
  84. package/agents/python-build-resolver/AGENT.md +87 -0
  85. package/agents/python-build-resolver/evals/triggers.json +16 -0
  86. package/agents/python-reviewer/AGENT.md +63 -0
  87. package/agents/python-reviewer/evals/triggers.json +15 -0
  88. package/agents/rag-reviewer/AGENT.md +71 -0
  89. package/agents/rag-reviewer/evals/triggers.json +16 -0
  90. package/agents/react-reviewer/AGENT.md +70 -0
  91. package/agents/react-reviewer/evals/triggers.json +16 -0
  92. package/agents/refactor-cleaner/AGENT.md +82 -0
  93. package/agents/refactor-cleaner/evals/triggers.json +16 -0
  94. package/agents/ruby-build-resolver/AGENT.md +93 -0
  95. package/agents/ruby-build-resolver/evals/triggers.json +16 -0
  96. package/agents/ruby-reviewer/AGENT.md +62 -0
  97. package/agents/ruby-reviewer/evals/triggers.json +16 -0
  98. package/agents/rust-build-resolver/AGENT.md +98 -0
  99. package/agents/rust-build-resolver/evals/triggers.json +16 -0
  100. package/agents/rust-reviewer/AGENT.md +78 -0
  101. package/agents/rust-reviewer/evals/triggers.json +15 -0
  102. package/agents/security-reviewer/AGENT.md +84 -0
  103. package/agents/security-reviewer/evals/triggers.json +16 -0
  104. package/agents/silent-failure-hunter/AGENT.md +66 -0
  105. package/agents/silent-failure-hunter/evals/triggers.json +16 -0
  106. package/agents/solidity-reviewer/AGENT.md +70 -0
  107. package/agents/solidity-reviewer/evals/triggers.json +16 -0
  108. package/agents/spec-reviewer/AGENT.md +95 -0
  109. package/agents/spec-reviewer/evals/behavior.json +57 -0
  110. package/agents/spec-reviewer/evals/triggers.json +16 -0
  111. package/agents/swift-build-resolver/AGENT.md +85 -0
  112. package/agents/swift-build-resolver/evals/triggers.json +15 -0
  113. package/agents/swift-reviewer/AGENT.md +75 -0
  114. package/agents/swift-reviewer/evals/triggers.json +15 -0
  115. package/agents/task-implementer/AGENT.md +89 -0
  116. package/agents/task-implementer/evals/behavior.json +47 -0
  117. package/agents/task-implementer/evals/triggers.json +16 -0
  118. package/agents/typescript-build-resolver/AGENT.md +76 -0
  119. package/agents/typescript-build-resolver/evals/triggers.json +15 -0
  120. package/agents/typescript-reviewer/AGENT.md +76 -0
  121. package/agents/typescript-reviewer/evals/triggers.json +15 -0
  122. package/agents/vue-reviewer/AGENT.md +75 -0
  123. package/agents/vue-reviewer/evals/triggers.json +15 -0
  124. package/bin/kete-loom.js +723 -0
  125. package/commands/aside.md +19 -0
  126. package/commands/brainstorm.md +25 -0
  127. package/commands/build-fix.md +26 -0
  128. package/commands/campaign.md +19 -0
  129. package/commands/changelog.md +36 -0
  130. package/commands/checkpoint.md +26 -0
  131. package/commands/codemap.md +25 -0
  132. package/commands/commit.md +26 -0
  133. package/commands/debug.md +27 -0
  134. package/commands/deps-audit.md +32 -0
  135. package/commands/dual-review.md +34 -0
  136. package/commands/epic-decompose.md +21 -0
  137. package/commands/explain.md +37 -0
  138. package/commands/feature-dev.md +23 -0
  139. package/commands/finish-branch.md +26 -0
  140. package/commands/fix-bug.md +38 -0
  141. package/commands/hookify.md +23 -0
  142. package/commands/i18n-check.md +39 -0
  143. package/commands/issue-sync.md +22 -0
  144. package/commands/jira.md +19 -0
  145. package/commands/learn.md +23 -0
  146. package/commands/loom.md +21 -0
  147. package/commands/loop.md +20 -0
  148. package/commands/model-route.md +27 -0
  149. package/commands/onboard.md +35 -0
  150. package/commands/orchestrate.md +21 -0
  151. package/commands/plan-feature.md +36 -0
  152. package/commands/postmortem.md +42 -0
  153. package/commands/pr-describe.md +39 -0
  154. package/commands/pr.md +22 -0
  155. package/commands/prd.md +41 -0
  156. package/commands/production-readiness.md +45 -0
  157. package/commands/project-init.md +21 -0
  158. package/commands/refactor-clean.md +24 -0
  159. package/commands/resume-session.md +22 -0
  160. package/commands/review.md +35 -0
  161. package/commands/save-session.md +37 -0
  162. package/commands/security-scan.md +32 -0
  163. package/commands/sessions.md +21 -0
  164. package/commands/skill-create.md +21 -0
  165. package/commands/tdd.md +36 -0
  166. package/commands/test-coverage.md +24 -0
  167. package/commands/threat-model.md +36 -0
  168. package/commands/update-docs.md +25 -0
  169. package/commands/usage-report.md +43 -0
  170. package/commands/verify.md +21 -0
  171. package/hooks/block-dangerous-commands/HOOK.md +30 -0
  172. package/hooks/block-dangerous-commands/cases.json +50 -0
  173. package/hooks/block-dangerous-commands/hook.js +75 -0
  174. package/hooks/block-foreground-servers/HOOK.md +34 -0
  175. package/hooks/block-foreground-servers/cases.json +31 -0
  176. package/hooks/block-foreground-servers/hook.js +41 -0
  177. package/hooks/block-no-verify/HOOK.md +25 -0
  178. package/hooks/block-no-verify/cases.json +30 -0
  179. package/hooks/block-no-verify/hook.js +43 -0
  180. package/hooks/capture-lessons/HOOK.md +24 -0
  181. package/hooks/capture-lessons/hook.js +48 -0
  182. package/hooks/format-on-edit/HOOK.md +24 -0
  183. package/hooks/format-on-edit/hook.js +89 -0
  184. package/hooks/guard-secrets/HOOK.md +19 -0
  185. package/hooks/guard-secrets/cases.json +110 -0
  186. package/hooks/guard-secrets/hook.js +44 -0
  187. package/hooks/load-session-context/HOOK.md +20 -0
  188. package/hooks/load-session-context/hook.js +56 -0
  189. package/hooks/notify-on-stop/HOOK.md +25 -0
  190. package/hooks/notify-on-stop/hook.js +27 -0
  191. package/hooks/protect-files/HOOK.md +24 -0
  192. package/hooks/protect-files/cases.json +27 -0
  193. package/hooks/protect-files/hook.js +39 -0
  194. package/hooks/protect-lint-config/HOOK.md +29 -0
  195. package/hooks/protect-lint-config/cases.json +18 -0
  196. package/hooks/protect-lint-config/fixtures/.eslintrc.json +1 -0
  197. package/hooks/protect-lint-config/fixtures/.golangci.yml +1 -0
  198. package/hooks/protect-lint-config/fixtures/.prettierrc +1 -0
  199. package/hooks/protect-lint-config/fixtures/.rubocop.yml +1 -0
  200. package/hooks/protect-lint-config/fixtures/biome.json +1 -0
  201. package/hooks/protect-lint-config/fixtures/eslint.config.mjs +1 -0
  202. package/hooks/protect-lint-config/fixtures/ruff.toml +1 -0
  203. package/hooks/protect-lint-config/hook.js +25 -0
  204. package/hooks/read-before-edit/HOOK.md +26 -0
  205. package/hooks/read-before-edit/cases.json +15 -0
  206. package/hooks/read-before-edit/hook.js +50 -0
  207. package/hooks/run.js +148 -0
  208. package/hooks/verify-before-stop/HOOK.md +32 -0
  209. package/hooks/verify-before-stop/hook.js +70 -0
  210. package/mcp/atlassian.json +11 -0
  211. package/mcp/chrome-devtools.json +18 -0
  212. package/mcp/clickhouse.json +11 -0
  213. package/mcp/cloudflare.json +11 -0
  214. package/mcp/context7.json +11 -0
  215. package/mcp/exa.json +11 -0
  216. package/mcp/fetch.json +17 -0
  217. package/mcp/figma.json +11 -0
  218. package/mcp/firecrawl.json +11 -0
  219. package/mcp/git.json +17 -0
  220. package/mcp/github.json +11 -0
  221. package/mcp/linear.json +11 -0
  222. package/mcp/memory.json +18 -0
  223. package/mcp/notion.json +11 -0
  224. package/mcp/playwright.json +18 -0
  225. package/mcp/sentry.json +11 -0
  226. package/mcp/stripe.json +11 -0
  227. package/mcp/supabase.json +11 -0
  228. package/mcp/time.json +17 -0
  229. package/mcp/vercel.json +11 -0
  230. package/package.json +61 -4
  231. package/profiles.json +214 -0
  232. package/rules/common.md +21 -0
  233. package/rules/cpp.md +29 -0
  234. package/rules/csharp.md +25 -0
  235. package/rules/dart.md +29 -0
  236. package/rules/fsharp.md +28 -0
  237. package/rules/git.md +26 -0
  238. package/rules/go.md +29 -0
  239. package/rules/java.md +29 -0
  240. package/rules/kotlin.md +27 -0
  241. package/rules/perl.md +26 -0
  242. package/rules/php.md +28 -0
  243. package/rules/python.md +30 -0
  244. package/rules/ruby.md +27 -0
  245. package/rules/rust.md +26 -0
  246. package/rules/security.md +29 -0
  247. package/rules/swift.md +28 -0
  248. package/rules/testing.md +25 -0
  249. package/rules/typescript.md +29 -0
  250. package/rules/use-skills.md +23 -0
  251. package/schemas/skill-frontmatter.schema.json +52 -0
  252. package/scripts/lib/audit.js +96 -0
  253. package/scripts/lib/behavior.js +52 -0
  254. package/scripts/lib/frontmatter.js +65 -0
  255. package/scripts/lib/hooks-install.js +294 -0
  256. package/scripts/lib/i18n.js +51 -0
  257. package/scripts/lib/inventory.js +85 -0
  258. package/scripts/lib/lint.js +180 -0
  259. package/scripts/lib/mcp-install.js +288 -0
  260. package/scripts/lib/profiles.js +128 -0
  261. package/scripts/lib/render.js +92 -0
  262. package/scripts/lib/rules-install.js +118 -0
  263. package/scripts/lib/skills.js +87 -0
  264. package/scripts/lib/targets.js +123 -0
  265. package/skills/accounting-api-integration/SKILL.md +81 -0
  266. package/skills/accounting-api-integration/evals/triggers.json +17 -0
  267. package/skills/accounting-api-integration/references/quickbooks.md +48 -0
  268. package/skills/accounting-api-integration/references/xero.md +45 -0
  269. package/skills/agent-failure-debugging/SKILL.md +92 -0
  270. package/skills/agent-failure-debugging/evals/triggers.json +16 -0
  271. package/skills/agent-harness-design/SKILL.md +125 -0
  272. package/skills/agent-harness-design/evals/triggers.json +21 -0
  273. package/skills/agent-outbound-messaging/SKILL.md +92 -0
  274. package/skills/agent-outbound-messaging/evals/triggers.json +16 -0
  275. package/skills/agent-security/SKILL.md +117 -0
  276. package/skills/agent-security/evals/triggers.json +16 -0
  277. package/skills/agent-security/references/host-configs.md +37 -0
  278. package/skills/ai-media-generation/SKILL.md +89 -0
  279. package/skills/ai-media-generation/evals/triggers.json +16 -0
  280. package/skills/ai-media-generation/references/job-pipeline.md +76 -0
  281. package/skills/angular-patterns/SKILL.md +122 -0
  282. package/skills/angular-patterns/evals/triggers.json +16 -0
  283. package/skills/api-client-integration/SKILL.md +86 -0
  284. package/skills/api-client-integration/evals/triggers.json +16 -0
  285. package/skills/api-client-integration/references/resilience.md +57 -0
  286. package/skills/api-design/SKILL.md +96 -0
  287. package/skills/api-design/evals/triggers.json +18 -0
  288. package/skills/api-design/references/conventions.md +133 -0
  289. package/skills/architecture-decision-records/SKILL.md +98 -0
  290. package/skills/architecture-decision-records/evals/triggers.json +17 -0
  291. package/skills/article-writing/SKILL.md +108 -0
  292. package/skills/article-writing/evals/triggers.json +16 -0
  293. package/skills/aspnet-core-patterns/SKILL.md +149 -0
  294. package/skills/aspnet-core-patterns/evals/triggers.json +16 -0
  295. package/skills/auth-patterns/SKILL.md +104 -0
  296. package/skills/auth-patterns/evals/triggers.json +17 -0
  297. package/skills/auth-patterns/references/oauth-oidc.md +64 -0
  298. package/skills/autonomous-loops/SKILL.md +99 -0
  299. package/skills/autonomous-loops/evals/triggers.json +14 -0
  300. package/skills/aws-patterns/SKILL.md +91 -0
  301. package/skills/aws-patterns/evals/triggers.json +16 -0
  302. package/skills/azure-patterns/SKILL.md +86 -0
  303. package/skills/azure-patterns/evals/triggers.json +16 -0
  304. package/skills/benchmark-methodology/SKILL.md +88 -0
  305. package/skills/benchmark-methodology/evals/triggers.json +16 -0
  306. package/skills/benchmark-methodology/references/language-harnesses.md +130 -0
  307. package/skills/bgp-diagnostics/SKILL.md +84 -0
  308. package/skills/bgp-diagnostics/evals/triggers.json +18 -0
  309. package/skills/bgp-diagnostics/references/bgp-reference.md +81 -0
  310. package/skills/bioinformatics-workflows/SKILL.md +108 -0
  311. package/skills/bioinformatics-workflows/evals/triggers.json +16 -0
  312. package/skills/bioinformatics-workflows/references/commands.md +71 -0
  313. package/skills/bioinformatics-workflows/references/formats.md +24 -0
  314. package/skills/bioinformatics-workflows/references/workflow-managers.md +107 -0
  315. package/skills/blender-automation/SKILL.md +100 -0
  316. package/skills/blender-automation/evals/triggers.json +16 -0
  317. package/skills/blender-automation/references/batch-and-render.md +77 -0
  318. package/skills/blender-automation/references/bpy-inspection.md +91 -0
  319. package/skills/blender-automation/references/rig-and-retarget-checks.md +23 -0
  320. package/skills/brand-strategy/SKILL.md +83 -0
  321. package/skills/brand-strategy/evals/triggers.json +16 -0
  322. package/skills/brand-voice/SKILL.md +112 -0
  323. package/skills/brand-voice/evals/triggers.json +16 -0
  324. package/skills/browser-qa/SKILL.md +99 -0
  325. package/skills/browser-qa/evals/triggers.json +16 -0
  326. package/skills/bun-runtime/SKILL.md +93 -0
  327. package/skills/bun-runtime/evals/triggers.json +16 -0
  328. package/skills/change-impact-analysis/SKILL.md +89 -0
  329. package/skills/change-impact-analysis/evals/triggers.json +16 -0
  330. package/skills/change-impact-analysis/references/graph-commands.md +28 -0
  331. package/skills/cisco-ios-config/SKILL.md +101 -0
  332. package/skills/cisco-ios-config/evals/triggers.json +18 -0
  333. package/skills/cisco-ios-config/references/verification.md +63 -0
  334. package/skills/clickhouse-patterns/SKILL.md +101 -0
  335. package/skills/clickhouse-patterns/evals/triggers.json +18 -0
  336. package/skills/clickhouse-patterns/references/engines-and-views.md +138 -0
  337. package/skills/clinical-decision-support/SKILL.md +90 -0
  338. package/skills/clinical-decision-support/evals/triggers.json +16 -0
  339. package/skills/clinical-decision-support/references/cds-hooks.md +76 -0
  340. package/skills/clinical-decision-support/references/regulatory-boundaries.md +37 -0
  341. package/skills/code-tour/SKILL.md +97 -0
  342. package/skills/code-tour/evals/triggers.json +14 -0
  343. package/skills/codebase-onboarding/SKILL.md +112 -0
  344. package/skills/codebase-onboarding/evals/triggers.json +14 -0
  345. package/skills/cold-outreach-sequences/SKILL.md +90 -0
  346. package/skills/cold-outreach-sequences/evals/triggers.json +16 -0
  347. package/skills/content-repurposing/SKILL.md +82 -0
  348. package/skills/content-repurposing/evals/triggers.json +16 -0
  349. package/skills/context-budget/SKILL.md +84 -0
  350. package/skills/context-budget/evals/triggers.json +14 -0
  351. package/skills/contract-drafting/SKILL.md +96 -0
  352. package/skills/contract-drafting/evals/triggers.json +16 -0
  353. package/skills/contract-drafting/references/term-sheets.md +68 -0
  354. package/skills/contract-first-development/SKILL.md +86 -0
  355. package/skills/contract-first-development/evals/triggers.json +16 -0
  356. package/skills/contract-first-development/references/tooling.md +46 -0
  357. package/skills/conventional-commits/SKILL.md +144 -0
  358. package/skills/conventional-commits/evals/triggers.json +16 -0
  359. package/skills/cpp-patterns/SKILL.md +129 -0
  360. package/skills/cpp-patterns/evals/triggers.json +16 -0
  361. package/skills/cpp-patterns/references/cmake-and-tooling.md +88 -0
  362. package/skills/cpp-patterns/references/undefined-behaviour.md +75 -0
  363. package/skills/cpp-testing/SKILL.md +131 -0
  364. package/skills/cpp-testing/evals/triggers.json +16 -0
  365. package/skills/csharp-patterns/SKILL.md +110 -0
  366. package/skills/csharp-patterns/evals/triggers.json +17 -0
  367. package/skills/csharp-patterns/references/analyzers.md +59 -0
  368. package/skills/csharp-testing/SKILL.md +85 -0
  369. package/skills/csharp-testing/evals/triggers.json +17 -0
  370. package/skills/csharp-testing/references/integration-tests.md +77 -0
  371. package/skills/css-architecture/SKILL.md +143 -0
  372. package/skills/css-architecture/evals/triggers.json +16 -0
  373. package/skills/customs-trade-compliance/SKILL.md +95 -0
  374. package/skills/customs-trade-compliance/evals/triggers.json +16 -0
  375. package/skills/customs-trade-compliance/references/incoterms-2020.md +42 -0
  376. package/skills/dart-patterns/SKILL.md +157 -0
  377. package/skills/dart-patterns/evals/triggers.json +18 -0
  378. package/skills/dart-testing/SKILL.md +164 -0
  379. package/skills/dart-testing/evals/triggers.json +18 -0
  380. package/skills/data-analysis-notebooks/SKILL.md +113 -0
  381. package/skills/data-analysis-notebooks/evals/triggers.json +16 -0
  382. package/skills/data-analysis-notebooks/references/dataframe-pitfalls.md +49 -0
  383. package/skills/data-analysis-notebooks/references/statistics-pitfalls.md +24 -0
  384. package/skills/data-pipelines/SKILL.md +90 -0
  385. package/skills/data-pipelines/evals/triggers.json +16 -0
  386. package/skills/data-pipelines/references/orchestrators.md +64 -0
  387. package/skills/database-migrations/SKILL.md +102 -0
  388. package/skills/database-migrations/evals/triggers.json +16 -0
  389. package/skills/database-migrations/references/recipes.md +98 -0
  390. package/skills/database-migrations/references/tools.md +21 -0
  391. package/skills/dbt-patterns/SKILL.md +96 -0
  392. package/skills/dbt-patterns/evals/triggers.json +16 -0
  393. package/skills/dbt-patterns/references/yaml-examples.md +114 -0
  394. package/skills/decision-council/SKILL.md +98 -0
  395. package/skills/decision-council/evals/triggers.json +16 -0
  396. package/skills/deep-research/SKILL.md +107 -0
  397. package/skills/deep-research/evals/triggers.json +14 -0
  398. package/skills/dependency-audit/SKILL.md +103 -0
  399. package/skills/dependency-audit/evals/triggers.json +16 -0
  400. package/skills/dependency-audit/references/tools.md +124 -0
  401. package/skills/deployment-strategies/SKILL.md +108 -0
  402. package/skills/deployment-strategies/evals/triggers.json +16 -0
  403. package/skills/design-brainstorming/SKILL.md +132 -0
  404. package/skills/design-brainstorming/evals/behavior.json +55 -0
  405. package/skills/design-brainstorming/evals/triggers.json +16 -0
  406. package/skills/design-brainstorming/references/visual-mockups.md +34 -0
  407. package/skills/desktop-app-testing/SKILL.md +104 -0
  408. package/skills/desktop-app-testing/evals/triggers.json +16 -0
  409. package/skills/desktop-app-testing/references/drivers.md +81 -0
  410. package/skills/django-patterns/SKILL.md +123 -0
  411. package/skills/django-patterns/evals/triggers.json +16 -0
  412. package/skills/docker-patterns/SKILL.md +132 -0
  413. package/skills/docker-patterns/evals/triggers.json +16 -0
  414. package/skills/docker-patterns/references/dockerfiles.md +105 -0
  415. package/skills/document-processing/SKILL.md +100 -0
  416. package/skills/document-processing/evals/triggers.json +17 -0
  417. package/skills/document-processing/references/extraction-and-ocr.md +71 -0
  418. package/skills/document-processing/references/forms-and-conversion.md +69 -0
  419. package/skills/document-processing/references/redaction.md +61 -0
  420. package/skills/e2e-testing-playwright/SKILL.md +94 -0
  421. package/skills/e2e-testing-playwright/evals/triggers.json +16 -0
  422. package/skills/e2e-testing-playwright/references/config-and-ci.md +129 -0
  423. package/skills/ef-core-patterns/SKILL.md +117 -0
  424. package/skills/ef-core-patterns/evals/triggers.json +16 -0
  425. package/skills/email-deliverability/SKILL.md +99 -0
  426. package/skills/email-deliverability/evals/triggers.json +17 -0
  427. package/skills/email-deliverability/references/dns-records.md +85 -0
  428. package/skills/energy-procurement/SKILL.md +106 -0
  429. package/skills/energy-procurement/evals/triggers.json +16 -0
  430. package/skills/error-handling-patterns/SKILL.md +112 -0
  431. package/skills/error-handling-patterns/evals/triggers.json +18 -0
  432. package/skills/error-handling-patterns/references/language-idioms.md +49 -0
  433. package/skills/estimation-and-scoping/SKILL.md +97 -0
  434. package/skills/estimation-and-scoping/evals/triggers.json +14 -0
  435. package/skills/evm-dapp-integration/SKILL.md +73 -0
  436. package/skills/evm-dapp-integration/evals/triggers.json +16 -0
  437. package/skills/fastapi-patterns/SKILL.md +127 -0
  438. package/skills/fastapi-patterns/evals/triggers.json +16 -0
  439. package/skills/ffmpeg-media-processing/SKILL.md +94 -0
  440. package/skills/ffmpeg-media-processing/evals/triggers.json +16 -0
  441. package/skills/ffmpeg-media-processing/references/recipes.md +112 -0
  442. package/skills/fhir-integration/SKILL.md +81 -0
  443. package/skills/fhir-integration/evals/triggers.json +16 -0
  444. package/skills/fhir-integration/references/search-and-bundles.md +73 -0
  445. package/skills/fhir-integration/references/smart-on-fhir.md +50 -0
  446. package/skills/finishing-a-branch/SKILL.md +127 -0
  447. package/skills/finishing-a-branch/evals/behavior.json +49 -0
  448. package/skills/finishing-a-branch/evals/triggers.json +16 -0
  449. package/skills/flask-patterns/SKILL.md +132 -0
  450. package/skills/flask-patterns/evals/triggers.json +16 -0
  451. package/skills/flutter-patterns/SKILL.md +99 -0
  452. package/skills/flutter-patterns/evals/triggers.json +16 -0
  453. package/skills/flutterwave-integration/SKILL.md +75 -0
  454. package/skills/flutterwave-integration/evals/triggers.json +16 -0
  455. package/skills/flutterwave-integration/references/api.md +73 -0
  456. package/skills/flutterwave-integration/references/webhooks.md +49 -0
  457. package/skills/freight-carrier-management/SKILL.md +107 -0
  458. package/skills/freight-carrier-management/evals/triggers.json +16 -0
  459. package/skills/fsharp-patterns/SKILL.md +133 -0
  460. package/skills/fsharp-patterns/evals/triggers.json +16 -0
  461. package/skills/fsharp-testing/SKILL.md +136 -0
  462. package/skills/fsharp-testing/evals/triggers.json +16 -0
  463. package/skills/gcp-patterns/SKILL.md +86 -0
  464. package/skills/gcp-patterns/evals/triggers.json +16 -0
  465. package/skills/git-workflow/SKILL.md +114 -0
  466. package/skills/git-workflow/evals/triggers.json +16 -0
  467. package/skills/git-worktrees/SKILL.md +130 -0
  468. package/skills/git-worktrees/evals/behavior.json +56 -0
  469. package/skills/git-worktrees/evals/triggers.json +16 -0
  470. package/skills/github-actions-ci/SKILL.md +117 -0
  471. package/skills/github-actions-ci/evals/triggers.json +16 -0
  472. package/skills/github-api-automation/SKILL.md +101 -0
  473. package/skills/github-api-automation/evals/triggers.json +17 -0
  474. package/skills/go-patterns/SKILL.md +118 -0
  475. package/skills/go-patterns/evals/triggers.json +17 -0
  476. package/skills/go-patterns/references/concurrency.md +162 -0
  477. package/skills/go-testing/SKILL.md +154 -0
  478. package/skills/go-testing/evals/triggers.json +17 -0
  479. package/skills/google-workspace-integration/SKILL.md +65 -0
  480. package/skills/google-workspace-integration/evals/triggers.json +17 -0
  481. package/skills/google-workspace-integration/references/api.md +121 -0
  482. package/skills/harmonyos-arkts/SKILL.md +117 -0
  483. package/skills/harmonyos-arkts/evals/triggers.json +16 -0
  484. package/skills/harmonyos-arkts/references/build-errors.md +42 -0
  485. package/skills/hexagonal-architecture/SKILL.md +89 -0
  486. package/skills/hexagonal-architecture/evals/triggers.json +17 -0
  487. package/skills/hipaa-compliance/SKILL.md +91 -0
  488. package/skills/hipaa-compliance/evals/triggers.json +18 -0
  489. package/skills/hipaa-compliance/references/safeguards.md +68 -0
  490. package/skills/hl7v2-integration/SKILL.md +69 -0
  491. package/skills/hl7v2-integration/evals/triggers.json +16 -0
  492. package/skills/hl7v2-integration/references/messages-and-ack.md +78 -0
  493. package/skills/homelab-network-setup/SKILL.md +125 -0
  494. package/skills/homelab-network-setup/evals/triggers.json +18 -0
  495. package/skills/homelab-network-setup/references/firewall-and-dns.md +45 -0
  496. package/skills/homelab-network-setup/references/wireguard.md +72 -0
  497. package/skills/hubtel-integration/SKILL.md +77 -0
  498. package/skills/hubtel-integration/evals/triggers.json +16 -0
  499. package/skills/hubtel-integration/references/api.md +92 -0
  500. package/skills/i18n-localization/SKILL.md +114 -0
  501. package/skills/i18n-localization/evals/triggers.json +16 -0
  502. package/skills/i18n-localization/references/libraries.md +52 -0
  503. package/skills/implementation-plans/SKILL.md +117 -0
  504. package/skills/implementation-plans/evals/behavior.json +54 -0
  505. package/skills/implementation-plans/evals/triggers.json +16 -0
  506. package/skills/incident-postmortem/SKILL.md +118 -0
  507. package/skills/incident-postmortem/evals/triggers.json +14 -0
  508. package/skills/inventory-demand-planning/SKILL.md +89 -0
  509. package/skills/inventory-demand-planning/evals/triggers.json +16 -0
  510. package/skills/inventory-demand-planning/references/formulas.md +62 -0
  511. package/skills/investor-materials/SKILL.md +127 -0
  512. package/skills/investor-materials/evals/triggers.json +16 -0
  513. package/skills/investor-materials/references/templates.md +74 -0
  514. package/skills/invoicing-and-tax/SKILL.md +84 -0
  515. package/skills/invoicing-and-tax/evals/triggers.json +17 -0
  516. package/skills/invoicing-and-tax/references/e-invoicing.md +24 -0
  517. package/skills/invoicing-and-tax/references/invoice-fields.md +38 -0
  518. package/skills/invoicing-and-tax/references/rounding.md +26 -0
  519. package/skills/ios-platform-features/SKILL.md +99 -0
  520. package/skills/ios-platform-features/evals/triggers.json +16 -0
  521. package/skills/ios-platform-features/references/foundation-models.md +90 -0
  522. package/skills/java-patterns/SKILL.md +141 -0
  523. package/skills/java-patterns/evals/triggers.json +17 -0
  524. package/skills/java-testing/SKILL.md +142 -0
  525. package/skills/java-testing/evals/triggers.json +16 -0
  526. package/skills/jetpack-compose-patterns/SKILL.md +88 -0
  527. package/skills/jetpack-compose-patterns/evals/triggers.json +16 -0
  528. package/skills/jira-integration/SKILL.md +92 -0
  529. package/skills/jira-integration/evals/triggers.json +17 -0
  530. package/skills/jpa-hibernate/SKILL.md +92 -0
  531. package/skills/jpa-hibernate/evals/triggers.json +18 -0
  532. package/skills/jpa-hibernate/references/mapping.md +99 -0
  533. package/skills/jvm-sql-mappers/SKILL.md +98 -0
  534. package/skills/jvm-sql-mappers/evals/triggers.json +16 -0
  535. package/skills/jvm-sql-mappers/references/examples.md +129 -0
  536. package/skills/kotlin-multiplatform/SKILL.md +97 -0
  537. package/skills/kotlin-multiplatform/evals/triggers.json +16 -0
  538. package/skills/kotlin-patterns/SKILL.md +128 -0
  539. package/skills/kotlin-patterns/evals/triggers.json +16 -0
  540. package/skills/kotlin-testing/SKILL.md +117 -0
  541. package/skills/kotlin-testing/evals/triggers.json +16 -0
  542. package/skills/ktor-patterns/SKILL.md +135 -0
  543. package/skills/ktor-patterns/evals/triggers.json +18 -0
  544. package/skills/kubernetes-patterns/SKILL.md +106 -0
  545. package/skills/kubernetes-patterns/evals/triggers.json +16 -0
  546. package/skills/kubernetes-patterns/references/manifests.md +115 -0
  547. package/skills/laravel-patterns/SKILL.md +136 -0
  548. package/skills/laravel-patterns/evals/triggers.json +16 -0
  549. package/skills/linear-integration/SKILL.md +98 -0
  550. package/skills/linear-integration/evals/triggers.json +17 -0
  551. package/skills/literature-review/SKILL.md +109 -0
  552. package/skills/literature-review/evals/triggers.json +16 -0
  553. package/skills/literature-review/references/appraisal.md +41 -0
  554. package/skills/literature-review/references/search-sources.md +39 -0
  555. package/skills/llm-app-patterns/SKILL.md +97 -0
  556. package/skills/llm-app-patterns/evals/triggers.json +17 -0
  557. package/skills/llm-evals/SKILL.md +98 -0
  558. package/skills/llm-evals/evals/triggers.json +16 -0
  559. package/skills/llm-evals/references/graders.md +66 -0
  560. package/skills/logistics-exception-management/SKILL.md +90 -0
  561. package/skills/logistics-exception-management/evals/triggers.json +16 -0
  562. package/skills/manim-animations/SKILL.md +106 -0
  563. package/skills/manim-animations/evals/triggers.json +16 -0
  564. package/skills/market-research/SKILL.md +117 -0
  565. package/skills/market-research/evals/triggers.json +16 -0
  566. package/skills/marketing-campaign/SKILL.md +111 -0
  567. package/skills/marketing-campaign/evals/triggers.json +16 -0
  568. package/skills/mcp-server-patterns/SKILL.md +127 -0
  569. package/skills/mcp-server-patterns/evals/triggers.json +18 -0
  570. package/skills/mcp-server-patterns/references/protocol-notes.md +68 -0
  571. package/skills/metrics-dashboards/SKILL.md +113 -0
  572. package/skills/metrics-dashboards/evals/triggers.json +16 -0
  573. package/skills/ml-experiment-workflow/SKILL.md +125 -0
  574. package/skills/ml-experiment-workflow/evals/triggers.json +16 -0
  575. package/skills/mobile-accessibility/SKILL.md +94 -0
  576. package/skills/mobile-accessibility/evals/triggers.json +16 -0
  577. package/skills/mongodb-patterns/SKILL.md +115 -0
  578. package/skills/mongodb-patterns/evals/triggers.json +18 -0
  579. package/skills/mongodb-patterns/references/indexes-and-aggregation.md +94 -0
  580. package/skills/mpesa-daraja-integration/SKILL.md +70 -0
  581. package/skills/mpesa-daraja-integration/evals/triggers.json +16 -0
  582. package/skills/mpesa-daraja-integration/references/api.md +103 -0
  583. package/skills/mpesa-daraja-integration/references/callbacks.md +74 -0
  584. package/skills/mtn-momo-integration/SKILL.md +66 -0
  585. package/skills/mtn-momo-integration/evals/triggers.json +16 -0
  586. package/skills/mtn-momo-integration/references/api.md +153 -0
  587. package/skills/mtn-momo-integration/references/callbacks.md +92 -0
  588. package/skills/mtn-momo-integration/references/sandbox-and-go-live.md +51 -0
  589. package/skills/mtn-momo-integration/scripts/sandbox-setup.js +79 -0
  590. package/skills/mysql-patterns/SKILL.md +96 -0
  591. package/skills/mysql-patterns/evals/triggers.json +16 -0
  592. package/skills/mysql-patterns/references/explain.md +34 -0
  593. package/skills/mysql-patterns/references/online-ddl.md +41 -0
  594. package/skills/nestjs-patterns/SKILL.md +114 -0
  595. package/skills/nestjs-patterns/evals/triggers.json +16 -0
  596. package/skills/nestjs-patterns/references/testing.md +68 -0
  597. package/skills/network-automation/SKILL.md +107 -0
  598. package/skills/network-automation/evals/triggers.json +18 -0
  599. package/skills/network-automation/references/tool-snippets.md +153 -0
  600. package/skills/network-design/SKILL.md +98 -0
  601. package/skills/network-design/evals/triggers.json +16 -0
  602. package/skills/network-troubleshooting/SKILL.md +152 -0
  603. package/skills/network-troubleshooting/evals/triggers.json +18 -0
  604. package/skills/network-troubleshooting/references/commands.md +33 -0
  605. package/skills/nextjs-patterns/SKILL.md +150 -0
  606. package/skills/nextjs-patterns/evals/triggers.json +18 -0
  607. package/skills/nextjs-patterns/references/caching.md +87 -0
  608. package/skills/node-backend-patterns/SKILL.md +103 -0
  609. package/skills/node-backend-patterns/evals/triggers.json +16 -0
  610. package/skills/node-backend-patterns/references/templates.md +122 -0
  611. package/skills/nuxt-patterns/SKILL.md +103 -0
  612. package/skills/nuxt-patterns/evals/triggers.json +16 -0
  613. package/skills/observability/SKILL.md +125 -0
  614. package/skills/observability/evals/triggers.json +17 -0
  615. package/skills/observability/references/otel-setup.md +87 -0
  616. package/skills/observability/references/slo-alerts.md +70 -0
  617. package/skills/open-source-release/SKILL.md +107 -0
  618. package/skills/open-source-release/evals/triggers.json +15 -0
  619. package/skills/open-source-release/references/history-scrub.md +65 -0
  620. package/skills/parallel-agent-orchestration/SKILL.md +106 -0
  621. package/skills/parallel-agent-orchestration/evals/triggers.json +14 -0
  622. package/skills/patent-research/SKILL.md +94 -0
  623. package/skills/patent-research/evals/triggers.json +16 -0
  624. package/skills/patent-research/references/databases-and-queries.md +52 -0
  625. package/skills/paystack-integration/SKILL.md +59 -0
  626. package/skills/paystack-integration/evals/triggers.json +14 -0
  627. package/skills/paystack-integration/references/api.md +73 -0
  628. package/skills/paystack-integration/references/mobile-money.md +50 -0
  629. package/skills/paystack-integration/references/webhooks.md +80 -0
  630. package/skills/pci-dss-scope/SKILL.md +103 -0
  631. package/skills/pci-dss-scope/evals/triggers.json +18 -0
  632. package/skills/pci-dss-scope/references/saq-and-data.md +36 -0
  633. package/skills/perl-patterns/SKILL.md +135 -0
  634. package/skills/perl-patterns/evals/triggers.json +18 -0
  635. package/skills/perl-testing/SKILL.md +126 -0
  636. package/skills/perl-testing/evals/triggers.json +17 -0
  637. package/skills/php-patterns/SKILL.md +116 -0
  638. package/skills/php-patterns/evals/triggers.json +16 -0
  639. package/skills/php-testing/SKILL.md +123 -0
  640. package/skills/php-testing/evals/triggers.json +16 -0
  641. package/skills/postgres-patterns/SKILL.md +103 -0
  642. package/skills/postgres-patterns/evals/triggers.json +17 -0
  643. package/skills/postgres-patterns/references/explain.md +59 -0
  644. package/skills/postgres-patterns/references/locks.md +53 -0
  645. package/skills/prd-writing/SKILL.md +124 -0
  646. package/skills/prd-writing/evals/triggers.json +15 -0
  647. package/skills/prisma-patterns/SKILL.md +83 -0
  648. package/skills/prisma-patterns/evals/triggers.json +18 -0
  649. package/skills/prisma-patterns/references/prisma-8.md +46 -0
  650. package/skills/prisma-patterns/references/workflow.md +50 -0
  651. package/skills/privacy-compliance/SKILL.md +121 -0
  652. package/skills/privacy-compliance/evals/triggers.json +18 -0
  653. package/skills/privacy-compliance/references/jurisdictions.md +51 -0
  654. package/skills/production-scheduling/SKILL.md +98 -0
  655. package/skills/production-scheduling/evals/triggers.json +16 -0
  656. package/skills/prompt-engineering/SKILL.md +92 -0
  657. package/skills/prompt-engineering/evals/triggers.json +16 -0
  658. package/skills/prospect-research/SKILL.md +87 -0
  659. package/skills/prospect-research/evals/triggers.json +16 -0
  660. package/skills/python-app-distribution/SKILL.md +107 -0
  661. package/skills/python-app-distribution/evals/triggers.json +16 -0
  662. package/skills/python-app-distribution/references/pypi-trusted-publishing.md +55 -0
  663. package/skills/python-app-distribution/references/windows-macos-signing.md +70 -0
  664. package/skills/python-patterns/SKILL.md +107 -0
  665. package/skills/python-patterns/evals/triggers.json +16 -0
  666. package/skills/python-patterns/references/tooling.md +101 -0
  667. package/skills/python-testing/SKILL.md +126 -0
  668. package/skills/python-testing/evals/triggers.json +16 -0
  669. package/skills/python-testing/references/mocking.md +71 -0
  670. package/skills/pytorch-patterns/SKILL.md +139 -0
  671. package/skills/pytorch-patterns/evals/triggers.json +16 -0
  672. package/skills/pytorch-patterns/references/debugging.md +39 -0
  673. package/skills/quality-nonconformance/SKILL.md +107 -0
  674. package/skills/quality-nonconformance/evals/triggers.json +16 -0
  675. package/skills/quality-nonconformance/references/8d-and-capa.md +46 -0
  676. package/skills/quarkus-patterns/SKILL.md +93 -0
  677. package/skills/quarkus-patterns/evals/triggers.json +18 -0
  678. package/skills/rag-pipeline-patterns/SKILL.md +117 -0
  679. package/skills/rag-pipeline-patterns/evals/triggers.json +18 -0
  680. package/skills/rag-pipeline-patterns/references/evaluation.md +37 -0
  681. package/skills/rag-pipeline-patterns/references/retrieval-recipes.md +78 -0
  682. package/skills/rails-patterns/SKILL.md +132 -0
  683. package/skills/rails-patterns/evals/triggers.json +16 -0
  684. package/skills/react-native-patterns/SKILL.md +101 -0
  685. package/skills/react-native-patterns/evals/triggers.json +16 -0
  686. package/skills/react-patterns/SKILL.md +140 -0
  687. package/skills/react-patterns/evals/triggers.json +18 -0
  688. package/skills/react-performance/SKILL.md +107 -0
  689. package/skills/react-performance/evals/triggers.json +18 -0
  690. package/skills/react-testing/SKILL.md +121 -0
  691. package/skills/react-testing/evals/triggers.json +18 -0
  692. package/skills/react-testing/references/msw.md +64 -0
  693. package/skills/react-testing/references/queries.md +41 -0
  694. package/skills/react-testing/references/setup.md +74 -0
  695. package/skills/recommender-systems/SKILL.md +119 -0
  696. package/skills/recommender-systems/evals/triggers.json +16 -0
  697. package/skills/recommender-systems/references/evaluation.md +39 -0
  698. package/skills/redis-patterns/SKILL.md +109 -0
  699. package/skills/redis-patterns/evals/triggers.json +18 -0
  700. package/skills/redis-patterns/references/operations.md +61 -0
  701. package/skills/refactoring-safely/SKILL.md +107 -0
  702. package/skills/refactoring-safely/evals/behavior.json +57 -0
  703. package/skills/refactoring-safely/evals/triggers.json +17 -0
  704. package/skills/release-management/SKILL.md +141 -0
  705. package/skills/release-management/evals/triggers.json +16 -0
  706. package/skills/remotion-video/SKILL.md +91 -0
  707. package/skills/remotion-video/evals/triggers.json +16 -0
  708. package/skills/remotion-video/references/lambda.md +66 -0
  709. package/skills/reproducible-dev-environments/SKILL.md +132 -0
  710. package/skills/reproducible-dev-environments/evals/triggers.json +16 -0
  711. package/skills/responding-to-code-review/SKILL.md +124 -0
  712. package/skills/responding-to-code-review/evals/behavior.json +54 -0
  713. package/skills/responding-to-code-review/evals/triggers.json +16 -0
  714. package/skills/returns-reverse-logistics/SKILL.md +97 -0
  715. package/skills/returns-reverse-logistics/evals/triggers.json +16 -0
  716. package/skills/ruby-patterns/SKILL.md +127 -0
  717. package/skills/ruby-patterns/evals/triggers.json +18 -0
  718. package/skills/ruby-testing/SKILL.md +113 -0
  719. package/skills/ruby-testing/evals/triggers.json +18 -0
  720. package/skills/runbook-writing/SKILL.md +101 -0
  721. package/skills/runbook-writing/evals/triggers.json +14 -0
  722. package/skills/rust-patterns/SKILL.md +118 -0
  723. package/skills/rust-patterns/evals/triggers.json +16 -0
  724. package/skills/rust-patterns/references/cargo-and-clippy.md +105 -0
  725. package/skills/rust-patterns/references/errors-and-traits.md +97 -0
  726. package/skills/rust-testing/SKILL.md +148 -0
  727. package/skills/rust-testing/evals/triggers.json +16 -0
  728. package/skills/rust-testing/references/fakes-proptest-async.md +113 -0
  729. package/skills/search-first/SKILL.md +73 -0
  730. package/skills/search-first/evals/triggers.json +14 -0
  731. package/skills/security-review/SKILL.md +58 -0
  732. package/skills/security-review/evals/behavior.json +56 -0
  733. package/skills/security-review/evals/triggers.json +14 -0
  734. package/skills/security-review/references/checklist.md +54 -0
  735. package/skills/security-review/scripts/scan-secrets.js +79 -0
  736. package/skills/seo-audit/SKILL.md +111 -0
  737. package/skills/seo-audit/evals/triggers.json +16 -0
  738. package/skills/seo-audit/references/checks.md +65 -0
  739. package/skills/session-handoff/SKILL.md +101 -0
  740. package/skills/session-handoff/evals/behavior.json +55 -0
  741. package/skills/session-handoff/evals/triggers.json +14 -0
  742. package/skills/skill-authoring/SKILL.md +98 -0
  743. package/skills/skill-authoring/evals/triggers.json +15 -0
  744. package/skills/skill-authoring/references/frontmatter.md +40 -0
  745. package/skills/skill-authoring/references/pressure-testing.md +87 -0
  746. package/skills/slack-app-integration/SKILL.md +108 -0
  747. package/skills/slack-app-integration/evals/triggers.json +17 -0
  748. package/skills/slide-decks/SKILL.md +107 -0
  749. package/skills/slide-decks/evals/triggers.json +18 -0
  750. package/skills/slide-decks/references/html-decks.md +86 -0
  751. package/skills/slide-decks/references/layouts.md +45 -0
  752. package/skills/slide-decks/references/pptx.md +87 -0
  753. package/skills/smart-contract-security/SKILL.md +110 -0
  754. package/skills/smart-contract-security/evals/triggers.json +16 -0
  755. package/skills/smart-contract-security/references/vulnerability-checklist.md +79 -0
  756. package/skills/social-media-publishing/SKILL.md +84 -0
  757. package/skills/social-media-publishing/evals/triggers.json +17 -0
  758. package/skills/social-media-publishing/references/platform-apis.md +116 -0
  759. package/skills/solidity-patterns/SKILL.md +95 -0
  760. package/skills/solidity-patterns/evals/triggers.json +16 -0
  761. package/skills/spring-boot-patterns/SKILL.md +128 -0
  762. package/skills/spring-boot-patterns/evals/triggers.json +18 -0
  763. package/skills/spring-boot-patterns/references/testing.md +72 -0
  764. package/skills/stripe-integration/SKILL.md +69 -0
  765. package/skills/stripe-integration/evals/triggers.json +16 -0
  766. package/skills/stripe-integration/references/api.md +71 -0
  767. package/skills/stripe-integration/references/billing.md +58 -0
  768. package/skills/stripe-integration/references/webhooks.md +76 -0
  769. package/skills/subagent-driven-development/SKILL.md +109 -0
  770. package/skills/subagent-driven-development/evals/behavior.json +53 -0
  771. package/skills/subagent-driven-development/evals/triggers.json +15 -0
  772. package/skills/subagent-driven-development/references/implementer-brief.md +60 -0
  773. package/skills/subagent-driven-development/references/reviewer-briefs.md +52 -0
  774. package/skills/subscription-billing-ops/SKILL.md +118 -0
  775. package/skills/subscription-billing-ops/evals/triggers.json +17 -0
  776. package/skills/subscription-billing-ops/references/proration.md +47 -0
  777. package/skills/subscription-billing-ops/references/revenue-metrics.md +38 -0
  778. package/skills/svelte-patterns/SKILL.md +122 -0
  779. package/skills/svelte-patterns/evals/triggers.json +16 -0
  780. package/skills/swift-patterns/SKILL.md +113 -0
  781. package/skills/swift-patterns/evals/triggers.json +16 -0
  782. package/skills/swift-patterns/references/concurrency-migration.md +40 -0
  783. package/skills/swift-testing/SKILL.md +121 -0
  784. package/skills/swift-testing/evals/triggers.json +16 -0
  785. package/skills/swift-testing/references/swift-testing-cheatsheet.md +81 -0
  786. package/skills/swiftui-patterns/SKILL.md +102 -0
  787. package/skills/swiftui-patterns/evals/triggers.json +16 -0
  788. package/skills/systematic-debugging/SKILL.md +92 -0
  789. package/skills/systematic-debugging/evals/behavior.json +59 -0
  790. package/skills/systematic-debugging/evals/triggers.json +16 -0
  791. package/skills/systematic-debugging/references/condition-waiting.md +52 -0
  792. package/skills/systematic-debugging/references/root-cause-tracing.md +49 -0
  793. package/skills/systematic-debugging/references/test-pollution.md +46 -0
  794. package/skills/tdd-workflow/SKILL.md +69 -0
  795. package/skills/tdd-workflow/evals/behavior.json +55 -0
  796. package/skills/tdd-workflow/evals/triggers.json +15 -0
  797. package/skills/tdd-workflow/references/testing-anti-patterns.md +87 -0
  798. package/skills/technical-writing/SKILL.md +95 -0
  799. package/skills/technical-writing/evals/triggers.json +14 -0
  800. package/skills/terraform-patterns/SKILL.md +122 -0
  801. package/skills/terraform-patterns/evals/triggers.json +16 -0
  802. package/skills/terraform-patterns/references/backends.md +67 -0
  803. package/skills/test-coverage-improvement/SKILL.md +107 -0
  804. package/skills/test-coverage-improvement/evals/triggers.json +16 -0
  805. package/skills/threat-modeling/SKILL.md +113 -0
  806. package/skills/threat-modeling/evals/triggers.json +16 -0
  807. package/skills/transactional-email/SKILL.md +68 -0
  808. package/skills/transactional-email/evals/triggers.json +17 -0
  809. package/skills/transactional-email/references/providers.md +63 -0
  810. package/skills/typescript-patterns/SKILL.md +122 -0
  811. package/skills/typescript-patterns/evals/triggers.json +16 -0
  812. package/skills/typescript-testing/SKILL.md +101 -0
  813. package/skills/typescript-testing/evals/triggers.json +16 -0
  814. package/skills/ui-demo-recording/SKILL.md +93 -0
  815. package/skills/ui-demo-recording/evals/triggers.json +16 -0
  816. package/skills/ui-demo-recording/references/cursor-and-captions.md +48 -0
  817. package/skills/ui-demo-recording/references/playwright-recording.md +63 -0
  818. package/skills/ui-demo-recording/references/post-processing.md +57 -0
  819. package/skills/ui-design-polish/SKILL.md +113 -0
  820. package/skills/ui-design-polish/evals/triggers.json +18 -0
  821. package/skills/ui-design-polish/references/detail-checklist.md +45 -0
  822. package/skills/ui-design-polish/references/tokens.md +68 -0
  823. package/skills/ui-flow-audit/SKILL.md +112 -0
  824. package/skills/ui-flow-audit/evals/triggers.json +17 -0
  825. package/skills/ui-motion/SKILL.md +103 -0
  826. package/skills/ui-motion/evals/triggers.json +18 -0
  827. package/skills/ui-motion/references/patterns.md +138 -0
  828. package/skills/ui-motion/references/tokens.md +52 -0
  829. package/skills/unicode-text-processing/SKILL.md +103 -0
  830. package/skills/unicode-text-processing/evals/triggers.json +17 -0
  831. package/skills/unicode-text-processing/references/apis.md +89 -0
  832. package/skills/unicode-text-processing/references/script-notes.md +50 -0
  833. package/skills/verification-loop/SKILL.md +70 -0
  834. package/skills/verification-loop/evals/behavior.json +52 -0
  835. package/skills/verification-loop/evals/triggers.json +14 -0
  836. package/skills/verification-loop/scripts/detect-checks.js +102 -0
  837. package/skills/video-editing/SKILL.md +111 -0
  838. package/skills/video-editing/evals/triggers.json +16 -0
  839. package/skills/video-editing/references/edl-and-logging.md +44 -0
  840. package/skills/video-editing/references/ffmpeg-edit-recipes.md +92 -0
  841. package/skills/video-editing/references/resolve-scripting.md +53 -0
  842. package/skills/vite-patterns/SKILL.md +117 -0
  843. package/skills/vite-patterns/evals/triggers.json +16 -0
  844. package/skills/vue-patterns/SKILL.md +104 -0
  845. package/skills/vue-patterns/evals/triggers.json +16 -0
  846. package/skills/web-accessibility/SKILL.md +119 -0
  847. package/skills/web-accessibility/evals/triggers.json +16 -0
  848. package/skills/web-performance/SKILL.md +107 -0
  849. package/skills/web-performance/evals/triggers.json +16 -0
  850. package/skills/web-scraping/SKILL.md +80 -0
  851. package/skills/web-scraping/evals/triggers.json +16 -0
@@ -0,0 +1,102 @@
1
+ ---
2
+ name: database-migrations
3
+ description: Plans and writes zero-downtime schema migrations with the expand-migrate-contract sequence, so columns, tables and indexes can be added, renamed, retyped or dropped while old and new app versions run side by side, with batched backfills, lock and statement timeouts, tested rollbacks, and the conventions of tools such as Flyway, Liquibase, Alembic, Django, Rails, Prisma and Knex. Use when writing a migration against a live database, renaming or dropping a column in production, backfilling a large table, adding a NOT NULL column or foreign key without locking writes, or planning how to roll a schema change back.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Generating and running migrations needs the project's migration tool and a non-production database to rehearse on.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: data
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ # Safe database migrations
14
+
15
+ A migration is safe when every app version that is running during the deploy works with the schema at every step, no statement holds a blocking lock for more than a few seconds, and you know how to go back. This skill is the process; engine details live in `postgres-patterns` and `mysql-patterns`, and SQL recipes in `references/recipes.md`.
16
+
17
+ ## 0. Before you write anything
18
+
19
+ 1. Identify the engine and version, the migration tool (look for `migrations/`, `db/migrate/`, `alembic/`, `prisma/migrations/`, `flyway.conf`, `changelog.xml`) and how migrations run in deploys (before, during or after the new code ships).
20
+ 2. Find the table size: row count and on-disk size. A change that is instant on 10k rows can lock a 200M-row table for an hour.
21
+ 3. Search the codebase for every reader and writer of the affected tables and columns: models, raw SQL, reports, ETL jobs, other services.
22
+ 4. **Stop and ask the user** if any of these is unknown: whether the table is large or hot, whether other services share the database, whether data may be deleted.
23
+
24
+ ## 1. Classify the change
25
+
26
+ | Change | Safe in one step? | Pattern |
27
+ |---|---|---|
28
+ | Add a nullable column, or one with a constant default | Usually yes (check the engine notes) | single migration |
29
+ | Add a table, add an index built online | Yes | single migration, online index build |
30
+ | Add `NOT NULL` column or constraint to existing rows | No | add nullable, backfill, then enforce |
31
+ | Add a foreign key or check on a big table | No | add unvalidated, then validate separately |
32
+ | Rename a column or table | **No** | expand-contract |
33
+ | Change a column type | **No** (usually a rewrite) | expand-contract with a new column |
34
+ | Drop a column or table | **No** | stop using it in code first, then drop later |
35
+ | Split, merge or move data between tables | **No** | expand-contract plus backfill |
36
+
37
+ ## 2. Expand, migrate, contract
38
+
39
+ Ship each phase as its own deploy. Do not move on until the previous one is live everywhere.
40
+
41
+ 1. **Expand.** Add the new column, table or index. Nothing reads it yet. Old code keeps working because nothing it uses changed.
42
+ 2. **Dual write.** Deploy code that writes both old and new shapes (in the app, or with a trigger if many writers exist). Reads still use the old shape.
43
+ 3. **Backfill.** Copy existing rows to the new shape in batches (section 3). Verify with a count of rows where old and new disagree; it must be 0.
44
+ 4. **Switch reads.** Deploy code that reads the new shape. Keep writing both, so you can switch back.
45
+ 5. **Contract.** Stop writing the old shape, wait at least one deploy cycle, then drop the old column or table in a separate migration.
46
+
47
+ Renames follow this pattern: add `new_name`, dual write, backfill, read from `new_name`, drop `old_name`. ORMs that cache column lists (Rails, Django, Hibernate) need the column ignored or removed from the model **before** the drop migration runs.
48
+
49
+ ## 3. Backfills
50
+
51
+ - Never one `UPDATE` over the whole table. It holds row locks, bloats or fills undo/WAL, and stalls replicas.
52
+ - Batch by primary key range, 1k to 10k rows per batch, each batch its own short transaction:
53
+ ```sql
54
+ UPDATE orders SET total_minor = round(total * 100)
55
+ WHERE id > :last_id AND id <= :last_id + 5000 AND total_minor IS NULL;
56
+ ```
57
+ - Make it idempotent (`WHERE new_col IS NULL`) and resumable (record the last ID), so it can be stopped and restarted.
58
+ - Pause between batches and watch replica lag and database CPU; slow down if lag grows.
59
+ - Run long backfills as a job or script, not inside the schema migration transaction. Many tools wrap each migration in one transaction.
60
+
61
+ ## 4. Locks and timeouts
62
+
63
+ - Set a short lock timeout before DDL on any live table, so a blocked `ALTER` fails fast instead of queuing all traffic behind it. Postgres: `SET lock_timeout = '3s'`. MySQL: `SET SESSION lock_wait_timeout = 5`.
64
+ - Retry a timed-out DDL with backoff; don't raise the timeout to minutes.
65
+ - Build indexes online: Postgres `CREATE INDEX CONCURRENTLY` (outside a transaction; tell the tool, for example `disable_ddl_transaction!` in Rails, `atomic = False` in Django, `autocommit_block()` in Alembic). MySQL `ALGORITHM=INPLACE, LOCK=NONE`.
66
+ - One risky statement per migration file, so a failure leaves a clear state.
67
+
68
+ ## 5. Rollbacks
69
+
70
+ 1. Write the down path, or state why there isn't one. A drop of data cannot be rolled back by a migration: the rollback is a restore.
71
+ 2. Prefer rolling **forward**: in expand-contract the old shape still exists until the contract step, so you roll back the code, not the schema.
72
+ 3. Before any destructive step (drop, type change, delete), confirm a recent backup or snapshot exists and that restore has been tested. **Stop and ask the user** to confirm.
73
+ 4. Rehearse: run up, down, then up again on a copy with production-like volume. Time each step.
74
+
75
+ ## 6. Tool conventions
76
+
77
+ - Never edit a migration that has run in any shared environment. Add a new one.
78
+ - Keep schema migrations and data backfills separate. Generated migrations (Django `makemigrations`, Prisma `migrate dev`, Alembic `--autogenerate`) must be read before commit: they can turn a rename into drop-and-add, which loses data.
79
+ - Check what the tool does inside a transaction and with locks. Per-tool notes: `references/tools.md`.
80
+
81
+ ## Never
82
+
83
+ - Never drop or rename a column that deployed code still reads.
84
+ - Never run a destructive migration without a confirmed backup and the user's explicit go-ahead.
85
+ - Never combine the expand and contract steps in one deploy.
86
+ - Never run a migration against production yourself unless the user asks for that exact action.
87
+
88
+ ## Report back
89
+
90
+ Return a migration plan in this shape:
91
+
92
+ ```
93
+ Change: <one line>
94
+ Engine / tool: <e.g. PostgreSQL 16 / Alembic> Table size: <rows, GB>
95
+ Steps:
96
+ 1. [deploy|migration|job] <what> — lock taken, expected duration, rollback
97
+ 2. ...
98
+ Verification: <query that proves the step worked>
99
+ Risks and open questions: <list, or "none">
100
+ ```
101
+
102
+ Then the migration files you wrote and the result of rehearsing them.
@@ -0,0 +1,16 @@
1
+ {
2
+ "should_trigger": [
3
+ "How do I rename a column in production without breaking the app instances still running old code?",
4
+ "Write a Django migration that adds a NOT NULL column to a table with 50 million rows",
5
+ "We need to backfill a new column across 80M rows without stalling replication",
6
+ "Plan the expand and contract steps to split the address fields into their own table",
7
+ "What's the rollback plan if this Flyway migration that changes a column type fails halfway?"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Review the migrations in this pull request and tell me what's risky",
11
+ "Which Postgres index type should I use for full-text search on article bodies?",
12
+ "Our MySQL connection shows utf8mb3, how do I make the client use utf8mb4?",
13
+ "Set up a GitHub Actions workflow that runs the test suite on every push",
14
+ "Create a blue-green deployment strategy for our Kubernetes services"
15
+ ]
16
+ }
@@ -0,0 +1,98 @@
1
+ # Migration recipes
2
+
3
+ Each recipe assumes a large, busy table. Set the lock timeout first (Postgres `SET lock_timeout = '3s';`, MySQL `SET SESSION lock_wait_timeout = 5;`). Check the engine docs for your exact version before relying on a "no rewrite" claim.
4
+
5
+ ## Add a column
6
+
7
+ PostgreSQL: nullable, or with a non-volatile default, is a metadata-only change (since PostgreSQL 11). A volatile default such as `clock_timestamp()`, a stored generated column or an identity column rewrites the table.
8
+
9
+ ```sql
10
+ ALTER TABLE orders ADD COLUMN source text; -- instant
11
+ ALTER TABLE orders ADD COLUMN currency text DEFAULT 'GHS'; -- instant, default stored in catalog
12
+ ```
13
+
14
+ MySQL 8: `ALTER TABLE orders ADD COLUMN source VARCHAR(50) NULL, ALGORITHM=INSTANT;`
15
+
16
+ ## Add NOT NULL to an existing column
17
+
18
+ PostgreSQL (12+), without a long ACCESS EXCLUSIVE scan:
19
+
20
+ ```sql
21
+ ALTER TABLE orders ADD CONSTRAINT orders_source_nn CHECK (source IS NOT NULL) NOT VALID; -- brief lock
22
+ -- backfill NULLs in batches
23
+ ALTER TABLE orders VALIDATE CONSTRAINT orders_source_nn; -- scans, SHARE UPDATE EXCLUSIVE: reads and writes continue
24
+ ALTER TABLE orders ALTER COLUMN source SET NOT NULL; -- skips the scan thanks to the valid CHECK
25
+ ALTER TABLE orders DROP CONSTRAINT orders_source_nn;
26
+ ```
27
+
28
+ MySQL: backfill first, then `ALTER TABLE orders MODIFY source VARCHAR(50) NOT NULL, ALGORITHM=INPLACE, LOCK=NONE;`. Needs strict `sql_mode` and fails if any NULL remains. `MODIFY` replaces the whole column definition: restate the charset, collation, default and comment from `SHOW CREATE TABLE` or they are lost. This rebuilds the table; on a large table expect replica lag, or use `gh-ost` / `pt-online-schema-change`.
29
+
30
+ ## Add a foreign key
31
+
32
+ PostgreSQL:
33
+
34
+ ```sql
35
+ CREATE INDEX CONCURRENTLY order_items_order_id_idx ON order_items (order_id);
36
+ ALTER TABLE order_items ADD CONSTRAINT order_items_order_id_fkey
37
+ FOREIGN KEY (order_id) REFERENCES orders (id) NOT VALID; -- no scan
38
+ ALTER TABLE order_items VALIDATE CONSTRAINT order_items_order_id_fkey;
39
+ ```
40
+
41
+ MySQL: adding a foreign key with `foreign_key_checks` on copies the table; test duration on a copy. Many teams enforce the reference in the app on very large MySQL tables instead; that is a decision for the user.
42
+
43
+ ## Add a unique constraint
44
+
45
+ PostgreSQL:
46
+
47
+ ```sql
48
+ CREATE UNIQUE INDEX CONCURRENTLY users_email_key ON users (email);
49
+ ALTER TABLE users ADD CONSTRAINT users_email_key UNIQUE USING INDEX users_email_key;
50
+ ```
51
+
52
+ Find duplicates first (`SELECT email, count(*) FROM users GROUP BY 1 HAVING count(*) > 1;`) or the build fails and leaves an INVALID index to drop.
53
+
54
+ ## Add or drop an index
55
+
56
+ - PostgreSQL: `CREATE INDEX CONCURRENTLY ...` and `DROP INDEX CONCURRENTLY ...`, each outside a transaction block. After a failed build: `DROP INDEX CONCURRENTLY name;` and retry.
57
+ - MySQL: `ALTER TABLE t ADD INDEX name (cols), ALGORITHM=INPLACE, LOCK=NONE;`
58
+
59
+ ## Change a column type (for example int to bigint)
60
+
61
+ 1. Add `id_new bigint` (instant).
62
+ 2. Dual write: app or trigger sets `id_new = id` on insert and update.
63
+ 3. Backfill in batches; verify `SELECT count(*) FROM t WHERE id_new IS DISTINCT FROM id;` is 0.
64
+ 4. Build any index or constraint on `id_new` online.
65
+ 5. Make `id_new` NOT NULL without a long scan (the CHECK ... NOT VALID recipe above). Foreign keys in other tables that reference `id` must be recreated against the new key (each as NOT VALID then VALIDATE); plan them as their own steps.
66
+ 6. In one short transaction with a lock timeout: rename `id` to `id_old`, `id_new` to `id`, move the default or sequence, swap the primary key with `ADD CONSTRAINT t_pkey PRIMARY KEY USING INDEX <prebuilt unique index>`.
67
+ 7. Later, drop `id_old`.
68
+
69
+ PostgreSQL exception: binary-coercible changes with no `USING` expression, such as `varchar(50)` to `varchar(100)` or `varchar` to `text`, skip the rewrite.
70
+
71
+ ## Rename a column
72
+
73
+ Expand-contract (see SKILL.md section 2). A database-only `RENAME COLUMN` is instant but breaks every running app instance that still uses the old name; only do it in one step when the user confirms nothing runs during the deploy.
74
+
75
+ ## Drop a column
76
+
77
+ 1. If the column is `NOT NULL` without a default, make it nullable (or give it a default) first, or inserts fail once the code stops writing it. Then remove all reads and writes in code; for ORMs, mark the column ignored (Rails `self.ignored_columns += ["col"]`, Django: remove the field with `SeparateDatabaseAndState` so the column stays) and deploy.
78
+ 2. Wait a deploy cycle.
79
+ 3. Confirm a backup, then `ALTER TABLE t DROP COLUMN col;`.
80
+
81
+ ## Batched backfill template
82
+
83
+ ```python
84
+ last_id = load_checkpoint() or 0
85
+ while True:
86
+ rows = db.execute(
87
+ "UPDATE t SET new_col = old_col WHERE id IN ("
88
+ " SELECT id FROM t WHERE id > %s AND new_col IS NULL ORDER BY id LIMIT 5000"
89
+ ") RETURNING id", [last_id]).fetchall()
90
+ db.commit()
91
+ if not rows:
92
+ break
93
+ last_id = max(r[0] for r in rows)
94
+ save_checkpoint(last_id)
95
+ sleep_if_replica_lag_high()
96
+ ```
97
+
98
+ `RETURNING` is PostgreSQL (and MariaDB for `DELETE`/`INSERT`); in MySQL use an ID range per batch instead.
@@ -0,0 +1,21 @@
1
+ # Migration tool notes
2
+
3
+ Read the tool's docs for the installed version; these are the points that most often cause outages.
4
+
5
+ | Tool | Generate / apply | Non-transactional statement (Postgres `CONCURRENTLY`) | Watch out for |
6
+ |---|---|---|---|
7
+ | Rails | `bin/rails g migration`, `bin/rails db:migrate` | `disable_ddl_transaction!` plus `add_index ..., algorithm: :concurrently` | `self.ignored_columns` before dropping; `strong_migrations` gem flags unsafe operations |
8
+ | Django | `manage.py makemigrations`, `manage.py migrate` | `atomic = False` on the `Migration`; `AddIndexConcurrently` from `django.contrib.postgres.operations` | `RunPython` backfills run inside the migration transaction by default; `sqlmigrate` shows the SQL |
9
+ | Alembic | `alembic revision --autogenerate`, `alembic upgrade head` | `with op.get_context().autocommit_block():` | autogenerate turns renames into drop and add; review every generated file |
10
+ | Flyway | versioned files `V<n>__desc.sql`, `flyway migrate` | script config `executeInTransaction=false`; on Postgres also check the `postgresql.transactional.lock` setting | never edit an applied file: checksum validation fails |
11
+ | Liquibase | changelog changesets, `liquibase update` | `runInTransaction="false"` on the changeset | each changeset is identified by id + author + file; editing applied ones fails validation |
12
+ | Prisma | `prisma migrate dev` (dev only), `prisma migrate deploy` (CI/prod) | edit the generated `migration.sql` (`--create-only`) and keep a concurrent index alone in its own migration; check your version's docs for transaction behaviour | `migrate dev` can offer to reset the database; never run it against shared data |
13
+ | Knex | `knex migrate:make`, `knex migrate:latest` | `exports.config = { transaction: false }` | |
14
+ | golang-migrate | `migrate create`, `migrate up` | keep a `CONCURRENTLY` statement alone in its file: Postgres runs a multi-statement query string as one implicit transaction | a failed migration marks the version dirty; fix then `migrate force` |
15
+ | EF Core | `dotnet ef migrations add`, `dotnet ef database update` or a generated script | `migrationBuilder.Sql(..., suppressTransaction: true)` | review generated `RenameColumn` vs drop/add; prefer idempotent scripts for production |
16
+
17
+ ## Running migrations in deploys
18
+
19
+ - Run migrations as a separate step before the new code rolls out, from one place only (a job or init container), never from every app instance at startup.
20
+ - Expand migrations go before the code that needs them; contract migrations go in a later release after the code stopped using the old shape.
21
+ - Keep a lock timeout in the migration session so a blocked migration fails the deploy instead of taking the site down.
@@ -0,0 +1,96 @@
1
+ ---
2
+ name: dbt-patterns
3
+ description: dbt project conventions for analytics engineering, laying models out in staging, intermediate and marts layers, declaring sources with freshness, using ref and source instead of hard-coded tables, adding data tests, unit tests and enforced model contracts, choosing an incremental strategy, building snapshots for slowly changing history, documenting columns, and running slim CI on only the modified nodes. Use when creating or restructuring a dbt project, writing or refactoring a dbt model, an incremental model gives duplicates, adding dbt tests or snapshots, or setting up dbt CI with state:modified and defer.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Needs dbt Core or the dbt Fusion/Cloud CLI with the project's adapter installed. Examples assume dbt 1.8 or later.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: data
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/requires: "dbt"
11
+ kete-loom/owner: "Kete-org"
12
+ ---
13
+
14
+ # dbt patterns
15
+
16
+ Keep a dbt project where every model has one clear job and grain, every table is reached through `ref` or `source`, tests catch broken keys before a dashboard does, and CI builds only what changed.
17
+
18
+ ## Before you start
19
+
20
+ 1. Run `dbt --version` and read `dbt_project.yml`, `packages.yml` and `profiles.yml` location (never print credentials). Note the adapter (Snowflake, BigQuery, Databricks, Postgres, Redshift, DuckDB...), because incremental strategies differ by adapter.
21
+ 2. Run `dbt deps` then `dbt parse` (or `dbt compile`) to confirm the project builds before you change anything. If it already fails, **stop and tell the user**.
22
+ 3. Find existing conventions (folder names, prefixes, style guide, `sqlfluff` config) and follow them over this skill.
23
+
24
+ ## Layers
25
+
26
+ | Layer | Folder | Prefix | Job | Materialization |
27
+ |---|---|---|---|---|
28
+ | Staging | `models/staging/<source>/` | `stg_<source>__<entity>` | 1:1 with a source table: rename, cast, light cleanup. No joins, no aggregates. | view (or ephemeral) |
29
+ | Intermediate | `models/intermediate/<area>/` | `int_<entity>_<verb>` | Reusable joins, pivots, fan-outs between staging and marts | ephemeral or view |
30
+ | Marts | `models/marts/<area>/` | `fct_<event>`, `dim_<entity>` | Business-facing tables at a stated grain | table or incremental |
31
+
32
+ Rules:
33
+
34
+ - Only staging models call `{{ source('...', '...') }}`. Everything else uses `{{ ref('...') }}`. Never hard-code `database.schema.table`.
35
+ - Write the grain at the top of each mart's YAML description ("one row per order line").
36
+ - Use CTEs: import CTEs (`with orders as (select * from {{ ref('stg_shop__orders') }})`) at the top, logic in the middle, a final `select * from final`.
37
+ - Set materializations per folder in `dbt_project.yml` (`+materialized:`), and override in a model only with a reason.
38
+
39
+ ## Sources
40
+
41
+ Declare every raw table in `models/staging/<source>/_<source>__sources.yml` with `loaded_at_field` and `freshness` (`warn_after`, `error_after`), then run `dbt source freshness` in production jobs. Examples are in `references/yaml-examples.md`.
42
+
43
+ ## Tests and contracts
44
+
45
+ - Every model: primary key `unique` and `not_null` under `data_tests:` (the key name since dbt 1.8; older projects use `tests:`).
46
+ - Foreign keys: `relationships`. Enumerations: `accepted_values`. Use `dbt_utils` or `dbt_expectations` only if already installed or the user agrees to add them.
47
+ - Use `severity: warn` or `config: {where: ...}` for known noisy rules; never delete a failing test to make a build pass.
48
+ - **Unit tests** (`unit_tests:` in YAML, dbt 1.8+) for tricky SQL logic: given fixed input rows, expect fixed output rows. Run with `dbt test --select test_type:unit`.
49
+ - **Model contracts** (`config: contract: {enforced: true}` plus every column's `data_type`) on marts that other teams or tools consume. A contract change is a breaking change: tell the user, and consider model `versions`.
50
+
51
+ ## Incremental models
52
+
53
+ 1. Use incremental only when a full rebuild is too slow or costly. Start as `table`.
54
+ 2. Choose the strategy the adapter supports:
55
+ - `merge` with `unique_key` for rows that update in place.
56
+ - `delete+insert` with `unique_key` where merge is slow or unsupported.
57
+ - `insert_overwrite` for whole partitions (BigQuery, Spark, Databricks).
58
+ - `append` only for immutable events with dedup downstream.
59
+ - `microbatch` (dbt 1.9+) for large time series: set `event_time`, `batch_size`, `begin`, optional `lookback`.
60
+ 3. Filter new rows inside `{% if is_incremental() %}`, with a lookback for late data, for example `where updated_at > (select max(updated_at) from {{ this }}) - interval '3 days'` (adjust the syntax for the warehouse).
61
+ 4. Set `on_schema_change` (`fail` or `append_new_columns`) rather than relying on the default `ignore`.
62
+ 5. Duplicates in an incremental model almost always mean a missing or non-unique `unique_key`, or `append` used for mutable data. Test the key.
63
+ 6. **Stop and ask** before running `--full-refresh` on a large production model.
64
+
65
+ ## Snapshots
66
+
67
+ Use snapshots to keep history of a mutable source (type 2 slowly changing dimension). In dbt 1.9+ define them in YAML (`snapshots:` with `relation`, `config: strategy, unique_key, updated_at`); older projects use `{% snapshot %}` blocks. Prefer `strategy: timestamp` when a reliable `updated_at` exists, else `check` with `check_cols`. Set `hard_deletes` (`ignore`, `invalidate` or `new_record`) deliberately. Snapshot sources, not marts. Never drop a snapshot table: its history cannot be rebuilt.
68
+
69
+ ## Documentation
70
+
71
+ - Every mart and its columns get `description:` in YAML; reuse text with `{% docs %}` blocks for shared columns.
72
+ - `dbt docs generate` builds the site and lineage graph; check it renders.
73
+ - Add `meta: {owner: ...}` if the project tracks owners.
74
+
75
+ ## Slim CI
76
+
77
+ On every pull request:
78
+
79
+ 1. Fetch the production `manifest.json` (from the last prod run) into a folder such as `prod-artifacts/`.
80
+ 2. Run `dbt build --select state:modified+ --defer --state prod-artifacts/` against a CI schema, so unchanged parents are read from production.
81
+ 3. Optionally `dbt clone --select state:modified+,config.materialized:incremental --state prod-artifacts/` first so incremental models start from production data (worth it on warehouses with zero-copy cloning).
82
+ 4. Use `dbt build --empty` (1.8+) for a cheap schema-only dry run where data volumes are huge.
83
+ 5. Drop the CI schema after the run.
84
+
85
+ CI config examples are in `references/yaml-examples.md`.
86
+
87
+ ## Never
88
+
89
+ - Never put credentials in `dbt_project.yml` or the repo; use `env_var()`.
90
+ - Never reference another model by its physical table name.
91
+ - Never change a contracted or widely used mart's columns without telling the user who consumes it.
92
+ - Never run `dbt run` against production from a laptop unless the user asks.
93
+
94
+ ## Report back
95
+
96
+ Models added or changed (name, layer, grain, materialization), tests and contracts added, the exact dbt commands run with pass, warn and error counts, and any follow-up (full refresh needed, downstream consumers affected).
@@ -0,0 +1,16 @@
1
+ {
2
+ "should_trigger": [
3
+ "Set up slim CI for our dbt project so pull requests only build modified models",
4
+ "My dbt incremental model is producing duplicate order rows after each run",
5
+ "Add a dbt snapshot to track history of the customers table as a type 2 dimension",
6
+ "Write dbt unit tests and an enforced contract for the fct_orders mart",
7
+ "Where should joins live in dbt, staging or intermediate models?"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Write an Airflow DAG that extracts from Postgres and loads into BigQuery every hour",
11
+ "Tune this slow Postgres query that joins orders and customers",
12
+ "Define what weekly active users means for the product dashboard",
13
+ "Add a GitHub Actions workflow that runs our Python unit tests on every push",
14
+ "Migrate the production users table to add a non-null column without downtime"
15
+ ]
16
+ }
@@ -0,0 +1,114 @@
1
+ # dbt YAML examples
2
+
3
+ Check key names against the docs for the installed dbt version (docs.getdbt.com).
4
+
5
+ ## Source with freshness
6
+
7
+ ```yaml
8
+ # models/staging/shop/_shop__sources.yml
9
+ sources:
10
+ - name: shop
11
+ database: raw
12
+ schema: shop
13
+ loaded_at_field: _loaded_at
14
+ freshness:
15
+ warn_after: {count: 12, period: hour}
16
+ error_after: {count: 24, period: hour}
17
+ tables:
18
+ - name: orders
19
+ - name: customers
20
+ ```
21
+
22
+ In newer dbt versions these keys live under `config:` (`freshness` from v1.9, `loaded_at_field` from v1.10), and v1.10 raises deprecation warnings for properties that moved to configs. Follow what the project's dbt version and existing files do. Sources: https://docs.getdbt.com/reference/resource-properties/freshness and https://docs.getdbt.com/docs/dbt-versions/core-upgrade/upgrading-to-v1.10
23
+
24
+ ## Model with tests and a contract
25
+
26
+ ```yaml
27
+ # models/marts/sales/_sales__models.yml
28
+ models:
29
+ - name: fct_orders
30
+ description: One row per order.
31
+ config:
32
+ contract: {enforced: true}
33
+ columns:
34
+ - name: order_id
35
+ data_type: varchar
36
+ data_tests: [unique, not_null]
37
+ - name: customer_id
38
+ data_type: varchar
39
+ data_tests:
40
+ - relationships:
41
+ to: ref('dim_customers')
42
+ field: customer_id
43
+ - name: status
44
+ data_type: varchar
45
+ data_tests:
46
+ - accepted_values:
47
+ values: ['placed', 'shipped', 'returned']
48
+ - name: amount
49
+ data_type: numeric
50
+ ```
51
+
52
+ From dbt v1.10.5, generic test arguments (`to`, `field`, `values`) can be nested under `arguments:`; older versions take them at the top level as shown. See https://docs.getdbt.com/reference/resource-properties/data-tests
53
+
54
+ ## Unit test
55
+
56
+ ```yaml
57
+ unit_tests:
58
+ - name: test_order_amount_excludes_refunds
59
+ model: fct_orders
60
+ given:
61
+ - input: ref('stg_shop__orders')
62
+ rows:
63
+ - {order_id: 'a', amount: 100, is_refund: false}
64
+ - {order_id: 'b', amount: 40, is_refund: true}
65
+ expect:
66
+ rows:
67
+ - {order_id: 'a', amount: 100}
68
+ ```
69
+
70
+ ## Incremental model (merge)
71
+
72
+ ```sql
73
+ {{ config(
74
+ materialized='incremental',
75
+ unique_key='order_id',
76
+ incremental_strategy='merge',
77
+ on_schema_change='append_new_columns'
78
+ ) }}
79
+
80
+ with orders as (select * from {{ ref('stg_shop__orders') }})
81
+
82
+ select * from orders
83
+ {% if is_incremental() %}
84
+ where updated_at > (select max(updated_at) from {{ this }}) - interval '3 days'
85
+ {% endif %}
86
+ ```
87
+
88
+ ## Snapshot (dbt 1.9+)
89
+
90
+ ```yaml
91
+ # snapshots/customers_snapshot.yml
92
+ snapshots:
93
+ - name: customers_snapshot
94
+ relation: source('shop', 'customers')
95
+ config:
96
+ schema: snapshots
97
+ unique_key: customer_id
98
+ strategy: timestamp
99
+ updated_at: updated_at
100
+ hard_deletes: invalidate
101
+ ```
102
+
103
+ ## Slim CI job (GitHub Actions outline)
104
+
105
+ ```yaml
106
+ - run: pip install dbt-core dbt-snowflake # pin versions the project uses
107
+ - run: dbt deps
108
+ - run: ./scripts/fetch-prod-manifest.sh prod-artifacts/ # however the team stores it
109
+ - run: dbt build --select state:modified+ --defer --state prod-artifacts/ --target ci
110
+ env:
111
+ DBT_CI_SCHEMA: pr_${{ github.event.number }}
112
+ ```
113
+
114
+ The CI target in `profiles.yml` must read that variable (`schema: "{{ env_var('DBT_CI_SCHEMA') }}"`), or the build lands in the default schema. Profiles for CI read credentials with `{{ env_var('SNOWFLAKE_PASSWORD') }}` from CI secrets.
@@ -0,0 +1,98 @@
1
+ ---
2
+ name: decision-council
3
+ description: Runs a council of independent viewpoints on one hard call, giving several role-played advisers or separate models (or providers) the same brief in isolation so none sees another's answer, then cross-examining their positions and synthesising a single recommendation that records the strongest dissent, the confidence level and what evidence would change the outcome. Use when facing an ambiguous or contested choice, a go/no-go or launch call, a build-versus-buy or vendor pick, or whenever the user asks for a second opinion, a devil's advocate, a panel or a debate before committing.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Works with role-played perspectives in one session; independent subagents or a second model or provider give stronger independence where the host supports them.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: ai
9
+ kete-loom/risk: read-only
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ # Decision council
14
+
15
+ One model asked once tends to agree with the framing it was given. A council gets several independent answers to the same brief, then weighs them openly, so the decision shows its disagreements instead of hiding them.
16
+
17
+ Use it for decisions, not for tasks with a checkable answer (run the test instead), and not for code review (use a reviewer agent or `/dual-review`). To write up the outcome as a permanent record, hand the result to `architecture-decision-records`.
18
+
19
+ ## 1. Frame the decision
20
+
21
+ Write a brief of at most one page and show it to the user before convening anyone:
22
+
23
+ - **Question**: one sentence, phrased as a choice ("Ship v2 on 1 March, or slip to April?").
24
+ - **Options**: two to four concrete options, including "do nothing" or "delay" where real.
25
+ - **Criteria**: what matters, in priority order (cost, risk, time, reversibility, user impact, compliance).
26
+ - **Facts**: the evidence available, with sources. Mark assumptions as assumptions.
27
+ - **Constraints**: deadlines, budgets, non-negotiables.
28
+ - **Reversibility**: how hard the choice is to undo. Easily reversible decisions rarely need a council; say so and stop if this is one.
29
+
30
+ Keep the brief neutral. Don't state your own lean, and don't order options so the preferred one comes first or last every time.
31
+
32
+ If the question or the options are unclear, stop and ask the user rather than guessing.
33
+
34
+ ## 2. Choose the members
35
+
36
+ Pick three to five members. Choose perspectives that would genuinely disagree:
37
+
38
+ - **Roles**, for example: the operator who must run it, the customer, the finance owner, the security or compliance reviewer, the skeptic whose job is to argue against the leading option, the engineer who builds it.
39
+ - **Different models or providers**, where available, to reduce shared blind spots. Note the model name for each member.
40
+ - Always include one member assigned to argue the strongest case against whatever looks like the default option.
41
+
42
+ For regulated, legal, medical or financial decisions, a role-played expert is not a qualified opinion. Say this in the result and name who must actually review it.
43
+
44
+ ## 3. Keep them independent
45
+
46
+ Independence is the whole point; protect it:
47
+
48
+ 1. Give every member the same brief, word for word, plus their role. Don't pass any member another's answer in this round.
49
+ 2. Run members in separate contexts (separate subagents, separate sessions or separate model calls) when the host allows. If only one context is available, write each member's answer in full before starting the next, and don't revise earlier answers.
50
+ 3. Ask each member for the same fixed format:
51
+
52
+ ```
53
+ Position: <option>
54
+ Confidence: low | medium | high
55
+ Top 3 reasons: ...
56
+ Biggest risk of my position: ...
57
+ What would change my mind: ...
58
+ ```
59
+
60
+ 4. Don't let members search for or cite each other. Facts they introduce must come with a source; unsourced claims are flagged in synthesis.
61
+
62
+ ## 4. Cross-examine
63
+
64
+ One round only, to stop the council drifting into consensus by attrition:
65
+
66
+ - Show each member the other positions, anonymised (Member A, B, C).
67
+ - Ask each: which argument against your position is strongest, and does it change your position? Record any change and why.
68
+ - Ask the assigned skeptic to attack the current majority view.
69
+
70
+ ## 5. Synthesise
71
+
72
+ You, as chair, write the recommendation. Rules:
73
+
74
+ - Weigh arguments against the criteria from the brief, not by headcount. A single member with a decisive fact beats a majority without one.
75
+ - Check that every factual claim the recommendation relies on is in the brief or sourced. Drop or flag the rest.
76
+ - Keep dissent visible. Never smooth a real disagreement into "all members broadly agree".
77
+ - Confidence is about the decision, not the members: high only if the main arguments survived cross-examination and the facts are solid.
78
+ - If the council splits evenly or confidence is low, say so and name the one piece of evidence that would settle it, instead of forcing a pick.
79
+
80
+ ## Never
81
+
82
+ - Never present the council's output as the user's decision; the user decides.
83
+ - Never invent expert credentials, data or quotes for a member.
84
+ - Never rerun the council until you get the answer you or the user wanted; if new facts arrive, revise the brief and say what changed.
85
+
86
+ ## Report
87
+
88
+ ```
89
+ ## Decision: <question>
90
+ Recommendation: <option> Confidence: low | medium | high
91
+ Why: <three bullet points tied to the criteria>
92
+ Members: <role or model> → <position> (<confidence>), one line each; mark changes after cross-examination
93
+ Strongest dissent: <argument, who holds it, why it did not prevail>
94
+ Key risks and mitigations: <bullets>
95
+ Would change the call: <specific evidence or event>
96
+ Assumptions: <list>
97
+ Needs qualified review: <who, or "none">
98
+ ```
@@ -0,0 +1,16 @@
1
+ {
2
+ "should_trigger": [
3
+ "We can't agree whether to launch the new pricing on Monday or wait a month. Get me a few independent perspectives and a recommendation",
4
+ "Should we build our own auth or buy Auth0? I want a panel of viewpoints, including a devil's advocate",
5
+ "Ask two different models separately whether we should sunset the legacy API this quarter, then reconcile their answers",
6
+ "Give me a go/no-go call on the Ghana market expansion with the dissenting view recorded",
7
+ "Convene a council: rewrite the billing service in Go, or keep patching the Rails one?"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Write an ADR recording that we chose Postgres over MongoDB last week",
11
+ "Have two reviewers check my pull request until both approve it",
12
+ "Compare three monolith versus microservice architectures for our new platform and design the module boundaries",
13
+ "Estimate how long the payments migration will take and break it into tasks",
14
+ "Score these model outputs with an LLM judge and give me a pass rate"
15
+ ]
16
+ }