@skill-graph/cli 0.5.6

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 (330) hide show
  1. package/CHANGELOG.md +247 -0
  2. package/LICENSE +200 -0
  3. package/NOTICE +62 -0
  4. package/README.md +398 -0
  5. package/SKILL_GRAPH.md +443 -0
  6. package/bin/skill-graph.js +374 -0
  7. package/docs/ADOPTION.md +117 -0
  8. package/docs/CONFORMANCE.md +66 -0
  9. package/docs/PRIMER.md +384 -0
  10. package/docs/QUICKSTART-30MIN.md +333 -0
  11. package/docs/ROUTING-METRICS.md +120 -0
  12. package/docs/SKILL-MD-FORMAT-COMPATIBILITY.md +127 -0
  13. package/docs/SKILL_AUDIT_CHECKLIST.md +199 -0
  14. package/docs/SKILL_AUDIT_LOOP.md +195 -0
  15. package/docs/SKILL_METADATA_PROTOCOL.md +609 -0
  16. package/docs/_archived/marketplace-publication-priority-2026-05-18.md +239 -0
  17. package/docs/adr/0001-predicate-set.md +69 -0
  18. package/docs/adr/0002-json-ld-context.md +82 -0
  19. package/docs/adr/0003-ontoclean-rigidity-tags.md +65 -0
  20. package/docs/adr/0004-persistent-identifiers.md +74 -0
  21. package/docs/adr/0005-freshness-consolidation.md +70 -0
  22. package/docs/adr/0006-revise-predicate-rename.md +105 -0
  23. package/docs/adr/0007-audit-loop-cadence.md +99 -0
  24. package/docs/adr/0008-skill-surface-split-and-curation-policy.md +93 -0
  25. package/docs/category-consumers.md +168 -0
  26. package/docs/concept-map.md +194 -0
  27. package/docs/diagrams/drift-states.mmd +21 -0
  28. package/docs/diagrams/manifest-pipeline.mmd +25 -0
  29. package/docs/diagrams/routing-harness.mmd +41 -0
  30. package/docs/diagrams/starter-graph.mmd +53 -0
  31. package/docs/field-decision-guide.md +315 -0
  32. package/docs/field-rationale.md +211 -0
  33. package/docs/field-reference.generated.md +624 -0
  34. package/docs/field-reference.md +1426 -0
  35. package/docs/glossary.md +190 -0
  36. package/docs/head-noun-glossary.md +63 -0
  37. package/docs/images/audit-phases.png +0 -0
  38. package/docs/images/drift-states.png +0 -0
  39. package/docs/images/graded-mode.png +0 -0
  40. package/docs/images/manifest-pipeline.png +0 -0
  41. package/docs/images/routing-harness.png +0 -0
  42. package/docs/images/skill-anatomy.png +0 -0
  43. package/docs/images/starter-graph.png +0 -0
  44. package/docs/images/system-model.png +0 -0
  45. package/docs/integrations/github-actions.md +155 -0
  46. package/docs/manifest-field-mapping.md +443 -0
  47. package/docs/marketplace-publication-queue.generated.md +240 -0
  48. package/docs/marketplace-release-agent-prompt.md +82 -0
  49. package/docs/marketplace-skill-candidate-list.md +272 -0
  50. package/docs/marketplace-syndication.md +222 -0
  51. package/docs/migration-sample-review.md +155 -0
  52. package/docs/migrations/v4-to-v5.md +168 -0
  53. package/docs/migrations/v5-to-v6.md +221 -0
  54. package/docs/name-exceptions.yaml +37 -0
  55. package/docs/plans/marketplace-p1-public-migration-plan.md +41 -0
  56. package/docs/plans/multi-root-workspace.md +148 -0
  57. package/docs/plans/scripts-roadmap.md +107 -0
  58. package/docs/plans/v4-schema-bump.md +160 -0
  59. package/docs/plans/wave-2-extraction.md +122 -0
  60. package/docs/positioning-vs-marketplaces.md +175 -0
  61. package/docs/proposals/skill-audit-loop-positioning.md +160 -0
  62. package/docs/quality-doctrine.md +138 -0
  63. package/docs/recommended-skills.md +150 -0
  64. package/docs/research/skill-comprehension-eval-research.md +1830 -0
  65. package/docs/research/skill-retrieval-evidence.md +66 -0
  66. package/docs/skill-metadata-protocol.md +471 -0
  67. package/docs/skills-sh-maintainer-cleanup-request.md +80 -0
  68. package/examples/audits/a11y/findings.md +52 -0
  69. package/examples/audits/a11y/scorecard.md +21 -0
  70. package/examples/audits/a11y/verdict.md +44 -0
  71. package/examples/audits/debugging/findings.md +59 -0
  72. package/examples/audits/debugging/scorecard.md +22 -0
  73. package/examples/audits/debugging/verdict.md +33 -0
  74. package/examples/audits/documentation/findings.md +59 -0
  75. package/examples/audits/documentation/scorecard.md +22 -0
  76. package/examples/audits/documentation/verdict.md +33 -0
  77. package/examples/evals/a11y.json +140 -0
  78. package/examples/evals/api-design.json +52 -0
  79. package/examples/evals/code-review.json +52 -0
  80. package/examples/evals/data-modeling.json +52 -0
  81. package/examples/evals/database-migration.json +52 -0
  82. package/examples/evals/debugging.json +118 -0
  83. package/examples/evals/dependency-architecture.json +52 -0
  84. package/examples/evals/design-system-architecture.json +52 -0
  85. package/examples/evals/error-tracking.json +52 -0
  86. package/examples/evals/event-contract-design.json +52 -0
  87. package/examples/evals/form-ux-architecture.json +52 -0
  88. package/examples/evals/framework-fit-analysis.json +52 -0
  89. package/examples/evals/graph-audit.json +139 -0
  90. package/examples/evals/information-architecture.json +52 -0
  91. package/examples/evals/interaction-feedback.json +52 -0
  92. package/examples/evals/interaction-patterns.json +52 -0
  93. package/examples/evals/layout-composition.json +52 -0
  94. package/examples/evals/lint-overlay.json +117 -0
  95. package/examples/evals/microcopy.json +52 -0
  96. package/examples/evals/observability-modeling.json +52 -0
  97. package/examples/evals/pattern-recognition.json +96 -0
  98. package/examples/evals/performance-engineering.json +52 -0
  99. package/examples/evals/refactor.json +128 -0
  100. package/examples/evals/semiotics.json +52 -0
  101. package/examples/evals/skill-infrastructure.json +96 -0
  102. package/examples/evals/skill-router.json +140 -0
  103. package/examples/evals/skill-router.routing.json +113 -0
  104. package/examples/evals/system-interface-contracts.json +52 -0
  105. package/examples/evals/task-analysis.json +52 -0
  106. package/examples/evals/testing-strategy.json +118 -0
  107. package/examples/evals/type-safety.json +249 -0
  108. package/examples/evals/visual-design-foundations.json +52 -0
  109. package/examples/evals/webhook-integration.json +52 -0
  110. package/examples/exports/a11y.skill-md.md +80 -0
  111. package/examples/exports/debugging.skill-md.md +80 -0
  112. package/examples/exports/refactor.skill-md.md +78 -0
  113. package/examples/exports/testing-strategy.skill-md.md +81 -0
  114. package/examples/projects/markdown-static-site/README.md +115 -0
  115. package/examples/projects/markdown-static-site/skills/content-source-router/SKILL.md +131 -0
  116. package/examples/projects/markdown-static-site/skills/image-optimization-pipeline-config/SKILL.md +132 -0
  117. package/examples/projects/markdown-static-site/skills/link-rot-detection/SKILL.md +103 -0
  118. package/examples/projects/markdown-static-site/skills/markdown-post-frontmatter-validation/SKILL.md +133 -0
  119. package/examples/projects/markdown-static-site/skills/migrate-posts-to-v2-frontmatter/SKILL.md +140 -0
  120. package/examples/projects/saas-stripe-postgres/README.md +208 -0
  121. package/examples/projects/saas-stripe-postgres/db/migrations/0004_canonicalize_orders.sql +37 -0
  122. package/examples/projects/saas-stripe-postgres/db/schema.sql +112 -0
  123. package/examples/projects/saas-stripe-postgres/skills/migrate-orders-to-canonical-schema/SKILL.md +149 -0
  124. package/examples/projects/saas-stripe-postgres/skills/nextjs-server-action-validation/SKILL.md +154 -0
  125. package/examples/projects/saas-stripe-postgres/skills/payment-provider-router/SKILL.md +153 -0
  126. package/examples/projects/saas-stripe-postgres/skills/postgres-rls-pattern/SKILL.md +163 -0
  127. package/examples/projects/saas-stripe-postgres/skills/stripe-webhook-signature-verification/SKILL.md +137 -0
  128. package/examples/protocol/skill-metadata-template.md +301 -0
  129. package/examples/protocol/skills.manifest.sample.json +13245 -0
  130. package/examples/skill-metadata-template.md +317 -0
  131. package/examples/skills.manifest.sample.json +13519 -0
  132. package/examples/tests/v3-1-skos-fixture/SKILL.md +93 -0
  133. package/marketplace/README.md +17 -0
  134. package/marketplace/skills/a11y/SKILL.md +66 -0
  135. package/marketplace/skills/acid-fundamentals/SKILL.md +106 -0
  136. package/marketplace/skills/agent-engineering/SKILL.md +386 -0
  137. package/marketplace/skills/agent-eval-design/SKILL.md +55 -0
  138. package/marketplace/skills/ai-native-development/SKILL.md +294 -0
  139. package/marketplace/skills/api-design/SKILL.md +60 -0
  140. package/marketplace/skills/architecture-decision-records/SKILL.md +55 -0
  141. package/marketplace/skills/background-jobs/SKILL.md +265 -0
  142. package/marketplace/skills/bounded-context-mapping/SKILL.md +55 -0
  143. package/marketplace/skills/cap-theorem-tradeoffs/SKILL.md +127 -0
  144. package/marketplace/skills/client-server-boundary/SKILL.md +187 -0
  145. package/marketplace/skills/code-review/SKILL.md +120 -0
  146. package/marketplace/skills/color-system-design/SKILL.md +43 -0
  147. package/marketplace/skills/component-architecture/SKILL.md +126 -0
  148. package/marketplace/skills/compression/SKILL.md +112 -0
  149. package/marketplace/skills/conceptual-modeling/SKILL.md +181 -0
  150. package/marketplace/skills/connection-pooling/SKILL.md +105 -0
  151. package/marketplace/skills/constraint-awareness/SKILL.md +287 -0
  152. package/marketplace/skills/content-monitor/SKILL.md +209 -0
  153. package/marketplace/skills/context-engineering/SKILL.md +320 -0
  154. package/marketplace/skills/context-graph/SKILL.md +174 -0
  155. package/marketplace/skills/context-management/SKILL.md +174 -0
  156. package/marketplace/skills/context-window/SKILL.md +239 -0
  157. package/marketplace/skills/contract-testing/SKILL.md +120 -0
  158. package/marketplace/skills/cron-scheduling/SKILL.md +223 -0
  159. package/marketplace/skills/dark-mode-implementation/SKILL.md +47 -0
  160. package/marketplace/skills/data-modeling/SKILL.md +59 -0
  161. package/marketplace/skills/data-modeling-fundamentals/SKILL.md +117 -0
  162. package/marketplace/skills/database-migration/SKILL.md +429 -0
  163. package/marketplace/skills/debugging/SKILL.md +67 -0
  164. package/marketplace/skills/dependency-architecture/SKILL.md +58 -0
  165. package/marketplace/skills/design-module-composition/SKILL.md +43 -0
  166. package/marketplace/skills/design-system-architecture/SKILL.md +61 -0
  167. package/marketplace/skills/design-thinking/SKILL.md +44 -0
  168. package/marketplace/skills/diagnosis/SKILL.md +296 -0
  169. package/marketplace/skills/diff-analysis/SKILL.md +188 -0
  170. package/marketplace/skills/e2e-test-design/SKILL.md +113 -0
  171. package/marketplace/skills/entity-relationship-modeling/SKILL.md +218 -0
  172. package/marketplace/skills/epistemic-grounding/SKILL.md +112 -0
  173. package/marketplace/skills/error-boundary/SKILL.md +235 -0
  174. package/marketplace/skills/error-tracking/SKILL.md +261 -0
  175. package/marketplace/skills/eval-driven-development/SKILL.md +147 -0
  176. package/marketplace/skills/evaluation/SKILL.md +113 -0
  177. package/marketplace/skills/event-contract-design/SKILL.md +60 -0
  178. package/marketplace/skills/event-storming/SKILL.md +56 -0
  179. package/marketplace/skills/form-ux-architecture/SKILL.md +60 -0
  180. package/marketplace/skills/framework-fit-analysis/SKILL.md +59 -0
  181. package/marketplace/skills/frontend-architecture/SKILL.md +43 -0
  182. package/marketplace/skills/generative-ui/SKILL.md +118 -0
  183. package/marketplace/skills/graph-audit/SKILL.md +81 -0
  184. package/marketplace/skills/guardrails/SKILL.md +118 -0
  185. package/marketplace/skills/hooks-patterns/SKILL.md +185 -0
  186. package/marketplace/skills/http-semantics/SKILL.md +136 -0
  187. package/marketplace/skills/ideation/SKILL.md +41 -0
  188. package/marketplace/skills/indexing-strategy/SKILL.md +108 -0
  189. package/marketplace/skills/information-architecture/SKILL.md +59 -0
  190. package/marketplace/skills/integration-test-design/SKILL.md +111 -0
  191. package/marketplace/skills/intent-recognition/SKILL.md +136 -0
  192. package/marketplace/skills/interaction-feedback/SKILL.md +59 -0
  193. package/marketplace/skills/interaction-patterns/SKILL.md +59 -0
  194. package/marketplace/skills/journey-mapping/SKILL.md +41 -0
  195. package/marketplace/skills/keywords/SKILL.md +213 -0
  196. package/marketplace/skills/knowledge-modeling/SKILL.md +232 -0
  197. package/marketplace/skills/layout-composition/SKILL.md +59 -0
  198. package/marketplace/skills/linguistics/SKILL.md +429 -0
  199. package/marketplace/skills/lint-overlay/SKILL.md +76 -0
  200. package/marketplace/skills/mental-models/SKILL.md +126 -0
  201. package/marketplace/skills/merge-queue/SKILL.md +94 -0
  202. package/marketplace/skills/methodology/SKILL.md +317 -0
  203. package/marketplace/skills/microcopy/SKILL.md +232 -0
  204. package/marketplace/skills/middleware-patterns/SKILL.md +363 -0
  205. package/marketplace/skills/mobile-responsive-ux/SKILL.md +287 -0
  206. package/marketplace/skills/mutation-testing/SKILL.md +112 -0
  207. package/marketplace/skills/naming-conventions/SKILL.md +112 -0
  208. package/marketplace/skills/observability-modeling/SKILL.md +59 -0
  209. package/marketplace/skills/ontology-modeling/SKILL.md +67 -0
  210. package/marketplace/skills/owasp-security/SKILL.md +153 -0
  211. package/marketplace/skills/pattern-recognition/SKILL.md +472 -0
  212. package/marketplace/skills/performance-budgets/SKILL.md +185 -0
  213. package/marketplace/skills/performance-engineering/SKILL.md +58 -0
  214. package/marketplace/skills/performance-testing/SKILL.md +125 -0
  215. package/marketplace/skills/printify/SKILL.md +42 -0
  216. package/marketplace/skills/prioritization/SKILL.md +118 -0
  217. package/marketplace/skills/problem-framing/SKILL.md +41 -0
  218. package/marketplace/skills/problem-locating-solving/SKILL.md +203 -0
  219. package/marketplace/skills/project-knowledge-extraction/SKILL.md +54 -0
  220. package/marketplace/skills/prompt-craft/SKILL.md +134 -0
  221. package/marketplace/skills/prompt-injection-defense/SKILL.md +132 -0
  222. package/marketplace/skills/property-based-testing/SKILL.md +100 -0
  223. package/marketplace/skills/prototyping/SKILL.md +43 -0
  224. package/marketplace/skills/query-optimization/SKILL.md +144 -0
  225. package/marketplace/skills/real-time-updates/SKILL.md +324 -0
  226. package/marketplace/skills/ref-patterns/SKILL.md +284 -0
  227. package/marketplace/skills/refactor/SKILL.md +65 -0
  228. package/marketplace/skills/rendering-models/SKILL.md +142 -0
  229. package/marketplace/skills/replication-patterns/SKILL.md +110 -0
  230. package/marketplace/skills/research-synthesis/SKILL.md +41 -0
  231. package/marketplace/skills/route-handler-design/SKILL.md +347 -0
  232. package/marketplace/skills/schema-evolution/SKILL.md +140 -0
  233. package/marketplace/skills/security-fundamentals/SKILL.md +139 -0
  234. package/marketplace/skills/semantic-center/SKILL.md +194 -0
  235. package/marketplace/skills/semantic-relations/SKILL.md +250 -0
  236. package/marketplace/skills/semantics/SKILL.md +366 -0
  237. package/marketplace/skills/semiotics/SKILL.md +230 -0
  238. package/marketplace/skills/seo-strategy/SKILL.md +260 -0
  239. package/marketplace/skills/server-actions-design/SKILL.md +243 -0
  240. package/marketplace/skills/server-components-design/SKILL.md +190 -0
  241. package/marketplace/skills/sharding-strategy/SKILL.md +123 -0
  242. package/marketplace/skills/shopify/SKILL.md +42 -0
  243. package/marketplace/skills/skill-infrastructure/SKILL.md +320 -0
  244. package/marketplace/skills/skill-router/SKILL.md +71 -0
  245. package/marketplace/skills/skill-scaffold/SKILL.md +105 -0
  246. package/marketplace/skills/snapshot-testing/SKILL.md +120 -0
  247. package/marketplace/skills/spec-driven-development/SKILL.md +148 -0
  248. package/marketplace/skills/state-machine-modeling/SKILL.md +56 -0
  249. package/marketplace/skills/state-management/SKILL.md +134 -0
  250. package/marketplace/skills/streaming-architecture/SKILL.md +194 -0
  251. package/marketplace/skills/summarization/SKILL.md +156 -0
  252. package/marketplace/skills/suspense-patterns/SKILL.md +265 -0
  253. package/marketplace/skills/system-interface-contracts/SKILL.md +59 -0
  254. package/marketplace/skills/task-analysis/SKILL.md +201 -0
  255. package/marketplace/skills/taxonomy-design/SKILL.md +66 -0
  256. package/marketplace/skills/test-coverage-strategy/SKILL.md +108 -0
  257. package/marketplace/skills/test-doubles-design/SKILL.md +98 -0
  258. package/marketplace/skills/test-driven-development/SKILL.md +96 -0
  259. package/marketplace/skills/testing-strategy/SKILL.md +67 -0
  260. package/marketplace/skills/theme-system-design/SKILL.md +43 -0
  261. package/marketplace/skills/tool-call-flow/SKILL.md +229 -0
  262. package/marketplace/skills/tool-call-strategy/SKILL.md +292 -0
  263. package/marketplace/skills/transaction-isolation/SKILL.md +98 -0
  264. package/marketplace/skills/type-safety/SKILL.md +177 -0
  265. package/marketplace/skills/typography-system/SKILL.md +43 -0
  266. package/marketplace/skills/usability-testing/SKILL.md +43 -0
  267. package/marketplace/skills/user-research/SKILL.md +43 -0
  268. package/marketplace/skills/vercel-composition-patterns/SKILL.md +157 -0
  269. package/marketplace/skills/version-control/SKILL.md +233 -0
  270. package/marketplace/skills/visual-design-foundations/SKILL.md +59 -0
  271. package/marketplace/skills/visual-hierarchy/SKILL.md +43 -0
  272. package/marketplace/skills/webhook-integration/SKILL.md +331 -0
  273. package/marketplace/skills/writing-humanizer/SKILL.md +380 -0
  274. package/package.json +67 -0
  275. package/schemas/manifest.schema.json +811 -0
  276. package/schemas/manifest.v2.schema.json +164 -0
  277. package/schemas/manifest.v3.schema.json +758 -0
  278. package/schemas/manifest.v4.schema.json +755 -0
  279. package/schemas/manifest.v5.schema.json +755 -0
  280. package/schemas/manifest.v6.schema.json +811 -0
  281. package/schemas/skill.context.jsonld +279 -0
  282. package/schemas/skill.schema.json +919 -0
  283. package/schemas/skill.v2.schema.json +201 -0
  284. package/schemas/skill.v3.schema.json +827 -0
  285. package/schemas/skill.v4.schema.json +822 -0
  286. package/schemas/skill.v5.schema.json +830 -0
  287. package/schemas/skill.v6.schema.json +946 -0
  288. package/schemas/vocabulary/keywords.json +180 -0
  289. package/schemas/vocabulary/workspace_tags.json +23 -0
  290. package/scripts/__tests__/migrate-skill-v2-to-v3.test.js +161 -0
  291. package/scripts/__tests__/migrate-skill-v3-to-v4.test.js +158 -0
  292. package/scripts/__tests__/test-export-parser-drift.js +149 -0
  293. package/scripts/__tests__/test-marketplace-export.js +114 -0
  294. package/scripts/__tests__/test-router-paths.js +82 -0
  295. package/scripts/__tests__/test-stability-promotion.js +244 -0
  296. package/scripts/__tests__/test-v3-1-alias-contract.js +109 -0
  297. package/scripts/__tests__/test-v3-1-skos-runtime.js +116 -0
  298. package/scripts/backfill-schema-version.js +198 -0
  299. package/scripts/build-field-reference.js +160 -0
  300. package/scripts/build-retrieval-baseline.js +511 -0
  301. package/scripts/check-markdown-links.js +211 -0
  302. package/scripts/check-protocol-consistency.js +979 -0
  303. package/scripts/export-marketplace-skills.js +610 -0
  304. package/scripts/export-skill.js +374 -0
  305. package/scripts/generate-manifest.js +787 -0
  306. package/scripts/lib/alias-contract.js +83 -0
  307. package/scripts/lib/audit-prompt-builder.js +771 -0
  308. package/scripts/lib/mock-grader.js +134 -0
  309. package/scripts/lib/parse-frontmatter.js +429 -0
  310. package/scripts/lib/roots.js +119 -0
  311. package/scripts/lint/check-archetype-sections.js +185 -0
  312. package/scripts/lint/check-category-enum.js +83 -0
  313. package/scripts/lint/check-routing-eval.js +146 -0
  314. package/scripts/lint/check-routing-quality.js +211 -0
  315. package/scripts/lint/check-stability-promotion.js +220 -0
  316. package/scripts/lint/format-code-frame.js +206 -0
  317. package/scripts/marketplace-install.js +125 -0
  318. package/scripts/migrate-category-to-enum.js +169 -0
  319. package/scripts/migrate-skill-v2-to-v3.js +424 -0
  320. package/scripts/migrate-skill-v3-to-v4.js +200 -0
  321. package/scripts/migrate-skill-v5-to-v6.js +304 -0
  322. package/scripts/restructure-by-category.js +85 -0
  323. package/scripts/seed-publication-classification.js +282 -0
  324. package/scripts/skill-audit.js +893 -0
  325. package/scripts/skill-graph-drift.js +483 -0
  326. package/scripts/skill-graph-route.js +766 -0
  327. package/scripts/skill-graph-routing-eval.js +393 -0
  328. package/scripts/skill-lint.js +1317 -0
  329. package/scripts/skill-overlap.js +213 -0
  330. package/scripts/verify-skill-md-export.js +201 -0
@@ -0,0 +1,287 @@
1
+ ---
2
+ name: mobile-responsive-ux
3
+ description: "This skill provides mobile-specific UX patterns for SaaS dashboards: touch-friendly targets (44px minimum), thumb-zone optimization, swipe gestures, condensed data display, bottom navigation, and pull-to-refresh. Load when designing for mobile users, implementing touch interactions, building responsive dashboard layouts, or optimizing for the Side Hustler persona who checks on mobile."
4
+ license: MIT
5
+ compatibility: "Markdown, Git, agent-skill runtimes"
6
+ allowed-tools: Read Grep Bash
7
+ metadata:
8
+ metadata: "{\"schema_version\":6,\"version\":\"1.0.0\",\"type\":\"capability\",\"category\":\"design\",\"domain\":\"design/display\",\"scope\":\"portable\",\"owner\":\"skill-graph-maintainer\",\"freshness\":\"2026-03-29\",\"drift_check\":\"{\\\\\\\"last_verified\\\\\\\":\\\\\\\"2026-03-29\\\\\\\"}\",\"eval_artifacts\":\"planned\",\"eval_state\":\"unverified\",\"routing_eval\":\"absent\",\"stability\":\"experimental\",\"keywords\":\"[\\\\\\\"mobile-responsive-ux\\\\\\\",\\\\\\\"mobile\\\\\\\",\\\\\\\"responsive\\\\\\\"]\",\"triggers\":\"[\\\\\\\"mobile-responsive-ux-skill\\\\\\\",\\\\\\\"mobile-ux-skill\\\\\\\",\\\\\\\"touch-target-skill\\\\\\\",\\\\\\\"thumb-zone-skill\\\\\\\",\\\\\\\"mobile-dashboard-skill\\\\\\\"]\",\"relations\":\"{\\\\\\\"boundary\\\\\\\":[\\\\\\\"a11y\\\\\\\"]}\",\"portability\":\"{\\\\\\\"readiness\\\\\\\":\\\\\\\"scripted\\\\\\\",\\\\\\\"targets\\\\\\\":[\\\\\\\"skill-md\\\\\\\"]}\",\"lifecycle\":\"{\\\\\\\"stale_after_days\\\\\\\":90,\\\\\\\"review_cadence\\\\\\\":\\\\\\\"quarterly\\\\\\\"}\",\"skill_graph_source_repo\":\"https://github.com/jacob-balslev/skill-graph\",\"skill_graph_protocol\":\"Skill Metadata Protocol v5\",\"skill_graph_project\":\"Skill Graph\",\"skill_graph_canonical_skill\":\"skills/mobile-responsive-ux/SKILL.md\"}"
9
+ skill_graph_source_repo: "https://github.com/jacob-balslev/skill-graph"
10
+ skill_graph_protocol: Skill Metadata Protocol v4
11
+ skill_graph_project: Skill Graph
12
+ skill_graph_canonical_skill: skills/mobile-responsive-ux/SKILL.md
13
+ ---
14
+ # Mobile Responsive UX Skill
15
+
16
+ ## Domain Context
17
+
18
+ **What is this skill?** This skill provides mobile-specific UX patterns for SaaS dashboards: touch-friendly targets (44px minimum), thumb-zone optimization, swipe gestures, condensed data display, bottom navigation, and pull-to-refresh. Load when designing for mobile users, implementing touch interactions, building responsive dashboard layouts, or optimizing for the Side Hustler persona who checks on mobile.
19
+ > If a button works with a mouse but not with a thumb on a moving bus, it is not usable.
20
+
21
+ ## Coverage
22
+
23
+ This skill covers touch target sizing (44px minimum per Apple HIG and WCAG 2.2), thumb-zone optimization (reachable areas on one-handed use), swipe gesture patterns (navigation, actions, dismissal), condensed data display for small screens (priority content, progressive disclosure), bottom navigation and bottom sheet patterns, pull-to-refresh implementation, mobile-specific input patterns (date pickers, number keyboards, autocomplete), and the SaaS dashboard mobile paradigm (quick-glance KPIs, not full desktop experience).
24
+
25
+ ## Philosophy
26
+
27
+ Mobile is not a smaller desktop. Agents consistently make the mistake of "responsive" meaning "the same layout but narrower." A SaaS dashboard on mobile serves a fundamentally different purpose than on desktop. The desktop user is doing analytical work: filtering, comparing, exporting. The mobile user is doing a quick health check: "Am I making money today? Any problems?" These are different tasks requiring different interfaces. The 375px screen cannot show the same data table with 8 columns — and it should not try. This skill enforces the discipline of designing for the mobile use case, not just reflowing the desktop layout into a narrower viewport.
28
+
29
+ ## Architecture
30
+
31
+ ### Mobile Use Case Hierarchy
32
+
33
+ | Priority | What Mobile Users Need | Design Implication |
34
+ |----------|----------------------|-------------------|
35
+ | 1 | Today's headline KPIs (revenue, margin, orders) | Large, glanceable numbers at the top |
36
+ | 2 | Alert/notification status | Badge or indicator without scrolling |
37
+ | 3 | Quick drill-down into a specific order | Search or recent orders list |
38
+ | 4 | Period comparison (today vs yesterday) | Simple toggle, not a date range picker |
39
+ | 5 | Full data exploration | Defer to desktop; show "View on desktop" prompt |
40
+
41
+ ### Touch Target Specifications
42
+
43
+ | Standard | Minimum Size | Recommended Size | Spacing |
44
+ |----------|-------------|-----------------|---------|
45
+ | **Apple HIG** | 44 x 44 pt | 44 x 44 pt | 8pt between targets |
46
+ | **Material Design** | 48 x 48 dp | 48 x 48 dp | 8dp between targets |
47
+ | **WCAG 2.2 (Level AA)** | 24 x 24 CSS px | 44 x 44 CSS px | Adjacent targets must not overlap |
48
+
49
+ **Rule:** All interactive elements on mobile must be at least 44 x 44 CSS pixels. This includes buttons, links, checkboxes, filter chips, table row actions, and dropdown triggers. If the visual element is smaller (e.g., a 16px icon), the tap target must extend beyond the visible element using padding.
50
+
51
+ ```css
52
+ /* Touch target pattern — visual is 24px, tap target is 44px */
53
+ .icon-button {
54
+ display: inline-flex;
55
+ align-items: center;
56
+ justify-content: center;
57
+ width: 24px;
58
+ height: 24px;
59
+ padding: 10px; /* Extends tap area to 44px */
60
+ margin: 0;
61
+ -webkit-tap-highlight-color: transparent;
62
+ }
63
+ ```
64
+
65
+ ### Thumb Zone Map
66
+
67
+ On one-handed phone use, the thumb has three zones of reachability:
68
+
69
+ ```
70
+ +----------------------------+
71
+ | HARD TO REACH | <- Top 20%: avoid primary actions
72
+ | |
73
+ | STRETCH ZONE | <- Middle 30%: secondary actions OK
74
+ | |
75
+ | NATURAL ZONE | <- Bottom 50%: primary actions here
76
+ +----------------------------+
77
+ [ Home / Nav Bar ]
78
+ ```
79
+
80
+ **Design rules based on thumb zone:**
81
+ - **Primary actions** (confirm, save, navigate): bottom 50% of screen
82
+ - **Secondary actions** (filter, sort, settings): middle 30%
83
+ - **Rarely used actions** (help, account, advanced settings): top 20% or behind a menu
84
+ - **Bottom navigation** for main sections: always in the natural zone
85
+ - **Floating action buttons** (FAB): bottom-right corner for right-handed users
86
+
87
+ ## Implementation Patterns
88
+
89
+ ### 1. Bottom Navigation
90
+
91
+ Replace the sidebar with bottom navigation on mobile. Maximum 5 items:
92
+
93
+ ```
94
+ +----------------------------+
95
+ | |
96
+ | Page Content |
97
+ | |
98
+ +----------------------------+
99
+ | Dashboard | Orders | More |
100
+ | [icon] | [icon] | [icon]|
101
+ +----------------------------+
102
+ ```
103
+
104
+ **Rules:**
105
+ - Maximum 5 items in bottom navigation (Apple HIG)
106
+ - Each item: icon + label (icon-only is ambiguous)
107
+ - Active state: filled icon + color change + label
108
+ - Badge for notification count on relevant tab
109
+ - Bottom nav is always visible — never hidden by scroll
110
+
111
+ ### 2. Bottom Sheet for Complex Actions
112
+
113
+ When the user needs to filter, sort, or perform multi-step actions on mobile, use a bottom sheet instead of a modal or dropdown:
114
+
115
+ ```
116
+ +----------------------------+
117
+ | Page Content |
118
+ | (dimmed background) |
119
+ +----------------------------+
120
+ | --- drag handle --- |
121
+ | Filter Orders |
122
+ | |
123
+ | Status: [All] [Pending] |
124
+ | Channel: [All] [Shopify] |
125
+ | |
126
+ | [Apply Filters] |
127
+ +----------------------------+
128
+ ```
129
+
130
+ **Bottom sheet heights:**
131
+ - **Peek:** 25% of viewport — shows summary or first action
132
+ - **Half:** 50% — shows a form or short list
133
+ - **Full:** 90% — shows a long list or complex form (always include close/back)
134
+
135
+ ### 3. Condensed Data Display
136
+
137
+ Desktop data tables do not work on mobile. Replace with card-based layouts:
138
+
139
+ **Desktop table row:**
140
+ ```
141
+ | Order #1234 | Shopify | $45.99 | $12.50 | 27.2% | Shipped |
142
+ ```
143
+
144
+ **Mobile card:**
145
+ ```
146
+ +----------------------------+
147
+ | #1234 Shipped [>] |
148
+ | Shopify |
149
+ | Revenue: $45.99 |
150
+ | Margin: 27.2% ($12.50) |
151
+ +----------------------------+
152
+ ```
153
+
154
+ **Rules for mobile data display:**
155
+ - Show 3-4 data points per card, not 8+ columns
156
+ - Most important data (order number, status) at the top
157
+ - Secondary data (channel, margin) below
158
+ - Tap to expand or navigate to detail view
159
+ - Never horizontal scroll a data table on mobile
160
+
161
+ ### 4. Swipe Gestures
162
+
163
+ | Gesture | Action | Use Case |
164
+ |---------|--------|----------|
165
+ | Swipe left on list item | Reveal action buttons (delete, archive) | Order list, notification list |
166
+ | Swipe right on list item | Quick action (mark as read, flag) | Notification list |
167
+ | Swipe down from top | Pull-to-refresh | Any data list |
168
+ | Swipe between tabs | Navigate tab content | Dashboard sections |
169
+
170
+ **Rules:**
171
+ - Swipe actions must have a visual counterpart (button accessible without swiping)
172
+ - Swipe-to-delete requires confirmation (do not delete on swipe alone)
173
+ - Swipe velocity and distance thresholds must feel natural (> 30% of item width to trigger)
174
+ - Never use swipe as the only way to access an action — always provide a tap alternative
175
+
176
+ ### 5. Pull-to-Refresh
177
+
178
+ ```typescript
179
+ // Implementation pattern
180
+ function PullToRefresh({ onRefresh, children }: Props) {
181
+ const [pulling, setPulling] = useState(false);
182
+ const [refreshing, setRefreshing] = useState(false);
183
+ const startY = useRef(0);
184
+
185
+ // Pull indicator appears after 60px downward drag
186
+ // Trigger refresh after 100px drag distance
187
+ // Show spinner during refresh, snap back on complete
188
+
189
+ return (
190
+ <div onTouchStart={handleTouchStart} onTouchMove={handleTouchMove} onTouchEnd={handleTouchEnd}>
191
+ {refreshing && <RefreshSpinner />}
192
+ {children}
193
+ </div>
194
+ );
195
+ }
196
+ ```
197
+
198
+ **Rules:**
199
+ - Only trigger when scrolled to the top of the content
200
+ - Show a visual indicator during the pull (spinner or progress)
201
+ - Haptic feedback on trigger threshold (where supported)
202
+ - Disable during active data loading to prevent double-fetch
203
+
204
+ ### 6. Mobile Input Optimization
205
+
206
+ | Input Type | Mobile Optimization | HTML Attribute |
207
+ |-----------|--------------------|-|
208
+ | Phone number | Numeric keyboard | `type="tel"` |
209
+ | Email | Email keyboard (@ visible) | `type="email"` |
210
+ | Currency amount | Decimal keyboard | `type="text" inputmode="decimal"` |
211
+ | Date | Native date picker | `type="date"` (or custom bottom sheet picker) |
212
+ | Search | Search keyboard (enter = search) | `type="search"` |
213
+ | Quantity | Stepper control (+/-) instead of free text | Custom component |
214
+
215
+ ### 7. Mobile-Specific KPI Display
216
+
217
+ On mobile, KPI cards should be 2-up (2 per row) instead of the 4-up desktop layout:
218
+
219
+ ```
220
+ +---------------------------+
221
+ | Revenue | Orders |
222
+ | $4,523 | 47 |
223
+ | +12% vs yday | -3% vs yday|
224
+ +---------------------------+
225
+ | Margin | Avg Order |
226
+ | 28.4% | $96.23 |
227
+ | +2.1pp | +$4.50 |
228
+ +---------------------------+
229
+ ```
230
+
231
+ **Rules:**
232
+ - 2-up layout at < 640px (never 1-up for KPIs — wastes vertical space)
233
+ - Large primary number (24-28px font)
234
+ - Smaller comparison below (12-14px)
235
+ - Tap KPI card to drill down to detail view
236
+ - No chart within KPI card on mobile — charts belong in their own section below
237
+
238
+ ## Anti-Patterns
239
+
240
+ 1. **Horizontal scrolling data tables.** Shrinking a 8-column desktop table and letting the user scroll horizontally. On mobile, horizontal scroll is disorienting and most users do not discover scrollable content. Use card layouts instead.
241
+
242
+ 2. **Desktop modals on mobile.** A centered modal with small close button works on desktop but obscures content and has poor touch targets on mobile. Use bottom sheets instead of modals.
243
+
244
+ 3. **Tiny tap targets.** A 24px icon button without extended padding. Fingers are 44-57px wide; anything smaller causes mis-taps and frustration.
245
+
246
+ 4. **Top-of-screen primary actions.** Putting the main CTA ("Save", "Submit", "Next") at the top of the screen where the thumb cannot reach during one-handed use. Primary actions go at the bottom.
247
+
248
+ 5. **Hover-dependent interactions.** Tooltips, hover menus, and hover-triggered dropdowns do not exist on touch devices. Every hover interaction must have a touch equivalent (tap, long-press, or inline display).
249
+
250
+ 6. **Same density on mobile and desktop.** Showing the same amount of data in the same density on a 375px screen. Mobile needs progressive disclosure: show the headline, tap to see details.
251
+
252
+ 7. **Full date range picker on mobile.** A dual-calendar date range selector from a desktop library. On mobile, use preset ranges ("Today", "This Week", "This Month") with a custom option that opens a bottom sheet.
253
+
254
+ ## Key Files
255
+
256
+ When working in a project with mobile responsive UX:
257
+
258
+ - CSS breakpoint definitions — `_tokens.scss` or equivalent
259
+ - Responsive wrapper components — `MobileOnly`, `DesktopOnly`
260
+ - Bottom navigation component — mobile navigation bar
261
+ - Touch gesture utilities — swipe handlers, pull-to-refresh
262
+ - KPI card components — responsive grid layout
263
+
264
+ ## Verification
265
+
266
+ After applying this skill, verify:
267
+ - [ ] All interactive elements are at least 44 x 44 CSS px on mobile
268
+ - [ ] Primary actions are positioned in the bottom 50% of the screen
269
+ - [ ] Data tables are replaced with card layouts below 640px
270
+ - [ ] Bottom navigation has maximum 5 items with icon + label
271
+ - [ ] No hover-only interactions exist — all have touch equivalents
272
+ - [ ] KPI cards use 2-up layout on mobile
273
+ - [ ] Pull-to-refresh is implemented for data lists
274
+ - [ ] Test on a real device (not just browser DevTools resize)
275
+
276
+ ## Do NOT Use When
277
+
278
+ | Instead of this skill | Use | Why |
279
+ |---|---|---|
280
+ | CSS breakpoint implementation details | `breakpoint-strategy` | Breakpoints cover the CSS system; this skill covers the UX design at each breakpoint |
281
+ | General responsive layout patterns | `responsive` | Responsive covers layout reflow; this skill covers mobile-specific interaction patterns |
282
+ | Accessibility for touch interfaces | `a11y` | Accessibility covers WCAG compliance broadly; this skill covers mobile-specific ergonomics |
283
+ | Data table design patterns | `data-table-ux` | Data table UX covers the table component; this skill covers how tables transform on mobile |
284
+
285
+ ---
286
+
287
+ *Version 1.0.0 -- 2026-03-29. Initial creation.*
@@ -0,0 +1,112 @@
1
+ ---
2
+ name: mutation-testing
3
+ description: "Use when reasoning about mutation testing as a behavioral signal of test-suite quality: the mutant-operator vocabulary (replace operator, negate condition, flip Boolean, remove statement, alter constant), the mutation-score metric (killed mutants / total non-equivalent mutants), why mutation testing is a stronger signal than code coverage (coverage measures execution; mutation measures whether the tests would catch a defect), the equivalent-mutant problem (mutants that produce no observable behavior change despite syntactic difference), selective and incremental mutation strategies that make the technique practical for large codebases (PIT, Stryker), and the relationship between mutation testing and TDD. Do NOT use for the structural signal of how much code tests reach (use test-coverage-strategy), the construction of test doubles (use test-doubles-design), the strategic question of what to test at which level (use testing-strategy), or generic fault injection at runtime (use chaos-engineering)."
4
+ license: MIT
5
+ allowed-tools: Read Grep
6
+ metadata:
7
+ metadata: "{\"schema_version\":6,\"version\":\"1.0.0\",\"type\":\"capability\",\"category\":\"quality\",\"domain\":\"quality/testing\",\"scope\":\"reference\",\"owner\":\"skill-graph-maintainer\",\"freshness\":\"2026-05-16\",\"drift_check\":\"{\\\\\\\"last_verified\\\\\\\":\\\\\\\"2026-05-16\\\\\\\"}\",\"eval_artifacts\":\"planned\",\"eval_state\":\"unverified\",\"routing_eval\":\"absent\",\"comprehension_state\":\"present\",\"stability\":\"experimental\",\"keywords\":\"[\\\\\\\"mutation testing\\\\\\\",\\\\\\\"mutation score\\\\\\\",\\\\\\\"mutant\\\\\\\",\\\\\\\"mutant operator\\\\\\\",\\\\\\\"PIT\\\\\\\",\\\\\\\"Stryker\\\\\\\",\\\\\\\"DeMillo\\\\\\\",\\\\\\\"equivalent mutant\\\\\\\",\\\\\\\"killed mutant\\\\\\\",\\\\\\\"selective mutation\\\\\\\",\\\\\\\"higher-order mutant\\\\\\\",\\\\\\\"test effectiveness\\\\\\\"]\",\"triggers\":\"[\\\\\\\"how do we know the tests actually verify anything\\\\\\\",\\\\\\\"high coverage but bugs still slip through\\\\\\\",\\\\\\\"what is mutation testing\\\\\\\",\\\\\\\"is the test suite good or just thorough\\\\\\\",\\\\\\\"PIT vs Stryker\\\\\\\"]\",\"examples\":\"[\\\\\\\"explain why a 90% coverage codebase might have a 40% mutation score and what that means\\\\\\\",\\\\\\\"decide whether to run mutation testing on a critical financial module\\\\\\\",\\\\\\\"diagnose surviving mutants in a calculation function and identify the missing assertion\\\\\\\",\\\\\\\"design a CI pipeline that runs incremental mutation testing only on changed code\\\\\\\"]\",\"anti_examples\":\"[\\\\\\\"measure how much code the test suite executes (use test-coverage-strategy)\\\\\\\",\\\\\\\"design test doubles for an integration test (use test-doubles-design)\\\\\\\",\\\\\\\"inject failures into a running distributed system (use chaos-engineering)\\\\\\\"]\",\"relations\":\"{\\\\\\\"related\\\\\\\":[\\\\\\\"test-coverage-strategy\\\\\\\",\\\\\\\"test-driven-development\\\\\\\",\\\\\\\"testing-strategy\\\\\\\",\\\\\\\"eval-driven-development\\\\\\\"],\\\\\\\"boundary\\\\\\\":[{\\\\\\\"skill\\\\\\\":\\\\\\\"test-coverage-strategy\\\\\\\",\\\\\\\"reason\\\\\\\":\\\\\\\"test-coverage-strategy owns the structural signal of which code the test suite reaches; mutation-testing owns the behavioral signal of whether the test suite would catch a defect at that code location. The two compose: coverage is a necessary precondition for mutation testing to apply (an uncovered mutant trivially survives); mutation is the next layer of test-quality signal.\\\\\\\"},{\\\\\\\"skill\\\\\\\":\\\\\\\"testing-strategy\\\\\\\",\\\\\\\"reason\\\\\\\":\\\\\\\"testing-strategy owns the strategic question of what to test at which level; this skill owns one measurement of how good the tests at any level actually are.\\\\\\\"},{\\\\\\\"skill\\\\\\\":\\\\\\\"test-driven-development\\\\\\\",\\\\\\\"reason\\\\\\\":\\\\\\\"TDD produces tests with high behavioral specificity as a side effect; mutation testing is one way to measure whether that specificity is in fact present in a given test suite.\\\\\\\"}],\\\\\\\"verify_with\\\\\\\":[\\\\\\\"test-coverage-strategy\\\\\\\",\\\\\\\"testing-strategy\\\\\\\"]}\",\"mental_model\":\"|\",\"purpose\":\"|\",\"boundary\":\"|\",\"analogy\":\"Mutation testing is to a test suite what a fire drill is to a building's evacuation plan — you do not measure preparedness by counting how many exits exist (coverage), you measure it by deliberately staging a fire and watching whether anyone notices in time (mutation kill rate). An exit that nobody walks through during the drill is not really an exit, regardless of how prominently it is signposted.\",\"misconception\":\"|\",\"concept\":\"{\\\\\\\"definition\\\\\\\":\\\\\\\"Mutation testing is a behavioral test-suite quality measurement in which the production code is automatically modified by small, syntactically-valid changes (mutants) and the test suite is run against each modified version. If the test suite fails on a mutant, the mutant is 'killed' — the tests caught the change. If the test suite still passes, the mutant 'survived' — the tests did not catch the change, which means the tests do not actually verify the behavior at that code location. The mutation score is the ratio of killed mutants to total (excluding equivalent mutants, which produce no observable behavior change despite the syntactic modification). Unlike code coverage, which measures whether the tests *reach* a piece of code, mutation testing measures whether the tests *verify* it.\\\\\\\",\\\\\\\"mental_model\\\\\\\":\\\\\\\"|\\\\\\\",\\\\\\\"purpose\\\\\\\":\\\\\\\"|\\\\\\\",\\\\\\\"boundary\\\\\\\":\\\\\\\"|\\\\\\\",\\\\\\\"taxonomy\\\\\\\":\\\\\\\"|\\\\\\\",\\\\\\\"analogy\\\\\\\":\\\\\\\"|\\\\\\\",\\\\\\\"misconception\\\\\\\":\\\\\\\"|\\\\\\\"}\",\"skill_graph_source_repo\":\"https://github.com/jacob-balslev/skill-graph\",\"skill_graph_protocol\":\"Skill Metadata Protocol v5\",\"skill_graph_project\":\"Skill Graph\",\"skill_graph_canonical_skill\":\"skills/mutation-testing/SKILL.md\"}"
8
+ skill_graph_source_repo: "https://github.com/jacob-balslev/skill-graph"
9
+ skill_graph_protocol: Skill Metadata Protocol v4
10
+ skill_graph_project: Skill Graph
11
+ skill_graph_canonical_skill: skills/mutation-testing/SKILL.md
12
+ ---
13
+
14
+ # Mutation Testing
15
+
16
+ ## Coverage
17
+
18
+ The behavioral test-suite quality measurement that introduces small syntactically-valid modifications (mutants) to production code and checks whether the test suite distinguishes the mutant from the original. Covers the mutant-operator vocabulary (arithmetic, relational, conditional, logical, constant, statement deletion, return value, method call removal), the kill-or-survive primitive, the mutation score metric, the equivalent-mutant problem and detection heuristics, selective mutation (Offutt et al.'s subset), execution strategies (full / incremental / bytecode / distributed), the modern tooling ecosystem (PIT, Stryker, mutmut, etc.), and the strategic distinction between mutation score as a target (anti-pattern) and the survived-mutant list as a to-do (correct use).
19
+
20
+ ## Philosophy
21
+
22
+ Mutation testing inverts the coverage question. Coverage asks: did the test reach this line? Mutation asks: would the test catch a defect at this line? The second question is closer to what we actually care about, and the answer is more specific: each survived mutant is a directly addressable test-suite gap with a known location and a known kind of defect.
23
+
24
+ The discipline is not in maximizing the score; it is in reading the survived-mutant list. Each survivor is either a real gap (the test suite does not verify this behavior — write the test), an equivalent mutant (the syntactic change has no observable effect — exclude it), or an intentional non-test (defensive check, log string, debug path — note it as intentional). Working through the list with this classification produces a stronger test suite without engineering tests to satisfy the metric.
25
+
26
+ Mutation testing's modern feasibility is what makes it strategic. A decade ago the technique was largely impractical for large codebases. Today's tools — PIT's bytecode mutation, Stryker's incremental analysis, distributed execution, test prioritization — run mutation testing in CI in minutes for codebases of hundreds of thousands of lines. The cost barrier that historically pushed teams to coverage as a substitute is largely gone.
27
+
28
+ ## Mutation Operator Catalog (Selective Set)
29
+
30
+ | Operator | Example | Catches |
31
+ |---|---|---|
32
+ | Conditional Boundary | `<` → `<=` | Off-by-one in comparisons |
33
+ | Negate Conditionals | `==` → `!=` | Inverted-condition bugs |
34
+ | Math | `+` → `-`, `*` → `/` | Arithmetic mistakes |
35
+ | Increments | `i++` → `i--` | Loop-direction bugs |
36
+ | Invert Negatives | `-x` → `x` | Sign errors |
37
+ | Return Values | `return x` → `return null` | Missing return assertions |
38
+ | Void Method Calls | `obj.set(x)` → `(no-op)` | Missing-side-effect bugs |
39
+ | Empty Returns | replace return with type's empty/default | Caught only if downstream uses the value |
40
+ | Constants | `42` → `43`, `true` → `false` | Magic-number assertions |
41
+
42
+ The Offutt et al. selective subset (about 5-8 operators) captures most of the signal of the full operator set at a fraction of the cost.
43
+
44
+ ## Mutation vs Coverage — The Composition
45
+
46
+ | Aspect | Coverage | Mutation |
47
+ |---|---|---|
48
+ | What it measures | Did the tests execute this code? | Would the tests catch a defect here? |
49
+ | Signal direction | Floor (uncovered = unverified) | Direct measure of verification |
50
+ | Cost | Low — incremental with test execution | Higher — one test run per mutant |
51
+ | Goodhart susceptibility | High (easy to game) | Lower (harder to engineer to without writing real tests) |
52
+ | Precondition | None | Coverage at the location |
53
+ | Diagnostic output | Map of unreached lines | List of survived mutants |
54
+
55
+ A mature test-quality strategy uses coverage as the floor (reach everything important) and mutation as the verification signal (verify everything reached).
56
+
57
+ ## Working With Survived Mutants
58
+
59
+ A survived mutant is not automatically a test bug. Classify each:
60
+
61
+ 1. **Real test gap** — the mutant alters observable behavior and no test catches it. Action: write the missing test.
62
+ 2. **Equivalent mutant** — the syntactic change has no observable effect. Action: mark as equivalent; some tools support inline suppression.
63
+ 3. **Intentional non-test** — the code is intentionally unverified (defensive check, log message, debug path). Action: annotate; consider whether the policy should change.
64
+ 4. **Off-scope code** — generated code, vendor code, scaffolding. Action: exclude from mutation analysis.
65
+
66
+ A test suite that addresses the real-test-gap survivors and accepts the rest will see its mutation score climb organically — and, more importantly, its real defect-detection rate.
67
+
68
+ ## Incremental CI Integration
69
+
70
+ The pattern that makes mutation testing practical in continuous integration:
71
+
72
+ 1. Compute the set of changed files in the PR.
73
+ 2. Generate mutants only on changed lines (PIT: `--targetTests` + diff-aware mode; Stryker: incremental mode).
74
+ 3. Run the affected tests against each mutant.
75
+ 4. Report new survivors on changed code.
76
+ 5. Block (or warn on) PRs that introduce new survivors above threshold.
77
+
78
+ This scales to large codebases because the work per PR is bounded by the PR's size, not the codebase's size.
79
+
80
+ ## Verification
81
+
82
+ After applying this skill, verify:
83
+ - [ ] Mutation testing is paired with coverage, not used as a replacement. Coverage measures reach; mutation measures verification.
84
+ - [ ] The mutation operator set in use is named and documented (full / selective Offutt subset / custom).
85
+ - [ ] Survived mutants are classified (real gap / equivalent / intentional non-test / off-scope), not treated as a uniform list of bugs.
86
+ - [ ] Mutation score is read as a list-of-actions summary, not as a target to engineer toward. Hard merge-gates on the score are avoided unless paired with explicit anti-Goodhart policies.
87
+ - [ ] Equivalent-mutant noise is acknowledged (5-15% typical) and either accepted in the raw score or excluded from a published adjusted score.
88
+ - [ ] For CI integration, incremental mutation on changed code is used; full mutation runs are scheduled (nightly, weekly) rather than blocking every PR.
89
+ - [ ] Mutation testing is not applied to dead code, generated code, or off-scope code that produces noise without value.
90
+ - [ ] The team can name the operator that caused each surviving mutant (off-by-one, condition negation, etc.) — the survival's *kind* is part of the diagnostic, not just the count.
91
+
92
+ ## Do NOT Use When
93
+
94
+ | Instead of this skill | Use | Why |
95
+ |---|---|---|
96
+ | Measuring how much of the code the test suite reaches | `test-coverage-strategy` | coverage measures structural reach; this skill measures behavioral verification |
97
+ | Designing test doubles (mocks, stubs, fakes) | `test-doubles-design` | test-doubles owns stand-in construction; this skill measures whether the resulting tests verify behavior |
98
+ | Choosing test levels (unit/integration/e2e) | `testing-strategy` | testing-strategy owns the strategic level question |
99
+ | Injecting failures into a deployed system | `chaos-engineering` | chaos is runtime fault injection; this skill is build-time source-code mutation |
100
+ | Generating input variations to find crashes | fuzz-testing skill | fuzzing varies inputs; this skill varies the program |
101
+ | Iterating on LLM behavior via evals | `eval-driven-development` | eval-driven-development is the LLM analog; mutation testing is for deterministic code |
102
+
103
+ ## Key Sources
104
+
105
+ - DeMillo, R. A., Lipton, R. J., & Sayward, F. G. (1978). ["Hints on Test Data Selection: Help for the Practicing Programmer"](https://ieeexplore.ieee.org/document/1646911). *IEEE Computer*, 11(4), 34-41. The foundational paper introducing the mutation-testing concept and the competent-programmer / coupling-effect hypotheses that justify the technique.
106
+ - Jia, Y., & Harman, M. (2011). ["An Analysis and Survey of the Development of Mutation Testing"](https://ieeexplore.ieee.org/document/5487526). *IEEE Transactions on Software Engineering*, 37(5), 649-678. The canonical comprehensive survey of mutation testing across decades of research.
107
+ - Just, R., Jalali, D., Inozemtseva, L., Ernst, M. D., Holmes, R., & Fraser, G. (2014). ["Are Mutants a Valid Substitute for Real Faults in Software Testing?"](https://dl.acm.org/doi/10.1145/2635868.2635929). *FSE 2014*. The empirical study showing mutation score correlates with real fault-detection rate, validating mutation as a meaningful proxy.
108
+ - Andrews, J. H., Briand, L. C., & Labiche, Y. (2005). ["Is Mutation an Appropriate Tool for Testing Experiments?"](https://dl.acm.org/doi/10.1145/1062455.1062530). *ICSE 2005*. Earlier empirical study supporting mutation as a valid measure of test-suite effectiveness.
109
+ - Offutt, A. J., Lee, A., Rothermel, G., Untch, R. H., & Zapf, C. (1996). ["An Experimental Determination of Sufficient Mutant Operators"](https://dl.acm.org/doi/10.1145/227607.227610). *ACM Transactions on Software Engineering and Methodology*, 5(2), 99-118. The selective-mutation paper that established the small operator subset capturing most signal at a fraction of the cost.
110
+ - Coles, H. ["PIT Mutation Testing — Documentation"](https://pitest.org/). The reference for the canonical JVM mutation-testing tool; bytecode mutation, incremental analysis, CI integration.
111
+ - Stryker Mutator. ["Stryker — Documentation"](https://stryker-mutator.io/). The reference for the JS/TS/.NET/Scala mutation-testing tool; framework-integrated and source-level.
112
+ - Inozemtseva, L., & Holmes, R. (2014). ["Coverage Is Not Strongly Correlated with Test Suite Effectiveness"](https://dl.acm.org/doi/10.1145/2568225.2568271). *ICSE 2014*. Adjacent finding: coverage's weak correlation with effectiveness is part of why mutation matters as a stronger signal.
@@ -0,0 +1,112 @@
1
+ ---
2
+ name: naming-conventions
3
+ description: "Use when naming a new file, function, variable, type, route, database column, environment variable, or any other code or system artifact. Covers identifier morphology (verb-noun choice, plural vs singular, prefix/suffix conventions), kebab-case vs camelCase vs snake_case vs PascalCase per artifact kind, abbreviation rules, name-vs-path semantics, the rename-coordination workflow, and detection of names that lie. Do NOT use for content writing (use `documentation`), for restructuring already-named code (use `refactor`), or for human-language copy in product UI (separate skill, not in this library)."
4
+ license: MIT
5
+ compatibility: Language-agnostic
6
+ allowed-tools: Read Grep Bash Edit
7
+ metadata:
8
+ metadata: "{\"schema_version\":6,\"version\":\"1.0.0\",\"type\":\"capability\",\"category\":\"engineering\",\"scope\":\"portable\",\"owner\":\"skill-graph-maintainer\",\"freshness\":\"2026-05-04\",\"drift_check\":\"{\\\\\\\"last_verified\\\\\\\":\\\\\\\"2026-05-04\\\\\\\"}\",\"eval_artifacts\":\"planned\",\"eval_state\":\"unverified\",\"routing_eval\":\"absent\",\"stability\":\"experimental\",\"keywords\":\"[\\\\\\\"naming\\\\\\\",\\\\\\\"naming convention\\\\\\\",\\\\\\\"name a file\\\\\\\",\\\\\\\"name a function\\\\\\\",\\\\\\\"name a variable\\\\\\\",\\\\\\\"name a type\\\\\\\",\\\\\\\"rename\\\\\\\",\\\\\\\"identifier\\\\\\\",\\\\\\\"kebab case\\\\\\\",\\\\\\\"camel case\\\\\\\",\\\\\\\"snake case\\\\\\\",\\\\\\\"pascal case\\\\\\\",\\\\\\\"abbreviation\\\\\\\",\\\\\\\"prefix suffix\\\\\\\",\\\\\\\"what to call this\\\\\\\",\\\\\\\"this name doesn't fit\\\\\\\",\\\\\\\"the name lies\\\\\\\",\\\\\\\"misleading name\\\\\\\"]\",\"examples\":\"[\\\\\\\"what should I name this util that converts between order shapes?\\\\\\\",\\\\\\\"is `isValidUser` or `validateUser` the right name for this guard?\\\\\\\",\\\\\\\"this function is called `getThing` but it also writes to disk — rename it\\\\\\\",\\\\\\\"kebab-case or snake_case for a new database column?\\\\\\\",\\\\\\\"the type is called `Result` but it's specifically the order-pricing result — rename\\\\\\\",\\\\\\\"should I prefix this hook with `use` or just call it `subscribeOrders`?\\\\\\\",\\\\\\\"we have `User` and `UserAccount` and `AccountUser` — which means what?\\\\\\\",\\\\\\\"rename plan: this column was called `created` but it stores the ship date\\\\\\\"]\",\"anti_examples\":\"[\\\\\\\"refactor this 200-line function into smaller pieces\\\\\\\",\\\\\\\"write a doc explaining our naming conventions\\\\\\\",\\\\\\\"review this PR's naming choices\\\\\\\",\\\\\\\"the variable named `userIsActive` is logging the wrong value\\\\\\\",\\\\\\\"scaffold a new skill that teaches naming conventions\\\\\\\"]\",\"relations\":\"{\\\\\\\"boundary\\\\\\\":[{\\\\\\\"skill\\\\\\\":\\\\\\\"refactor\\\\\\\",\\\\\\\"reason\\\\\\\":\\\\\\\"refactor reshapes existing code structure; naming-conventions decides what an artifact should be CALLED, before or independently of restructuring\\\\\\\"},{\\\\\\\"skill\\\\\\\":\\\\\\\"code-review\\\\\\\",\\\\\\\"reason\\\\\\\":\\\\\\\"code-review evaluates a diff holistically; naming-conventions is the focused naming-decision skill invoked during authoring\\\\\\\"},{\\\\\\\"skill\\\\\\\":\\\\\\\"debugging\\\\\\\",\\\\\\\"reason\\\\\\\":\\\\\\\"debugging chases observed wrong behaviour; naming-conventions catches names that LIE about their meaning before the bug ships\\\\\\\"}],\\\\\\\"related\\\\\\\":[\\\\\\\"refactor\\\\\\\"],\\\\\\\"verify_with\\\\\\\":[\\\\\\\"code-review\\\\\\\"]}\",\"portability\":\"{\\\\\\\"readiness\\\\\\\":\\\\\\\"scripted\\\\\\\",\\\\\\\"targets\\\\\\\":[\\\\\\\"skill-md\\\\\\\"]}\",\"lifecycle\":\"{\\\\\\\"stale_after_days\\\\\\\":365,\\\\\\\"review_cadence\\\\\\\":\\\\\\\"quarterly\\\\\\\"}\",\"skill_graph_source_repo\":\"https://github.com/jacob-balslev/skill-graph\",\"skill_graph_protocol\":\"Skill Metadata Protocol v5\",\"skill_graph_project\":\"Skill Graph\",\"skill_graph_canonical_skill\":\"skills/naming-conventions/SKILL.md\"}"
9
+ skill_graph_source_repo: "https://github.com/jacob-balslev/skill-graph"
10
+ skill_graph_protocol: Skill Metadata Protocol v4
11
+ skill_graph_project: Skill Graph
12
+ skill_graph_canonical_skill: skills/naming-conventions/SKILL.md
13
+ ---
14
+
15
+ # Naming Conventions
16
+
17
+ ## Coverage
18
+
19
+ - Identifier morphology: verb-noun selection (`get` vs `fetch` vs `load`), plural vs singular for collections, prefix/suffix conventions (`is` / `has` / `should` for booleans, `use` for React hooks)
20
+ - Casing per artifact kind: kebab-case (file names, URL paths, CLI flags), camelCase (JavaScript/TypeScript variables and functions), PascalCase (types, classes, components, React JSX), snake_case (Python, SQL columns, environment variables when convention demands), SCREAMING_SNAKE_CASE (constants, env-var keys)
21
+ - Abbreviation rules: when an abbreviation is universally known (`url`, `id`, `api`), when it requires expansion (`cust` → `customer`), and when team-internal jargon must be avoided in public-facing names
22
+ - Name-vs-path semantics: the difference between *what an artifact is called* and *where it lives*; when name and path agree (file system) vs when they diverge (TypeScript module re-exports, npm-published package paths)
23
+ - Rename coordination: how to update every reference in the same commit, when to ship a deprecation alias, and how to detect missed call sites with grep
24
+ - Names that lie: identifiers whose words promise a behaviour the code does not deliver, and how to detect them (the function called `getX` that also writes; the boolean called `isReady` that means "should be ready"; the column called `created` that stores the ship date)
25
+ - Cross-cutting consistency: when a naming choice in one part of the codebase forces a related choice elsewhere (table column `customer_id` and TypeScript type `Customer.id`)
26
+
27
+ ## Philosophy
28
+
29
+ Names are the most-read part of any codebase. Every reader pays the cost of a bad name; only the author pays the cost of choosing well. The single most valuable property of a name is *truthfulness*: a name that lies — about what an artifact does, returns, or means — is more harmful than a name that is merely unclear. The second-most-valuable property is *consistency with sibling names*: a function called `getOrders` should sit alongside `getCustomers`, not `loadCustomers`. The third is *brevity*, and only the third — short names that mislead are not a virtue.
30
+
31
+ When a name does not fit, the answer is almost always to rename, not to add a comment explaining what the name "really" means. Comments rot; renames travel with the code.
32
+
33
+ ## Casing per Artifact Kind
34
+
35
+ Casing is project-convention-driven for the artifacts where languages don't enforce it, and language-mandated for the rest. Pick the convention once, document it in the project's CONTRIBUTING or AGENTS file, and apply it everywhere.
36
+
37
+ | Artifact | Convention | Example |
38
+ |---|---|---|
39
+ | File name (any) | kebab-case | `order-pricing.ts`, `webhook-handler.py` |
40
+ | URL path segment | kebab-case | `/api/order-pricing` |
41
+ | CLI flag | kebab-case | `--include-template` |
42
+ | JS/TS variable, function, parameter | camelCase | `orderTotal`, `calculateMargin()` |
43
+ | JS/TS type, class, interface, React component | PascalCase | `Order`, `OrderPricing`, `<OrderRow/>` |
44
+ | Python variable, function | snake_case | `order_total`, `calculate_margin` |
45
+ | Python class | PascalCase | `Order`, `OrderPricing` |
46
+ | SQL table name | snake_case (lowercase) | `orders`, `order_line_items` |
47
+ | SQL column name | snake_case | `created_at`, `customer_id` |
48
+ | Environment variable | SCREAMING_SNAKE_CASE | `STRIPE_SECRET_KEY`, `NODE_ENV` |
49
+ | Constant in code | SCREAMING_SNAKE_CASE | `MAX_RETRIES`, `DEFAULT_TIMEOUT_MS` |
50
+ | Boolean variable / function | `is*` / `has*` / `should*` / `can*` prefix | `isAdmin`, `hasReceipt`, `shouldRetry` |
51
+ | React hook | `use*` prefix (mandatory) | `useOrders`, `useDebounce` |
52
+ | Predicate function | verb in interrogative form | `validateEmail()`, `isValidEmail()` |
53
+
54
+ ## Identifier Morphology
55
+
56
+ The verb you pick encodes a contract. Choose deliberately.
57
+
58
+ | Verb | Implies | Wrong when |
59
+ |---|---|---|
60
+ | `get` | Pure read; cheap; never mutates; idempotent | The function writes, calls an API, or has any side effect |
61
+ | `fetch` | Network or I/O read; may fail; may be slow | The function reads from local memory or never crosses a boundary |
62
+ | `load` | Read-and-cache, or read-from-disk; one-shot | The function returns synchronously from already-loaded data |
63
+ | `compute` / `calculate` | Pure transformation of inputs | The function takes no inputs or returns I/O |
64
+ | `validate` | Returns boolean OR throws; no side effects | The function modifies the input or has hidden side effects |
65
+ | `assert` | Throws on failure; void return on success | The function returns a value or has a happy non-throwing path |
66
+ | `parse` | String → structured data; may throw on malformed input | The function takes structured data or never throws |
67
+ | `format` | Structured data → string | The function returns structured data |
68
+ | `create` | Allocates/persists a new entity; returns its identity | The function returns a transient value with no persisted identity |
69
+ | `update` | Modifies an existing entity by identity | The function inserts or replaces |
70
+ | `delete` / `remove` | Removes an entity from the system | The function only removes from a transient view |
71
+
72
+ The single most common naming bug is `getX` that also writes. If the function has a side effect, the verb must be one that *implies* side effects (`save`, `apply`, `commit`, `flush`, `record`).
73
+
74
+ ## Names That Lie
75
+
76
+ A name lies when its words promise behaviour the code does not deliver. Detecting these costs nothing at authoring time and saves real debugging time later.
77
+
78
+ - **Verb mismatch**: `getThing()` that calls a remote API, `validate()` that throws, `parse()` that returns null on failure (it should throw or be renamed `tryParse`).
79
+ - **Boolean polarity inversion**: `isInvalid` set to `true` to mean valid; the codebase will eventually have `if (!isInvalid)` and someone will read it backwards. Use `isValid` and invert the value.
80
+ - **Optional collapse**: `getOrder()` that returns `Order | undefined`. The caller has no way to know the function can return undefined without reading the implementation. Either rename to `findOrder()` (convention: "find" allows null return) or change to `getOrderOrThrow()`.
81
+ - **Stale meaning after refactor**: a column originally named `created` that, after a migration, now stores the ship date. The name predates the meaning. Rename the column AND all of its callers in the same commit.
82
+ - **Domain-language drift**: code says `User` but the domain glossary says `Account`. Pick one in the glossary and rename in code.
83
+
84
+ ## Rename Coordination
85
+
86
+ Renaming is a small change that touches many places. Do all of them in one commit; ship none of them piecemeal.
87
+
88
+ 1. **Pick the new name** by the rules above.
89
+ 2. **Find every call site**: `grep -rn "OldName" --include="*.ts" --include="*.tsx" --include="*.md"` (and equivalent for your language). Don't trust IDE rename — it misses dynamic references and string literals.
90
+ 3. **Update all references** in one diff. The diff stat should show the rename and nothing else. If you find yourself fixing other things along the way, split the commits.
91
+ 4. **Decide on a deprecation alias** when external consumers may have pinned to the old name. Export both names for one minor version; remove the old name in the next minor.
92
+ 5. **Run the lint and test suite** to catch dynamic references the grep missed (e.g., reflection, template strings, JSON config).
93
+ 6. **Update docs** in the same commit. Stale docs are a naming bug.
94
+
95
+ ## Verification
96
+
97
+ - [ ] The name is *truthful* — every word in the name describes behaviour the code actually delivers
98
+ - [ ] The casing matches the artifact-kind convention (file kebab, type PascalCase, env SCREAMING_SNAKE)
99
+ - [ ] The verb implies the right cost class (`get` is cheap, `fetch` may fail, `compute` is pure)
100
+ - [ ] Boolean prefix is positive polarity (`isValid` not `isInvalid`)
101
+ - [ ] Sibling artifacts use the same verb stem (don't mix `getOrders` with `loadCustomers`)
102
+ - [ ] No team-internal jargon in public-facing names (file names, route paths, error messages)
103
+ - [ ] Rename diffs touch ALL references in one commit, including docs and tests
104
+
105
+ ## Do NOT Use When
106
+
107
+ | Use instead | When |
108
+ |---|---|
109
+ | `refactor` | Restructuring already-named code (extract function, inline variable, split file) — naming may change as a side effect of the refactor |
110
+ | `documentation` | Writing prose explanation of a naming convention — this skill makes the choice; documentation explains it |
111
+ | `code-review` | Evaluating a whole PR — naming is one of many concerns the reviewer covers |
112
+ | `debugging` | Investigating why a misnamed identifier produces wrong behaviour — debugging chases the bug; naming-conventions prevents the next one |
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: observability-modeling
3
+ description: "Use when designing telemetry semantics before or during implementation: logs, metrics, traces, events, spans, attributes, correlation IDs, SLOs, alert signals, and diagnostic questions. Do NOT use for domain/business event contracts (use `event-contract-design`), configuring an error tracker alone (use `error-tracking`), performance optimization (use `performance-engineering`), or debugging a current incident (use `debugging`)."
4
+ license: MIT
5
+ compatibility: "Portable observability modeling discipline for applications, integrations, jobs, queues, APIs, and agent workflows."
6
+ allowed-tools: Read Grep
7
+ metadata:
8
+ metadata: "{\"schema_version\":6,\"version\":\"1.0.0\",\"type\":\"capability\",\"category\":\"engineering\",\"domain\":\"engineering/observability\",\"scope\":\"portable\",\"owner\":\"skill-graph-maintainer\",\"freshness\":\"2026-05-11\",\"drift_check\":\"{\\\\\\\"last_verified\\\\\\\":\\\\\\\"2026-05-11\\\\\\\"}\",\"eval_artifacts\":\"present\",\"eval_state\":\"unverified\",\"routing_eval\":\"absent\",\"stability\":\"experimental\",\"keywords\":\"[\\\\\\\"observability modeling\\\\\\\",\\\\\\\"telemetry design\\\\\\\",\\\\\\\"logs metrics traces\\\\\\\",\\\\\\\"SLO\\\\\\\",\\\\\\\"spans\\\\\\\",\\\\\\\"correlation id\\\\\\\",\\\\\\\"diagnostic events\\\\\\\",\\\\\\\"alert design\\\\\\\",\\\\\\\"instrumentation model\\\\\\\"]\",\"examples\":\"[\\\\\\\"design telemetry for this ingestion pipeline so failures can be diagnosed later\\\\\\\",\\\\\\\"which logs, metrics, spans, and correlation IDs should this interface contract require?\\\\\\\",\\\\\\\"model observability for a background job before adding alerts\\\\\\\",\\\\\\\"turn these diagnostic questions into events and metrics\\\\\\\"]\",\"anti_examples\":\"[\\\\\\\"set up Sentry error tracking for this app\\\\\\\",\\\\\\\"profile and optimize a slow endpoint\\\\\\\",\\\\\\\"debug the current production incident\\\\\\\",\\\\\\\"write application tests for this feature\\\\\\\"]\",\"relations\":\"{\\\\\\\"boundary\\\\\\\":[{\\\\\\\"skill\\\\\\\":\\\\\\\"error-tracking\\\\\\\",\\\\\\\"reason\\\\\\\":\\\\\\\"error-tracking owns error-capture setup and handling; observability-modeling owns the broader telemetry schema\\\\\\\"},{\\\\\\\"skill\\\\\\\":\\\\\\\"event-contract-design\\\\\\\",\\\\\\\"reason\\\\\\\":\\\\\\\"event-contract-design owns published business event contracts; observability-modeling owns telemetry events, spans, metrics, and logs for diagnosability\\\\\\\"},{\\\\\\\"skill\\\\\\\":\\\\\\\"performance-engineering\\\\\\\",\\\\\\\"reason\\\\\\\":\\\\\\\"performance-engineering improves measured performance; observability-modeling defines the signals needed to measure and diagnose\\\\\\\"},{\\\\\\\"skill\\\\\\\":\\\\\\\"debugging\\\\\\\",\\\\\\\"reason\\\\\\\":\\\\\\\"debugging investigates a current failure; observability-modeling designs future diagnosability\\\\\\\"},{\\\\\\\"skill\\\\\\\":\\\\\\\"testing-strategy\\\\\\\",\\\\\\\"reason\\\\\\\":\\\\\\\"testing-strategy proves behavior in tests; observability-modeling proves runtime diagnosability\\\\\\\"}],\\\\\\\"related\\\\\\\":[\\\\\\\"error-tracking\\\\\\\",\\\\\\\"performance-engineering\\\\\\\",\\\\\\\"system-interface-contracts\\\\\\\",\\\\\\\"event-contract-design\\\\\\\",\\\\\\\"debugging\\\\\\\"],\\\\\\\"verify_with\\\\\\\":[\\\\\\\"error-tracking\\\\\\\",\\\\\\\"debugging\\\\\\\"]}\",\"portability\":\"{\\\\\\\"readiness\\\\\\\":\\\\\\\"scripted\\\\\\\",\\\\\\\"targets\\\\\\\":[\\\\\\\"skill-md\\\\\\\"]}\",\"lifecycle\":\"{\\\\\\\"stale_after_days\\\\\\\":365,\\\\\\\"review_cadence\\\\\\\":\\\\\\\"quarterly\\\\\\\"}\",\"skill_graph_source_repo\":\"https://github.com/jacob-balslev/skill-graph\",\"skill_graph_protocol\":\"Skill Metadata Protocol v5\",\"skill_graph_project\":\"Skill Graph\",\"skill_graph_canonical_skill\":\"skills/observability-modeling/SKILL.md\"}"
9
+ skill_graph_source_repo: "https://github.com/jacob-balslev/skill-graph"
10
+ skill_graph_protocol: Skill Metadata Protocol v4
11
+ skill_graph_project: Skill Graph
12
+ skill_graph_canonical_skill: skills/observability-modeling/SKILL.md
13
+ ---
14
+
15
+ # Observability Modeling
16
+
17
+ ## Coverage
18
+
19
+ Design telemetry semantics that make systems diagnosable. Covers diagnostic questions, logs, metrics, traces, spans, events, attributes, correlation IDs, SLOs, alert signals, cardinality, privacy, sampling, and contract-level observability requirements.
20
+
21
+ ## Philosophy
22
+
23
+ Observability starts with questions, not tools. "Can we answer why this order failed to sync?" is a better design input than "add logs." Tool setup without a telemetry model produces noisy data and weak diagnosis.
24
+
25
+ Instrument boundaries, state changes, and decisions. Avoid high-cardinality or sensitive fields unless the operational value justifies the risk.
26
+
27
+ ## Method
28
+
29
+ 1. List diagnostic questions the system must answer.
30
+ 2. Map each question to required signals: log, metric, trace, event, or derived view.
31
+ 3. Define correlation identifiers across boundaries.
32
+ 4. Name span/event attributes with stable semantics and cardinality limits.
33
+ 5. Add SLOs and alert signals only for user or business impact.
34
+ 6. Define privacy redaction and sampling rules.
35
+ 7. Verify that failures can be reconstructed from emitted signals.
36
+
37
+ ## Evals
38
+
39
+ This skill ships a comprehension-eval artifact at [`examples/evals/observability-modeling.json`](https://github.com/jacob-balslev/skill-graph/blob/main/examples/evals/observability-modeling.json). The checklist below is the authoring gate for telemetry-semantics decisions; the eval file is the grader surface.
40
+
41
+ ## Verification
42
+
43
+ - [ ] Telemetry answers named diagnostic questions
44
+ - [ ] Correlation IDs cross async and external boundaries
45
+ - [ ] Event and metric names use stable domain language
46
+ - [ ] High-cardinality attributes are avoided or justified
47
+ - [ ] Sensitive data is redacted before emission
48
+ - [ ] Alerts map to actionable symptoms, not raw noise
49
+ - [ ] A realistic failure can be reconstructed from the proposed signals
50
+
51
+ ## Do NOT Use When
52
+
53
+ | Use instead | When |
54
+ |---|---|
55
+ | `error-tracking` | You need error tracker setup, redaction, source maps, or issue triage. |
56
+ | `event-contract-design` | You need a business/domain event envelope, schema, topic, replay, or consumer compatibility contract. |
57
+ | `performance-engineering` | You need to profile and optimize latency, throughput, or resource use. |
58
+ | `debugging` | There is already a failing incident or reproducible bug. |
59
+ | `testing-strategy` | You need pre-runtime test coverage design. |