@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,88 @@
1
+ # CMake warnings, sanitizers and clang-tidy
2
+
3
+ Read this when setting up a new C++ project or adding sanitizer and lint builds to an existing one.
4
+
5
+ ## Warnings as a reusable interface target
6
+
7
+ ```cmake
8
+ add_library(project_warnings INTERFACE)
9
+ if(MSVC)
10
+ target_compile_options(project_warnings INTERFACE /W4 /permissive-)
11
+ else()
12
+ target_compile_options(project_warnings INTERFACE
13
+ -Wall -Wextra -Wpedantic -Wshadow -Wconversion -Wsign-conversion -Wnon-virtual-dtor)
14
+ endif()
15
+
16
+ target_link_libraries(core PRIVATE project_warnings)
17
+ ```
18
+
19
+ Turn warnings into errors in CI only (`-Werror` / `/WX`, or CMake's `CMAKE_COMPILE_WARNING_AS_ERROR` on CMake 3.24+), so a new compiler version cannot break a developer's local build.
20
+
21
+ ## Sanitizer option
22
+
23
+ ```cmake
24
+ option(ENABLE_SANITIZERS "Build with ASan and UBSan" OFF)
25
+ if(ENABLE_SANITIZERS AND NOT MSVC)
26
+ add_compile_options(-fsanitize=address,undefined -fno-omit-frame-pointer -fno-sanitize-recover=undefined)
27
+ add_link_options(-fsanitize=address,undefined)
28
+ endif()
29
+ # add_compile_options is deliberate here: every target, including fetched dependencies, must be instrumented.
30
+ ```
31
+
32
+ MSVC supports AddressSanitizer with `/fsanitize=address`; it has no UBSan. Configure: `cmake -S . -B build-asan -DENABLE_SANITIZERS=ON -DCMAKE_BUILD_TYPE=Debug`.
33
+
34
+ Useful runtime options:
35
+
36
+ - `ASAN_OPTIONS=detect_leaks=1:abort_on_error=1` (LeakSanitizer is on by default on Linux; Apple Clang on macOS may not support it, so drop `detect_leaks=1` there if ASan rejects it)
37
+ - `UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1`
38
+ - `TSAN_OPTIONS=halt_on_error=1`
39
+
40
+ ## CMakePresets.json
41
+
42
+ ```json
43
+ {
44
+ "version": 3,
45
+ "configurePresets": [
46
+ { "name": "debug", "binaryDir": "build/debug", "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" } },
47
+ { "name": "asan", "inherits": "debug", "binaryDir": "build/asan", "cacheVariables": { "ENABLE_SANITIZERS": "ON" } },
48
+ { "name": "release", "binaryDir": "build/release", "cacheVariables": { "CMAKE_BUILD_TYPE": "Release" } }
49
+ ],
50
+ "buildPresets": [
51
+ { "name": "debug", "configurePreset": "debug" },
52
+ { "name": "asan", "configurePreset": "asan" }
53
+ ],
54
+ "testPresets": [
55
+ { "name": "asan", "configurePreset": "asan", "output": { "outputOnFailure": true } }
56
+ ]
57
+ }
58
+ ```
59
+
60
+ Run: `cmake --preset asan && cmake --build --preset asan && ctest --preset asan`.
61
+
62
+ ## clang-tidy
63
+
64
+ A starting `.clang-tidy` (only add one if the project has none and the user agrees):
65
+
66
+ ```yaml
67
+ Checks: >
68
+ -*,
69
+ bugprone-*,
70
+ cppcoreguidelines-*,
71
+ modernize-*,
72
+ performance-*,
73
+ readability-*,
74
+ -modernize-use-trailing-return-type,
75
+ -readability-identifier-length,
76
+ -cppcoreguidelines-avoid-magic-numbers,
77
+ -readability-magic-numbers
78
+ WarningsAsErrors: ''
79
+ HeaderFilterRegex: '/(include|src)/'
80
+ ```
81
+
82
+ Header names are usually absolute paths, so do not anchor the regex with `^`. Run on changed files (skipping deleted ones): `clang-tidy -p build $(git diff --name-only --diff-filter=d -- '*.cpp' '*.hpp')`. To run during the build instead, set `CMAKE_CXX_CLANG_TIDY` to `clang-tidy` (slows builds; best in a dedicated CI preset).
83
+
84
+ ## Dependencies
85
+
86
+ - **vcpkg (manifest mode):** a `vcpkg.json` lists dependencies; configure with `-DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake`, then `find_package(fmt CONFIG REQUIRED)` and link the imported target (`fmt::fmt`).
87
+ - **Conan 2:** a `conanfile.txt` or `conanfile.py` with the `CMakeDeps` and `CMakeToolchain` generators; run `conan install . --build=missing`, then configure CMake with the generated `conan_toolchain.cmake` (its folder depends on the layout; Conan prints it).
88
+ - **FetchContent:** good for test frameworks and small header-only libraries; pin a tag or commit hash, never a moving branch.
@@ -0,0 +1,75 @@
1
+ # Undefined behaviour: common cases and fixes
2
+
3
+ Read this when writing or reviewing code that does arithmetic on input, holds references or views, or shares data between threads.
4
+
5
+ ## Lifetime and dangling
6
+
7
+ ```cpp
8
+ // BAD: view into a temporary string
9
+ std::string_view name = get_name(); // get_name() returns std::string by value
10
+ use(name); // dangling
11
+
12
+ // GOOD
13
+ std::string name = get_name();
14
+ ```
15
+
16
+ ```cpp
17
+ // BAD: reference into a vector, then the vector grows
18
+ int& first = v[0];
19
+ v.push_back(42); // may reallocate; `first` now dangles
20
+ first = 1; // UB
21
+
22
+ // GOOD: re-index after growth, or reserve() first if the size is known
23
+ ```
24
+
25
+ ```cpp
26
+ // BAD: lambda outlives the locals it captured by reference
27
+ std::function<void()> make_cb() {
28
+ int count = 0;
29
+ return [&] { ++count; }; // dangling
30
+ }
31
+ // GOOD: capture by value, or move ownership in: [count = 0]() mutable { ++count; }
32
+ ```
33
+
34
+ ```cpp
35
+ // BAD: erasing while iterating
36
+ for (auto it = v.begin(); it != v.end(); ++it) if (bad(*it)) v.erase(it);
37
+ // GOOD (C++20)
38
+ std::erase_if(v, bad);
39
+ ```
40
+
41
+ Range-for over a temporary's member is a classic trap before C++23 (P2718 extends the temporary's lifetime from C++23 on): `for (auto& x : make_obj().items())` dangles if `items()` returns a reference into the temporary. Bind the object to a named variable first.
42
+
43
+ ## Arithmetic
44
+
45
+ - Signed overflow is UB; unsigned wraps. Check before adding untrusted values, or compute in a wider type.
46
+ - `x << n` with `n < 0` or `n >=` bit width is UB.
47
+ - Division or modulo by zero is UB, and `INT_MIN / -1` overflows.
48
+ - Converting a floating value outside the target integer's range is UB.
49
+ - Mixing signed and unsigned in comparisons gives wrong results (not UB, but a bug). `-Wsign-compare` and C++20 `std::cmp_less` help.
50
+
51
+ ## Objects and types
52
+
53
+ - Reading an uninitialised scalar is UB. Use `T x{};`.
54
+ - `reinterpret_cast<float*>(&some_int)` then reading violates strict aliasing. Use `std::memcpy` or `std::bit_cast`.
55
+ - Deleting a derived object through a base pointer whose destructor isn't `virtual` is UB.
56
+ - Calling a virtual function from a constructor or destructor dispatches to the current class, not the derived one (defined, but almost always a bug).
57
+ - Dereferencing `nullptr`, a moved-from `unique_ptr`, or an empty `std::optional` with `*` is UB. Use `.value()` or check first.
58
+
59
+ ## Concurrency
60
+
61
+ - Two threads accessing the same memory, at least one writing, without synchronisation is a data race and UB.
62
+ - `std::shared_ptr`'s control block is thread-safe; the pointed-to object is not.
63
+ - A detached `std::thread` that touches locals of the spawning scope dangles. Prefer `std::jthread` (C++20) or join explicitly.
64
+ - Static local initialisation is thread-safe; lazily initialised globals using a plain flag are not.
65
+
66
+ ## Finding it
67
+
68
+ | Tool | Catches | Flag |
69
+ |---|---|---|
70
+ | AddressSanitizer | use-after-free, out-of-bounds, double free, leaks (LeakSanitizer, where supported) | `-fsanitize=address` |
71
+ | UndefinedBehaviorSanitizer | overflow, bad shifts, misaligned access, null deref, bad casts | `-fsanitize=undefined` |
72
+ | ThreadSanitizer | data races, lock-order inversions | `-fsanitize=thread` (separate build) |
73
+ | MemorySanitizer (Clang, Linux) | reads of uninitialised memory | `-fsanitize=memory` (needs all code instrumented) |
74
+
75
+ Add `-fno-omit-frame-pointer -g` for readable stack traces, and `-fno-sanitize-recover=undefined` so UBSan findings fail the run instead of only printing.
@@ -0,0 +1,131 @@
1
+ ---
2
+ name: cpp-testing
3
+ description: Writes and runs C++ unit tests with GoogleTest or Catch2 - test fixtures, parameterised cases, gMock mocks behind interfaces, CTest registration via gtest_discover_tests or catch_discover_tests, and running the suite under AddressSanitizer and UBSan. Use when adding tests to a C++ codebase, wiring a test framework into CMake and CTest, mocking a C++ dependency, or chasing a flaky or crashing C++ test.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Needs CMake with CTest and a C++ compiler; GoogleTest or Catch2 is fetched or found by CMake.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: testing
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/requires: "cmake, ctest"
11
+ kete-loom/owner: "Kete-org"
12
+ ---
13
+
14
+ # C++ testing
15
+
16
+ Tests that build with the project, register with CTest, and run clean under sanitizers.
17
+
18
+ ## 0. Before you start
19
+
20
+ 1. Find the existing framework: search `CMakeLists.txt` files for `GTest`, `gtest_discover_tests`, `Catch2`, `catch_discover_tests`, `doctest` or `add_test`. **Use what the project already uses.** Only pick a framework when there is none, and then ask the user: GoogleTest (+ gMock) if they need mocking, Catch2 v3 if they prefer BDD-style sections.
21
+ 2. Configure, build and run the current suite once: `cmake -S . -B build && cmake --build build && ctest --test-dir build --output-on-failure`. If it already fails, **stop and tell the user** which tests fail before changing anything.
22
+ 3. List the behaviours to cover as concrete input -> expected output examples, including the error path.
23
+
24
+ ## 1. Wire the framework into CMake (only if missing)
25
+
26
+ GoogleTest with FetchContent (pin a release tag or commit hash):
27
+
28
+ ```cmake
29
+ include(FetchContent)
30
+ FetchContent_Declare(googletest
31
+ GIT_REPOSITORY https://github.com/google/googletest.git
32
+ GIT_TAG <release-tag>)
33
+ set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) # MSVC: match the project's runtime
34
+ FetchContent_MakeAvailable(googletest)
35
+
36
+ enable_testing()
37
+ add_executable(core_tests tests/parser_test.cpp)
38
+ target_link_libraries(core_tests PRIVATE core GTest::gtest_main GTest::gmock)
39
+ include(GoogleTest)
40
+ gtest_discover_tests(core_tests)
41
+ ```
42
+
43
+ Catch2 v3 (installed via vcpkg/Conan, or FetchContent):
44
+
45
+ ```cmake
46
+ find_package(Catch2 3 REQUIRED)
47
+ enable_testing()
48
+ add_executable(core_tests tests/parser_test.cpp)
49
+ target_link_libraries(core_tests PRIVATE core Catch2::Catch2WithMain)
50
+ include(Catch)
51
+ catch_discover_tests(core_tests)
52
+ ```
53
+
54
+ `enable_testing()` must be in the top-level `CMakeLists.txt` (or `include(CTest)`), or `ctest` finds nothing. Link tests against the library target under test; do not recompile its sources into the test binary.
55
+
56
+ ## 2. Write tests
57
+
58
+ GoogleTest essentials:
59
+
60
+ - `TEST(Suite, Name)` for plain tests; `TEST_F(Fixture, Name)` when several tests share setup. The fixture derives from `::testing::Test` and uses `SetUp()`/`TearDown()` or its constructor/destructor.
61
+ - `EXPECT_*` keeps going after a failure; `ASSERT_*` stops the test. Use `ASSERT_*` when later lines would crash (null pointer, empty container).
62
+ - Floating point: `EXPECT_DOUBLE_EQ` or `EXPECT_NEAR(a, b, tol)`, never `EXPECT_EQ`.
63
+ - Exceptions: `EXPECT_THROW(stmt, Type)`, `EXPECT_NO_THROW(stmt)`.
64
+ - Table tests: `TEST_P` with `INSTANTIATE_TEST_SUITE_P(Name, Fixture, ::testing::Values(...))`.
65
+
66
+ Catch2 essentials:
67
+
68
+ - `TEST_CASE("parser rejects empty input", "[parser]")` with `SECTION`s; each section re-runs the setup above it.
69
+ - `REQUIRE` stops, `CHECK` continues. Floats: `REQUIRE_THAT(x, Catch::Matchers::WithinRel(1.0, 1e-6))`.
70
+ - Data-driven: `auto n = GENERATE(0, 1, 255);`.
71
+
72
+ Both: test through the public header, one behaviour per test, names that read as a sentence about behaviour.
73
+
74
+ ## 3. Mock with gMock (only at boundaries)
75
+
76
+ gMock mocks virtual functions, so the dependency needs an interface:
77
+
78
+ ```cpp
79
+ class Clock { public: virtual ~Clock() = default; virtual std::int64_t now_ms() const = 0; };
80
+
81
+ class MockClock : public Clock {
82
+ public:
83
+ MOCK_METHOD(std::int64_t, now_ms, (), (const, override));
84
+ };
85
+
86
+ TEST(RateLimiter, RejectsSecondCallInSameWindow) {
87
+ ::testing::NiceMock<MockClock> clock;
88
+ ON_CALL(clock, now_ms()).WillByDefault(::testing::Return(1000));
89
+ RateLimiter limiter{clock, /*per_second=*/1};
90
+ EXPECT_TRUE(limiter.try_acquire());
91
+ EXPECT_FALSE(limiter.try_acquire());
92
+ }
93
+ ```
94
+
95
+ - Use `EXPECT_CALL(...).Times(n)` only when the call itself is the behaviour under test; otherwise `ON_CALL` + `NiceMock` keeps tests from breaking on harmless refactors.
96
+ - Mock the clock, network, filesystem and other slow or external boundaries. Never mock the class under test, and do not add an interface to a value type just to mock it.
97
+ - If adding an interface would change a public API, **stop and ask the user** first; a template parameter or a constructor-injected `std::function` may be less invasive.
98
+
99
+ ## 4. Run tests
100
+
101
+ - All: `ctest --test-dir build --output-on-failure -j 8`.
102
+ - Filter by CTest name: `ctest --test-dir build -R Parser`.
103
+ - Directly: `./build/core_tests --gtest_filter='Parser.*'` or `./build/core_tests "[parser]"`.
104
+ - Flakiness: `--gtest_repeat=100 --gtest_shuffle`, or `ctest --repeat until-fail:50 -R <name>`.
105
+
106
+ ## 5. Run under sanitizers
107
+
108
+ Build a separate sanitizer tree so the normal build stays fast:
109
+
110
+ ```sh
111
+ cmake -S . -B build-asan -DCMAKE_BUILD_TYPE=Debug \
112
+ -DCMAKE_CXX_FLAGS="-fsanitize=address,undefined -fno-omit-frame-pointer -fno-sanitize-recover=undefined" \
113
+ -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=address,undefined" \
114
+ -DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=address,undefined"
115
+ cmake --build build-asan
116
+ ASAN_OPTIONS=detect_leaks=1 ctest --test-dir build-asan --output-on-failure
117
+ ```
118
+
119
+ If the project already has a sanitizer option or preset, use that instead. For concurrent code, repeat with `-fsanitize=thread` in another build tree (TSan cannot be combined with ASan). LeakSanitizer is on by default on Linux; Apple Clang on macOS may not support `detect_leaks=1`, so drop it there and say leaks were not checked. A sanitizer report is a real bug: fix the code, not the test. If the `cpp-patterns` skill is installed, its undefined-behaviour reference lists the common causes.
120
+
121
+ ## Rules
122
+
123
+ - Never delete, disable (`DISABLED_`, `[.]`, `GTEST_SKIP()`) or loosen an existing test to get green without the user's agreement.
124
+ - No sleeps for synchronisation; use a mocked clock, a latch or a condition variable with a timeout.
125
+ - No real network, no dependency on test order, no writing outside a temporary directory (`std::filesystem::temp_directory_path()`).
126
+ - Death tests (`EXPECT_DEATH`) only for genuine abort paths, and name the suite `*DeathTest`.
127
+ - If you can't get to green after three focused attempts, stop and report what you tried and the exact failure.
128
+
129
+ ## Report back
130
+
131
+ End with: tests added (suite and name), the build and `ctest` commands you ran, pass/fail counts for the normal and sanitizer runs, and any behaviours left untested.
@@ -0,0 +1,16 @@
1
+ {
2
+ "should_trigger": [
3
+ "Add GoogleTest unit tests for the RingBuffer class",
4
+ "How do I mock this NetworkClient dependency with gMock in my C++ tests?",
5
+ "Hook our Catch2 tests into CTest so ctest actually runs them",
6
+ "Our C++ test suite crashes randomly, run it under ASan and UBSan and find out why",
7
+ "Write a test fixture that sets up a temp directory for the config loader tests in C++"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Convert this C++ class from raw pointers to unique_ptr ownership",
11
+ "CMake can't find the vcpkg package for fmt, fix the configure step",
12
+ "Review this C++ diff for lifetime bugs and ABI breaks",
13
+ "Write pytest fixtures for the database layer",
14
+ "Add table-driven tests with t.Run to this Go package"
15
+ ]
16
+ }
@@ -0,0 +1,110 @@
1
+ ---
2
+ name: csharp-patterns
3
+ description: Idiomatic modern C# on .NET 8 and later, covering nullable reference types, records, pattern matching, async/await with CancellationToken, LINQ deferred-execution traps, IDisposable and IAsyncDisposable, Microsoft.Extensions.DependencyInjection lifetimes, the dotnet CLI and Roslyn analyzers. Use when writing or restructuring C# application or library code, enabling nullable or analyzers in a .NET project, or choosing how a class, service or async API should be shaped.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Needs the .NET 8+ SDK (dotnet CLI) to build and run checks.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: coding
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/requires: "dotnet"
11
+ kete-loom/owner: "Kete-org"
12
+ ---
13
+
14
+ # C# patterns
15
+
16
+ Write C# that the compiler and analyzers can check for you. Most C# production bugs are nulls, blocked async calls, leaked disposables and LINQ queries that run more than once; the rules below close those doors.
17
+
18
+ ## 0. Before you write code
19
+
20
+ 1. Find the target framework and language settings: open the `.csproj` (and `Directory.Build.props` if present) and note `TargetFramework`, `Nullable`, `LangVersion`, `ImplicitUsings`, `TreatWarningsAsErrors`, `AnalysisLevel`.
21
+ 2. Run `dotnet build` once and record the warning count. Do not add new warnings.
22
+ 3. Match the code style already in the repo (`.editorconfig`, file-scoped namespaces, `var` usage). Don't reformat files you aren't changing.
23
+ 4. If the project targets anything older than `net8.0` (`netstandard2.0`, `net48`, `net6.0`), **stop and ask** before using newer language features or APIs (`required`, `TimeProvider`, `ArgumentNullException.ThrowIfNull`); they may not exist there, and the user may have consumers on that framework.
24
+
25
+ ## 1. Nullable reference types
26
+
27
+ - New projects: `<Nullable>enable</Nullable>`. Existing projects without it: enable per file with `#nullable enable` in files you touch, and **ask the user** before flipping it project-wide (it can produce hundreds of warnings).
28
+ - A non-nullable type is a promise. Validate at trust boundaries (public API, deserialised input, config): `ArgumentNullException.ThrowIfNull(x)`, `ArgumentException.ThrowIfNullOrEmpty(s)`.
29
+ - Never silence a warning with `!` (null-forgiving) unless you can name the guarantee in a one-line comment. `!` on `FirstOrDefault()` or a dictionary lookup is a bug.
30
+ - Required members: use `required` properties or constructor parameters instead of `= null!` initialisers (CS8618).
31
+ - Use `[NotNullWhen(true)]`, `[MaybeNullWhen(false)]` on `TryGet...` methods so callers get correct flow analysis.
32
+
33
+ ## 2. Types: records, classes, structs
34
+
35
+ | Need | Use |
36
+ |---|---|
37
+ | Immutable data with value equality (DTOs, messages, keys) | `record` or `sealed record` with positional or `init` properties |
38
+ | Small value (≤16 bytes), no identity | `readonly record struct` |
39
+ | Identity, mutable state, behaviour | `sealed class` (seal by default; unseal when you design for inheritance) |
40
+ | Closed set of cases | abstract `record` base plus sealed derived records, matched with `switch` |
41
+
42
+ - Records give value equality over **all** fields; a record holding a `List<T>` compares the list by reference. `ImmutableArray<T>` also compares by reference; if value equality over the collection matters, override `Equals`/`GetHashCode` (with `SequenceEqual`) yourself.
43
+ - Prefer primary constructors for DI-only classes; don't mutate the captured parameters.
44
+
45
+ ## 3. Pattern matching
46
+
47
+ - Use `is null` / `is not null`, not `== null` (operators can be overloaded).
48
+ - Use switch expressions for mapping and dispatch; end with a discard arm that throws (`_ => throw new UnreachableException()`) only when the input set is truly closed.
49
+ - Property and list patterns (`{ Status: OrderStatus.Paid, Total: > 0 }`, `[var first, ..]`) beat chains of `&&` checks.
50
+
51
+ ## 4. Async and cancellation
52
+
53
+ 1. Async all the way. Never call `.Result`, `.Wait()` or `.GetAwaiter().GetResult()` on a task in application code: it deadlocks under a synchronization context and starves the thread pool under load.
54
+ 2. Never write `async void` except for event handlers. Return `Task` or `ValueTask`.
55
+ 3. Every public async method that does I/O takes a `CancellationToken cancellationToken = default` as the **last** parameter and passes it to every call that accepts one. In ASP.NET Core, use `HttpContext.RequestAborted` or the action's token parameter.
56
+ 4. Library code (NuGet packages, shared libraries): `await x.ConfigureAwait(false)`. ASP.NET Core application code has no synchronization context, so it doesn't need it; UI apps (WPF, WinForms, MAUI) must not use it before touching UI.
57
+ 5. Don't wrap synchronous work in `Task.Run` inside a server request. Use `Task.Run` only to move CPU-bound work off a UI thread.
58
+ 6. Run independent calls concurrently with `Task.WhenAll`; don't `await` in a loop when the calls are independent.
59
+ 7. `ValueTask` only for hot paths that often complete synchronously; never await a `ValueTask` twice.
60
+ 8. Timeouts: `using var cts = CancellationTokenSource.CreateLinkedTokenSource(token); cts.CancelAfter(timeout);`.
61
+ 9. Catch `OperationCanceledException` only to clean up or translate; let it propagate otherwise.
62
+
63
+ ## 5. LINQ
64
+
65
+ - `IEnumerable<T>` is lazy. Enumerating it twice runs the query twice (and hits the database twice for `IQueryable<T>`). Materialise once with `ToList()` / `ToArray()` when you'll iterate more than once.
66
+ - `Any()` not `Count() > 0`; `FirstOrDefault` returns `null`/`default` and needs a null check.
67
+ - With EF Core `IQueryable`, keep filters before `ToListAsync()`. A `.AsEnumerable()` or a client-side method call in `Where` pulls whole tables into memory.
68
+ - Don't use LINQ for side effects (`Select` that mutates). Use `foreach`.
69
+ - Hot paths: avoid LINQ allocations in tight loops; measure first.
70
+
71
+ ## 6. Disposal
72
+
73
+ - Anything `IDisposable` you create, you dispose: `using var stream = ...;` or `await using var conn = ...;` for `IAsyncDisposable`.
74
+ - Don't dispose objects you didn't create (injected services, `HttpClient` from `IHttpClientFactory`).
75
+ - `HttpClient`: get it from `IHttpClientFactory` (`services.AddHttpClient<T>()`) or reuse one static instance; never `new HttpClient()` per request (socket exhaustion).
76
+ - Implement `IDisposable` only when you own an unmanaged resource or another disposable. Seal the class and skip the full dispose pattern unless it's designed for inheritance.
77
+
78
+ ## 7. Dependency injection
79
+
80
+ - Register in `Program.cs` or an `IServiceCollection` extension method per feature (`services.AddOrders()`).
81
+ - Lifetimes: `Singleton` for stateless or thread-safe shared state, `Scoped` for per-request things (`DbContext`), `Transient` for lightweight stateless services.
82
+ - A singleton must never depend on a scoped service (captive dependency). Development builds validate this (`ValidateScopes`); keep it on.
83
+ - Inside a singleton or `BackgroundService` that needs a scoped service, create a scope: `using var scope = scopeFactory.CreateScope();`.
84
+ - Config: bind with `services.AddOptions<T>().Bind(config.GetSection("X")).ValidateDataAnnotations().ValidateOnStart();` and inject `IOptions<T>`. Never read secrets from code or committed `appsettings.json`.
85
+ - Constructor injection only. No service locator (`IServiceProvider.GetService` in business code).
86
+
87
+ ## 8. Errors
88
+
89
+ - Throw specific exceptions; `throw;` to rethrow (never `throw ex;`, it loses the stack).
90
+ - Don't catch `Exception` except at a boundary (middleware, background loop) where you log and keep going.
91
+ - Log with structured templates: `logger.LogInformation("Order {OrderId} paid", id)`, never string interpolation in the template.
92
+
93
+ ## 9. Tooling (dotnet CLI and analyzers)
94
+
95
+ - Build: `dotnet build -warnaserror` in CI. Format check: `dotnet format --verify-no-changes`.
96
+ - Packages: `dotnet add package <Id>`; check with `dotnet list package --outdated` and `dotnet list package --vulnerable`.
97
+ - Turn on the built-in analyzers in `.csproj` or `Directory.Build.props`. Settings and the rules most worth enforcing are in `references/analyzers.md`.
98
+ - Don't add third-party analyzer packages or change `AnalysisLevel` without asking the user; they can break the build for the whole team.
99
+
100
+ ## Never
101
+
102
+ - `async void`, `.Result`, `.Wait()` in request or UI code.
103
+ - `catch { }` or `catch (Exception) { }` that swallows errors.
104
+ - `!` to silence a nullable warning you don't understand.
105
+ - `#pragma warning disable` or `<NoWarn>` to make a build pass without telling the user.
106
+ - `new HttpClient()` per call, or `DateTime.Now` in testable logic (inject `TimeProvider`).
107
+
108
+ ## Report back
109
+
110
+ End with: files changed, the `dotnet build` warning count before and after, analyzer or nullable settings you changed (if any), and anything you chose not to fix.
@@ -0,0 +1,17 @@
1
+ {
2
+ "should_trigger": [
3
+ "Turn on nullable reference types in our .NET 8 class library and fix the warnings in the files I touched",
4
+ "Should this C# DTO be a record or a class, and how do I make it immutable?",
5
+ "Refactor this C# service so every async method takes a CancellationToken and stops calling .Result",
6
+ "How should I register a DbContext and a background worker in Microsoft.Extensions.DependencyInjection without a captive dependency?",
7
+ "Rewrite this C# if/else chain with a switch expression and property patterns"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Add a unit test project for the C# billing library with xUnit",
11
+ "My .NET solution stopped compiling after a NuGet update, CS0246 everywhere",
12
+ "Review my C# pull request for async void and disposal leaks",
13
+ "Add an EF Core migration for the new Invoices table",
14
+ "Set up a minimal API endpoint with ASP.NET Core authentication and rate limiting",
15
+ "Write idiomatic F# discriminated unions for the payment states"
16
+ ]
17
+ }
@@ -0,0 +1,59 @@
1
+ # .NET analyzer settings and high-value rules
2
+
3
+ Read this when enabling nullable or analyzers, or when a build reports `CA` / `CS86xx` / `IDE` diagnostics.
4
+
5
+ ## Project settings
6
+
7
+ Put shared settings in `Directory.Build.props` at the repo root so every project gets them:
8
+
9
+ ```xml
10
+ <Project>
11
+ <PropertyGroup>
12
+ <Nullable>enable</Nullable>
13
+ <ImplicitUsings>enable</ImplicitUsings>
14
+ <EnableNETAnalyzers>true</EnableNETAnalyzers>
15
+ <AnalysisLevel>latest-recommended</AnalysisLevel>
16
+ <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
17
+ <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
18
+ </PropertyGroup>
19
+ </Project>
20
+ ```
21
+
22
+ - `AnalysisLevel` values: `latest`, `latest-minimum`, `latest-recommended`, `latest-all` (also numeric, for example `8.0-recommended`). Start at `recommended`; `all` is noisy.
23
+ - `EnforceCodeStyleInBuild` makes `IDE` rules configured in `.editorconfig` run during `dotnet build`.
24
+ - Turning on `TreatWarningsAsErrors` in an existing repo can break the build. Ask first; a softer start is `<WarningsAsErrors>nullable</WarningsAsErrors>`.
25
+
26
+ ## Per-rule severity in `.editorconfig`
27
+
28
+ ```ini
29
+ [*.cs]
30
+ dotnet_diagnostic.CA2007.severity = none # ConfigureAwait: off in ASP.NET Core apps, warning in libraries
31
+ dotnet_diagnostic.CA2000.severity = warning # dispose objects before losing scope
32
+ dotnet_diagnostic.CA1849.severity = warning # call async methods when in an async method
33
+ ```
34
+
35
+ Prefer `.editorconfig` over `<NoWarn>`; it is scoped and reviewable. Every suppression needs a reason in a comment.
36
+
37
+ ## Rules worth enforcing
38
+
39
+ | Id | Meaning | Usual fix |
40
+ |---|---|---|
41
+ | CS8600-CS8604 | Possible null assignment, dereference, or argument | Check for null, or change the type to `T?` |
42
+ | CS8618 | Non-nullable member uninitialised when constructor exits | `required` member or constructor parameter |
43
+ | CS8625 | `null` literal passed to non-nullable | Make the parameter nullable or stop passing null |
44
+ | CS4014 | Call not awaited | `await` it, or assign to a variable and await later |
45
+ | CS1998 | `async` method with no `await` | Remove `async` and return `Task.CompletedTask` / `Task.FromResult` |
46
+ | CA2007 | Missing `ConfigureAwait` | `ConfigureAwait(false)` in libraries |
47
+ | CA2000 | Disposable not disposed | `using` / `await using` |
48
+ | CA2016 | `CancellationToken` not forwarded | Pass the token through |
49
+ | CA1849 | Sync call with async alternative in async method | Use the `...Async` method |
50
+ | CA1848 / CA2254 | Logging performance / non-constant template | Constant templates, or `LoggerMessage` source generator on hot paths |
51
+ | CA1822 | Member can be static | Mark `static` if it touches no instance state |
52
+ | CA1305 / CA1307 | Culture or string comparison not specified | Pass `CultureInfo.InvariantCulture` / `StringComparison.Ordinal` |
53
+ | CA5394 | Insecure randomness | `RandomNumberGenerator` for security values |
54
+
55
+ ## Commands
56
+
57
+ - `dotnet build -warnaserror` : fail on any warning.
58
+ - `dotnet format --verify-no-changes` : CI check for whitespace, style and analyzer fixes.
59
+ - `dotnet format analyzers --diagnostics CA1822` : apply one rule's code fix across the solution. Review the diff before keeping it.
@@ -0,0 +1,85 @@
1
+ ---
2
+ name: csharp-testing
3
+ description: Writes and fixes .NET tests in C# with xUnit (or the NUnit or MSTest framework already in the repo), FluentAssertions or built-in asserts, Moq or NSubstitute test doubles, WebApplicationFactory in-memory API tests and Testcontainers-backed database tests, all run through dotnet test. Use when adding unit or integration tests to a C# project, setting up a new .NET test project, mocking a dependency, or debugging a flaky or failing dotnet test run.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Needs the .NET 8+ SDK. Testcontainers tests also need a running Docker-compatible engine.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: testing
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/requires: "dotnet"
11
+ kete-loom/owner: "Kete-org"
12
+ ---
13
+
14
+ # C# testing
15
+
16
+ Tests that run with `dotnet test`, fail for one reason, and don't depend on the machine, the clock or test order.
17
+
18
+ ## 0. Discover before writing
19
+
20
+ 1. Find the test projects: search for `*.Tests.csproj` / `*Tests.csproj` and look at their `PackageReference`s.
21
+ 2. **Use the framework, assertion and mocking libraries the repo already uses.** Do not add a second one. Detect by package:
22
+ - xUnit: `xunit` (v2) or `xunit.v3`. NUnit: `NUnit` + `NUnit3TestAdapter`. MSTest: `MSTest` or `MSTest.TestFramework`.
23
+ - Assertions: `FluentAssertions`, `Shouldly`, or framework asserts.
24
+ - Doubles: `Moq`, `NSubstitute`, `FakeItEasy`.
25
+ 3. Run `dotnet test` once and record pass/fail counts. If tests already fail, **stop and tell the user** before changing anything.
26
+ 4. New test project with nothing to match: xUnit, built-in `Assert`, NSubstitute. Before adding FluentAssertions, tell the user that versions 8 and later need a paid Xceed licence for commercial use (version 7 is Apache 2.0); let them choose.
27
+
28
+ ## 1. New test project
29
+
30
+ ```bash
31
+ dotnet new xunit -n MyApp.Tests -o tests/MyApp.Tests
32
+ dotnet sln add tests/MyApp.Tests/MyApp.Tests.csproj
33
+ dotnet add tests/MyApp.Tests/MyApp.Tests.csproj reference src/MyApp/MyApp.csproj
34
+ ```
35
+
36
+ Mirror the production namespace and folder structure. One test class per class under test (`OrderServiceTests`).
37
+
38
+ ## 2. Unit test shape
39
+
40
+ - Name: `Method_Scenario_ExpectedResult` or the repo's convention.
41
+ - Arrange / Act / Assert, one behaviour per test. Several asserts are fine if they describe one outcome.
42
+ - Data-driven: xUnit `[Theory]` + `[InlineData]` / `[MemberData]`; NUnit `[TestCase]`; MSTest `[DataRow]`.
43
+ - Async tests return `Task` (never `async void`). Assert exceptions with `await Assert.ThrowsAsync<T>(() => sut.RunAsync())`.
44
+ - xUnit v3: pass `TestContext.Current.CancellationToken` to async calls (analyzer xUnit1051 flags it).
45
+ - Time: inject `TimeProvider` and use `FakeTimeProvider` (package `Microsoft.Extensions.TimeProvider.Testing`). Never `Thread.Sleep` or `DateTime.Now` in tests.
46
+ - Logging: `NullLogger<T>.Instance`, or `FakeLogger<T>` from `Microsoft.Extensions.Diagnostics.Testing` when you assert on logs.
47
+
48
+ ## 3. Test doubles
49
+
50
+ - Mock only boundaries you own an interface for: repositories, HTTP clients, message buses, clocks. Never mock the class under test or simple value types.
51
+ - NSubstitute: `var repo = Substitute.For<IOrderRepository>(); repo.GetAsync(id, Arg.Any<CancellationToken>()).Returns(order);` verify with `await repo.Received(1).SaveAsync(...)`.
52
+ - Moq: `var repo = new Mock<IOrderRepository>(); repo.Setup(r => r.GetAsync(id, It.IsAny<CancellationToken>())).ReturnsAsync(order);` verify with `repo.Verify(..., Times.Once)`.
53
+ - Prefer asserting on the result over verifying calls. Verify a call only when the call **is** the behaviour (an email was sent).
54
+ - `HttpClient`: don't mock `HttpClient`. Use a fake `HttpMessageHandler`, or test through `WebApplicationFactory`.
55
+ - EF Core: don't mock `DbContext` or `DbSet`. The InMemory provider doesn't enforce constraints or transactions; use SQLite in-memory for quick tests and Testcontainers for real behaviour.
56
+
57
+ ## 4. Integration tests
58
+
59
+ - ASP.NET Core APIs: `WebApplicationFactory<Program>` from `Microsoft.AspNetCore.Mvc.Testing`; swap services in `ConfigureTestServices`.
60
+ - Real databases, queues and caches: Testcontainers (`Testcontainers.PostgreSql`, `Testcontainers.MsSql`, `Testcontainers.Redis`), one container per test class or collection fixture, never per test.
61
+ - Full examples, fixture sharing and auth stubbing are in `references/integration-tests.md`.
62
+ - If Docker isn't available, **stop and tell the user**; don't silently replace a Testcontainers test with the InMemory provider.
63
+
64
+ ## 5. Run and filter
65
+
66
+ - All: `dotnet test`. One project: `dotnet test tests/MyApp.Tests`.
67
+ - Filter: `dotnet test --filter "FullyQualifiedName~OrderServiceTests"` or `--filter "Category=Integration"` (xUnit `[Trait("Category","Integration")]`, NUnit `[Category]`, MSTest `[TestCategory]`). Under Microsoft.Testing.Platform (common with xUnit v3) the filter options differ by framework; always confirm the run reports a non-zero test count.
68
+ - Coverage: `dotnet test --collect:"XPlat Code Coverage"` (coverlet.collector), or the repo's existing coverage setup.
69
+ - Verbose failure output: `dotnet test --logger "console;verbosity=detailed"`.
70
+
71
+ ## 6. Flaky tests
72
+
73
+ 1. Run the single test 20 times in a loop. If it fails sometimes, look for: shared static state, test order dependence, real time or timers, unawaited tasks, ports or files shared between parallel tests.
74
+ 2. xUnit runs test **classes** in parallel. Tests that share a resource go in one `[Collection("Name")]`.
75
+ 3. Fix the cause. Do not add retries, `Skip`, or longer sleeps.
76
+
77
+ ## Rules
78
+
79
+ - Never delete, skip (`[Fact(Skip=...)]`, `[Ignore]`) or weaken an existing test to make the suite pass without the user's agreement.
80
+ - No real network calls, real external services or production connection strings in tests.
81
+ - Don't add test packages beyond what the job needs, and match the version style the repo uses (central `Directory.Packages.props` or per-project).
82
+
83
+ ## Report back
84
+
85
+ End with: tests added (names and files), the exact `dotnet test` command run, pass/fail/skip counts, packages added, and what is still untested.
@@ -0,0 +1,17 @@
1
+ {
2
+ "should_trigger": [
3
+ "Write xUnit tests for OrderService and mock the repository with NSubstitute",
4
+ "Add an integration test that boots our ASP.NET Core API with WebApplicationFactory and checks the 404",
5
+ "Spin up Postgres with Testcontainers for our EF Core repository tests",
6
+ "This NUnit test passes locally but fails randomly in CI, help me find out why",
7
+ "Create a new .NET test project for MyApp and wire it into the solution"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Review my C# pull request for async void and disposal leaks",
11
+ "Make this C# service use CancellationToken everywhere and stop blocking on .Result",
12
+ "Restore fails in CI with NU1102, the package version can't be found on our feed",
13
+ "Write pytest fixtures for the Django models",
14
+ "Add Playwright end-to-end tests for the checkout page",
15
+ "Raise test coverage on the whole repo to 80 percent"
16
+ ]
17
+ }