@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,122 @@
1
+ # Templates
2
+
3
+ Adapt to the project's module system and libraries; these use ESM and zod.
4
+
5
+ ## Express: validation middleware and error handler
6
+
7
+ ```ts
8
+ import type { Request, Response, NextFunction } from 'express';
9
+ import { ZodError, type ZodType } from 'zod';
10
+
11
+ export class AppError extends Error {
12
+ constructor(public status: number, public code: string, message: string) { super(message); }
13
+ }
14
+
15
+ export const validateBody = (schema: ZodType) => (req: Request, res: Response, next: NextFunction) => {
16
+ const result = schema.safeParse(req.body);
17
+ if (!result.success) {
18
+ return res.status(400).json({ error: { code: 'invalid_request', issues: result.error.issues.map((i) => ({ path: i.path.join('.'), message: i.message })) } });
19
+ }
20
+ req.body = result.data;
21
+ next();
22
+ };
23
+
24
+ // Register after all routes.
25
+ export function errorHandler(err: unknown, req: Request, res: Response, next: NextFunction) {
26
+ if (res.headersSent) return next(err); // let Express close a half-sent response
27
+ if (err instanceof AppError) {
28
+ return res.status(err.status).json({ error: { code: err.code, message: err.message } });
29
+ }
30
+ if (err instanceof ZodError) {
31
+ return res.status(400).json({ error: { code: 'invalid_request' } });
32
+ }
33
+ req.log?.error({ err }, 'unhandled error');
34
+ res.status(500).json({ error: { code: 'internal', message: 'Something went wrong' } });
35
+ }
36
+ ```
37
+
38
+ ## Express: server.ts with graceful shutdown
39
+
40
+ ```ts
41
+ import { createApp } from './app.js';
42
+ import { config } from './config.js';
43
+ import { logger } from './logger.js';
44
+ import { db } from './db.js';
45
+
46
+ const app = createApp();
47
+ const server = app.listen(config.port, () => logger.info({ port: config.port }, 'listening'));
48
+ server.headersTimeout = 65_000;
49
+ server.requestTimeout = 30_000;
50
+
51
+ let shuttingDown = false;
52
+ export const isReady = () => !shuttingDown; // the readiness route reads this
53
+
54
+ async function shutdown(signal: string) {
55
+ if (shuttingDown) return;
56
+ shuttingDown = true;
57
+ logger.info({ signal }, 'shutting down');
58
+ const force = setTimeout(() => { logger.error('forced exit'); process.exit(1); }, 25_000);
59
+ force.unref();
60
+ server.close(async (err) => {
61
+ await db.end().catch((e) => logger.error({ err: e }, 'db close failed'));
62
+ process.exit(err ? 1 : 0);
63
+ });
64
+ server.closeIdleConnections();
65
+ }
66
+
67
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
68
+ process.on('SIGINT', () => shutdown('SIGINT'));
69
+ ```
70
+
71
+ ## Fastify: schema-validated route and shutdown
72
+
73
+ ```ts
74
+ import Fastify from 'fastify';
75
+
76
+ const app = Fastify({ logger: { redact: ['req.headers.authorization'] }, bodyLimit: 100_000 });
77
+
78
+ app.post('/orders', {
79
+ schema: {
80
+ body: {
81
+ type: 'object',
82
+ required: ['items'],
83
+ additionalProperties: false, // stripped, not rejected, under Fastify's default ajv options
84
+ properties: { items: { type: 'array', minItems: 1, items: { type: 'string' } } },
85
+ },
86
+ response: { 201: { type: 'object', properties: { id: { type: 'string' } } } },
87
+ },
88
+ }, async (req, reply) => {
89
+ const order = await placeOrder(req.body);
90
+ return reply.code(201).send(order);
91
+ });
92
+
93
+ app.addHook('onClose', async () => { await db.end(); });
94
+
95
+ await app.listen({ port: Number(process.env.PORT ?? 3000), host: '0.0.0.0' });
96
+
97
+ for (const signal of ['SIGTERM', 'SIGINT'] as const) {
98
+ process.once(signal, async () => {
99
+ setTimeout(() => process.exit(1), 25_000).unref();
100
+ await app.close();
101
+ process.exit(0);
102
+ });
103
+ }
104
+ ```
105
+
106
+ ## Streaming a file download
107
+
108
+ ```ts
109
+ import { createReadStream } from 'node:fs';
110
+ import { pipeline } from 'node:stream/promises';
111
+
112
+ app.get('/exports/:id', async (req, res, next) => {
113
+ try {
114
+ const path = await exportPathFor(req.params.id); // validates ownership, throws AppError(404)
115
+ res.setHeader('Content-Type', 'text/csv');
116
+ res.setHeader('Content-Disposition', `attachment; filename="export-${req.params.id}.csv"`);
117
+ await pipeline(createReadStream(path), res);
118
+ } catch (err) {
119
+ if (!res.headersSent) next(err); else res.destroy(err as Error);
120
+ }
121
+ });
122
+ ```
@@ -0,0 +1,103 @@
1
+ ---
2
+ name: nuxt-patterns
3
+ description: Nuxt 3 and 4 full-stack app guidance for choosing SSR, SPA, prerender or hybrid route rules, fetching data once with useFetch and useAsyncData instead of double-fetching with $fetch, writing Nitro server routes, wiring runtimeConfig secrets, setting SEO metadata, and tracking down hydration mismatches. Use when working in a Nuxt project on pages, server/api endpoints, nuxt.config, data loading, meta tags, or a server-versus-client rendering bug.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Targets Nuxt 3.x and 4.x; Nuxt 4 differences are called out. Needs the project's package manager to run the dev server or build.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: coding
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ # Nuxt patterns
14
+
15
+ Build Nuxt pages that render the same on server and client, fetch each piece of data once, and keep secrets on the server. For plain Vue component reactivity, props and Pinia, also follow `vue-patterns`.
16
+
17
+ ## 0. Orient first
18
+
19
+ 1. Read `package.json` for the Nuxt major version and modules (`@pinia/nuxt`, `@nuxtjs/i18n`, `@nuxt/content`, `@nuxt/image`).
20
+ 2. Check the layout. Nuxt 4 uses `app/` as `srcDir` (so `~/components` is `app/components`), keeps `server/`, `public/` and `shared/` at the root. A Nuxt 4 project may keep the old layout with `srcDir: '.'`. Follow what is there.
21
+ 3. Read `nuxt.config.ts` for `ssr`, `routeRules`, `runtimeConfig`, `nitro.preset` and `app.head`.
22
+
23
+ ## 1. Pick a rendering mode per route
24
+
25
+ | Need | Setting |
26
+ |---|---|
27
+ | Personalised or SEO-critical dynamic page | default SSR |
28
+ | Marketing page, docs, blog post | `routeRules: { '/blog/**': { prerender: true } }` |
29
+ | Mostly static but changes hourly | `{ swr: 3600 }` or `{ isr: 3600 }` on hosts that support ISR |
30
+ | Dashboard behind login, no SEO | `{ ssr: false }` for that route |
31
+ | Whole app is a client-only SPA | `ssr: false` at the top level |
32
+
33
+ Prefer per-route `routeRules` over flipping the global `ssr` flag. Confirm the deploy target supports the rule (`isr` is host-specific).
34
+
35
+ ## 2. Fetch data once
36
+
37
+ 1. In page or component setup, use `useFetch('/api/x')` for a URL, or `useAsyncData('key', () => fn())` for any async function. Both run on the server, serialise the result into the payload, and reuse it on hydration.
38
+ 2. Never call bare `$fetch` at the top of setup in an SSR page: it runs on the server and again on the client. Use `$fetch` only in event handlers, actions, server routes, or inside `useAsyncData`.
39
+ 3. Give `useAsyncData` a stable, unique key. Calls sharing a key share state; in Nuxt 4 they must not pass conflicting `transform`, `pick`, `default` or `getCachedData` options.
40
+ 4. Make reactive inputs explicit: `useFetch('/api/items', { query: { page } })` with `page` a ref refetches automatically; for `useAsyncData` pass `watch: [page]`.
41
+ 5. Handle all states in the template with `status` (`'idle' | 'pending' | 'success' | 'error'`) and `error`, not only `data`.
42
+ 6. Nuxt 4 changes: `data` and `error` default to `undefined` (Nuxt 3: `null`), and `data` is a `shallowRef`, so mutating a nested field does not re-render. Replace the object, or pass `deep: true`.
43
+ 7. Use `lazy: true` (or `useLazyFetch`) when the page should render before the data arrives, and show a pending state.
44
+ 8. Use `server: false` only for data that must never be fetched on the server (browser-only APIs, per-user data on a cached page).
45
+ 9. During SSR, `useFetch` with a relative URL to your own API forwards the incoming request's cookies and headers (except hop-by-hop ones such as `host`). A bare `$fetch` in a composable does not; use `useRequestFetch()` when you need the incoming request's headers.
46
+ 10. For one-time app init (load the current user), use `callOnce` or a plugin, not a `useFetch` in `app.vue` that runs on every navigation.
47
+
48
+ ## 3. Server routes (Nitro)
49
+
50
+ - Files in `server/api/` map to `/api/...`; method suffixes (`users.post.ts`) restrict the verb. `server/routes/` maps without the `/api` prefix. `server/middleware/` runs on every request, so keep it cheap.
51
+ - Use `defineEventHandler`, read input with `getQuery`, `readBody`, `getRouterParam`, and validate it (for example `readValidatedBody(event, schema.parse)`) before use.
52
+ - Throw `createError({ statusCode: 404, statusMessage: 'Not found' })` instead of returning error objects with a 200.
53
+ - Check authentication and authorization in every handler that touches private data. A route in `server/api` is public unless you guard it.
54
+ - Put code shared by server and client in `shared/` (Nuxt 4) and never import server-only modules from `app/`.
55
+
56
+ ## 4. Runtime config and secrets
57
+
58
+ ```ts
59
+ export default defineNuxtConfig({
60
+ runtimeConfig: {
61
+ apiSecret: '', // server only, override with NUXT_API_SECRET
62
+ public: { apiBase: '/api' }, // shipped to the browser, override with NUXT_PUBLIC_API_BASE
63
+ },
64
+ })
65
+ ```
66
+
67
+ - Read with `useRuntimeConfig()` (in server handlers, `useRuntimeConfig(event)`).
68
+ - Anything under `public` is visible to every visitor. Secrets go at the top level only.
69
+ - Set values in production through `NUXT_`-prefixed environment variables; `process.env` reads in `nuxt.config` are baked in at build time.
70
+
71
+ ## 5. SEO and head
72
+
73
+ - Use `useSeoMeta({ title, description, ogTitle, ogImage })` per page, and `useHead` for links, scripts and `htmlAttrs: { lang }`.
74
+ - Set defaults in `app.head` in `nuxt.config.ts`; let pages override.
75
+ - Generate canonical URLs and `og:url` from a configured site URL, not from `window.location`.
76
+ - SEO tags only reach crawlers on SSR or prerendered routes; do not rely on them for `ssr: false` routes.
77
+
78
+ ## 6. Hydration mismatches
79
+
80
+ When the console shows "Hydration mismatch" or "Hydration completed but contains mismatches":
81
+
82
+ 1. Reproduce with a production build (`nuxt build` then `nuxt preview`) and read the warning for the node that differs.
83
+ 2. Look for values that differ between server and client: `Date.now()`, `new Date().toLocaleString()`, `Math.random()`, time zones, `window`/`localStorage` reads during render, and user-agent checks.
84
+ 3. Fix by computing the value once on the server and passing it through `useState` or fetched data, by moving browser-only reads into `onMounted`, or by wrapping the subtree in `<ClientOnly>` with a fallback.
85
+ 4. Guard browser-only code with `import.meta.client` (or `.server`), not `process.client`.
86
+ 5. Check for invalid HTML nesting (a `<div>` inside a `<p>`, nested `<a>`, a `<tr>` without `<tbody>`); browsers rewrite it and the DOM no longer matches.
87
+ 6. For cross-request state, use `useState('key', () => init)` instead of a module-level `ref`, which leaks between users on the server.
88
+
89
+ ## Stop and ask the user
90
+
91
+ - Changing the rendering mode or `nitro.preset` of a route already in production.
92
+ - A secret is currently under `runtimeConfig.public` or committed in `nuxt.config`: flag it and ask before rotating anything.
93
+ - The fix needs a Nuxt major upgrade.
94
+
95
+ ## Never
96
+
97
+ - Never put API keys in `runtimeConfig.public` or client code.
98
+ - Never hide a hydration warning with `<ClientOnly>` around a whole page without finding the cause.
99
+ - Never leave a `server/api` handler without input validation or an auth check when it touches user data.
100
+
101
+ ## Report back
102
+
103
+ State the files changed, the rendering mode of each touched route, how data is fetched there, the command you ran (`nuxt build`, tests, typecheck) and its result, and anything not checked in a production build.
@@ -0,0 +1,16 @@
1
+ {
2
+ "should_trigger": [
3
+ "My Nuxt page calls the API twice, once on the server and again in the browser",
4
+ "Prerender the blog section of our Nuxt app but keep the dashboard client-only",
5
+ "How do I keep the Stripe secret out of the browser using Nuxt runtimeConfig?",
6
+ "Add a server/api endpoint in Nuxt that validates the POST body",
7
+ "Fix the hydration mismatch on my Nuxt product page caused by the date"
8
+ ],
9
+ "should_not_trigger": [
10
+ "Why does my Vue 3 composable lose reactivity when I destructure it?",
11
+ "Review my Nuxt pull request for missing watcher cleanup",
12
+ "Write a SvelteKit form action that validates the signup form",
13
+ "Set up getServerSideProps in my Next.js page",
14
+ "Write a Pinia store for user preferences in a plain Vite Vue app"
15
+ ]
16
+ }
@@ -0,0 +1,125 @@
1
+ ---
2
+ name: observability
3
+ description: OpenTelemetry-first service instrumentation that adds structured JSON logs carrying trace IDs, RED metrics with bounded-cardinality labels and distributed traces (SDK and exporter setup, semantic conventions, W3C traceparent propagation, head and tail sampling), then turns them into SLIs, SLOs, multi-window burn-rate alerts and on-call dashboards in Grafana, Prometheus or a vendor backend. Use when instrumenting a service with OpenTelemetry, traces break across service hops, logs cannot be joined to a request, defining an SLO or error budget, replacing noisy threshold alerts with burn-rate alerts, or building the operational board on-call opens first.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Works with any OpenTelemetry SDK (Java, Python, Go, Node, .NET and others) and any OTLP backend; examples use Prometheus query syntax and Grafana.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: devops
9
+ kete-loom/risk: writes-files
10
+ kete-loom/owner: "Kete-org"
11
+ ---
12
+
13
+ # Observability
14
+
15
+ Make every request answerable: which one failed, where it spent its time, and whether users are hurting enough to wake someone. Logs, metrics and traces share one resource identity and one trace ID, and alerts fire on user-facing SLO burn, not on CPU.
16
+
17
+ This skill is for operational telemetry. Business KPI boards belong to `metrics-dashboards`; what the on-call person does once paged belongs to `runbook-writing`.
18
+
19
+ ## 0. Before you start
20
+
21
+ 1. Find what is already there: search for `opentelemetry`, `prometheus`, `statsd`, `datadog`, `newrelic`, `logging.basicConfig`, `winston`, `zap`, `slog`, `logback`. Keep one telemetry stack; do not add a second SDK beside an existing one.
22
+ 2. Find the backend: an OpenTelemetry Collector, Grafana stack (Tempo, Loki, Mimir or Prometheus), or a vendor. If none exists and the user has not picked one, **stop and ask**; the backend decides exporters and query syntax.
23
+ 3. List the service's entry points (HTTP routes, queue consumers, cron jobs) and its outbound calls (databases, HTTP clients, queues). These are where spans and metrics go.
24
+
25
+ ## 1. Resource identity
26
+
27
+ Set these once, through environment variables so every signal shares them:
28
+
29
+ - `OTEL_SERVICE_NAME` (required; the same name in logs, metrics and traces)
30
+ - `OTEL_RESOURCE_ATTRIBUTES=service.version=<git sha or release>,deployment.environment.name=<env>`
31
+ - `OTEL_EXPORTER_OTLP_ENDPOINT` pointing at the Collector, not straight at a vendor, so sampling and routing can change without a redeploy.
32
+
33
+ Per-language SDK bootstrap and Collector config are in `references/otel-setup.md`.
34
+
35
+ ## 2. Traces
36
+
37
+ 1. Prefer the language's auto-instrumentation (HTTP server and client, database drivers, messaging) before writing manual spans.
38
+ 2. Add manual spans only around meaningful units of work the auto layer cannot see (a pricing calculation, a batch step). Name spans by operation, low cardinality: `GET /orders/{id}`, never `GET /orders/8812`.
39
+ 3. Use the semantic conventions for attributes (`http.request.method`, `http.route`, `http.response.status_code`, `db.system.name`, `server.address`); custom attributes get your own namespace (`app.order.tier`).
40
+ 4. Record errors: set span status to error and record the exception on the span that failed.
41
+ 5. Propagation: W3C `traceparent`/`tracestate` is the default. Check every hop: async queues need the context injected into message headers and extracted in the consumer; thread pools and background tasks need the context carried explicitly.
42
+ 6. Sampling:
43
+ - Start with `OTEL_TRACES_SAMPLER=parentbased_traceidratio` and `OTEL_TRACES_SAMPLER_ARG` (for example `0.1`) so children follow the root's decision.
44
+ - To keep all errors and slow requests, do tail sampling in the Collector (`tail_sampling` processor), and make sure all spans of a trace reach the same Collector instance.
45
+ - Never sample metrics. Rates come from metrics, not from sampled traces.
46
+
47
+ ## 3. Metrics
48
+
49
+ 1. Per entry point, emit RED: request rate, errors, duration as a histogram (`http.server.request.duration` in seconds from auto-instrumentation, or your own). Per dependency, the same on the client side. Per queue: depth and age of oldest message.
50
+ 2. Labels must be bounded. Never put user IDs, emails, raw URLs, order IDs or error messages in a label. Use the route template and the status code class.
51
+ 3. A latency SLI counts requests under the threshold, so the histogram needs a bucket boundary exactly at it. The default OpenTelemetry HTTP buckets are 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 s: pick an SLO threshold on one of them, or add the boundary with a metrics view (or use exponential histograms if the backend supports them).
52
+ 4. Add saturation for whatever runs out first: connection pool in use, worker queue, memory against limit.
53
+
54
+ ## 4. Logs
55
+
56
+ 1. Structured JSON, one event per line, to stdout. Fields: `timestamp`, `severity`, `message`, `service.name`, `trace_id`, `span_id`, plus event fields.
57
+ 2. Inject `trace_id`/`span_id` with the SDK's log bridge or logging instrumentation, so a log line links to its trace.
58
+ 3. Log events, not narration: one line per failed operation with its cause and inputs that are safe to log. Never log secrets, tokens, passwords, full card numbers or request bodies containing personal data; redact at the logger, not at query time.
59
+ 4. Default level INFO in production; DEBUG behind a runtime switch.
60
+
61
+ ## 5. SLIs and SLOs
62
+
63
+ 1. Pick 1 to 3 SLIs per user journey, each a ratio of good events to valid events:
64
+ - Availability: non-5xx responses / all responses (decide whether 429 and 4xx count; write it down).
65
+ - Latency: requests faster than the threshold / all requests, measured at the edge closest to the user you can instrument.
66
+ 2. Set the SLO target with the owner (for example 99.9% over 28 or 30 days). **Stop and ask** if no one owns the number; never invent a target.
67
+ 3. Error budget = 1 − target. Write the SLO as a file in the repo (definition, query, window, owner, what happens when the budget is spent).
68
+
69
+ ## 6. Burn-rate alerts
70
+
71
+ Page on how fast the budget burns, using a long and a short window together so alerts fire fast and reset fast. The standard pairs for a 30-day SLO (from the Google SRE Workbook):
72
+
73
+ | Severity | Long window | Short window | Burn rate | Budget spent at trigger |
74
+ |---|---|---|---|---|
75
+ | Page | 1h | 5m | 14.4 | 2% |
76
+ | Page | 6h | 30m | 6 | 5% |
77
+ | Ticket | 3d | 6h | 1 | 10% |
78
+
79
+ Query templates (Prometheus recording rules and alert rules) are in `references/slo-alerts.md`.
80
+
81
+ Alert rules:
82
+
83
+ - Every paging alert links to a runbook and a dashboard.
84
+ - Remove or demote cause-based alerts (CPU, memory, single pod restart) to tickets unless they predict an SLO breach no other alert catches.
85
+ - Low-traffic services: burn-rate alerts flap on few requests; add a minimum request count or use synthetic probes.
86
+
87
+ ## 7. On-call dashboard
88
+
89
+ One board per service, top to bottom:
90
+
91
+ 1. SLO status and remaining error budget, with the burn rate.
92
+ 2. RED for the entry points: rate, error ratio, p50/p95/p99 latency.
93
+ 3. Dependencies: the same RED, client side, per dependency.
94
+ 4. Saturation: pools, queues, memory and CPU against limits.
95
+ 5. Deploy and feature-flag annotations on every time series.
96
+ 6. Links: logs filtered to the service, trace search, runbook.
97
+
98
+ Use template variables for environment and instance; keep it under about 20 panels. Panel and query guidance is in `references/slo-alerts.md`.
99
+
100
+ ## 8. Verify
101
+
102
+ 1. Run the service locally or in a test environment with the Collector's `debug` exporter (or the backend) and send a request.
103
+ 2. Confirm: one trace spans every hop, including through a queue; the log line for that request carries the same `trace_id`; the RED metrics appear with only bounded labels.
104
+ 3. Evaluate each alert expression against recent data and check it would not have fired continuously.
105
+
106
+ ## Never
107
+
108
+ - Never put unbounded values in metric labels or span names.
109
+ - Never log secrets or personal data, or ship telemetry to a third party the user has not approved.
110
+ - Never page on a symptom with no user impact and no runbook.
111
+ - Never set an SLO target without an owner agreeing to it.
112
+
113
+ ## Report back
114
+
115
+ ```
116
+ ## Observability: <service>
117
+ Instrumented: <entry points, dependencies, signals>
118
+ Resource: service.name=<>, version source, environment
119
+ Sampling: <head ratio, tail policy>
120
+ SLOs: <SLI, target, window> per journey
121
+ Alerts: <name, windows, burn rate, runbook link>
122
+ Dashboard: <file or URL>
123
+ Verified: <trace across hops yes/no, logs joined yes/no, alert dry run>
124
+ Open questions: <owner, targets, backend>
125
+ ```
@@ -0,0 +1,17 @@
1
+ {
2
+ "should_trigger": [
3
+ "Add OpenTelemetry tracing to our Python and Go services and send it to a Collector",
4
+ "Our traces stop at the Kafka consumer, the span context isn't carried across the queue. Fix the propagation.",
5
+ "Define an availability SLO for the checkout API and write multi-window burn-rate alerts in Prometheus",
6
+ "Build the Grafana board on-call should open first when the payments service pages",
7
+ "Our log lines can't be matched to a request; add trace_id and span_id to the JSON logs",
8
+ "We get paged for CPU spikes nobody cares about, replace them with error budget alerts"
9
+ ],
10
+ "should_not_trigger": [
11
+ "Design a KPI dashboard for the sales team showing monthly recurring revenue and churn",
12
+ "Write a runbook for the HighErrorRate alert with diagnosis steps and escalation contacts",
13
+ "Write a blameless postmortem for yesterday's database outage",
14
+ "Plan a canary rollout with automatic rollback for the new pricing service",
15
+ "Set up a Helm chart and liveness probes for our API on Kubernetes"
16
+ ]
17
+ }
@@ -0,0 +1,87 @@
1
+ # OpenTelemetry setup
2
+
3
+ Read this when bootstrapping an SDK or a Collector. Package names and flags move between releases: check the language's page under opentelemetry.io/docs/languages/ for the current version before pinning.
4
+
5
+ ## Standard environment variables
6
+
7
+ | Variable | Example | Notes |
8
+ |---|---|---|
9
+ | `OTEL_SERVICE_NAME` | `checkout-api` | Same name in every signal |
10
+ | `OTEL_RESOURCE_ATTRIBUTES` | `service.version=4f2c1a9,deployment.environment.name=prod` | Comma-separated key=value |
11
+ | `OTEL_EXPORTER_OTLP_ENDPOINT` | `http://otel-collector:4318` | 4317 gRPC, 4318 HTTP |
12
+ | `OTEL_EXPORTER_OTLP_PROTOCOL` | `http/protobuf` | or `grpc` |
13
+ | `OTEL_TRACES_SAMPLER` | `parentbased_traceidratio` | |
14
+ | `OTEL_TRACES_SAMPLER_ARG` | `0.1` | Ratio for the root sampler |
15
+ | `OTEL_PROPAGATORS` | `tracecontext,baggage` | The default |
16
+
17
+ ## Auto-instrumentation by language
18
+
19
+ - **Java**: attach the agent, `java -javaagent:opentelemetry-javaagent.jar -jar app.jar`.
20
+ - **Python**: `pip install opentelemetry-distro opentelemetry-exporter-otlp`, then `opentelemetry-bootstrap -a install`, run with `opentelemetry-instrument python app.py`.
21
+ - **Node.js**: `npm install @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-node`, start with `node --require @opentelemetry/auto-instrumentations-node/register app.js` (the SDK must load before the app's own imports).
22
+ - **.NET**: the `OpenTelemetry.Extensions.Hosting` package plus `OpenTelemetry.Instrumentation.AspNetCore` and `.Http`, registered with `services.AddOpenTelemetry().WithTracing(...).WithMetrics(...)`; or the zero-code automatic instrumentation.
23
+ - **Go**: no agent; wire `otelhttp` handlers and transports and the `otel/sdk` trace and metric providers in `main`, and call `Shutdown` on exit so the last spans flush.
24
+
25
+ Flush on shutdown in every language; short-lived jobs lose their spans otherwise.
26
+
27
+ ## Manual span (pattern)
28
+
29
+ ```python
30
+ from opentelemetry import trace
31
+ tracer = trace.get_tracer("app.pricing")
32
+
33
+ with tracer.start_as_current_span("price_quote") as span:
34
+ span.set_attribute("app.quote.items", len(items))
35
+ try:
36
+ quote = compute(items)
37
+ except Exception as exc:
38
+ span.record_exception(exc)
39
+ span.set_status(trace.Status(trace.StatusCode.ERROR))
40
+ raise
41
+ ```
42
+
43
+ ## Propagating through a queue
44
+
45
+ Producer: `propagate.inject(headers)` into the message headers. Consumer: `ctx = propagate.extract(headers)` and start the consumer span with that context (as a child, or as a new trace with a span link for batch consumers).
46
+
47
+ ## Minimal Collector config
48
+
49
+ ```yaml
50
+ receivers:
51
+ otlp:
52
+ protocols:
53
+ grpc:
54
+ endpoint: 0.0.0.0:4317
55
+ http:
56
+ endpoint: 0.0.0.0:4318
57
+ processors:
58
+ memory_limiter:
59
+ check_interval: 1s
60
+ limit_percentage: 80
61
+ batch: {}
62
+ tail_sampling:
63
+ decision_wait: 10s
64
+ policies:
65
+ - name: errors
66
+ type: status_code
67
+ status_code: { status_codes: [ERROR] }
68
+ - name: slow
69
+ type: latency
70
+ latency: { threshold_ms: 1000 }
71
+ - name: baseline
72
+ type: probabilistic
73
+ probabilistic: { sampling_percentage: 10 }
74
+ exporters:
75
+ debug: {}
76
+ otlp:
77
+ endpoint: tempo:4317
78
+ tls: { insecure: true } # only inside a private network
79
+ service:
80
+ pipelines:
81
+ traces:
82
+ receivers: [otlp]
83
+ processors: [memory_limiter, tail_sampling, batch]
84
+ exporters: [otlp]
85
+ ```
86
+
87
+ `tail_sampling` ships in the Collector contrib distribution, not core. With several Collector replicas, route by trace ID (the `loadbalancing` exporter) in a first tier so one instance sees the whole trace.
@@ -0,0 +1,70 @@
1
+ # SLO queries, burn-rate alerts and dashboard panels
2
+
3
+ Read this when writing recording rules, alert rules or dashboard queries. Metric names below assume OpenTelemetry HTTP server metrics exported to Prometheus (`http_server_request_duration_seconds_*`); rename to what the service actually exposes. When OTLP metrics reach Prometheus, `service.name` becomes the `job` label (`<service.namespace>/<service.name>` if a namespace is set) and `service.instance.id` becomes `instance`; resource attributes are not copied to labels unless the exporter is configured to (for example `resource_to_telemetry_conversion` or `target_info` joins). Check the real label names in the backend before writing rules.
4
+
5
+ ## Recording rules (availability SLI)
6
+
7
+ ```yaml
8
+ groups:
9
+ - name: slo-checkout
10
+ rules:
11
+ - record: slo:errors:ratio_rate5m
12
+ expr: |
13
+ sum(rate(http_server_request_duration_seconds_count{job="checkout-api",http_response_status_code=~"5.."}[5m]))
14
+ /
15
+ sum(rate(http_server_request_duration_seconds_count{job="checkout-api"}[5m]))
16
+ # repeat with [30m], [1h], [6h], [3d] and [30d] as slo:errors:ratio_rate30m, ... (the 30d one feeds the budget panel)
17
+ ```
18
+
19
+ Latency SLI (good = faster than 0.25 s; the `le` value must be an existing bucket boundary, an approximate one silently measures a different threshold):
20
+
21
+ ```
22
+ 1 - (
23
+ sum(rate(http_server_request_duration_seconds_bucket{job="checkout-api",le="0.25"}[5m]))
24
+ /
25
+ sum(rate(http_server_request_duration_seconds_count{job="checkout-api"}[5m]))
26
+ )
27
+ ```
28
+
29
+ ## Multi-window burn-rate alerts (SLO 99.9%, budget 0.001)
30
+
31
+ ```yaml
32
+ - alert: CheckoutErrorBudgetBurnFast
33
+ expr: |
34
+ slo:errors:ratio_rate1h > (14.4 * 0.001)
35
+ and
36
+ slo:errors:ratio_rate5m > (14.4 * 0.001)
37
+ labels: { severity: page }
38
+ annotations:
39
+ summary: "checkout-api burning error budget 14x"
40
+ runbook_url: "https://<runbooks>/checkout-api/error-budget"
41
+ dashboard: "https://<grafana>/d/checkout-api"
42
+ - alert: CheckoutErrorBudgetBurnMedium
43
+ expr: |
44
+ slo:errors:ratio_rate6h > (6 * 0.001)
45
+ and
46
+ slo:errors:ratio_rate30m > (6 * 0.001)
47
+ labels: { severity: page }
48
+ - alert: CheckoutErrorBudgetBurnSlow
49
+ expr: |
50
+ slo:errors:ratio_rate3d > (1 * 0.001)
51
+ and
52
+ slo:errors:ratio_rate6h > (1 * 0.001)
53
+ labels: { severity: ticket }
54
+ ```
55
+
56
+ Burn rate = observed error ratio / error budget. A burn rate of 1 spends exactly the budget over the SLO window. Tools such as Sloth or Pyrra generate these rules from a short SLO spec; use one if the team already does.
57
+
58
+ ## Dashboard panels (Grafana)
59
+
60
+ | Panel | Query sketch | Visual |
61
+ |---|---|---|
62
+ | Error budget remaining | `1 - (slo:errors:ratio_rate30d / 0.001)` | Stat, red under 25% |
63
+ | Burn rate 1h | `slo:errors:ratio_rate1h / 0.001` | Stat with thresholds 1, 6, 14.4 |
64
+ | Request rate | `sum by (http_route) (rate(..._count[5m]))` | Time series |
65
+ | Error ratio | `sum by (http_route) (rate(..._count{http_response_status_code=~"5.."}[5m])) / sum by (http_route) (rate(..._count[5m]))` | Time series |
66
+ | Latency p95/p99 | `histogram_quantile(0.99, sum by (le) (rate(..._bucket[5m])))` | Time series |
67
+ | Dependency latency | same on `http_client_request_duration_seconds` by `server_address` | Time series |
68
+ | Saturation | pool in use / pool max, queue depth | Time series with limit line |
69
+
70
+ Add annotations from the deploy pipeline (Grafana annotations API or a `deployments` metric), and data links from latency panels to the trace backend filtered by service and time range. Keep dashboards as JSON in the repo, provisioned from files, so changes are reviewed.
@@ -0,0 +1,107 @@
1
+ ---
2
+ name: open-source-release
3
+ description: Takes a private or internal codebase public safely by scanning the working tree and full git history for secrets, personal data and internal hostnames with gitleaks and trufflehog, rewriting history with git filter-repo or starting a fresh history, choosing an outbound licence and checking third-party licence compatibility, adding README, CONTRIBUTING, SECURITY and CODE_OF_CONDUCT files and public CI, then walking a pre-publish checklist with explicit sign-off points. Use when someone wants to open-source an internal project, flip a private GitHub repository to public, or publish company code under an open licence for the first time.
4
+ license: MIT
5
+ compatibility: Any Agent Skills host. Needs git; secret scanning uses gitleaks or trufflehog, history rewriting uses git-filter-repo. Licence scanners depend on the ecosystem.
6
+ metadata:
7
+ kete-loom/version: "0.1.0"
8
+ kete-loom/category: devops
9
+ kete-loom/risk: runs-commands
10
+ kete-loom/requires: "git, gitleaks, git-filter-repo"
11
+ kete-loom/owner: "Kete-org"
12
+ ---
13
+
14
+ # Open-source release
15
+
16
+ Make a private repository safe to publish. Once a repository is public, anything in its history is copied by forks, mirrors and scrapers within minutes, so every check happens **before** the visibility flip, and none of it can be undone afterwards.
17
+
18
+ This skill is engineering preparation, not legal advice. The owner of the code (usually the employer) must approve the release and the licence; a lawyer or the company's open-source programme office should review licence and trademark questions.
19
+
20
+ ## 0. Stop and ask first
21
+
22
+ Before doing any work, confirm with the user:
23
+
24
+ 1. Who owns the code and has approved publishing it (name the person or the approval record).
25
+ 2. Whether contributors outside the company ever committed (their rights matter for relicensing).
26
+ 3. Whether to **keep history** (rewrite and scrub it) or **publish a fresh history** (one squashed initial commit). A fresh history is the safest default for internal code; keep history only if the user wants it and the scan in step 1 is clean or fully remediated.
27
+
28
+ Work in a **fresh clone** (`git clone --mirror` for scanning and rewriting history, a normal clone for the fresh-history route) so you never rewrite the team's working copy.
29
+
30
+ **Publish to a new public repository by default** rather than flipping the existing private one to public. Flipping visibility also exposes everything attached to the repository: issues, pull requests and their review comments, wiki, releases, Actions logs and artifacts, and `refs/pull/*` commits that a history rewrite cannot remove. Flip the existing repository only if the user explicitly wants that and has reviewed all of it.
31
+
32
+ ## 1. Scan for secrets, personal data and internal details
33
+
34
+ Scan the full history of every ref, not just the tip:
35
+
36
+ - `gitleaks git -v --log-opts="--all" --report-path gitleaks-history.json .`
37
+ - `gitleaks dir -v --report-path gitleaks-tree.json .` (working tree, including untracked files you plan to publish)
38
+ - `trufflehog git file://<path-to-clone> --results=verified,unknown` (run from outside the repo; it tries keys against providers, so tell the user it makes network calls)
39
+
40
+ Then search the codebase and history (`git log -p --all -S <term>` / `git grep`) for what scanners miss, including commit metadata (`git log --all --format='%an <%ae> %cn <%ce>' | sort -u` and commit messages), which can carry personal emails, ticket links and customer names:
41
+
42
+ - internal hostnames and domains (`*.internal`, `*.corp`, `*.local`, VPN and intranet names), private IP ranges, cloud account and project IDs, S3 bucket names;
43
+ - customer names, employee names and emails, phone numbers, real data in fixtures, seeds, test snapshots and screenshots;
44
+ - committed `.env`, `*.pem`, `*.p12`, `id_rsa`, kubeconfig, `terraform.tfstate`, database dumps, `.npmrc`/`.pypirc` with tokens;
45
+ - comments with security issues, incident details, unreleased product names, profanity about customers;
46
+ - vendored proprietary code, internal packages pulled from a private registry, licensed fonts or images.
47
+
48
+ Triage each hit as **live secret**, **dead secret**, **PII**, **internal detail** or **false positive**.
49
+
50
+ ## 2. Remediate
51
+
52
+ 1. **Rotate every real secret first**, live or "probably dead". Scrubbing history does not un-leak a key someone already copied. Record who rotated what.
53
+ 2. Remove PII and internal details from the current tree with normal commits.
54
+ 3. Then deal with history, following `references/history-scrub.md`:
55
+ - fresh history: copy the cleaned tree into a new repository with one initial commit;
56
+ - keep history: `git filter-repo --sensitive-data-removal --replace-text replacements.txt` and `--invert-paths --path <file>` for whole files; `--replace-message` for commit messages and `--mailmap` for author identities; then re-run every scan from step 1 until it is clean.
57
+ 4. Add the remaining false positives to a `.gitleaksignore` (fingerprints) so CI starts clean.
58
+
59
+ ## 3. Licence
60
+
61
+ 1. Ask the user which outbound licence the owner has chosen. If undecided, lay out the usual options without deciding for them: permissive (MIT, Apache-2.0 which adds an explicit patent grant, BSD-3-Clause), weak copyleft (MPL-2.0), strong copyleft (GPL-3.0, AGPL-3.0 for network services).
62
+ 2. Add the full licence text as `LICENSE` and an SPDX identifier in the package manifest (`"license": "Apache-2.0"`, `license = "MIT"`). Optional per-file `SPDX-License-Identifier` headers; `reuse lint` checks them if the project adopts REUSE.
63
+ 3. Inventory third-party licences with the ecosystem's tool (`references/history-scrub.md` lists them) and flag: no licence, unknown licence, copyleft dependencies incompatible with the chosen licence, and copied-in code whose origin is unclear. **Stop and ask** on any flag; a qualified person decides compatibility.
64
+ 4. If outside contributors will be accepted, ask whether the owner wants a DCO sign-off or a CLA. Don't pick one for them.
65
+
66
+ ## 4. Community and security files
67
+
68
+ Add or update, matching the project's real process (never promise response times nobody agreed to):
69
+
70
+ - `README.md`: what it is, status (experimental / stable), install, a working quick-start, how to run tests, licence.
71
+ - `CONTRIBUTING.md`: dev setup, test and lint commands, branch and PR rules, DCO/CLA if any.
72
+ - `SECURITY.md`: how to report a vulnerability privately (enable GitHub private vulnerability reporting, or a monitored address), supported versions. Ask the user for the contact.
73
+ - `CODE_OF_CONDUCT.md`: usually the Contributor Covenant (3.0 is current); fill in a real enforcement contact the user gives you.
74
+ - Issue and PR templates, `CODEOWNERS` if the team uses it.
75
+ - Remove internal-only files: deploy scripts for company infrastructure, internal runbooks, `.github/workflows` that use self-hosted runners or internal secrets.
76
+
77
+ ## 5. Public CI
78
+
79
+ - A workflow that builds, lints and tests on pull requests from forks, using no repository secrets on `pull_request` events.
80
+ - A secret scan on every push and PR (gitleaks action or `gitleaks git` in a job).
81
+ - Least-privilege `permissions:` on the token; for depth on workflow hardening use the `github-actions-ci` skill if installed.
82
+ - Enable secret scanning and push protection, Dependabot or equivalent, and branch protection on the default branch.
83
+
84
+ ## 6. Pre-publish checklist
85
+
86
+ Go through `references/history-scrub.md` "Final checklist" with the user. **Stop and ask for explicit sign-off** before:
87
+
88
+ - force-pushing rewritten history anywhere;
89
+ - creating the public repository or changing visibility to public;
90
+ - publishing to a package registry.
91
+
92
+ Never flip visibility yourself without that sign-off, and never publish while any scan finding is unresolved.
93
+
94
+ ## Report
95
+
96
+ ```
97
+ ## Open-source readiness: <repo>
98
+ Approval: <who approved, or MISSING>
99
+ History: fresh | rewritten (<tool>, first changed commit <sha>)
100
+ Secrets: <n found> / <n rotated> / <n remaining>
101
+ PII and internal details: <removed items, or none>
102
+ Licence: <SPDX id> | third-party flags: <list or none>
103
+ Files added: README, CONTRIBUTING, SECURITY, CODE_OF_CONDUCT, ...
104
+ CI: <workflow names> | secret scan in CI: yes/no
105
+ Blocking before publish: <list, or none>
106
+ Needs human sign-off: <owner approval, licence review, visibility flip>
107
+ ```