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,141 @@
1
+ ---
2
+ name: typescript-advanced-patterns
3
+ description: Advanced TypeScript patterns for type-safe, maintainable code using sophisticated type system features. Use when building type-safe APIs, implementing complex domain models, or leveraging TypeScript's advanced type capabilities.
4
+ ---
5
+
6
+ # TypeScript Advanced Patterns
7
+
8
+ Expert guidance for leveraging TypeScript's advanced type system features to build robust, type-safe applications with sophisticated type inference, compile-time guarantees, and maintainable domain models.
9
+
10
+ ## When to Use This Skill
11
+
12
+ - Building type-safe APIs with strict contracts and validation
13
+ - Implementing complex domain models with compile-time enforcement
14
+ - Creating reusable libraries with sophisticated type inference
15
+ - Enforcing business rules through the type system
16
+ - Building type-safe state machines and builders
17
+ - Developing framework integrations requiring advanced types
18
+ - Implementing runtime validation with type-level guarantees
19
+
20
+ ## Core Concepts
21
+
22
+ TypeScript's type system enables compile-time safety through:
23
+
24
+ 1. **Conditional Types**: Type selection based on conditions (type-level if/else)
25
+ 2. **Mapped Types**: Transform object types systematically (Partial, Readonly, Pick, Omit)
26
+ 3. **Template Literal Types**: String manipulation at compile time
27
+ 4. **Type Guards**: Runtime checking with type narrowing (`value is Type`)
28
+ 5. **Discriminated Unions**: Type-safe state machines with exhaustiveness checking
29
+ 6. **Branded Types**: Nominal types for preventing primitive mixing
30
+ 7. **Builder Pattern**: Type-safe fluent APIs with progressive type constraints
31
+ 8. **Advanced Generics**: Constraints, inference, and higher-kinded type patterns
32
+ 9. **Utility Types**: Deep transformations and compositions
33
+ 10. **Type Inference**: Const assertions and contextual typing
34
+
35
+ ## Quick Reference
36
+
37
+ Load detailed references on-demand:
38
+
39
+ | Topic | Reference File |
40
+ |-------|----------------|
41
+ | Conditional Types | `skills/typescript-advanced-patterns/references/conditional-types.md` |
42
+ | Mapped Types | `skills/typescript-advanced-patterns/references/mapped-types.md` |
43
+ | Template Literal Types | `skills/typescript-advanced-patterns/references/template-literal-types.md` |
44
+ | Type Guards | `skills/typescript-advanced-patterns/references/type-guards.md` |
45
+ | Discriminated Unions | `skills/typescript-advanced-patterns/references/discriminated-unions.md` |
46
+ | Branded Types | `skills/typescript-advanced-patterns/references/branded-types.md` |
47
+ | Builder Pattern | `skills/typescript-advanced-patterns/references/builder-pattern.md` |
48
+ | Advanced Generics | `skills/typescript-advanced-patterns/references/advanced-generics.md` |
49
+ | Utility Types | `skills/typescript-advanced-patterns/references/utility-types.md` |
50
+ | Type Inference | `skills/typescript-advanced-patterns/references/type-inference.md` |
51
+ | Decorators | `skills/typescript-advanced-patterns/references/decorators.md` |
52
+ | Performance Best Practices | `skills/typescript-advanced-patterns/references/performance-best-practices.md` |
53
+ | Common Pitfalls | `skills/typescript-advanced-patterns/references/common-pitfalls.md` |
54
+ | Testing Types | `skills/typescript-advanced-patterns/references/testing-types.md` |
55
+
56
+ ## Implementation Workflow
57
+
58
+ ### 1. Identify Pattern Need
59
+ - Analyze type safety requirements
60
+ - Identify runtime vs compile-time constraints
61
+ - Choose appropriate pattern from Quick Reference
62
+
63
+ ### 2. Load Reference
64
+ - Read specific reference file for pattern
65
+ - Review examples and use cases
66
+ - Understand trade-offs
67
+
68
+ ### 3. Implement Pattern
69
+ - Start simple, add complexity as needed
70
+ - Use strict mode (`tsconfig.json` with `"strict": true`)
71
+ - Test with type assertions
72
+
73
+ ### 4. Validate
74
+ - Ensure type errors caught at compile time
75
+ - Verify runtime behavior matches types
76
+ - Check performance (avoid excessive type complexity)
77
+
78
+ ### 5. Document
79
+ - Add JSDoc comments for public APIs
80
+ - Document type constraints and assumptions
81
+ - Provide usage examples
82
+
83
+ ## Common Mistakes to Avoid
84
+
85
+ 1. **Using `any` instead of `unknown`**: Loses all type safety
86
+ - Use `unknown` and type guards instead
87
+
88
+ 2. **Type assertions without validation**: Unsafe runtime behavior
89
+ - Prefer type guards (`value is Type`) over `as Type`
90
+
91
+ 3. **Overusing generics**: Unnecessary complexity
92
+ - Only use generics when types truly vary
93
+
94
+ 4. **Deep type nesting**: Slow compilation, hard to debug
95
+ - Keep types composable and shallow
96
+
97
+ 5. **Forgetting `readonly`**: Accidental mutations
98
+ - Mark immutable data structures as `readonly`
99
+
100
+ 6. **Not enabling strict mode**: Missing null checks and type errors
101
+ - Always use `"strict": true` in `tsconfig.json`
102
+
103
+ 7. **Mixing type and interface incorrectly**: Confusing semantics
104
+ - Use `type` for unions/utilities, `interface` for object shapes
105
+
106
+ ## Quick Patterns
107
+
108
+ ### Type-Safe ID
109
+ ```typescript
110
+ type UserId = string & { readonly __brand: 'UserId' };
111
+ function createUserId(id: string): UserId { return id as UserId; }
112
+ ```
113
+
114
+ ### Discriminated Union
115
+ ```typescript
116
+ type State =
117
+ | { status: 'loading' }
118
+ | { status: 'success'; data: string }
119
+ | { status: 'error'; error: Error };
120
+ ```
121
+
122
+ ### Mapped Type Transformation
123
+ ```typescript
124
+ type Readonly<T> = { readonly [P in keyof T]: T[P] };
125
+ type Partial<T> = { [P in keyof T]?: T[P] };
126
+ ```
127
+
128
+ ### Type Guard
129
+ ```typescript
130
+ function isString(value: unknown): value is string {
131
+ return typeof value === 'string';
132
+ }
133
+ ```
134
+
135
+ ## Resources
136
+
137
+ - **TypeScript Handbook**: https://www.typescriptlang.org/docs/handbook/
138
+ - **Type Challenges**: https://github.com/type-challenges/type-challenges
139
+ - **ts-toolbelt**: Advanced type utilities library
140
+ - **zod**: Runtime validation with TypeScript inference
141
+ - **tsd**: Test TypeScript type definitions
@@ -0,0 +1,90 @@
1
+ # Advanced Generics
2
+
3
+ **Generic constraints and inference:**
4
+
5
+ ## Basic Constraints
6
+
7
+ ```typescript
8
+ // Constrain to objects with specific keys
9
+ function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
10
+ return obj[key];
11
+ }
12
+
13
+ const user = { name: 'John', age: 30 };
14
+ const name = getProperty(user, 'name'); // Type: string
15
+ // const invalid = getProperty(user, 'invalid'); // Error
16
+
17
+ // Multiple constraints
18
+ function merge<T extends object, U extends object>(
19
+ obj1: T,
20
+ obj2: U
21
+ ): T & U {
22
+ return { ...obj1, ...obj2 };
23
+ }
24
+ ```
25
+
26
+ ## Generic Inference
27
+
28
+ ```typescript
29
+ // Infer from function implementation
30
+ function createAction<T extends string, P>(
31
+ type: T,
32
+ payload: P
33
+ ) {
34
+ return { type, payload };
35
+ }
36
+
37
+ const action = createAction('UPDATE_USER', { id: 1, name: 'John' });
38
+ // Type: { type: 'UPDATE_USER'; payload: { id: number; name: string } }
39
+
40
+ // Infer generic types from usage
41
+ function useState<S>(
42
+ initialState: S | (() => S)
43
+ ): [S, (newState: S) => void] {
44
+ // Implementation
45
+ }
46
+
47
+ const [count, setCount] = useState(0); // S inferred as number
48
+ const [user, setUser] = useState({ name: 'John' }); // S inferred as { name: string }
49
+ ```
50
+
51
+ ## Higher-Kinded Types Pattern
52
+
53
+ ```typescript
54
+ // Type-safe data structures
55
+ interface Functor<F> {
56
+ map<A, B>(fa: F extends { value: any } ? F : never, f: (a: A) => B): any;
57
+ }
58
+
59
+ interface Box<T> {
60
+ value: T;
61
+ }
62
+
63
+ const boxFunctor: Functor<Box<any>> = {
64
+ map<A, B>(fa: Box<A>, f: (a: A) => B): Box<B> {
65
+ return { value: f(fa.value) };
66
+ }
67
+ };
68
+ ```
69
+
70
+ ## Conditional Generic Types
71
+
72
+ ```typescript
73
+ // Return type varies based on parameter
74
+ type ApiResponse<T extends string> =
75
+ T extends 'json' ? object :
76
+ T extends 'text' ? string :
77
+ T extends 'blob' ? Blob :
78
+ never;
79
+
80
+ async function fetch<T extends 'json' | 'text' | 'blob'>(
81
+ url: string,
82
+ type: T
83
+ ): Promise<ApiResponse<T>> {
84
+ // Implementation
85
+ }
86
+
87
+ const json = await fetch('/api', 'json'); // Type: object
88
+ const text = await fetch('/api', 'text'); // Type: string
89
+ const blob = await fetch('/api', 'blob'); // Type: Blob
90
+ ```
@@ -0,0 +1,57 @@
1
+ # Branded Types
2
+
3
+ **Create nominal types for type safety:**
4
+
5
+ ## Preventing Primitive Mixing
6
+
7
+ ```typescript
8
+ // Prevent mixing similar primitive types
9
+ type UserId = string & { readonly __brand: 'UserId' };
10
+ type PostId = string & { readonly __brand: 'PostId' };
11
+
12
+ function createUserId(id: string): UserId {
13
+ return id as UserId;
14
+ }
15
+
16
+ function createPostId(id: string): PostId {
17
+ return id as PostId;
18
+ }
19
+
20
+ function getUser(userId: UserId): User {
21
+ // Implementation
22
+ }
23
+
24
+ const userId = createUserId('user-123');
25
+ const postId = createPostId('post-456');
26
+
27
+ getUser(userId); // Valid
28
+ // getUser(postId); // Type error: PostId not assignable to UserId
29
+ ```
30
+
31
+ ## Validation with Branded Types
32
+
33
+ ```typescript
34
+ type ValidEmail = string & { readonly __brand: 'ValidEmail' };
35
+ type ValidURL = string & { readonly __brand: 'ValidURL' };
36
+
37
+ function validateEmail(email: string): ValidEmail | null {
38
+ const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
39
+ return regex.test(email) ? (email as ValidEmail) : null;
40
+ }
41
+
42
+ function sendEmail(to: ValidEmail, subject: string, body: string) {
43
+ // Guaranteed to have valid email
44
+ }
45
+
46
+ const email = validateEmail('user@example.com');
47
+ if (email) {
48
+ sendEmail(email, 'Hello', 'World');
49
+ }
50
+ ```
51
+
52
+ ## Benefits
53
+
54
+ - Compile-time prevention of ID mixing
55
+ - Self-documenting code through type names
56
+ - Enforced validation at boundaries
57
+ - Zero runtime overhead
@@ -0,0 +1,71 @@
1
+ # Builder Pattern with Types
2
+
3
+ **Type-safe fluent APIs:**
4
+
5
+ ## Query Builder Example
6
+
7
+ ```typescript
8
+ interface QueryBuilder<TSelect = unknown, TWhere = unknown> {
9
+ select<T>(): QueryBuilder<T, TWhere>;
10
+ where<T>(): QueryBuilder<TSelect, T>;
11
+ execute(): TSelect extends unknown ? never : Promise<TSelect[]>;
12
+ }
13
+
14
+ // Usage ensures select() called before execute()
15
+ const results = await query
16
+ .select<User>()
17
+ .where<{ age: number }>()
18
+ .execute(); // Type: Promise<User[]>
19
+
20
+ // query.execute(); // Error: select() not called
21
+ ```
22
+
23
+ ## Progressive Builder Types
24
+
25
+ ```typescript
26
+ interface ConfigBuilder<
27
+ THost extends string | undefined = undefined,
28
+ TPort extends number | undefined = undefined
29
+ > {
30
+ host: THost;
31
+ port: TPort;
32
+
33
+ withHost<H extends string>(host: H): ConfigBuilder<H, TPort>;
34
+ withPort<P extends number>(port: P): ConfigBuilder<THost, P>;
35
+
36
+ build: THost extends string
37
+ ? TPort extends number
38
+ ? () => { host: THost; port: TPort }
39
+ : never
40
+ : never;
41
+ }
42
+
43
+ const config = new ConfigBuilder()
44
+ .withHost('localhost')
45
+ .withPort(3000)
46
+ .build(); // Valid
47
+
48
+ // new ConfigBuilder().build(); // Error: host and port required
49
+ ```
50
+
51
+ ## Type State Pattern
52
+
53
+ ```typescript
54
+ // Enforce method call order at compile time
55
+ interface EmptyBuilder {
56
+ addItem<T>(item: T): FilledBuilder<T>;
57
+ }
58
+
59
+ interface FilledBuilder<T> {
60
+ addItem(item: T): FilledBuilder<T>;
61
+ build(): T[];
62
+ }
63
+
64
+ // Must call addItem() before build()
65
+ const items = builder
66
+ .addItem('first')
67
+ .addItem('second')
68
+ .build(); // Valid
69
+
70
+ // builder.build(); // Error: can't build empty
71
+ ```
@@ -0,0 +1,135 @@
1
+ # Common Pitfalls
2
+
3
+ ## Type Assertions vs Type Guards
4
+
5
+ ```typescript
6
+ // Bad - unsafe type assertion
7
+ const value = input as string;
8
+
9
+ // Good - safe type guard
10
+ function assertString(value: unknown): asserts value is string {
11
+ if (typeof value !== 'string') {
12
+ throw new Error('Not a string');
13
+ }
14
+ }
15
+
16
+ assertString(input);
17
+ // input is now narrowed to string
18
+ ```
19
+
20
+ ## Any vs Unknown
21
+
22
+ ```typescript
23
+ // Bad - loses type safety
24
+ function process(data: any) {
25
+ return data.toUpperCase(); // No type checking
26
+ }
27
+
28
+ // Good - maintains type safety
29
+ function processUnknown(data: unknown) {
30
+ if (typeof data === 'string') {
31
+ return data.toUpperCase(); // Type guard required
32
+ }
33
+ throw new Error('Expected string');
34
+ }
35
+ ```
36
+
37
+ ## Overusing Generics
38
+
39
+ ```typescript
40
+ // Bad - unnecessary complexity
41
+ function add<T extends number, U extends number>(a: T, b: U): number {
42
+ return a + b;
43
+ }
44
+
45
+ // Good - simple and clear
46
+ function add(a: number, b: number): number {
47
+ return a + b;
48
+ }
49
+ ```
50
+
51
+ ## Incorrect Type Narrowing
52
+
53
+ ```typescript
54
+ // Bad - doesn't narrow type
55
+ function isString(value: any): boolean {
56
+ return typeof value === 'string';
57
+ }
58
+
59
+ // Good - properly narrows type
60
+ function isString(value: unknown): value is string {
61
+ return typeof value === 'string';
62
+ }
63
+ ```
64
+
65
+ ## Forgetting Readonly
66
+
67
+ ```typescript
68
+ // Bad - mutable when should be immutable
69
+ interface Config {
70
+ apiUrl: string;
71
+ timeout: number;
72
+ }
73
+
74
+ // Good - prevent accidental mutations
75
+ interface Config {
76
+ readonly apiUrl: string;
77
+ readonly timeout: number;
78
+ }
79
+ ```
80
+
81
+ ## Enum Pitfalls
82
+
83
+ ```typescript
84
+ // Bad - numeric enums allow invalid values
85
+ enum Status {
86
+ Active,
87
+ Inactive
88
+ }
89
+
90
+ const status: Status = 999; // Valid but meaningless
91
+
92
+ // Good - use string enums or const objects
93
+ enum Status {
94
+ Active = 'ACTIVE',
95
+ Inactive = 'INACTIVE'
96
+ }
97
+
98
+ // Or use const object with as const
99
+ const Status = {
100
+ Active: 'ACTIVE',
101
+ Inactive: 'INACTIVE'
102
+ } as const;
103
+ ```
104
+
105
+ ## Not Using Strict Mode
106
+
107
+ ```typescript
108
+ // Always enable in tsconfig.json
109
+ {
110
+ "compilerOptions": {
111
+ "strict": true,
112
+ "strictNullChecks": true,
113
+ "strictFunctionTypes": true,
114
+ "strictPropertyInitialization": true
115
+ }
116
+ }
117
+ ```
118
+
119
+ ## Type vs Interface Confusion
120
+
121
+ ```typescript
122
+ // Use type for unions, intersections, utilities
123
+ type ID = string | number;
124
+ type Point = { x: number } & { y: number };
125
+
126
+ // Use interface for object shapes that may be extended
127
+ interface User {
128
+ id: ID;
129
+ name: string;
130
+ }
131
+
132
+ interface Admin extends User {
133
+ permissions: string[];
134
+ }
135
+ ```
@@ -0,0 +1,27 @@
1
+ # Conditional Types
2
+
3
+ **Type selection based on conditions:**
4
+
5
+ ```typescript
6
+ type IsString<T> = T extends string ? true : false;
7
+
8
+ type A = IsString<string>; // true
9
+ type B = IsString<number>; // false
10
+
11
+ // Extract function return types
12
+ type ReturnTypeOf<T> = T extends (...args: any[]) => infer R ? R : never;
13
+
14
+ type Fn = () => { name: string; age: number };
15
+ type Result = ReturnTypeOf<Fn>; // { name: string; age: number }
16
+
17
+ // Extract array element types
18
+ type ElementOf<T> = T extends (infer E)[] ? E : never;
19
+
20
+ type Items = ElementOf<string[]>; // string
21
+ ```
22
+
23
+ ## Use Cases
24
+ - Type transformation and extraction
25
+ - Conditional API responses based on request types
26
+ - Generic utility type creation
27
+ - Framework integration types
@@ -0,0 +1,98 @@
1
+ # Decorators (Stage 3)
2
+
3
+ **Class and method decorators for cross-cutting concerns:**
4
+
5
+ ## Method Decorators
6
+
7
+ ```typescript
8
+ // Method decorator for logging
9
+ function log(
10
+ target: any,
11
+ propertyKey: string,
12
+ descriptor: PropertyDescriptor
13
+ ) {
14
+ const original = descriptor.value;
15
+
16
+ descriptor.value = function(...args: any[]) {
17
+ console.log(`Calling ${propertyKey} with`, args);
18
+ const result = original.apply(this, args);
19
+ console.log(`Result:`, result);
20
+ return result;
21
+ };
22
+
23
+ return descriptor;
24
+ }
25
+
26
+ class Calculator {
27
+ @log
28
+ add(a: number, b: number): number {
29
+ return a + b;
30
+ }
31
+ }
32
+ ```
33
+
34
+ ## Property Decorators
35
+
36
+ ```typescript
37
+ // Property decorator for validation
38
+ function validate(validator: (value: any) => boolean) {
39
+ return function(target: any, propertyKey: string) {
40
+ let value = target[propertyKey];
41
+
42
+ Object.defineProperty(target, propertyKey, {
43
+ get: () => value,
44
+ set: (newValue) => {
45
+ if (!validator(newValue)) {
46
+ throw new Error(`Invalid value for ${propertyKey}`);
47
+ }
48
+ value = newValue;
49
+ }
50
+ });
51
+ };
52
+ }
53
+
54
+ class User {
55
+ @validate(email => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email))
56
+ email: string;
57
+ }
58
+ ```
59
+
60
+ ## Class Decorators
61
+
62
+ ```typescript
63
+ // Class decorator for metadata
64
+ function sealed(constructor: Function) {
65
+ Object.seal(constructor);
66
+ Object.seal(constructor.prototype);
67
+ }
68
+
69
+ @sealed
70
+ class SealedClass {
71
+ constructor(public name: string) {}
72
+ }
73
+ ```
74
+
75
+ ## Decorator Factories
76
+
77
+ ```typescript
78
+ // Decorator with parameters
79
+ function component(config: { selector: string }) {
80
+ return function(constructor: Function) {
81
+ constructor.prototype.selector = config.selector;
82
+ };
83
+ }
84
+
85
+ @component({ selector: 'app-user' })
86
+ class UserComponent {
87
+ // selector property added at runtime
88
+ }
89
+ ```
90
+
91
+ ## Common Use Cases
92
+
93
+ - **Logging**: Automatic method call logging
94
+ - **Validation**: Property value validation
95
+ - **Memoization**: Cache method results
96
+ - **Authorization**: Check permissions before execution
97
+ - **Dependency Injection**: Inject dependencies into classes
98
+ - **Metadata**: Attach runtime metadata for frameworks
@@ -0,0 +1,62 @@
1
+ # Discriminated Unions
2
+
3
+ **Type-safe state machines and variants:**
4
+
5
+ ## State Machines
6
+
7
+ ```typescript
8
+ // State machine with exhaustive checking
9
+ type LoadingState =
10
+ | { status: 'idle' }
11
+ | { status: 'loading' }
12
+ | { status: 'success'; data: string[] }
13
+ | { status: 'error'; error: Error };
14
+
15
+ function renderState(state: LoadingState): string {
16
+ switch (state.status) {
17
+ case 'idle':
18
+ return 'Not started';
19
+ case 'loading':
20
+ return 'Loading...';
21
+ case 'success':
22
+ return `Loaded ${state.data.length} items`;
23
+ case 'error':
24
+ return `Error: ${state.error.message}`;
25
+ }
26
+ // Exhaustiveness checking ensures all cases handled
27
+ }
28
+ ```
29
+
30
+ ## Action Types
31
+
32
+ ```typescript
33
+ // API action types
34
+ type Action =
35
+ | { type: 'FETCH_USER'; payload: { userId: string } }
36
+ | { type: 'UPDATE_USER'; payload: { userId: string; data: Partial<User> } }
37
+ | { type: 'DELETE_USER'; payload: { userId: string } }
38
+ | { type: 'CLEAR_USERS' };
39
+
40
+ function reducer(state: State, action: Action): State {
41
+ switch (action.type) {
42
+ case 'FETCH_USER':
43
+ // action.payload is { userId: string }
44
+ return { ...state, loading: true };
45
+ case 'UPDATE_USER':
46
+ // action.payload is { userId: string; data: Partial<User> }
47
+ return updateUser(state, action.payload);
48
+ case 'DELETE_USER':
49
+ return deleteUser(state, action.payload.userId);
50
+ case 'CLEAR_USERS':
51
+ // action has no payload
52
+ return { ...state, users: [] };
53
+ }
54
+ }
55
+ ```
56
+
57
+ ## Best Practices
58
+
59
+ - Always include a discriminant property (e.g., `status`, `type`)
60
+ - Use string literal types for discriminant values
61
+ - Enable `strictNullChecks` for exhaustiveness checking
62
+ - Use `never` to ensure all cases are handled