cfsa-antigravity 1.0.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 (378) hide show
  1. package/bin/cli.mjs +324 -0
  2. package/package.json +34 -0
  3. package/template/.agent/instructions/commands.md +48 -0
  4. package/template/.agent/instructions/patterns.md +61 -0
  5. package/template/.agent/instructions/structure.md +29 -0
  6. package/template/.agent/instructions/tech-stack.md +43 -0
  7. package/template/.agent/instructions/workflow.md +41 -0
  8. package/template/.agent/kit-sync.md +15 -0
  9. package/template/.agent/rules/boundary-not-placeholder.md +146 -0
  10. package/template/.agent/rules/completion-checklist.md +48 -0
  11. package/template/.agent/rules/decision-classification.md +103 -0
  12. package/template/.agent/rules/extensibility.md +47 -0
  13. package/template/.agent/rules/question-vs-command.md +81 -0
  14. package/template/.agent/rules/security-first.md +43 -0
  15. package/template/.agent/rules/specificity-standards.md +54 -0
  16. package/template/.agent/rules/tdd-contract-first.md +57 -0
  17. package/template/.agent/rules/vertical-slices.md +42 -0
  18. package/template/.agent/skill-library/MANIFEST.md +480 -0
  19. package/template/.agent/skill-library/README.md +38 -0
  20. package/template/.agent/skill-library/meta/brand-guidelines/SKILL.md +73 -0
  21. package/template/.agent/skill-library/meta/claude-code/README.md +9 -0
  22. package/template/.agent/skill-library/meta/claude-code/agent-development/SKILL.md +415 -0
  23. package/template/.agent/skill-library/meta/claude-code/hook-development/SKILL.md +712 -0
  24. package/template/.agent/skill-library/meta/claude-code/plugin-structure/SKILL.md +476 -0
  25. package/template/.agent/skill-library/meta/git-advanced/SKILL.md +972 -0
  26. package/template/.agent/skill-library/meta/mcp-builder/SKILL.md +236 -0
  27. package/template/.agent/skill-library/meta/product-marketing-context/SKILL.md +241 -0
  28. package/template/.agent/skill-library/meta/regex-patterns/SKILL.md +751 -0
  29. package/template/.agent/skill-library/meta/tmux-processes/SKILL.md +210 -0
  30. package/template/.agent/skill-library/meta/using-tmux-for-interactive-commands/SKILL.md +178 -0
  31. package/template/.agent/skill-library/stack/3d/threejs-pro/SKILL.md +300 -0
  32. package/template/.agent/skill-library/stack/ai/ai-sdk/SKILL.md +77 -0
  33. package/template/.agent/skill-library/stack/ai/langchain/SKILL.md +530 -0
  34. package/template/.agent/skill-library/stack/ai/ollama/SKILL.md +321 -0
  35. package/template/.agent/skill-library/stack/ai/openai-sdk/SKILL.md +549 -0
  36. package/template/.agent/skill-library/stack/analytics/google-analytics/SKILL.md +153 -0
  37. package/template/.agent/skill-library/stack/api/graphql/SKILL.md +1061 -0
  38. package/template/.agent/skill-library/stack/api/trpc/SKILL.md +576 -0
  39. package/template/.agent/skill-library/stack/auth/authjs/SKILL.md +569 -0
  40. package/template/.agent/skill-library/stack/auth/clerk/SKILL.md +590 -0
  41. package/template/.agent/skill-library/stack/auth/firebase-auth/SKILL.md +734 -0
  42. package/template/.agent/skill-library/stack/cms/payload-cms/SKILL.md +573 -0
  43. package/template/.agent/skill-library/stack/cms/shopify/SKILL.md +1193 -0
  44. package/template/.agent/skill-library/stack/cms/wordpress/SKILL.md +1104 -0
  45. package/template/.agent/skill-library/stack/css/sass-scss/SKILL.md +1121 -0
  46. package/template/.agent/skill-library/stack/css/tailwind-css-patterns/SKILL.md +863 -0
  47. package/template/.agent/skill-library/stack/css/tailwind-design-system/SKILL.md +490 -0
  48. package/template/.agent/skill-library/stack/css/vanilla-css/SKILL.md +1078 -0
  49. package/template/.agent/skill-library/stack/databases/clickhouse/SKILL.md +311 -0
  50. package/template/.agent/skill-library/stack/databases/influxdb/SKILL.md +280 -0
  51. package/template/.agent/skill-library/stack/databases/lancedb/SKILL.md +415 -0
  52. package/template/.agent/skill-library/stack/databases/mongodb/SKILL.md +1169 -0
  53. package/template/.agent/skill-library/stack/databases/neo4j/SKILL.md +839 -0
  54. package/template/.agent/skill-library/stack/databases/pgvector/SKILL.md +241 -0
  55. package/template/.agent/skill-library/stack/databases/pinecone/SKILL.md +212 -0
  56. package/template/.agent/skill-library/stack/databases/postgresql/SKILL.md +658 -0
  57. package/template/.agent/skill-library/stack/databases/qdrant/SKILL.md +312 -0
  58. package/template/.agent/skill-library/stack/databases/redis/SKILL.md +1079 -0
  59. package/template/.agent/skill-library/stack/databases/spacetimedb/SKILL.md +532 -0
  60. package/template/.agent/skill-library/stack/databases/sqlite/SKILL.md +1132 -0
  61. package/template/.agent/skill-library/stack/databases/supabase/SKILL.md +640 -0
  62. package/template/.agent/skill-library/stack/databases/surrealdb-expert/SKILL.md +945 -0
  63. package/template/.agent/skill-library/stack/databases/timescaledb/SKILL.md +745 -0
  64. package/template/.agent/skill-library/stack/databases/weaviate/SKILL.md +218 -0
  65. package/template/.agent/skill-library/stack/devops/github-actions/SKILL.md +554 -0
  66. package/template/.agent/skill-library/stack/devops/kubernetes/SKILL.md +950 -0
  67. package/template/.agent/skill-library/stack/devops/nginx/SKILL.md +841 -0
  68. package/template/.agent/skill-library/stack/devops/terraform/SKILL.md +860 -0
  69. package/template/.agent/skill-library/stack/email/resend/SKILL.md +391 -0
  70. package/template/.agent/skill-library/stack/engines/godot/SKILL.md +488 -0
  71. package/template/.agent/skill-library/stack/extensions/chrome-extension/SKILL.md +375 -0
  72. package/template/.agent/skill-library/stack/extensions/vscode-extension/SKILL.md +453 -0
  73. package/template/.agent/skill-library/stack/frameworks/astro-framework/SKILL.md +162 -0
  74. package/template/.agent/skill-library/stack/frameworks/electron/SKILL.md +1286 -0
  75. package/template/.agent/skill-library/stack/frameworks/fastapi/SKILL.md +650 -0
  76. package/template/.agent/skill-library/stack/frameworks/hono/SKILL.md +90 -0
  77. package/template/.agent/skill-library/stack/frameworks/nestjs/SKILL.md +878 -0
  78. package/template/.agent/skill-library/stack/frameworks/nextjs/SKILL.md +635 -0
  79. package/template/.agent/skill-library/stack/frameworks/nuxt/SKILL.md +564 -0
  80. package/template/.agent/skill-library/stack/frameworks/sveltekit/SKILL.md +614 -0
  81. package/template/.agent/skill-library/stack/frameworks/tauri/SKILL.md +920 -0
  82. package/template/.agent/skill-library/stack/gamedev/godot/SKILL.md +1032 -0
  83. package/template/.agent/skill-library/stack/gamedev/unity/SKILL.md +1175 -0
  84. package/template/.agent/skill-library/stack/hosting/aws/SKILL.md +467 -0
  85. package/template/.agent/skill-library/stack/hosting/cloudflare/SKILL.md +201 -0
  86. package/template/.agent/skill-library/stack/hosting/docker-expert/SKILL.md +409 -0
  87. package/template/.agent/skill-library/stack/hosting/vercel/SKILL.md +484 -0
  88. package/template/.agent/skill-library/stack/languages/bash-scripting/SKILL.md +773 -0
  89. package/template/.agent/skill-library/stack/languages/c-cpp/SKILL.md +712 -0
  90. package/template/.agent/skill-library/stack/languages/gdscript/SKILL.md +789 -0
  91. package/template/.agent/skill-library/stack/languages/go/SKILL.md +664 -0
  92. package/template/.agent/skill-library/stack/languages/java/SKILL.md +778 -0
  93. package/template/.agent/skill-library/stack/languages/kotlin/SKILL.md +665 -0
  94. package/template/.agent/skill-library/stack/languages/python/SKILL.md +678 -0
  95. package/template/.agent/skill-library/stack/languages/rust/SKILL.md +673 -0
  96. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/SKILL.md +141 -0
  97. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/advanced-generics.md +90 -0
  98. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/branded-types.md +57 -0
  99. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/builder-pattern.md +71 -0
  100. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/common-pitfalls.md +135 -0
  101. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/conditional-types.md +27 -0
  102. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/decorators.md +98 -0
  103. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/discriminated-unions.md +62 -0
  104. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/mapped-types.md +53 -0
  105. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/performance-best-practices.md +104 -0
  106. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/template-literal-types.md +49 -0
  107. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/testing-types.md +112 -0
  108. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-guards.md +70 -0
  109. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-inference.md +101 -0
  110. package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/utility-types.md +98 -0
  111. package/template/.agent/skill-library/stack/languages/vanilla-javascript/SKILL.md +803 -0
  112. package/template/.agent/skill-library/stack/messaging/kafka/SKILL.md +235 -0
  113. package/template/.agent/skill-library/stack/mobile/expo-react-native/SKILL.md +665 -0
  114. package/template/.agent/skill-library/stack/mobile/flutter/SKILL.md +316 -0
  115. package/template/.agent/skill-library/stack/mobile/react-native/SKILL.md +337 -0
  116. package/template/.agent/skill-library/stack/monitoring/posthog/SKILL.md +396 -0
  117. package/template/.agent/skill-library/stack/monitoring/sentry/SKILL.md +509 -0
  118. package/template/.agent/skill-library/stack/observability/datadog/SKILL.md +179 -0
  119. package/template/.agent/skill-library/stack/observability/distributed-tracing/SKILL.md +140 -0
  120. package/template/.agent/skill-library/stack/observability/logging-best-practices/SKILL.md +168 -0
  121. package/template/.agent/skill-library/stack/observability/opentelemetry/SKILL.md +164 -0
  122. package/template/.agent/skill-library/stack/observability/prometheus-grafana/SKILL.md +246 -0
  123. package/template/.agent/skill-library/stack/observability/python-observability/SKILL.md +158 -0
  124. package/template/.agent/skill-library/stack/orm/drizzle-orm/SKILL.md +613 -0
  125. package/template/.agent/skill-library/stack/orm/prisma/SKILL.md +744 -0
  126. package/template/.agent/skill-library/stack/payments/lemonsqueezy/SKILL.md +393 -0
  127. package/template/.agent/skill-library/stack/payments/stripe-integration/SKILL.md +457 -0
  128. package/template/.agent/skill-library/stack/queue/bullmq/SKILL.md +385 -0
  129. package/template/.agent/skill-library/stack/queue/inngest/SKILL.md +438 -0
  130. package/template/.agent/skill-library/stack/realtime/socketio/SKILL.md +595 -0
  131. package/template/.agent/skill-library/stack/search/elasticsearch/SKILL.md +248 -0
  132. package/template/.agent/skill-library/stack/search/meilisearch/SKILL.md +385 -0
  133. package/template/.agent/skill-library/stack/security/crypto-patterns/SKILL.md +437 -0
  134. package/template/.agent/skill-library/stack/security/csp-cors-headers/SKILL.md +588 -0
  135. package/template/.agent/skill-library/stack/security/dependency-auditing/SKILL.md +560 -0
  136. package/template/.agent/skill-library/stack/security/input-sanitization/SKILL.md +430 -0
  137. package/template/.agent/skill-library/stack/security/owasp-web-security/SKILL.md +421 -0
  138. package/template/.agent/skill-library/stack/state/tanstack-query/SKILL.md +637 -0
  139. package/template/.agent/skill-library/stack/state/zustand/SKILL.md +483 -0
  140. package/template/.agent/skill-library/stack/storage/aws-s3/SKILL.md +415 -0
  141. package/template/.agent/skill-library/stack/testing/playwright/SKILL.md +641 -0
  142. package/template/.agent/skill-library/stack/testing/storybook/SKILL.md +923 -0
  143. package/template/.agent/skill-library/stack/testing/testing-library/SKILL.md +872 -0
  144. package/template/.agent/skill-library/stack/testing/vitest/SKILL.md +714 -0
  145. package/template/.agent/skill-library/stack/ui/react-best-practices/SKILL.md +877 -0
  146. package/template/.agent/skill-library/stack/ui/react-composition-patterns/SKILL.md +1107 -0
  147. package/template/.agent/skill-library/stack/ui/react-flow/SKILL.md +425 -0
  148. package/template/.agent/skill-library/stack/ui/shadcn-ui/SKILL.md +703 -0
  149. package/template/.agent/skill-library/surface/api/api-caching/SKILL.md +458 -0
  150. package/template/.agent/skill-library/surface/api/api-documentation-openapi/SKILL.md +697 -0
  151. package/template/.agent/skill-library/surface/api/api-error-handling/SKILL.md +478 -0
  152. package/template/.agent/skill-library/surface/api/api-security-checklist/SKILL.md +147 -0
  153. package/template/.agent/skill-library/surface/api/api-versioning/SKILL.md +420 -0
  154. package/template/.agent/skill-library/surface/api/email-best-practices/SKILL.md +59 -0
  155. package/template/.agent/skill-library/surface/api/rate-limiting-abuse-protection/SKILL.md +147 -0
  156. package/template/.agent/skill-library/surface/api/rest-api-design/SKILL.md +478 -0
  157. package/template/.agent/skill-library/surface/api/webhook-design/SKILL.md +752 -0
  158. package/template/.agent/skill-library/surface/cli/cli-configuration-management/SKILL.md +445 -0
  159. package/template/.agent/skill-library/surface/cli/cli-error-diagnostics/SKILL.md +515 -0
  160. package/template/.agent/skill-library/surface/cli/cli-shell-integration/SKILL.md +479 -0
  161. package/template/.agent/skill-library/surface/cli/cli-ux-design/SKILL.md +477 -0
  162. package/template/.agent/skill-library/surface/desktop/desktop-app-distribution/SKILL.md +416 -0
  163. package/template/.agent/skill-library/surface/desktop/desktop-security-sandboxing/SKILL.md +407 -0
  164. package/template/.agent/skill-library/surface/desktop/desktop-ux-conventions/SKILL.md +361 -0
  165. package/template/.agent/skill-library/surface/desktop/native-os-integration/SKILL.md +563 -0
  166. package/template/.agent/skill-library/surface/extension/browser-extension-patterns/SKILL.md +482 -0
  167. package/template/.agent/skill-library/surface/extension/plugin-architecture-design/SKILL.md +632 -0
  168. package/template/.agent/skill-library/surface/extension/vscode-extension-development/SKILL.md +728 -0
  169. package/template/.agent/skill-library/surface/mobile/app-store-submission/SKILL.md +304 -0
  170. package/template/.agent/skill-library/surface/mobile/mobile-offline-sync/SKILL.md +443 -0
  171. package/template/.agent/skill-library/surface/mobile/mobile-responsive-patterns/SKILL.md +432 -0
  172. package/template/.agent/skill-library/surface/mobile/push-notifications/SKILL.md +495 -0
  173. package/template/.agent/skill-library/surface/web/accessibility-compliance/SKILL.md +827 -0
  174. package/template/.agent/skill-library/surface/web/ai-seo/SKILL.md +398 -0
  175. package/template/.agent/skill-library/surface/web/ai-seo/references/content-patterns.md +285 -0
  176. package/template/.agent/skill-library/surface/web/ai-seo/references/platform-ranking-factors.md +152 -0
  177. package/template/.agent/skill-library/surface/web/analytics-tracking/SKILL.md +309 -0
  178. package/template/.agent/skill-library/surface/web/analytics-tracking/references/event-library.md +260 -0
  179. package/template/.agent/skill-library/surface/web/analytics-tracking/references/ga4-implementation.md +300 -0
  180. package/template/.agent/skill-library/surface/web/analytics-tracking/references/gtm-implementation.md +390 -0
  181. package/template/.agent/skill-library/surface/web/authentication-ui-flows/SKILL.md +530 -0
  182. package/template/.agent/skill-library/surface/web/dark-mode-theming/SKILL.md +516 -0
  183. package/template/.agent/skill-library/surface/web/design-reference-data/SKILL.md +105 -0
  184. package/template/.agent/skill-library/surface/web/design-reference-data/data/charts.csv +26 -0
  185. package/template/.agent/skill-library/surface/web/design-reference-data/data/colors.csv +97 -0
  186. package/template/.agent/skill-library/surface/web/design-reference-data/data/landing.csv +31 -0
  187. package/template/.agent/skill-library/surface/web/design-reference-data/data/styles.csv +59 -0
  188. package/template/.agent/skill-library/surface/web/design-reference-data/data/typography.csv +58 -0
  189. package/template/.agent/skill-library/surface/web/design-reference-data/data/ux-guidelines.csv +100 -0
  190. package/template/.agent/skill-library/surface/web/design-reference-data/scripts/core.py +258 -0
  191. package/template/.agent/skill-library/surface/web/design-reference-data/scripts/design_system.py +1067 -0
  192. package/template/.agent/skill-library/surface/web/design-reference-data/scripts/search.py +106 -0
  193. package/template/.agent/skill-library/surface/web/form-handling-validation/SKILL.md +675 -0
  194. package/template/.agent/skill-library/surface/web/frontend-design/SKILL.md +1393 -0
  195. package/template/.agent/skill-library/surface/web/frontend-design/templates/cppn-hero.tsx +299 -0
  196. package/template/.agent/skill-library/surface/web/frontend-design/templates/wave-hero.tsx +875 -0
  197. package/template/.agent/skill-library/surface/web/frontend-verification/SKILL.md +111 -0
  198. package/template/.agent/skill-library/surface/web/frontend-verification/scripts/ux_audit.py +739 -0
  199. package/template/.agent/skill-library/surface/web/i18n-localization/SKILL.md +154 -0
  200. package/template/.agent/skill-library/surface/web/offline-first-pwa/SKILL.md +657 -0
  201. package/template/.agent/skill-library/surface/web/page-cro/SKILL.md +182 -0
  202. package/template/.agent/skill-library/surface/web/page-cro/references/experiments.md +248 -0
  203. package/template/.agent/skill-library/surface/web/programmatic-seo/SKILL.md +238 -0
  204. package/template/.agent/skill-library/surface/web/programmatic-seo/references/playbooks.md +308 -0
  205. package/template/.agent/skill-library/surface/web/schema-markup/SKILL.md +179 -0
  206. package/template/.agent/skill-library/surface/web/schema-markup/references/schema-examples.md +398 -0
  207. package/template/.agent/skill-library/surface/web/seo-audit/SKILL.md +394 -0
  208. package/template/.agent/skill-library/surface/web/seo-audit/references/ai-writing-detection.md +200 -0
  209. package/template/.agent/skill-library/surface/web/web-performance-optimization/SKILL.md +646 -0
  210. package/template/.agent/skill-library/surface/web/web-scraping/SKILL.md +58 -0
  211. package/template/.agent/skills/accessibility/SKILL.md +522 -0
  212. package/template/.agent/skills/accessibility/references/WCAG.md +162 -0
  213. package/template/.agent/skills/adversarial-review/SKILL.md +90 -0
  214. package/template/.agent/skills/antigravity-workflows/SKILL.md +81 -0
  215. package/template/.agent/skills/antigravity-workflows/resources/implementation-playbook.md +36 -0
  216. package/template/.agent/skills/api-design-principles/SKILL.md +37 -0
  217. package/template/.agent/skills/api-design-principles/assets/api-design-checklist.md +155 -0
  218. package/template/.agent/skills/api-design-principles/assets/rest-api-template.py +182 -0
  219. package/template/.agent/skills/api-design-principles/references/graphql-schema-design.md +583 -0
  220. package/template/.agent/skills/api-design-principles/references/rest-best-practices.md +408 -0
  221. package/template/.agent/skills/api-design-principles/resources/implementation-playbook.md +513 -0
  222. package/template/.agent/skills/api-versioning/SKILL.md +420 -0
  223. package/template/.agent/skills/architecture-mapping/SKILL.md +219 -0
  224. package/template/.agent/skills/bootstrap-agents/SKILL.md +259 -0
  225. package/template/.agent/skills/brainstorming/SKILL.md +236 -0
  226. package/template/.agent/skills/brand-guidelines/SKILL.md +44 -0
  227. package/template/.agent/skills/clean-code/SKILL.md +94 -0
  228. package/template/.agent/skills/code-review-pro/SKILL.md +152 -0
  229. package/template/.agent/skills/concise-planning/SKILL.md +68 -0
  230. package/template/.agent/skills/cross-layer-consistency/SKILL.md +117 -0
  231. package/template/.agent/skills/database-schema-design/SKILL.md +429 -0
  232. package/template/.agent/skills/deployment-procedures/SKILL.md +241 -0
  233. package/template/.agent/skills/design-anti-cliche/SKILL.md +159 -0
  234. package/template/.agent/skills/design-direction/SKILL.md +45 -0
  235. package/template/.agent/skills/error-handling-patterns/SKILL.md +721 -0
  236. package/template/.agent/skills/find-skills/SKILL.md +145 -0
  237. package/template/.agent/skills/git-advanced/SKILL.md +972 -0
  238. package/template/.agent/skills/git-workflow/SKILL.md +420 -0
  239. package/template/.agent/skills/idea-extraction/SKILL.md +271 -0
  240. package/template/.agent/skills/logging-best-practices/SKILL.md +851 -0
  241. package/template/.agent/skills/migration-management/SKILL.md +384 -0
  242. package/template/.agent/skills/minimalist-surgical-development/SKILL.md +69 -0
  243. package/template/.agent/skills/parallel-agents/SKILL.md +165 -0
  244. package/template/.agent/skills/parallel-debugging/SKILL.md +135 -0
  245. package/template/.agent/skills/parallel-feature-development/SKILL.md +166 -0
  246. package/template/.agent/skills/performance-budgeting/SKILL.md +144 -0
  247. package/template/.agent/skills/pipeline-rubrics/SKILL.md +51 -0
  248. package/template/.agent/skills/pipeline-rubrics/references/architecture-rubric.md +19 -0
  249. package/template/.agent/skills/pipeline-rubrics/references/be-rubric.md +21 -0
  250. package/template/.agent/skills/pipeline-rubrics/references/fe-rubric.md +20 -0
  251. package/template/.agent/skills/pipeline-rubrics/references/ia-rubric.md +19 -0
  252. package/template/.agent/skills/pipeline-rubrics/references/scoring.md +28 -0
  253. package/template/.agent/skills/pipeline-rubrics/references/vision-rubric.md +11 -0
  254. package/template/.agent/skills/prd-templates/SKILL.md +88 -0
  255. package/template/.agent/skills/prd-templates/references/architecture-design-template.md +88 -0
  256. package/template/.agent/skills/prd-templates/references/be-spec-template.md +101 -0
  257. package/template/.agent/skills/prd-templates/references/data-placement-template.md +74 -0
  258. package/template/.agent/skills/prd-templates/references/decomposition-templates.md +211 -0
  259. package/template/.agent/skills/prd-templates/references/design-system-decisions.md +198 -0
  260. package/template/.agent/skills/prd-templates/references/engineering-standards-template.md +124 -0
  261. package/template/.agent/skills/prd-templates/references/fe-classification-procedures.md +47 -0
  262. package/template/.agent/skills/prd-templates/references/fe-spec-template.md +84 -0
  263. package/template/.agent/skills/prd-templates/references/infrastructure-report-template.md +71 -0
  264. package/template/.agent/skills/prd-templates/references/operational-templates.md +116 -0
  265. package/template/.agent/skills/prd-templates/references/placeholder-guard-template.md +21 -0
  266. package/template/.agent/skills/prd-templates/references/surface-model.md +61 -0
  267. package/template/.agent/skills/prd-templates/references/vision-template.md +66 -0
  268. package/template/.agent/skills/prompt-engineer/README.md +659 -0
  269. package/template/.agent/skills/prompt-engineer/SKILL.md +249 -0
  270. package/template/.agent/skills/regex-patterns/SKILL.md +751 -0
  271. package/template/.agent/skills/resolve-ambiguity/SKILL.md +278 -0
  272. package/template/.agent/skills/rest-api-design/SKILL.md +478 -0
  273. package/template/.agent/skills/security-scanning-security-hardening/SKILL.md +231 -0
  274. package/template/.agent/skills/session-continuity/SKILL.md +730 -0
  275. package/template/.agent/skills/session-continuity/protocols/01-session-resumption.md +38 -0
  276. package/template/.agent/skills/session-continuity/protocols/02-progress-generation.md +85 -0
  277. package/template/.agent/skills/session-continuity/protocols/03-progress-update.md +70 -0
  278. package/template/.agent/skills/session-continuity/protocols/04-pattern-extraction.md +60 -0
  279. package/template/.agent/skills/session-continuity/protocols/05-session-close.md +37 -0
  280. package/template/.agent/skills/session-continuity/protocols/06-decision-analysis.md +84 -0
  281. package/template/.agent/skills/session-continuity/protocols/07-spec-pipeline-generation.md +48 -0
  282. package/template/.agent/skills/session-continuity/protocols/08-spec-pipeline-update.md +43 -0
  283. package/template/.agent/skills/session-continuity/protocols/09-parallel-claim.md +122 -0
  284. package/template/.agent/skills/session-continuity/protocols/10-placeholder-verification-gate.md +104 -0
  285. package/template/.agent/skills/session-continuity/protocols/ambiguity-gates.md +48 -0
  286. package/template/.agent/skills/skill-creator/LICENSE.txt +202 -0
  287. package/template/.agent/skills/skill-creator/README.md +270 -0
  288. package/template/.agent/skills/skill-creator/SKILL.md +590 -0
  289. package/template/.agent/skills/skill-creator/references/output-patterns.md +82 -0
  290. package/template/.agent/skills/skill-creator/references/workflows.md +28 -0
  291. package/template/.agent/skills/skill-creator/scripts/init_skill.py +303 -0
  292. package/template/.agent/skills/skill-creator/scripts/package_skill.py +110 -0
  293. package/template/.agent/skills/skill-creator/scripts/quick_validate.py +95 -0
  294. package/template/.agent/skills/spec-writing/SKILL.md +110 -0
  295. package/template/.agent/skills/systematic-debugging/CREATION-LOG.md +119 -0
  296. package/template/.agent/skills/systematic-debugging/SKILL.md +297 -0
  297. package/template/.agent/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
  298. package/template/.agent/skills/systematic-debugging/condition-based-waiting.md +115 -0
  299. package/template/.agent/skills/systematic-debugging/defense-in-depth.md +122 -0
  300. package/template/.agent/skills/systematic-debugging/find-polluter.sh +63 -0
  301. package/template/.agent/skills/systematic-debugging/root-cause-tracing.md +169 -0
  302. package/template/.agent/skills/systematic-debugging/test-academic.md +14 -0
  303. package/template/.agent/skills/systematic-debugging/test-pressure-1.md +58 -0
  304. package/template/.agent/skills/systematic-debugging/test-pressure-2.md +68 -0
  305. package/template/.agent/skills/systematic-debugging/test-pressure-3.md +69 -0
  306. package/template/.agent/skills/tdd-workflow/SKILL.md +409 -0
  307. package/template/.agent/skills/tech-stack-catalog/SKILL.md +49 -0
  308. package/template/.agent/skills/tech-stack-catalog/references/constraint-questions.md +21 -0
  309. package/template/.agent/skills/tech-stack-catalog/references/dev-tooling-decisions.md +37 -0
  310. package/template/.agent/skills/tech-stack-catalog/references/surface-decision-tables.md +69 -0
  311. package/template/.agent/skills/technical-writer/SKILL.md +242 -0
  312. package/template/.agent/skills/testing-strategist/SKILL.md +932 -0
  313. package/template/.agent/skills/verification-before-completion/SKILL.md +145 -0
  314. package/template/.agent/skills/workflow-automation/SKILL.md +73 -0
  315. package/template/.agent/workflows/audit-ambiguity-execute.md +165 -0
  316. package/template/.agent/workflows/audit-ambiguity-rubrics.md +83 -0
  317. package/template/.agent/workflows/audit-ambiguity.md +64 -0
  318. package/template/.agent/workflows/bootstrap-agents-fill.md +201 -0
  319. package/template/.agent/workflows/bootstrap-agents-provision.md +197 -0
  320. package/template/.agent/workflows/bootstrap-agents.md +66 -0
  321. package/template/.agent/workflows/create-prd-architecture.md +119 -0
  322. package/template/.agent/workflows/create-prd-compile.md +138 -0
  323. package/template/.agent/workflows/create-prd-design-system.md +135 -0
  324. package/template/.agent/workflows/create-prd-security.md +113 -0
  325. package/template/.agent/workflows/create-prd-stack.md +91 -0
  326. package/template/.agent/workflows/create-prd.md +168 -0
  327. package/template/.agent/workflows/decompose-architecture-structure.md +82 -0
  328. package/template/.agent/workflows/decompose-architecture-validate.md +119 -0
  329. package/template/.agent/workflows/decompose-architecture.md +111 -0
  330. package/template/.agent/workflows/evolve-contract.md +98 -0
  331. package/template/.agent/workflows/evolve-feature-cascade.md +140 -0
  332. package/template/.agent/workflows/evolve-feature-classify.md +116 -0
  333. package/template/.agent/workflows/evolve-feature.md +56 -0
  334. package/template/.agent/workflows/ideate-discover.md +144 -0
  335. package/template/.agent/workflows/ideate-extract.md +129 -0
  336. package/template/.agent/workflows/ideate-validate.md +117 -0
  337. package/template/.agent/workflows/ideate.md +113 -0
  338. package/template/.agent/workflows/implement-slice-setup.md +113 -0
  339. package/template/.agent/workflows/implement-slice-tdd.md +198 -0
  340. package/template/.agent/workflows/implement-slice.md +50 -0
  341. package/template/.agent/workflows/plan-phase.md +202 -0
  342. package/template/.agent/workflows/propagate-decision-apply.md +135 -0
  343. package/template/.agent/workflows/propagate-decision-scan.md +147 -0
  344. package/template/.agent/workflows/propagate-decision.md +56 -0
  345. package/template/.agent/workflows/remediate-pipeline-assess.md +138 -0
  346. package/template/.agent/workflows/remediate-pipeline-execute.md +135 -0
  347. package/template/.agent/workflows/remediate-pipeline.md +55 -0
  348. package/template/.agent/workflows/resolve-ambiguity.md +82 -0
  349. package/template/.agent/workflows/sync-kit.md +209 -0
  350. package/template/.agent/workflows/update-architecture-map.md +74 -0
  351. package/template/.agent/workflows/validate-phase.md +219 -0
  352. package/template/.agent/workflows/verify-infrastructure.md +207 -0
  353. package/template/.agent/workflows/write-architecture-spec-deepen.md +139 -0
  354. package/template/.agent/workflows/write-architecture-spec-design.md +202 -0
  355. package/template/.agent/workflows/write-architecture-spec.md +63 -0
  356. package/template/.agent/workflows/write-be-spec-classify.md +165 -0
  357. package/template/.agent/workflows/write-be-spec-write.md +98 -0
  358. package/template/.agent/workflows/write-be-spec.md +76 -0
  359. package/template/.agent/workflows/write-fe-spec-classify.md +170 -0
  360. package/template/.agent/workflows/write-fe-spec-write.md +94 -0
  361. package/template/.agent/workflows/write-fe-spec.md +71 -0
  362. package/template/AGENTS.md +176 -0
  363. package/template/GEMINI.md +177 -0
  364. package/template/docs/README.md +187 -0
  365. package/template/docs/audits/.gitkeep +0 -0
  366. package/template/docs/audits/README.md +10 -0
  367. package/template/docs/plans/.gitkeep +0 -0
  368. package/template/docs/plans/README.md +21 -0
  369. package/template/docs/plans/be/.gitkeep +0 -0
  370. package/template/docs/plans/be/README.md +11 -0
  371. package/template/docs/plans/fe/.gitkeep +0 -0
  372. package/template/docs/plans/fe/README.md +11 -0
  373. package/template/docs/plans/ia/.gitkeep +0 -0
  374. package/template/docs/plans/ia/README.md +17 -0
  375. package/template/docs/plans/ia/deep-dives/.gitkeep +0 -0
  376. package/template/docs/plans/ia/deep-dives/README.md +5 -0
  377. package/template/docs/plans/phases/.gitkeep +0 -0
  378. package/template/docs/plans/phases/README.md +11 -0
@@ -0,0 +1,673 @@
1
+ ---
2
+ name: rust
3
+ description: Rust development patterns for safe, performant systems code. Covers ownership/borrowing/lifetimes, error handling, traits, async with tokio, cargo workspaces, unsafe boundaries, serde, testing, and concurrency primitives.
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # Rust Development Patterns
8
+
9
+ Expert guidance for writing safe, performant Rust code. Covers the ownership model, error handling idioms, trait-based abstractions, async programming with tokio, cargo workspace patterns, and the discipline required to write correct concurrent systems.
10
+
11
+ ## When to Use This Skill
12
+
13
+ - Building performance-critical systems (network services, CLI tools, game engines)
14
+ - Writing memory-safe code without garbage collection
15
+ - Implementing concurrent or parallel systems
16
+ - Creating libraries with strong API guarantees
17
+ - Integrating with C/C++ code via FFI
18
+ - Building WebAssembly modules
19
+
20
+ ## Core Concepts
21
+
22
+ ### 1. Ownership, Borrowing, and Lifetimes
23
+
24
+ The foundation of Rust's memory safety guarantees.
25
+
26
+ ```rust
27
+ // Ownership: each value has exactly one owner
28
+ fn take_ownership(s: String) {
29
+ println!("{s}");
30
+ } // s is dropped here
31
+
32
+ // Borrowing: references without taking ownership
33
+ fn borrow(s: &str) {
34
+ println!("{s}");
35
+ } // s is NOT dropped -- caller still owns it
36
+
37
+ // Mutable borrowing: only ONE mutable reference at a time
38
+ fn modify(s: &mut String) {
39
+ s.push_str(" world");
40
+ }
41
+
42
+ // Lifetimes: compiler tracks how long references are valid
43
+ fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
44
+ if x.len() > y.len() { x } else { y }
45
+ }
46
+
47
+ // Lifetime elision rules handle most cases automatically.
48
+ // Only annotate when the compiler asks you to.
49
+
50
+ // Struct with lifetime
51
+ struct Excerpt<'a> {
52
+ text: &'a str,
53
+ }
54
+
55
+ impl<'a> Excerpt<'a> {
56
+ fn level(&self) -> i32 {
57
+ 3
58
+ }
59
+
60
+ // Return type lifetime tied to self
61
+ fn announce(&self, announcement: &str) -> &'a str {
62
+ println!("Attention: {announcement}");
63
+ self.text
64
+ }
65
+ }
66
+ ```
67
+
68
+ **Rules to internalize:**
69
+
70
+ | Rule | Implication |
71
+ |------|-------------|
72
+ | One owner at a time | Move semantics by default for non-Copy types |
73
+ | Multiple `&T` OR one `&mut T` | No data races at compile time |
74
+ | References must not outlive data | Lifetimes enforce this statically |
75
+ | `Copy` types are stack-duplicated | Integers, floats, bools, chars, tuples of Copy types |
76
+
77
+ ### 2. Error Handling: Result, Option, thiserror, anyhow
78
+
79
+ ```rust
80
+ use std::fs;
81
+ use std::io;
82
+
83
+ // Result for recoverable errors
84
+ fn read_config(path: &str) -> Result<String, io::Error> {
85
+ fs::read_to_string(path)
86
+ }
87
+
88
+ // The ? operator for propagation
89
+ fn parse_config(path: &str) -> Result<Config, Box<dyn std::error::Error>> {
90
+ let content = fs::read_to_string(path)?;
91
+ let config: Config = serde_json::from_str(&content)?;
92
+ Ok(config)
93
+ }
94
+
95
+ // thiserror for library error types (structured, typed)
96
+ use thiserror::Error;
97
+
98
+ #[derive(Debug, Error)]
99
+ pub enum AppError {
100
+ #[error("configuration file not found: {path}")]
101
+ ConfigNotFound { path: String },
102
+
103
+ #[error("invalid configuration: {0}")]
104
+ InvalidConfig(String),
105
+
106
+ #[error("database error")]
107
+ Database(#[from] sqlx::Error),
108
+
109
+ #[error("IO error")]
110
+ Io(#[from] io::Error),
111
+ }
112
+
113
+ // anyhow for application-level error handling (convenience)
114
+ use anyhow::{Context, Result};
115
+
116
+ fn setup() -> Result<()> {
117
+ let config = fs::read_to_string("config.toml")
118
+ .context("Failed to read config file")?;
119
+ let parsed: Config = toml::from_str(&config)
120
+ .context("Failed to parse config TOML")?;
121
+ Ok(())
122
+ }
123
+
124
+ // Option for values that may or may not exist
125
+ fn find_user(id: u64) -> Option<User> {
126
+ users.iter().find(|u| u.id == id).cloned()
127
+ }
128
+
129
+ // Combining Option and Result
130
+ fn get_user_email(id: u64) -> Result<String> {
131
+ let user = find_user(id)
132
+ .ok_or_else(|| anyhow::anyhow!("User {id} not found"))?;
133
+ Ok(user.email.clone())
134
+ }
135
+ ```
136
+
137
+ **Decision matrix:**
138
+
139
+ | Context | Use |
140
+ |---------|-----|
141
+ | Library crate | `thiserror` with custom enum |
142
+ | Application binary | `anyhow` for convenience |
143
+ | Value might not exist | `Option<T>` |
144
+ | Operation can fail | `Result<T, E>` |
145
+ | Unrecoverable bug | `panic!` (only for programmer errors) |
146
+
147
+ ### 3. Traits and Generics
148
+
149
+ ```rust
150
+ // Define a trait
151
+ trait Summary {
152
+ fn summarize(&self) -> String;
153
+
154
+ // Default implementation
155
+ fn preview(&self) -> String {
156
+ format!("{}...", &self.summarize()[..20.min(self.summarize().len())])
157
+ }
158
+ }
159
+
160
+ // Implement for a type
161
+ struct Article {
162
+ title: String,
163
+ content: String,
164
+ }
165
+
166
+ impl Summary for Article {
167
+ fn summarize(&self) -> String {
168
+ format!("{}: {}", self.title, &self.content[..100.min(self.content.len())])
169
+ }
170
+ }
171
+
172
+ // Generic function with trait bound
173
+ fn print_summary(item: &impl Summary) {
174
+ println!("{}", item.summarize());
175
+ }
176
+
177
+ // Multiple bounds with where clause
178
+ fn process<T>(item: &T) -> String
179
+ where
180
+ T: Summary + std::fmt::Display + Clone,
181
+ {
182
+ let cloned = item.clone();
183
+ format!("{cloned}: {}", item.summarize())
184
+ }
185
+
186
+ // Trait objects for dynamic dispatch
187
+ fn get_summaries(items: &[Box<dyn Summary>]) -> Vec<String> {
188
+ items.iter().map(|item| item.summarize()).collect()
189
+ }
190
+
191
+ // Associated types
192
+ trait Iterator {
193
+ type Item;
194
+ fn next(&mut self) -> Option<Self::Item>;
195
+ }
196
+
197
+ // Supertraits
198
+ trait PrettyPrint: std::fmt::Display + std::fmt::Debug {
199
+ fn pretty(&self) -> String {
200
+ format!("{self:#?}")
201
+ }
202
+ }
203
+ ```
204
+
205
+ ### 4. Async with Tokio
206
+
207
+ ```rust
208
+ use tokio::time::{sleep, Duration};
209
+ use tokio::sync::{mpsc, Mutex};
210
+ use std::sync::Arc;
211
+
212
+ // Basic async function
213
+ async fn fetch_url(url: &str) -> Result<String, reqwest::Error> {
214
+ let response = reqwest::get(url).await?;
215
+ response.text().await
216
+ }
217
+
218
+ // Spawning tasks
219
+ async fn process_urls(urls: Vec<String>) -> Vec<String> {
220
+ let mut handles = Vec::new();
221
+
222
+ for url in urls {
223
+ let handle = tokio::spawn(async move {
224
+ fetch_url(&url).await.unwrap_or_default()
225
+ });
226
+ handles.push(handle);
227
+ }
228
+
229
+ let mut results = Vec::new();
230
+ for handle in handles {
231
+ if let Ok(result) = handle.await {
232
+ results.push(result);
233
+ }
234
+ }
235
+ results
236
+ }
237
+
238
+ // Shared state with Arc<Mutex<T>>
239
+ async fn shared_counter() {
240
+ let counter = Arc::new(Mutex::new(0u64));
241
+ let mut handles = Vec::new();
242
+
243
+ for _ in 0..10 {
244
+ let counter = Arc::clone(&counter);
245
+ handles.push(tokio::spawn(async move {
246
+ let mut lock = counter.lock().await;
247
+ *lock += 1;
248
+ }));
249
+ }
250
+
251
+ for handle in handles {
252
+ handle.await.unwrap();
253
+ }
254
+ println!("Counter: {}", *counter.lock().await);
255
+ }
256
+
257
+ // Channels for message passing
258
+ async fn producer_consumer() {
259
+ let (tx, mut rx) = mpsc::channel::<String>(100);
260
+
261
+ let producer = tokio::spawn(async move {
262
+ for i in 0..10 {
263
+ tx.send(format!("message {i}")).await.unwrap();
264
+ sleep(Duration::from_millis(100)).await;
265
+ }
266
+ });
267
+
268
+ let consumer = tokio::spawn(async move {
269
+ while let Some(msg) = rx.recv().await {
270
+ println!("Received: {msg}");
271
+ }
272
+ });
273
+
274
+ producer.await.unwrap();
275
+ consumer.await.unwrap();
276
+ }
277
+
278
+ // Tokio main entry point
279
+ #[tokio::main]
280
+ async fn main() -> Result<(), Box<dyn std::error::Error>> {
281
+ producer_consumer().await;
282
+ Ok(())
283
+ }
284
+ ```
285
+
286
+ ### 5. Cargo Workspace Patterns
287
+
288
+ ```toml
289
+ # Root Cargo.toml
290
+ [workspace]
291
+ members = [
292
+ "crates/core",
293
+ "crates/api",
294
+ "crates/cli",
295
+ ]
296
+ resolver = "2"
297
+
298
+ [workspace.package]
299
+ version = "0.1.0"
300
+ edition = "2021"
301
+ license = "MIT"
302
+
303
+ [workspace.dependencies]
304
+ serde = { version = "1.0", features = ["derive"] }
305
+ tokio = { version = "1", features = ["full"] }
306
+ anyhow = "1.0"
307
+ ```
308
+
309
+ ```toml
310
+ # crates/core/Cargo.toml
311
+ [package]
312
+ name = "my-core"
313
+ version.workspace = true
314
+ edition.workspace = true
315
+
316
+ [dependencies]
317
+ serde.workspace = true
318
+ anyhow.workspace = true
319
+ ```
320
+
321
+ **Workspace layout:**
322
+
323
+ ```
324
+ my-project/
325
+ Cargo.toml # Workspace root
326
+ crates/
327
+ core/ # Shared types, business logic
328
+ Cargo.toml
329
+ src/lib.rs
330
+ api/ # HTTP server
331
+ Cargo.toml
332
+ src/main.rs
333
+ cli/ # CLI binary
334
+ Cargo.toml
335
+ src/main.rs
336
+ ```
337
+
338
+ ### 6. Unsafe Code Boundaries
339
+
340
+ ```rust
341
+ // Keep unsafe blocks as small as possible
342
+ // Wrap unsafe in safe abstractions
343
+
344
+ // WRONG -- large unsafe block
345
+ unsafe {
346
+ let ptr = allocate(size);
347
+ initialize(ptr, data);
348
+ validate(ptr); // This does not need to be unsafe
349
+ process(ptr); // Neither does this
350
+ }
351
+
352
+ // RIGHT -- minimal unsafe surface
353
+ let ptr = unsafe { allocate(size) };
354
+ unsafe { initialize(ptr, data) };
355
+ validate(ptr); // Safe code outside unsafe block
356
+ process(ptr);
357
+
358
+ // Safe wrapper around unsafe FFI
359
+ pub fn get_system_time() -> u64 {
360
+ // SAFETY: libc::time is safe to call with a null pointer,
361
+ // which tells it to only return the value without writing to memory.
362
+ unsafe { libc::time(std::ptr::null_mut()) as u64 }
363
+ }
364
+
365
+ // Document SAFETY invariants for every unsafe block
366
+ ```
367
+
368
+ ### 7. Serde Serialization
369
+
370
+ ```rust
371
+ use serde::{Deserialize, Serialize};
372
+
373
+ #[derive(Debug, Serialize, Deserialize)]
374
+ #[serde(rename_all = "camelCase")]
375
+ pub struct UserProfile {
376
+ pub user_id: u64,
377
+ pub display_name: String,
378
+ #[serde(skip_serializing_if = "Option::is_none")]
379
+ pub bio: Option<String>,
380
+ #[serde(default)]
381
+ pub is_active: bool,
382
+ #[serde(rename = "type")]
383
+ pub account_type: AccountType,
384
+ }
385
+
386
+ #[derive(Debug, Serialize, Deserialize)]
387
+ #[serde(tag = "kind", content = "data")]
388
+ pub enum AccountType {
389
+ Standard,
390
+ Premium { expires_at: String },
391
+ Admin { permissions: Vec<String> },
392
+ }
393
+
394
+ // Custom deserialization
395
+ use serde::de::{self, Visitor};
396
+
397
+ struct DurationVisitor;
398
+
399
+ impl<'de> Visitor<'de> for DurationVisitor {
400
+ type Value = std::time::Duration;
401
+
402
+ fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
403
+ formatter.write_str("a duration in seconds as a number")
404
+ }
405
+
406
+ fn visit_u64<E: de::Error>(self, v: u64) -> Result<Self::Value, E> {
407
+ Ok(std::time::Duration::from_secs(v))
408
+ }
409
+ }
410
+ ```
411
+
412
+ ### 8. Pattern Matching
413
+
414
+ ```rust
415
+ // Match on enums
416
+ enum Command {
417
+ Quit,
418
+ Echo(String),
419
+ Move { x: i32, y: i32 },
420
+ Color(u8, u8, u8),
421
+ }
422
+
423
+ fn handle(cmd: Command) {
424
+ match cmd {
425
+ Command::Quit => println!("Quitting"),
426
+ Command::Echo(msg) => println!("{msg}"),
427
+ Command::Move { x, y } => println!("Moving to ({x}, {y})"),
428
+ Command::Color(r, g, b) => println!("Color: rgb({r}, {g}, {b})"),
429
+ }
430
+ }
431
+
432
+ // Guards and bindings
433
+ fn classify(x: i32) -> &'static str {
434
+ match x {
435
+ 0 => "zero",
436
+ n if n < 0 => "negative",
437
+ 1..=10 => "small positive",
438
+ n @ 11..=100 => {
439
+ println!("medium: {n}");
440
+ "medium positive"
441
+ }
442
+ _ => "large positive",
443
+ }
444
+ }
445
+
446
+ // if let for single-pattern matching
447
+ if let Some(value) = optional_value {
448
+ println!("Got: {value}");
449
+ }
450
+
451
+ // let-else (Rust 1.65+) for early returns
452
+ let Some(user) = find_user(id) else {
453
+ return Err(anyhow::anyhow!("user not found"));
454
+ };
455
+ ```
456
+
457
+ ### 9. Smart Pointers
458
+
459
+ ```rust
460
+ use std::rc::Rc;
461
+ use std::sync::Arc;
462
+ use std::cell::RefCell;
463
+
464
+ // Box<T> -- heap allocation, single owner
465
+ let boxed: Box<dyn Summary> = Box::new(article);
466
+
467
+ // Rc<T> -- reference counting, single thread
468
+ let shared = Rc::new(String::from("shared data"));
469
+ let clone1 = Rc::clone(&shared);
470
+ let clone2 = Rc::clone(&shared);
471
+ println!("Reference count: {}", Rc::strong_count(&shared)); // 3
472
+
473
+ // Arc<T> -- atomic reference counting, multi-thread safe
474
+ let shared = Arc::new(vec![1, 2, 3]);
475
+ let handle = {
476
+ let shared = Arc::clone(&shared);
477
+ std::thread::spawn(move || {
478
+ println!("{:?}", shared);
479
+ })
480
+ };
481
+ handle.join().unwrap();
482
+
483
+ // RefCell<T> -- interior mutability (runtime borrow checking)
484
+ let data = RefCell::new(vec![1, 2, 3]);
485
+ data.borrow_mut().push(4);
486
+ println!("{:?}", data.borrow());
487
+
488
+ // Common combo: Rc<RefCell<T>> for shared mutable state (single thread)
489
+ // Arc<Mutex<T>> for shared mutable state (multi-thread)
490
+ ```
491
+
492
+ ### 10. Iterators
493
+
494
+ ```rust
495
+ // Iterator adaptors are lazy -- nothing happens until consumed
496
+ let result: Vec<i32> = (0..100)
497
+ .filter(|x| x % 2 == 0)
498
+ .map(|x| x * x)
499
+ .take(10)
500
+ .collect();
501
+
502
+ // Implementing Iterator for custom types
503
+ struct Counter {
504
+ count: u32,
505
+ max: u32,
506
+ }
507
+
508
+ impl Counter {
509
+ fn new(max: u32) -> Self {
510
+ Counter { count: 0, max }
511
+ }
512
+ }
513
+
514
+ impl Iterator for Counter {
515
+ type Item = u32;
516
+
517
+ fn next(&mut self) -> Option<Self::Item> {
518
+ if self.count < self.max {
519
+ self.count += 1;
520
+ Some(self.count)
521
+ } else {
522
+ None
523
+ }
524
+ }
525
+ }
526
+
527
+ // Useful iterator methods
528
+ let sum: u32 = Counter::new(10).sum();
529
+ let product: u32 = Counter::new(5).product();
530
+ let found = Counter::new(100).find(|&x| x > 50);
531
+ let any_even = Counter::new(10).any(|x| x % 2 == 0);
532
+ let all_positive = Counter::new(10).all(|x| x > 0);
533
+
534
+ // Chaining iterators
535
+ let combined: Vec<u32> = Counter::new(5)
536
+ .chain(Counter::new(3))
537
+ .collect(); // [1, 2, 3, 4, 5, 1, 2, 3]
538
+
539
+ // zip for parallel iteration
540
+ let pairs: Vec<(u32, u32)> = Counter::new(3)
541
+ .zip(Counter::new(3))
542
+ .collect(); // [(1,1), (2,2), (3,3)]
543
+ ```
544
+
545
+ ### 11. Testing Patterns
546
+
547
+ ```rust
548
+ #[cfg(test)]
549
+ mod tests {
550
+ use super::*;
551
+
552
+ #[test]
553
+ fn test_basic_functionality() {
554
+ let result = add(2, 3);
555
+ assert_eq!(result, 5);
556
+ }
557
+
558
+ #[test]
559
+ fn test_with_descriptive_name() {
560
+ let user = User::new("alice", "alice@example.com");
561
+ assert_eq!(user.name(), "alice");
562
+ assert!(user.is_valid());
563
+ }
564
+
565
+ #[test]
566
+ #[should_panic(expected = "index out of bounds")]
567
+ fn test_panic_case() {
568
+ let v = vec![1, 2, 3];
569
+ let _ = v[99];
570
+ }
571
+
572
+ #[test]
573
+ fn test_result_based() -> Result<(), Box<dyn std::error::Error>> {
574
+ let config = parse_config("test.toml")?;
575
+ assert_eq!(config.port, 8080);
576
+ Ok(())
577
+ }
578
+
579
+ // Property-based testing with proptest
580
+ use proptest::prelude::*;
581
+
582
+ proptest! {
583
+ #[test]
584
+ fn test_string_roundtrip(s in "\\PC*") {
585
+ let encoded = encode(&s);
586
+ let decoded = decode(&encoded)?;
587
+ prop_assert_eq!(s, decoded);
588
+ }
589
+ }
590
+ }
591
+
592
+ // Integration tests go in tests/ directory
593
+ // tests/integration_test.rs
594
+ use my_crate::public_api;
595
+
596
+ #[test]
597
+ fn test_full_workflow() {
598
+ let result = public_api::process("input");
599
+ assert!(result.is_ok());
600
+ }
601
+ ```
602
+
603
+ ### 12. Concurrency: Send and Sync
604
+
605
+ ```rust
606
+ // Send: safe to transfer ownership between threads
607
+ // Sync: safe to share references between threads
608
+ //
609
+ // Most types are Send + Sync automatically.
610
+ // Rc<T> is neither Send nor Sync -- use Arc<T> instead.
611
+ // Cell<T> and RefCell<T> are Send but not Sync.
612
+ // MutexGuard is Sync but not Send.
613
+
614
+ use std::sync::{Mutex, RwLock};
615
+
616
+ // RwLock for read-heavy workloads
617
+ let config = Arc::new(RwLock::new(Config::default()));
618
+
619
+ // Multiple readers
620
+ let reader = config.read().unwrap();
621
+ println!("{:?}", *reader);
622
+ drop(reader);
623
+
624
+ // Single writer
625
+ let mut writer = config.write().unwrap();
626
+ writer.debug = true;
627
+ drop(writer);
628
+
629
+ // Rayon for data parallelism
630
+ use rayon::prelude::*;
631
+
632
+ let sum: i64 = (0..1_000_000i64)
633
+ .into_par_iter()
634
+ .filter(|x| x % 2 == 0)
635
+ .map(|x| x * x)
636
+ .sum();
637
+ ```
638
+
639
+ ## Anti-Patterns
640
+
641
+ | Anti-Pattern | Why It Is Bad | Do This Instead |
642
+ |-------------|--------------|----------------|
643
+ | `.unwrap()` in production code | Panics on None/Err | Use `?`, `unwrap_or`, `unwrap_or_else` |
644
+ | `.clone()` to avoid borrow issues | Hides ownership problems | Fix the ownership structure |
645
+ | Large `unsafe` blocks | Hard to audit safety | Minimize unsafe surface, document invariants |
646
+ | `String` everywhere | Unnecessary allocations | Use `&str` for borrowed strings |
647
+ | Ignoring clippy warnings | Misses common bugs | Run `cargo clippy -- -D warnings` |
648
+ | `Box<dyn Error>` in libraries | Callers cannot match on error types | Use `thiserror` enum |
649
+ | Blocking in async context | Starves the executor | Use `tokio::task::spawn_blocking` |
650
+
651
+ ## Common Commands
652
+
653
+ ```bash
654
+ cargo build # Debug build
655
+ cargo build --release # Optimized build
656
+ cargo test # Run all tests
657
+ cargo test -- --nocapture # Show println output in tests
658
+ cargo clippy -- -D warnings # Lint with warnings as errors
659
+ cargo fmt # Format code
660
+ cargo doc --open # Generate and open documentation
661
+ cargo bench # Run benchmarks
662
+ cargo audit # Check for security vulnerabilities
663
+ ```
664
+
665
+ ## Resources
666
+
667
+ - **The Rust Book**: https://doc.rust-lang.org/book/
668
+ - **Rust by Example**: https://doc.rust-lang.org/rust-by-example/
669
+ - **Rustlings**: https://github.com/rust-lang/rustlings
670
+ - **Tokio Tutorial**: https://tokio.rs/tokio/tutorial
671
+ - **Serde Guide**: https://serde.rs/
672
+ - **Clippy Lints**: https://rust-lang.github.io/rust-clippy/
673
+ - **Rust API Guidelines**: https://rust-lang.github.io/api-guidelines/