shmakk 1.1.0 → 1.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 (450) hide show
  1. package/README.md +16 -1
  2. package/package.json +6 -3
  3. package/scripts/import-skills.js +536 -0
  4. package/scripts/install-skills.js +64 -0
  5. package/skills/ai-elements.md +482 -0
  6. package/skills/architecture.md +151 -0
  7. package/skills/backend-adapter-aws-lambda.md +204 -0
  8. package/skills/backend-adapter-express.md +177 -0
  9. package/skills/backend-adapter-fastify.md +222 -0
  10. package/skills/backend-adapter-fetch.md +200 -0
  11. package/skills/backend-api-docs.md +22 -0
  12. package/skills/backend-aspire.md +232 -0
  13. package/skills/backend-aspnet-core.md +62 -0
  14. package/skills/backend-build-chatgpt-app.md +321 -0
  15. package/skills/backend-build-mcp-app.md +393 -0
  16. package/skills/backend-build-mcp-server.md +222 -0
  17. package/skills/backend-build-mcpb.md +200 -0
  18. package/skills/backend-building-ai-agent-on-cloudflare.md +401 -0
  19. package/skills/backend-caching.md +206 -0
  20. package/skills/backend-chatgpt-app-submission.md +157 -0
  21. package/skills/backend-chatgpt-apps.md +321 -0
  22. package/skills/backend-client-setup.md +318 -0
  23. package/skills/backend-containerize-aspnet-framework.md +455 -0
  24. package/skills/backend-create-spring-boot-java-project.md +164 -0
  25. package/skills/backend-create-spring-boot-kotlin-project.md +148 -0
  26. package/skills/backend-csharp-async.md +50 -0
  27. package/skills/backend-csharp-docs.md +63 -0
  28. package/skills/backend-csharp-mcp-server-generator.md +60 -0
  29. package/skills/backend-dotenv.md +201 -0
  30. package/skills/backend-dotenvx.md +119 -0
  31. package/skills/backend-env-vars.md +259 -0
  32. package/skills/backend-error-handling.md +254 -0
  33. package/skills/backend-fastapi.md +437 -0
  34. package/skills/backend-go-mcp-server-generator.md +335 -0
  35. package/skills/backend-java-mcp-server-generator.md +757 -0
  36. package/skills/backend-kotlin-mcp-server-generator.md +450 -0
  37. package/skills/backend-middlewares.md +243 -0
  38. package/skills/backend-multi-stage-dockerfile.md +47 -0
  39. package/skills/backend-nestjs.md +192 -0
  40. package/skills/backend-next-forge.md +375 -0
  41. package/skills/backend-nextjs.md +746 -0
  42. package/skills/backend-openapi-to-application-code.md +113 -0
  43. package/skills/backend-php-mcp-server-generator.md +523 -0
  44. package/skills/backend-python-mcp-server-generator.md +106 -0
  45. package/skills/backend-routing-middleware.md +251 -0
  46. package/skills/backend-ruby-mcp-server-generator.md +661 -0
  47. package/skills/backend-rust-mcp-server-generator.md +578 -0
  48. package/skills/backend-semantic-kernel.md +57 -0
  49. package/skills/backend-server-setup.md +379 -0
  50. package/skills/backend-server-side-calls.md +250 -0
  51. package/skills/backend-subscriptions.md +407 -0
  52. package/skills/backend-swift-mcp-server-generator.md +670 -0
  53. package/skills/backend-trpc-router.md +152 -0
  54. package/skills/backend-typescript-mcp-server-generator.md +91 -0
  55. package/skills/backend-validators.md +229 -0
  56. package/skills/backend.md +76 -0
  57. package/skills/backup.md +165 -0
  58. package/skills/budget.md +140 -0
  59. package/skills/business-gtm-0-to-1-launch.md +322 -0
  60. package/skills/business-gtm-operating-cadence.md +421 -0
  61. package/skills/business-gtm-positioning-strategy.md +439 -0
  62. package/skills/business-gtm-product-led-growth.md +340 -0
  63. package/skills/calendar.md +95 -0
  64. package/skills/code-review.md +130 -0
  65. package/skills/compliance.md +168 -0
  66. package/skills/contracts.md +130 -0
  67. package/skills/daily-job-run.md +46 -0
  68. package/skills/daily-webdesign.md +187 -0
  69. package/skills/database-bigquery-pipeline-audit.md +130 -0
  70. package/skills/database-cosmosdb-datamodeling.md +1046 -0
  71. package/skills/database-durable-objects.md +187 -0
  72. package/skills/database-ef-core.md +76 -0
  73. package/skills/database-fabric-lakehouse.md +107 -0
  74. package/skills/database-neon-postgres-egress-optimizer.md +213 -0
  75. package/skills/database-neon-postgres.md +218 -0
  76. package/skills/database-postgresql-code-review.md +213 -0
  77. package/skills/database-postgresql-optimization.md +405 -0
  78. package/skills/database-sql-code-review.md +302 -0
  79. package/skills/database-sql-optimization.md +297 -0
  80. package/skills/dependency-audit.md +165 -0
  81. package/skills/design-kami-landing.md +234 -0
  82. package/skills/design.md +221 -0
  83. package/skills/dev-acquire-codebase-knowledge.md +175 -0
  84. package/skills/dev-add-educational-comments.md +129 -0
  85. package/skills/dev-add-model-descriptions.md +74 -0
  86. package/skills/dev-adr-review.md +56 -0
  87. package/skills/dev-boost-prompt.md +26 -0
  88. package/skills/dev-build-run-debug.md +130 -0
  89. package/skills/dev-chunk.md +49 -0
  90. package/skills/dev-claude-md-improver.md +180 -0
  91. package/skills/dev-code-exemplars-blueprint-generator.md +127 -0
  92. package/skills/dev-code-tour.md +434 -0
  93. package/skills/dev-comment-code-generate-a-tutorial.md +27 -0
  94. package/skills/dev-commit.md +81 -0
  95. package/skills/dev-context-map.md +53 -0
  96. package/skills/dev-conventional-commit.md +73 -0
  97. package/skills/dev-create-architectural-decision-record.md +98 -0
  98. package/skills/dev-create-draft-pr.md +17 -0
  99. package/skills/dev-create-pr.md +17 -0
  100. package/skills/dev-create-readme.md +22 -0
  101. package/skills/dev-csharp-mstest.md +479 -0
  102. package/skills/dev-csharp-nunit.md +72 -0
  103. package/skills/dev-csharp-tunit.md +101 -0
  104. package/skills/dev-csharp-xunit.md +69 -0
  105. package/skills/dev-debug-failing-test.md +90 -0
  106. package/skills/dev-diff-analyze.md +32 -0
  107. package/skills/dev-diffs.md +24 -0
  108. package/skills/dev-dotnet-best-practices.md +86 -0
  109. package/skills/dev-dotnet-design-pattern-review.md +43 -0
  110. package/skills/dev-dotnet-timezone.md +110 -0
  111. package/skills/dev-dotnet-upgrade.md +117 -0
  112. package/skills/dev-doublecheck.md +278 -0
  113. package/skills/dev-explain-error.md +15 -0
  114. package/skills/dev-finding-discovery.md +164 -0
  115. package/skills/dev-fix-finding.md +111 -0
  116. package/skills/dev-full-file-edit.md +25 -0
  117. package/skills/dev-git-commit.md +125 -0
  118. package/skills/dev-git-flow-branch-creator.md +293 -0
  119. package/skills/dev-git-workflow.md +46 -0
  120. package/skills/dev-github-automation.md +64 -0
  121. package/skills/dev-github-code-review.md +1140 -0
  122. package/skills/dev-github-issues.md +202 -0
  123. package/skills/dev-gpt-5-4-prompting.md +55 -0
  124. package/skills/dev-investigation-mode.md +277 -0
  125. package/skills/dev-java-add-graalvm-native-image-support.md +450 -0
  126. package/skills/dev-java-docs.md +24 -0
  127. package/skills/dev-java-refactoring-extract-method.md +105 -0
  128. package/skills/dev-java-refactoring-remove-parameter.md +85 -0
  129. package/skills/dev-merge.md +73 -0
  130. package/skills/dev-migrate-create.md +36 -0
  131. package/skills/dev-migrate-validate.md +36 -0
  132. package/skills/dev-my-issues.md +9 -0
  133. package/skills/dev-my-pull-requests.md +15 -0
  134. package/skills/dev-planning-oracle-to-postgres-migration-integration-testing.md +45 -0
  135. package/skills/dev-playwright-generate-test.md +18 -0
  136. package/skills/dev-playwright.md +148 -0
  137. package/skills/dev-prompt-builder.md +142 -0
  138. package/skills/dev-pytest-coverage.md +29 -0
  139. package/skills/dev-python-manager-discovery.md +330 -0
  140. package/skills/dev-python-pypi-package-builder.md +445 -0
  141. package/skills/dev-readme-blueprint-generator.md +79 -0
  142. package/skills/dev-refactor-method-complexity-reduce.md +99 -0
  143. package/skills/dev-refactor-plan.md +66 -0
  144. package/skills/dev-refactor.md +646 -0
  145. package/skills/dev-review-and-refactor.md +16 -0
  146. package/skills/dev-reviewing-oracle-to-postgres-migration.md +68 -0
  147. package/skills/dev-ruff-recursive-fix.md +201 -0
  148. package/skills/dev-run-e2e-tests.md +126 -0
  149. package/skills/dev-run-pre-commit-checks.md +133 -0
  150. package/skills/dev-run-smoke-tests.md +127 -0
  151. package/skills/dev-scaffolding-oracle-to-postgres-migration-test-project.md +55 -0
  152. package/skills/dev-spring-boot-testing.md +190 -0
  153. package/skills/dev-sync-upstream.md +32 -0
  154. package/skills/dev-sync.md +74 -0
  155. package/skills/dev-tdd-workflow.md +23 -0
  156. package/skills/dev-terraform-azurerm-set-diff-analyzer.md +49 -0
  157. package/skills/dev-test-driven-development.md +372 -0
  158. package/skills/dev-test-gaps.md +18 -0
  159. package/skills/dev-test-triage.md +55 -0
  160. package/skills/dev-typer.md +267 -0
  161. package/skills/dev-typescript-setup.md +25 -0
  162. package/skills/dev-unified-diff-edit.md +16 -0
  163. package/skills/dev-unit-test-vue-pinia.md +198 -0
  164. package/skills/dev-using-git-worktrees.md +216 -0
  165. package/skills/dev-validation.md +99 -0
  166. package/skills/dev-verification.md +168 -0
  167. package/skills/dev-webapp-testing.md +134 -0
  168. package/skills/dev-write-coding-standards-from-file.md +317 -0
  169. package/skills/dev-write-tests.md +16 -0
  170. package/skills/devops-appinsights-instrumentation.md +49 -0
  171. package/skills/devops-az-cost-optimize.md +306 -0
  172. package/skills/devops-chronicle.md +154 -0
  173. package/skills/devops-deployments-cicd.md +331 -0
  174. package/skills/devops-devops-rollout-plan.md +118 -0
  175. package/skills/devops-geistdocs.md +276 -0
  176. package/skills/devops-observability.md +774 -0
  177. package/skills/devops-observe-metrics.md +35 -0
  178. package/skills/devops-observe-trace.md +30 -0
  179. package/skills/devops-phoenix-cli.md +163 -0
  180. package/skills/devops-phoenix-tracing.md +140 -0
  181. package/skills/devops-publish-to-pages.md +108 -0
  182. package/skills/devops-telemetry.md +87 -0
  183. package/skills/devops-update-avm-modules-in-bicep.md +61 -0
  184. package/skills/devops.md +81 -0
  185. package/skills/diagrams-canvas.md +204 -0
  186. package/skills/diagrams-draw-io-diagram-generator.md +463 -0
  187. package/skills/diagrams-excalidraw-diagram-generator.md +614 -0
  188. package/skills/diagrams-graphify.md +1277 -0
  189. package/skills/docs-bear-notes.md +108 -0
  190. package/skills/docs-create-llms.md +211 -0
  191. package/skills/docs-doc-gen.md +20 -0
  192. package/skills/docs-documentation-writer.md +46 -0
  193. package/skills/docs-llm-config.md +33 -0
  194. package/skills/docs-mkdocs-translations.md +109 -0
  195. package/skills/docs-obsidian-vault-maintainer.md +14 -0
  196. package/skills/docs-obsidian.md +82 -0
  197. package/skills/docs-prose.md +324 -0
  198. package/skills/docs-update-llms.md +217 -0
  199. package/skills/docs-update-markdown-file-index.md +77 -0
  200. package/skills/docs-wiki-maintainer.md +20 -0
  201. package/skills/documents.md +120 -0
  202. package/skills/email.md +113 -0
  203. package/skills/expenses.md +140 -0
  204. package/skills/file-ops.md +149 -0
  205. package/skills/files-convert-plaintext-to-md.md +363 -0
  206. package/skills/files-doc.md +81 -0
  207. package/skills/files-docx.md +594 -0
  208. package/skills/files-markdown-to-html.md +917 -0
  209. package/skills/files-nano-pdf.md +39 -0
  210. package/skills/files-pdf.md +315 -0
  211. package/skills/files-pdftk-server.md +163 -0
  212. package/skills/files-pptx-html-fidelity-audit.md +255 -0
  213. package/skills/files-pptx.md +231 -0
  214. package/skills/files-xlsx.md +301 -0
  215. package/skills/find-jobs.md +78 -0
  216. package/skills/format-conversion.md +157 -0
  217. package/skills/frontend-ai-elements.md +483 -0
  218. package/skills/frontend-ai-gateway.md +563 -0
  219. package/skills/frontend-ai-generation-persistence.md +242 -0
  220. package/skills/frontend-ai-sdk.md +799 -0
  221. package/skills/frontend-ai-visibility.md +127 -0
  222. package/skills/frontend-angular-developer.md +130 -0
  223. package/skills/frontend-aspnet-minimal-api-openapi.md +42 -0
  224. package/skills/frontend-bencium-innovative-ux-designer.md +719 -0
  225. package/skills/frontend-chat-sdk.md +666 -0
  226. package/skills/frontend-chrome-devtools.md +98 -0
  227. package/skills/frontend-frontend-app-builder.md +186 -0
  228. package/skills/frontend-frontend-design.md +43 -0
  229. package/skills/frontend-frontend-testing-debugging.md +143 -0
  230. package/skills/frontend-gsap-framer-scroll-animation.md +152 -0
  231. package/skills/frontend-internal-linking.md +109 -0
  232. package/skills/frontend-json-render.md +335 -0
  233. package/skills/frontend-keyword-clustering.md +118 -0
  234. package/skills/frontend-next-intl-add-language.md +20 -0
  235. package/skills/frontend-on-page-seo.md +112 -0
  236. package/skills/frontend-premium-frontend-ui.md +114 -0
  237. package/skills/frontend-react-best-practices.md +143 -0
  238. package/skills/frontend-schema-markup.md +160 -0
  239. package/skills/frontend-seo-audit.md +110 -0
  240. package/skills/frontend-swr.md +215 -0
  241. package/skills/frontend-technical-seo.md +162 -0
  242. package/skills/frontend-use-dom.md +418 -0
  243. package/skills/frontend-web-coder.md +564 -0
  244. package/skills/frontend-web-design-reviewer.md +369 -0
  245. package/skills/frontend-web-perf.md +202 -0
  246. package/skills/frontend.md +125 -0
  247. package/skills/general-adapter-standalone.md +199 -0
  248. package/skills/general-auth.md +356 -0
  249. package/skills/general-containerize-aspnetcore.md +393 -0
  250. package/skills/general-create-technical-spike.md +231 -0
  251. package/skills/general-cron-jobs.md +72 -0
  252. package/skills/general-ddd-aggregate.md +52 -0
  253. package/skills/general-ddd-context.md +46 -0
  254. package/skills/general-ddd-validate.md +51 -0
  255. package/skills/general-dependency-check.md +26 -0
  256. package/skills/general-email-marketing.md +86 -0
  257. package/skills/general-healthcheck.md +246 -0
  258. package/skills/general-import-infrastructure-as-code.md +368 -0
  259. package/skills/general-init.md +49 -0
  260. package/skills/general-java-junit.md +64 -0
  261. package/skills/general-java-springboot.md +66 -0
  262. package/skills/general-javascript-typescript-jest.md +45 -0
  263. package/skills/general-kotlin-springboot.md +71 -0
  264. package/skills/general-make-repo-contribution.md +91 -0
  265. package/skills/general-market-research.md +78 -0
  266. package/skills/general-marketplace.md +468 -0
  267. package/skills/general-model-recommendation.md +673 -0
  268. package/skills/general-payments.md +352 -0
  269. package/skills/general-quality-playbook.md +480 -0
  270. package/skills/general-run-integration-tests.md +113 -0
  271. package/skills/general-superjson.md +274 -0
  272. package/skills/general-swiftpm-macos.md +51 -0
  273. package/skills/general-threat-model.md +61 -0
  274. package/skills/invoices.md +167 -0
  275. package/skills/licenses.md +159 -0
  276. package/skills/logs.md +156 -0
  277. package/skills/marketing.md +139 -0
  278. package/skills/media-image-manipulation-image-magick.md +253 -0
  279. package/skills/media-imagegen.md +357 -0
  280. package/skills/media-openai-whisper-api.md +63 -0
  281. package/skills/media-openai-whisper.md +39 -0
  282. package/skills/media-peekaboo.md +191 -0
  283. package/skills/media-screenshot.md +268 -0
  284. package/skills/media-speech.md +145 -0
  285. package/skills/media-transcribe.md +82 -0
  286. package/skills/media-video-frames.md +47 -0
  287. package/skills/mobile-android-emulator-qa.md +81 -0
  288. package/skills/mobile-android-performance.md +280 -0
  289. package/skills/mobile-building-mcp-server-on-cloudflare.md +267 -0
  290. package/skills/mobile-building-native-ui.md +322 -0
  291. package/skills/mobile-expo-api-routes.md +369 -0
  292. package/skills/mobile-expo-cicd-workflows.md +92 -0
  293. package/skills/mobile-expo-deployment.md +191 -0
  294. package/skills/mobile-expo-dev-client.md +165 -0
  295. package/skills/mobile-expo-module.md +177 -0
  296. package/skills/mobile-expo-tailwind-setup.md +481 -0
  297. package/skills/mobile-expo-ui-jetpack-compose.md +41 -0
  298. package/skills/mobile-expo-ui-swift-ui.md +40 -0
  299. package/skills/mobile-ios-app-intents.md +78 -0
  300. package/skills/mobile-ios-debugger-agent.md +52 -0
  301. package/skills/mobile-ios-ettrace-performance.md +198 -0
  302. package/skills/mobile-ios-memgraph-leaks.md +77 -0
  303. package/skills/mobile-native-data-fetching.md +508 -0
  304. package/skills/mobile-packaging-notarization.md +48 -0
  305. package/skills/mobile-react-native-architecture.md +672 -0
  306. package/skills/mobile-react-native-mobile-design.md +438 -0
  307. package/skills/mobile-signing-entitlements.md +59 -0
  308. package/skills/mobile-swiftui-liquid-glass.md +91 -0
  309. package/skills/mobile-swiftui-patterns.md +210 -0
  310. package/skills/mobile-swiftui-performance-audit.md +108 -0
  311. package/skills/mobile-swiftui-ui-patterns.md +97 -0
  312. package/skills/mobile-swiftui-view-refactor.md +204 -0
  313. package/skills/mobile-upgrading-expo.md +134 -0
  314. package/skills/mobile.md +183 -0
  315. package/skills/notes.md +106 -0
  316. package/skills/planning-adr-create.md +62 -0
  317. package/skills/planning-adr-index.md +67 -0
  318. package/skills/planning-architecture-blueprint-generator.md +323 -0
  319. package/skills/planning-brainstorming.md +165 -0
  320. package/skills/planning-breakdown-epic-arch.md +67 -0
  321. package/skills/planning-breakdown-epic-pm.md +59 -0
  322. package/skills/planning-breakdown-feature-implementation.md +129 -0
  323. package/skills/planning-breakdown-feature-prd.md +62 -0
  324. package/skills/planning-breakdown-plan.md +510 -0
  325. package/skills/planning-breakdown-test.md +366 -0
  326. package/skills/planning-cloud-design-patterns.md +63 -0
  327. package/skills/planning-content-brief.md +128 -0
  328. package/skills/planning-content-strategy.md +138 -0
  329. package/skills/planning-content-translation.md +143 -0
  330. package/skills/planning-create-github-action-workflow-specification.md +277 -0
  331. package/skills/planning-create-github-issues-feature-from-implementation-plan.md +29 -0
  332. package/skills/planning-create-github-issues-for-unmet-specification-requirements.md +36 -0
  333. package/skills/planning-create-github-pull-request-from-specification.md +25 -0
  334. package/skills/planning-create-implementation-plan.md +158 -0
  335. package/skills/planning-create-specification.md +128 -0
  336. package/skills/planning-first-ask.md +31 -0
  337. package/skills/planning-folder-structure-blueprint-generator.md +406 -0
  338. package/skills/planning-gen-specs-as-issues.md +166 -0
  339. package/skills/planning-generate-snapshot.md +144 -0
  340. package/skills/planning-generate-status-report.md +336 -0
  341. package/skills/planning-metric-pack-designer.md +27 -0
  342. package/skills/planning-pm-spec.md +53 -0
  343. package/skills/planning-prd.md +144 -0
  344. package/skills/planning-project-assessment.md +182 -0
  345. package/skills/planning-project-setup-info-local.md +128 -0
  346. package/skills/planning-project-workflow-analysis-blueprint-generator.md +294 -0
  347. package/skills/planning-service-oriented-architecture.md +248 -0
  348. package/skills/planning-spec-to-backlog.md +544 -0
  349. package/skills/planning-technology-stack-blueprint-generator.md +243 -0
  350. package/skills/planning-update-implementation-plan.md +158 -0
  351. package/skills/planning-update-specification.md +128 -0
  352. package/skills/planning-what-context-needed.md +40 -0
  353. package/skills/planning-writing-plans.md +153 -0
  354. package/skills/prepare-application.md +81 -0
  355. package/skills/productivity-apple-notes.md +78 -0
  356. package/skills/productivity-apple-reminders.md +119 -0
  357. package/skills/productivity-capture-tasks-from-meeting-notes.md +680 -0
  358. package/skills/productivity-daily-prep.md +156 -0
  359. package/skills/productivity-email-drafter.md +101 -0
  360. package/skills/productivity-hr-onboarding.md +53 -0
  361. package/skills/productivity-things-mac.md +87 -0
  362. package/skills/productivity-update.md +169 -0
  363. package/skills/reminders.md +109 -0
  364. package/skills/research-dossier-collect.md +71 -0
  365. package/skills/research-kg-extract.md +37 -0
  366. package/skills/research-openai-docs.md +89 -0
  367. package/skills/research-research-add-items.md +31 -0
  368. package/skills/research-research-report.md +94 -0
  369. package/skills/research-research-synthesize.md +63 -0
  370. package/skills/research-summarize.md +88 -0
  371. package/skills/research-transformers-js.md +635 -0
  372. package/skills/research.md +119 -0
  373. package/skills/security-ai-prompt-engineering-safety-review.md +231 -0
  374. package/skills/security-attack-path-analysis.md +182 -0
  375. package/skills/security-gdpr-compliant.md +284 -0
  376. package/skills/security-mcp-security-audit.md +279 -0
  377. package/skills/security-pii-detect.md +31 -0
  378. package/skills/security-secret-scanning.md +243 -0
  379. package/skills/security-security-best-practices.md +87 -0
  380. package/skills/security-security-ownership-map.md +207 -0
  381. package/skills/security-security-review.md +169 -0
  382. package/skills/security-security-scan.md +138 -0
  383. package/skills/security-security-threat-model.md +82 -0
  384. package/skills/security-threat-model-analyst.md +76 -0
  385. package/skills/sysmon.md +181 -0
  386. package/skills/system-arch-linux-triage.md +32 -0
  387. package/skills/system-centos-linux-triage.md +32 -0
  388. package/skills/system-debian-linux-triage.md +32 -0
  389. package/skills/system-fedora-linux-triage.md +32 -0
  390. package/skills/system-geofeed-tuner.md +865 -0
  391. package/skills/system-iot-anomalies.md +15 -0
  392. package/skills/system-iot-firmware.md +16 -0
  393. package/skills/system-iot-fleet.md +14 -0
  394. package/skills/system-iot-register.md +19 -0
  395. package/skills/system-iot-witness-verify.md +15 -0
  396. package/skills/system-tmux.md +171 -0
  397. package/skills/system-window-management.md +228 -0
  398. package/skills/task-management.md +90 -0
  399. package/skills/tasks.md +102 -0
  400. package/skills/test-coverage.md +188 -0
  401. package/skills/ux-ui.md +128 -0
  402. package/skills/web.md +186 -0
  403. package/skills/workflow-act-on-feedback.md +15 -0
  404. package/skills/workflow-automate-this.md +245 -0
  405. package/skills/workflow-autoresearch.md +276 -0
  406. package/skills/workflow-coding-agent.md +317 -0
  407. package/skills/workflow-deep-research.md +44 -0
  408. package/skills/workflow-dispatching-parallel-agents.md +183 -0
  409. package/skills/workflow-eval-driven-dev.md +148 -0
  410. package/skills/workflow-executing-plans.md +71 -0
  411. package/skills/workflow-mentoring-juniors.md +311 -0
  412. package/skills/workflow-receiving-code-review.md +214 -0
  413. package/skills/workflow-repo-story-time.md +155 -0
  414. package/skills/workflow-requesting-code-review.md +104 -0
  415. package/skills/workflow-session-report.md +43 -0
  416. package/skills/workflow-structured-autonomy-generate.md +126 -0
  417. package/skills/workflow-subagent-driven-development.md +280 -0
  418. package/skills/writing.md +106 -0
  419. package/src/agent.js +0 -0
  420. package/src/browser.js +297 -0
  421. package/src/cli.js +25 -4
  422. package/src/code-reviewer.js +119 -0
  423. package/src/completions.js +1 -1
  424. package/src/control.js +222 -30
  425. package/src/coordinator.js +303 -0
  426. package/src/correction.js +29 -8
  427. package/src/edit-tracker.js +21 -0
  428. package/src/edit-viewer.js +414 -0
  429. package/src/endpoints.js +64 -15
  430. package/src/index.js +45 -11
  431. package/src/llm.js +86 -2
  432. package/src/mcp-client.js +416 -0
  433. package/src/memory.js +182 -0
  434. package/src/planner.js +216 -0
  435. package/src/rules.js +90 -0
  436. package/src/self-commands.js +757 -0
  437. package/src/services/voice.js +10 -7
  438. package/src/session-search.js +427 -0
  439. package/src/session.js +487 -99
  440. package/src/shmakk-server.js +91 -0
  441. package/src/skills.js +410 -3
  442. package/src/subagent.js +4 -1
  443. package/src/system-prompt.js +13 -5
  444. package/src/task-file.js +114 -0
  445. package/src/taskClassifier.js +246 -0
  446. package/src/team.js +752 -0
  447. package/src/tools.js +142 -21
  448. package/src/web.js +35 -5
  449. package/src/workflows.js +261 -0
  450. package/src/workspace-index.js +25 -6
@@ -0,0 +1,98 @@
1
+ ---
2
+ name: create-architectural-decision-record
3
+ description: 'Create an Architectural Decision Record (ADR) document for AI-optimized decision documentation.'
4
+ category: dev
5
+ ---
6
+
7
+ # Create Architectural Decision Record
8
+
9
+ Create an ADR document for `${input:DecisionTitle}` using structured formatting optimized for AI consumption and human readability.
10
+
11
+ ## Inputs
12
+
13
+ - **Context**: `${input:Context}`
14
+ - **Decision**: `${input:Decision}`
15
+ - **Alternatives**: `${input:Alternatives}`
16
+ - **Stakeholders**: `${input:Stakeholders}`
17
+
18
+ ## Input Validation
19
+ If any of the required inputs are not provided or cannot be determined from the conversation history, ask the user to provide the missing information before proceeding with ADR generation.
20
+
21
+ ## Requirements
22
+
23
+ - Use precise, unambiguous language
24
+ - Follow standardized ADR format with front matter
25
+ - Include both positive and negative consequences
26
+ - Document alternatives with rejection rationale
27
+ - Structure for machine parsing and human reference
28
+ - Use coded bullet points (3-4 letter codes + 3-digit numbers) for multi-item sections
29
+
30
+ The ADR must be saved in the `/docs/adr/` directory using the naming convention: `adr-NNNN-[title-slug].md`, where NNNN is the next sequential 4-digit number (e.g., `adr-0001-database-selection.md`).
31
+
32
+ ## Required Documentation Structure
33
+
34
+ The documentation file must follow the template below, ensuring that all sections are filled out appropriately. The front matter for the markdown should be structured correctly as per the example following:
35
+
36
+ ```md
37
+ ---
38
+ title: "ADR-NNNN: [Decision Title]"
39
+ status: "Proposed"
40
+ date: "YYYY-MM-DD"
41
+ authors: "[Stakeholder Names/Roles]"
42
+ tags: ["architecture", "decision"]
43
+ supersedes: ""
44
+ superseded_by: ""
45
+ ---
46
+
47
+ # ADR-NNNN: [Decision Title]
48
+
49
+ ## Status
50
+
51
+ **Proposed** | Accepted | Rejected | Superseded | Deprecated
52
+
53
+ ## Context
54
+
55
+ [Problem statement, technical constraints, business requirements, and environmental factors requiring this decision.]
56
+
57
+ ## Decision
58
+
59
+ [Chosen solution with clear rationale for selection.]
60
+
61
+ ## Consequences
62
+
63
+ ### Positive
64
+
65
+ - **POS-001**: [Beneficial outcomes and advantages]
66
+ - **POS-002**: [Performance, maintainability, scalability improvements]
67
+ - **POS-003**: [Alignment with architectural principles]
68
+
69
+ ### Negative
70
+
71
+ - **NEG-001**: [Trade-offs, limitations, drawbacks]
72
+ - **NEG-002**: [Technical debt or complexity introduced]
73
+ - **NEG-003**: [Risks and future challenges]
74
+
75
+ ## Alternatives Considered
76
+
77
+ ### [Alternative 1 Name]
78
+
79
+ - **ALT-001**: **Description**: [Brief technical description]
80
+ - **ALT-002**: **Rejection Reason**: [Why this option was not selected]
81
+
82
+ ### [Alternative 2 Name]
83
+
84
+ - **ALT-003**: **Description**: [Brief technical description]
85
+ - **ALT-004**: **Rejection Reason**: [Why this option was not selected]
86
+
87
+ ## Implementation Notes
88
+
89
+ - **IMP-001**: [Key implementation considerations]
90
+ - **IMP-002**: [Migration or rollout strategy if applicable]
91
+ - **IMP-003**: [Monitoring and success criteria]
92
+
93
+ ## References
94
+
95
+ - **REF-001**: [Related ADRs]
96
+ - **REF-002**: [External documentation]
97
+ - **REF-003**: [Standards or frameworks referenced]
98
+ ```
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: create-draft-pr
3
+ description: Create a draft pull request for the current session. Use when the user wants to open a draft PR with the session's changes.
4
+ category: dev
5
+ ---
6
+ <!-- Customize this skill and select save to override its behavior. Delete that copy to restore the built-in behavior. -->
7
+
8
+ # Create Draft Pull Request
9
+
10
+ Use the GitHub MCP server to create a draft pull request — do NOT use the `gh` CLI.
11
+
12
+ 1. Run the compile and hygiene tasks (fixing any errors)
13
+ 2. If there are any uncommitted changes, use the `/commit` skill to commit them
14
+ 3. Review all changes in the current session
15
+ 4. Write a clear, concise PR title with a short area prefix (e.g. "sessions: …", "editor: …")
16
+ 5. Write a description covering what changed, why, and anything reviewers should know
17
+ 6. Create the draft pull request
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: create-pr
3
+ description: Create a pull request for the current session. Use when the user wants to open a PR with the session's changes.
4
+ category: dev
5
+ ---
6
+ <!-- Customize this skill and select save to override its behavior. Delete that copy to restore the built-in behavior. -->
7
+
8
+ # Create Pull Request
9
+
10
+ Use the GitHub MCP server to create a pull request — do NOT use the `gh` CLI.
11
+
12
+ 1. Run the compile and hygiene tasks (fixing any errors)
13
+ 2. If there are any uncommitted changes, use the `/commit` skill to commit them
14
+ 3. Review all changes in the current session
15
+ 4. Write a clear, concise PR title with a short area prefix (e.g. "sessions: …", "editor: …")
16
+ 5. Write a description covering what changed, why, and anything reviewers should know
17
+ 6. Create the pull request
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: create-readme
3
+ description: 'Create a README.md file for the project'
4
+ category: dev
5
+ ---
6
+
7
+ ## Role
8
+
9
+ You're a senior expert software engineer with extensive experience in open source projects. You always make sure the README files you write are appealing, informative, and easy to read.
10
+
11
+ ## Task
12
+
13
+ 1. Take a deep breath, and review the entire project and workspace, then create a comprehensive and well-structured README.md file for the project.
14
+ 2. Take inspiration from these readme files for the structure, tone and content:
15
+ - https://raw.githubusercontent.com/Azure-Samples/serverless-chat-langchainjs/refs/heads/main/README.md
16
+ - https://raw.githubusercontent.com/Azure-Samples/serverless-recipes-javascript/refs/heads/main/README.md
17
+ - https://raw.githubusercontent.com/sinedied/run-on-output/refs/heads/main/README.md
18
+ - https://raw.githubusercontent.com/sinedied/smoke/refs/heads/main/README.md
19
+ 3. Do not overuse emojis, and keep the readme concise and to the point.
20
+ 4. Do not include sections like "LICENSE", "CONTRIBUTING", "CHANGELOG", etc. There are dedicated files for those sections.
21
+ 5. Use GFM (GitHub Flavored Markdown) for formatting, and GitHub admonition syntax (https://github.com/orgs/community/discussions/16925) where appropriate.
22
+ 6. If you find a logo or icon for the project, use it in the readme's header.
@@ -0,0 +1,479 @@
1
+ ---
2
+ name: csharp-mstest
3
+ description: 'Get best practices for MSTest 3.x/4.x unit testing, including modern assertion APIs and data-driven tests'
4
+ category: dev
5
+ ---
6
+
7
+ # MSTest Best Practices (MSTest 3.x/4.x)
8
+
9
+ Your goal is to help me write effective unit tests with modern MSTest, using current APIs and best practices.
10
+
11
+ ## Project Setup
12
+
13
+ - Use a separate test project with naming convention `[ProjectName].Tests`
14
+ - Reference MSTest 3.x+ NuGet packages (includes analyzers)
15
+ - Consider using MSTest.Sdk for simplified project setup
16
+ - Run tests with `dotnet test`
17
+
18
+ ## Test Class Structure
19
+
20
+ - Use `[TestClass]` attribute for test classes
21
+ - **Seal test classes by default** for performance and design clarity
22
+ - Use `[TestMethod]` for test methods (prefer over `[DataTestMethod]`)
23
+ - Follow Arrange-Act-Assert (AAA) pattern
24
+ - Name tests using pattern `MethodName_Scenario_ExpectedBehavior`
25
+
26
+ ```csharp
27
+ [TestClass]
28
+ public sealed class CalculatorTests
29
+ {
30
+ [TestMethod]
31
+ public void Add_TwoPositiveNumbers_ReturnsSum()
32
+ {
33
+ // Arrange
34
+ var calculator = new Calculator();
35
+
36
+ // Act
37
+ var result = calculator.Add(2, 3);
38
+
39
+ // Assert
40
+ Assert.AreEqual(5, result);
41
+ }
42
+ }
43
+ ```
44
+
45
+ ## Test Lifecycle
46
+
47
+ - **Prefer constructors over `[TestInitialize]`** - enables `readonly` fields and follows standard C# patterns
48
+ - Use `[TestCleanup]` for cleanup that must run even if test fails
49
+ - Combine constructor with async `[TestInitialize]` when async setup is needed
50
+
51
+ ```csharp
52
+ [TestClass]
53
+ public sealed class ServiceTests
54
+ {
55
+ private readonly MyService _service; // readonly enabled by constructor
56
+
57
+ public ServiceTests()
58
+ {
59
+ _service = new MyService();
60
+ }
61
+
62
+ [TestInitialize]
63
+ public async Task InitAsync()
64
+ {
65
+ // Use for async initialization only
66
+ await _service.WarmupAsync();
67
+ }
68
+
69
+ [TestCleanup]
70
+ public void Cleanup() => _service.Reset();
71
+ }
72
+ ```
73
+
74
+ ### Execution Order
75
+
76
+ 1. **Assembly Initialization** - `[AssemblyInitialize]` (once per test assembly)
77
+ 2. **Class Initialization** - `[ClassInitialize]` (once per test class)
78
+ 3. **Test Initialization** (for every test method):
79
+ 1. Constructor
80
+ 2. Set `TestContext` property
81
+ 3. `[TestInitialize]`
82
+ 4. **Test Execution** - test method runs
83
+ 5. **Test Cleanup** (for every test method):
84
+ 1. `[TestCleanup]`
85
+ 2. `DisposeAsync` (if implemented)
86
+ 3. `Dispose` (if implemented)
87
+ 6. **Class Cleanup** - `[ClassCleanup]` (once per test class)
88
+ 7. **Assembly Cleanup** - `[AssemblyCleanup]` (once per test assembly)
89
+
90
+ ## Modern Assertion APIs
91
+
92
+ MSTest provides three assertion classes: `Assert`, `StringAssert`, and `CollectionAssert`.
93
+
94
+ ### Assert Class - Core Assertions
95
+
96
+ ```csharp
97
+ // Equality
98
+ Assert.AreEqual(expected, actual);
99
+ Assert.AreNotEqual(notExpected, actual);
100
+ Assert.AreSame(expectedObject, actualObject); // Reference equality
101
+ Assert.AreNotSame(notExpectedObject, actualObject);
102
+
103
+ // Null checks
104
+ Assert.IsNull(value);
105
+ Assert.IsNotNull(value);
106
+
107
+ // Boolean
108
+ Assert.IsTrue(condition);
109
+ Assert.IsFalse(condition);
110
+
111
+ // Fail/Inconclusive
112
+ Assert.Fail("Test failed due to...");
113
+ Assert.Inconclusive("Test cannot be completed because...");
114
+ ```
115
+
116
+ ### Exception Testing (Prefer over `[ExpectedException]`)
117
+
118
+ ```csharp
119
+ // Assert.Throws - matches TException or derived types
120
+ var ex = Assert.Throws<ArgumentException>(() => Method(null));
121
+ Assert.AreEqual("Value cannot be null.", ex.Message);
122
+
123
+ // Assert.ThrowsExactly - matches exact type only
124
+ var ex = Assert.ThrowsExactly<InvalidOperationException>(() => Method());
125
+
126
+ // Async versions
127
+ var ex = await Assert.ThrowsAsync<HttpRequestException>(async () => await client.GetAsync(url));
128
+ var ex = await Assert.ThrowsExactlyAsync<InvalidOperationException>(async () => await Method());
129
+ ```
130
+
131
+ ### Collection Assertions (Assert class)
132
+
133
+ ```csharp
134
+ Assert.Contains(expectedItem, collection);
135
+ Assert.DoesNotContain(unexpectedItem, collection);
136
+ Assert.ContainsSingle(collection); // exactly one element
137
+ Assert.HasCount(5, collection);
138
+ Assert.IsEmpty(collection);
139
+ Assert.IsNotEmpty(collection);
140
+ ```
141
+
142
+ ### String Assertions (Assert class)
143
+
144
+ ```csharp
145
+ Assert.Contains("expected", actualString);
146
+ Assert.StartsWith("prefix", actualString);
147
+ Assert.EndsWith("suffix", actualString);
148
+ Assert.DoesNotStartWith("prefix", actualString);
149
+ Assert.DoesNotEndWith("suffix", actualString);
150
+ Assert.MatchesRegex(@"\d{3}-\d{4}", phoneNumber);
151
+ Assert.DoesNotMatchRegex(@"\d+", textOnly);
152
+ ```
153
+
154
+ ### Comparison Assertions
155
+
156
+ ```csharp
157
+ Assert.IsGreaterThan(lowerBound, actual);
158
+ Assert.IsGreaterThanOrEqualTo(lowerBound, actual);
159
+ Assert.IsLessThan(upperBound, actual);
160
+ Assert.IsLessThanOrEqualTo(upperBound, actual);
161
+ Assert.IsInRange(actual, low, high);
162
+ Assert.IsPositive(number);
163
+ Assert.IsNegative(number);
164
+ ```
165
+
166
+ ### Type Assertions
167
+
168
+ ```csharp
169
+ // MSTest 3.x - uses out parameter
170
+ Assert.IsInstanceOfType<MyClass>(obj, out var typed);
171
+ typed.DoSomething();
172
+
173
+ // MSTest 4.x - returns typed result directly
174
+ var typed = Assert.IsInstanceOfType<MyClass>(obj);
175
+ typed.DoSomething();
176
+
177
+ Assert.IsNotInstanceOfType<WrongType>(obj);
178
+ ```
179
+
180
+ ### Assert.That (MSTest 4.0+)
181
+
182
+ ```csharp
183
+ Assert.That(result.Count > 0); // Auto-captures expression in failure message
184
+ ```
185
+
186
+ ### StringAssert Class
187
+
188
+ > **Note:** Prefer `Assert` class equivalents when available (e.g., `Assert.Contains("expected", actual)` over `StringAssert.Contains(actual, "expected")`).
189
+
190
+ ```csharp
191
+ StringAssert.Contains(actualString, "expected");
192
+ StringAssert.StartsWith(actualString, "prefix");
193
+ StringAssert.EndsWith(actualString, "suffix");
194
+ StringAssert.Matches(actualString, new Regex(@"\d{3}-\d{4}"));
195
+ StringAssert.DoesNotMatch(actualString, new Regex(@"\d+"));
196
+ ```
197
+
198
+ ### CollectionAssert Class
199
+
200
+ > **Note:** Prefer `Assert` class equivalents when available (e.g., `Assert.Contains`).
201
+
202
+ ```csharp
203
+ // Containment
204
+ CollectionAssert.Contains(collection, expectedItem);
205
+ CollectionAssert.DoesNotContain(collection, unexpectedItem);
206
+
207
+ // Equality (same elements, same order)
208
+ CollectionAssert.AreEqual(expectedCollection, actualCollection);
209
+ CollectionAssert.AreNotEqual(unexpectedCollection, actualCollection);
210
+
211
+ // Equivalence (same elements, any order)
212
+ CollectionAssert.AreEquivalent(expectedCollection, actualCollection);
213
+ CollectionAssert.AreNotEquivalent(unexpectedCollection, actualCollection);
214
+
215
+ // Subset checks
216
+ CollectionAssert.IsSubsetOf(subset, superset);
217
+ CollectionAssert.IsNotSubsetOf(notSubset, collection);
218
+
219
+ // Element validation
220
+ CollectionAssert.AllItemsAreInstancesOfType(collection, typeof(MyClass));
221
+ CollectionAssert.AllItemsAreNotNull(collection);
222
+ CollectionAssert.AllItemsAreUnique(collection);
223
+ ```
224
+
225
+ ## Data-Driven Tests
226
+
227
+ ### DataRow
228
+
229
+ ```csharp
230
+ [TestMethod]
231
+ [DataRow(1, 2, 3)]
232
+ [DataRow(0, 0, 0, DisplayName = "Zeros")]
233
+ [DataRow(-1, 1, 0, IgnoreMessage = "Known issue #123")] // MSTest 3.8+
234
+ public void Add_ReturnsSum(int a, int b, int expected)
235
+ {
236
+ Assert.AreEqual(expected, Calculator.Add(a, b));
237
+ }
238
+ ```
239
+
240
+ ### DynamicData
241
+
242
+ The data source can return any of the following types:
243
+
244
+ - `IEnumerable<(T1, T2, ...)>` (ValueTuple) - **preferred**, provides type safety (MSTest 3.7+)
245
+ - `IEnumerable<Tuple<T1, T2, ...>>` - provides type safety
246
+ - `IEnumerable<TestDataRow>` - provides type safety plus control over test metadata (display name, categories)
247
+ - `IEnumerable<object[]>` - **least preferred**, no type safety
248
+
249
+ > **Note:** When creating new test data methods, prefer `ValueTuple` or `TestDataRow` over `IEnumerable<object[]>`. The `object[]` approach provides no compile-time type checking and can lead to runtime errors from type mismatches.
250
+
251
+ ```csharp
252
+ [TestMethod]
253
+ [DynamicData(nameof(TestData))]
254
+ public void DynamicTest(int a, int b, int expected)
255
+ {
256
+ Assert.AreEqual(expected, Calculator.Add(a, b));
257
+ }
258
+
259
+ // ValueTuple - preferred (MSTest 3.7+)
260
+ public static IEnumerable<(int a, int b, int expected)> TestData =>
261
+ [
262
+ (1, 2, 3),
263
+ (0, 0, 0),
264
+ ];
265
+
266
+ // TestDataRow - when you need custom display names or metadata
267
+ public static IEnumerable<TestDataRow<(int a, int b, int expected)>> TestDataWithMetadata =>
268
+ [
269
+ new((1, 2, 3)) { DisplayName = "Positive numbers" },
270
+ new((0, 0, 0)) { DisplayName = "Zeros" },
271
+ new((-1, 1, 0)) { DisplayName = "Mixed signs", IgnoreMessage = "Known issue #123" },
272
+ ];
273
+
274
+ // IEnumerable<object[]> - avoid for new code (no type safety)
275
+ public static IEnumerable<object[]> LegacyTestData =>
276
+ [
277
+ [1, 2, 3],
278
+ [0, 0, 0],
279
+ ];
280
+ ```
281
+
282
+ ## TestContext
283
+
284
+ The `TestContext` class provides test run information, cancellation support, and output methods.
285
+ See [TestContext documentation](https://learn.microsoft.com/dotnet/core/testing/unit-testing-mstest-writing-tests-testcontext) for complete reference.
286
+
287
+ ### Accessing TestContext
288
+
289
+ ```csharp
290
+ // Property (MSTest suppresses CS8618 - don't use nullable or = null!)
291
+ public TestContext TestContext { get; set; }
292
+
293
+ // Constructor injection (MSTest 3.6+) - preferred for immutability
294
+ [TestClass]
295
+ public sealed class MyTests
296
+ {
297
+ private readonly TestContext _testContext;
298
+
299
+ public MyTests(TestContext testContext)
300
+ {
301
+ _testContext = testContext;
302
+ }
303
+ }
304
+
305
+ // Static methods receive it as parameter
306
+ [ClassInitialize]
307
+ public static void ClassInit(TestContext context) { }
308
+
309
+ // Optional for cleanup methods (MSTest 3.6+)
310
+ [ClassCleanup]
311
+ public static void ClassCleanup(TestContext context) { }
312
+
313
+ [AssemblyCleanup]
314
+ public static void AssemblyCleanup(TestContext context) { }
315
+ ```
316
+
317
+ ### Cancellation Token
318
+
319
+ Always use `TestContext.CancellationToken` for cooperative cancellation with `[Timeout]`:
320
+
321
+ ```csharp
322
+ [TestMethod]
323
+ [Timeout(5000)]
324
+ public async Task LongRunningTest()
325
+ {
326
+ await _httpClient.GetAsync(url, TestContext.CancellationToken);
327
+ }
328
+ ```
329
+
330
+ ### Test Run Properties
331
+
332
+ ```csharp
333
+ TestContext.TestName // Current test method name
334
+ TestContext.TestDisplayName // Display name (3.7+)
335
+ TestContext.CurrentTestOutcome // Pass/Fail/InProgress
336
+ TestContext.TestData // Parameterized test data (3.7+, in TestInitialize/Cleanup)
337
+ TestContext.TestException // Exception if test failed (3.7+, in TestCleanup)
338
+ TestContext.DeploymentDirectory // Directory with deployment items
339
+ ```
340
+
341
+ ### Output and Result Files
342
+
343
+ ```csharp
344
+ // Write to test output (useful for debugging)
345
+ TestContext.WriteLine("Processing item {0}", itemId);
346
+
347
+ // Attach files to test results (logs, screenshots)
348
+ TestContext.AddResultFile(screenshotPath);
349
+
350
+ // Store/retrieve data across test methods
351
+ TestContext.Properties["SharedKey"] = computedValue;
352
+ ```
353
+
354
+ ## Advanced Features
355
+
356
+ ### Retry for Flaky Tests (MSTest 3.9+)
357
+
358
+ ```csharp
359
+ [TestMethod]
360
+ [Retry(3)]
361
+ public void FlakyTest() { }
362
+ ```
363
+
364
+ ### Conditional Execution (MSTest 3.10+)
365
+
366
+ Skip or run tests based on OS or CI environment:
367
+
368
+ ```csharp
369
+ // OS-specific tests
370
+ [TestMethod]
371
+ [OSCondition(OperatingSystems.Windows)]
372
+ public void WindowsOnlyTest() { }
373
+
374
+ [TestMethod]
375
+ [OSCondition(OperatingSystems.Linux | OperatingSystems.MacOS)]
376
+ public void UnixOnlyTest() { }
377
+
378
+ [TestMethod]
379
+ [OSCondition(ConditionMode.Exclude, OperatingSystems.Windows)]
380
+ public void SkipOnWindowsTest() { }
381
+
382
+ // CI environment tests
383
+ [TestMethod]
384
+ [CICondition] // Runs only in CI (default: ConditionMode.Include)
385
+ public void CIOnlyTest() { }
386
+
387
+ [TestMethod]
388
+ [CICondition(ConditionMode.Exclude)] // Skips in CI, runs locally
389
+ public void LocalOnlyTest() { }
390
+ ```
391
+
392
+ ### Parallelization
393
+
394
+ ```csharp
395
+ // Assembly level
396
+ [assembly: Parallelize(Workers = 4, Scope = ExecutionScope.MethodLevel)]
397
+
398
+ // Disable for specific class
399
+ [TestClass]
400
+ [DoNotParallelize]
401
+ public sealed class SequentialTests { }
402
+ ```
403
+
404
+ ### Work Item Traceability (MSTest 3.8+)
405
+
406
+ Link tests to work items for traceability in test reports:
407
+
408
+ ```csharp
409
+ // Azure DevOps work items
410
+ [TestMethod]
411
+ [WorkItem(12345)] // Links to work item #12345
412
+ public void Feature_Scenario_ExpectedBehavior() { }
413
+
414
+ // Multiple work items
415
+ [TestMethod]
416
+ [WorkItem(12345)]
417
+ [WorkItem(67890)]
418
+ public void Feature_CoversMultipleRequirements() { }
419
+
420
+ // GitHub issues (MSTest 3.8+)
421
+ [TestMethod]
422
+ [GitHubWorkItem("https://github.com/owner/repo/issues/42")]
423
+ public void BugFix_Issue42_IsResolved() { }
424
+ ```
425
+
426
+ Work item associations appear in test results and can be used for:
427
+ - Tracing test coverage to requirements
428
+ - Linking bug fixes to regression tests
429
+ - Generating traceability reports in CI/CD pipelines
430
+
431
+ ## Common Mistakes to Avoid
432
+
433
+ ```csharp
434
+ // ❌ Wrong argument order
435
+ Assert.AreEqual(actual, expected);
436
+ // ✅ Correct
437
+ Assert.AreEqual(expected, actual);
438
+
439
+ // ❌ Using ExpectedException (obsolete)
440
+ [ExpectedException(typeof(ArgumentException))]
441
+ // ✅ Use Assert.Throws
442
+ Assert.Throws<ArgumentException>(() => Method());
443
+
444
+ // ❌ Using LINQ Single() - unclear exception
445
+ var item = items.Single();
446
+ // ✅ Use ContainsSingle - better failure message
447
+ var item = Assert.ContainsSingle(items);
448
+
449
+ // ❌ Hard cast - unclear exception
450
+ var handler = (MyHandler)result;
451
+ // ✅ Type assertion - shows actual type on failure
452
+ var handler = Assert.IsInstanceOfType<MyHandler>(result);
453
+
454
+ // ❌ Ignoring cancellation token
455
+ await client.GetAsync(url, CancellationToken.None);
456
+ // ✅ Flow test cancellation
457
+ await client.GetAsync(url, TestContext.CancellationToken);
458
+
459
+ // ❌ Making TestContext nullable - leads to unnecessary null checks
460
+ public TestContext? TestContext { get; set; }
461
+ // ❌ Using null! - MSTest already suppresses CS8618 for this property
462
+ public TestContext TestContext { get; set; } = null!;
463
+ // ✅ Declare without nullable or initializer - MSTest handles the warning
464
+ public TestContext TestContext { get; set; }
465
+ ```
466
+
467
+ ## Test Organization
468
+
469
+ - Group tests by feature or component
470
+ - Use `[TestCategory("Category")]` for filtering
471
+ - Use `[TestProperty("Name", "Value")]` for custom metadata (e.g., `[TestProperty("Bug", "12345")]`)
472
+ - Use `[Priority(1)]` for critical tests
473
+ - Enable relevant MSTest analyzers (MSTEST0020 for constructor preference)
474
+
475
+ ## Mocking and Isolation
476
+
477
+ - Use Moq or NSubstitute for mocking dependencies
478
+ - Use interfaces to facilitate mocking
479
+ - Mock dependencies to isolate units under test