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,415 @@
1
+ ---
2
+ name: aws-s3
3
+ description: AWS S3 object storage for file uploads, downloads, presigned URLs, and CDN integration. Use when building file storage, media uploads, static asset hosting, backups, or integrating with S3-compatible services (MinIO, Cloudflare R2). Triggers on S3, presigned URL, file upload, bucket, multipart upload, object storage.
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # AWS S3
8
+
9
+ Amazon S3 (Simple Storage Service) is object storage for any file type at any scale. This skill covers the AWS SDK v3 for JavaScript/TypeScript, which is the current standard. SDK v2 is deprecated.
10
+
11
+ ## Installation
12
+
13
+ ```bash
14
+ pnpm add @aws-sdk/client-s3 @aws-sdk/s3-request-presigner
15
+ # For multipart uploads:
16
+ pnpm add @aws-sdk/lib-storage
17
+ ```
18
+
19
+ ## Client Configuration
20
+
21
+ ```typescript
22
+ import { S3Client } from '@aws-sdk/client-s3';
23
+
24
+ const s3 = new S3Client({
25
+ region: process.env.AWS_REGION ?? 'us-east-1',
26
+ // Credentials resolved automatically from:
27
+ // 1. Environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
28
+ // 2. Shared credentials file (~/.aws/credentials)
29
+ // 3. IAM role (EC2, ECS, Lambda)
30
+ });
31
+ ```
32
+
33
+ ### S3-Compatible Services
34
+
35
+ ```typescript
36
+ // Cloudflare R2
37
+ const r2 = new S3Client({
38
+ region: 'auto',
39
+ endpoint: `https://${process.env.CF_ACCOUNT_ID}.r2.cloudflarestorage.com`,
40
+ credentials: {
41
+ accessKeyId: process.env.R2_ACCESS_KEY_ID!,
42
+ secretAccessKey: process.env.R2_SECRET_ACCESS_KEY!,
43
+ },
44
+ });
45
+
46
+ // MinIO (self-hosted)
47
+ const minio = new S3Client({
48
+ region: 'us-east-1',
49
+ endpoint: 'http://localhost:9000',
50
+ credentials: {
51
+ accessKeyId: process.env.MINIO_ACCESS_KEY!,
52
+ secretAccessKey: process.env.MINIO_SECRET_KEY!,
53
+ },
54
+ forcePathStyle: true, // Required for MinIO
55
+ });
56
+ ```
57
+
58
+ ## Basic Operations
59
+
60
+ ### Upload an Object
61
+
62
+ ```typescript
63
+ import { PutObjectCommand } from '@aws-sdk/client-s3';
64
+
65
+ await s3.send(new PutObjectCommand({
66
+ Bucket: 'my-bucket',
67
+ Key: 'uploads/avatar.png',
68
+ Body: fileBuffer,
69
+ ContentType: 'image/png',
70
+ Metadata: { 'uploaded-by': 'user-123' },
71
+ }));
72
+ ```
73
+
74
+ ### Download an Object
75
+
76
+ ```typescript
77
+ import { GetObjectCommand } from '@aws-sdk/client-s3';
78
+
79
+ const response = await s3.send(new GetObjectCommand({
80
+ Bucket: 'my-bucket',
81
+ Key: 'uploads/avatar.png',
82
+ }));
83
+
84
+ // response.Body is a ReadableStream
85
+ const bytes = await response.Body?.transformToByteArray();
86
+ const text = await response.Body?.transformToString();
87
+ ```
88
+
89
+ ### Delete an Object
90
+
91
+ ```typescript
92
+ import { DeleteObjectCommand, DeleteObjectsCommand } from '@aws-sdk/client-s3';
93
+
94
+ // Single delete
95
+ await s3.send(new DeleteObjectCommand({
96
+ Bucket: 'my-bucket',
97
+ Key: 'uploads/avatar.png',
98
+ }));
99
+
100
+ // Bulk delete (up to 1000 objects per request)
101
+ await s3.send(new DeleteObjectsCommand({
102
+ Bucket: 'my-bucket',
103
+ Delete: {
104
+ Objects: [
105
+ { Key: 'uploads/a.png' },
106
+ { Key: 'uploads/b.png' },
107
+ ],
108
+ },
109
+ }));
110
+ ```
111
+
112
+ ### List Objects
113
+
114
+ ```typescript
115
+ import { ListObjectsV2Command } from '@aws-sdk/client-s3';
116
+
117
+ const response = await s3.send(new ListObjectsV2Command({
118
+ Bucket: 'my-bucket',
119
+ Prefix: 'uploads/',
120
+ MaxKeys: 100,
121
+ }));
122
+
123
+ for (const object of response.Contents ?? []) {
124
+ console.log(object.Key, object.Size, object.LastModified);
125
+ }
126
+
127
+ // Paginate through all results
128
+ let continuationToken: string | undefined;
129
+ do {
130
+ const page = await s3.send(new ListObjectsV2Command({
131
+ Bucket: 'my-bucket',
132
+ Prefix: 'uploads/',
133
+ ContinuationToken: continuationToken,
134
+ }));
135
+ // process page.Contents
136
+ continuationToken = page.NextContinuationToken;
137
+ } while (continuationToken);
138
+ ```
139
+
140
+ ### Head Object (Metadata Only)
141
+
142
+ ```typescript
143
+ import { HeadObjectCommand } from '@aws-sdk/client-s3';
144
+
145
+ const head = await s3.send(new HeadObjectCommand({
146
+ Bucket: 'my-bucket',
147
+ Key: 'uploads/avatar.png',
148
+ }));
149
+ console.log(head.ContentLength, head.ContentType, head.Metadata);
150
+ ```
151
+
152
+ ## Presigned URLs
153
+
154
+ Presigned URLs grant temporary access to private objects without exposing credentials. This is the standard pattern for browser-based uploads and downloads.
155
+
156
+ ### Presigned Download
157
+
158
+ ```typescript
159
+ import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
160
+ import { GetObjectCommand } from '@aws-sdk/client-s3';
161
+
162
+ const downloadUrl = await getSignedUrl(s3, new GetObjectCommand({
163
+ Bucket: 'my-bucket',
164
+ Key: 'uploads/avatar.png',
165
+ }), {
166
+ expiresIn: 3600, // URL valid for 1 hour (seconds)
167
+ });
168
+ // Return this URL to the client for direct download
169
+ ```
170
+
171
+ ### Presigned Upload
172
+
173
+ ```typescript
174
+ import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
175
+ import { PutObjectCommand } from '@aws-sdk/client-s3';
176
+
177
+ const uploadUrl = await getSignedUrl(s3, new PutObjectCommand({
178
+ Bucket: 'my-bucket',
179
+ Key: `uploads/${userId}/${filename}`,
180
+ ContentType: 'image/png',
181
+ }), {
182
+ expiresIn: 600, // 10 minutes to complete upload
183
+ });
184
+
185
+ // Client uploads directly to S3:
186
+ // await fetch(uploadUrl, { method: 'PUT', body: file, headers: { 'Content-Type': 'image/png' } });
187
+ ```
188
+
189
+ **Anti-pattern**: Never pass presigned URLs in query strings or logs. They contain temporary credentials. Serve them over HTTPS only and set short expiration times.
190
+
191
+ ## Multipart Uploads
192
+
193
+ For files larger than 100MB, use multipart uploads. The `@aws-sdk/lib-storage` package handles chunking, parallelism, and resume automatically.
194
+
195
+ ```typescript
196
+ import { Upload } from '@aws-sdk/lib-storage';
197
+
198
+ const upload = new Upload({
199
+ client: s3,
200
+ params: {
201
+ Bucket: 'my-bucket',
202
+ Key: 'videos/large-file.mp4',
203
+ Body: readableStream,
204
+ ContentType: 'video/mp4',
205
+ },
206
+ queueSize: 4, // Parallel upload threads
207
+ partSize: 10 * 1024 * 1024, // 10MB per part (minimum 5MB)
208
+ });
209
+
210
+ upload.on('httpUploadProgress', (progress) => {
211
+ console.log(`${progress.loaded}/${progress.total} bytes`);
212
+ });
213
+
214
+ await upload.done();
215
+ ```
216
+
217
+ ## CORS Configuration
218
+
219
+ Required for browser-based direct uploads via presigned URLs:
220
+
221
+ ```typescript
222
+ import { PutBucketCorsCommand } from '@aws-sdk/client-s3';
223
+
224
+ await s3.send(new PutBucketCorsCommand({
225
+ Bucket: 'my-bucket',
226
+ CORSConfiguration: {
227
+ CORSRules: [
228
+ {
229
+ AllowedOrigins: ['https://myapp.com'],
230
+ AllowedMethods: ['GET', 'PUT', 'POST'],
231
+ AllowedHeaders: ['*'],
232
+ ExposeHeaders: ['ETag'],
233
+ MaxAgeSeconds: 3600,
234
+ },
235
+ ],
236
+ },
237
+ }));
238
+ ```
239
+
240
+ ## Bucket Policy
241
+
242
+ ```typescript
243
+ import { PutBucketPolicyCommand } from '@aws-sdk/client-s3';
244
+
245
+ // Public read for a specific prefix (e.g., static assets)
246
+ await s3.send(new PutBucketPolicyCommand({
247
+ Bucket: 'my-bucket',
248
+ Policy: JSON.stringify({
249
+ Version: '2012-10-17',
250
+ Statement: [
251
+ {
252
+ Sid: 'PublicReadAssets',
253
+ Effect: 'Allow',
254
+ Principal: '*',
255
+ Action: 's3:GetObject',
256
+ Resource: 'arn:aws:s3:::my-bucket/public/*',
257
+ },
258
+ ],
259
+ }),
260
+ }));
261
+ ```
262
+
263
+ ## Lifecycle Rules
264
+
265
+ Automatically transition or expire objects:
266
+
267
+ ```typescript
268
+ import { PutBucketLifecycleConfigurationCommand } from '@aws-sdk/client-s3';
269
+
270
+ await s3.send(new PutBucketLifecycleConfigurationCommand({
271
+ Bucket: 'my-bucket',
272
+ LifecycleConfiguration: {
273
+ Rules: [
274
+ {
275
+ ID: 'archive-old-logs',
276
+ Status: 'Enabled',
277
+ Filter: { Prefix: 'logs/' },
278
+ Transitions: [
279
+ { Days: 30, StorageClass: 'STANDARD_IA' },
280
+ { Days: 90, StorageClass: 'GLACIER' },
281
+ ],
282
+ Expiration: { Days: 365 },
283
+ },
284
+ {
285
+ ID: 'cleanup-temp',
286
+ Status: 'Enabled',
287
+ Filter: { Prefix: 'tmp/' },
288
+ Expiration: { Days: 1 },
289
+ },
290
+ {
291
+ ID: 'abort-incomplete-uploads',
292
+ Status: 'Enabled',
293
+ Filter: { Prefix: '' },
294
+ AbortIncompleteMultipartUpload: { DaysAfterInitiation: 7 },
295
+ },
296
+ ],
297
+ },
298
+ }));
299
+ ```
300
+
301
+ ## Versioning
302
+
303
+ ```typescript
304
+ import { PutBucketVersioningCommand } from '@aws-sdk/client-s3';
305
+
306
+ await s3.send(new PutBucketVersioningCommand({
307
+ Bucket: 'my-bucket',
308
+ VersioningConfiguration: { Status: 'Enabled' },
309
+ }));
310
+
311
+ // Retrieve a specific version
312
+ import { GetObjectCommand } from '@aws-sdk/client-s3';
313
+ const response = await s3.send(new GetObjectCommand({
314
+ Bucket: 'my-bucket',
315
+ Key: 'config.json',
316
+ VersionId: 'abc123',
317
+ }));
318
+ ```
319
+
320
+ ## Server-Side Encryption
321
+
322
+ ```typescript
323
+ // SSE-S3 (AWS-managed keys) — simplest, no extra cost
324
+ await s3.send(new PutObjectCommand({
325
+ Bucket: 'my-bucket',
326
+ Key: 'secret.pdf',
327
+ Body: fileBuffer,
328
+ ServerSideEncryption: 'AES256',
329
+ }));
330
+
331
+ // SSE-KMS (customer-managed keys via KMS)
332
+ await s3.send(new PutObjectCommand({
333
+ Bucket: 'my-bucket',
334
+ Key: 'secret.pdf',
335
+ Body: fileBuffer,
336
+ ServerSideEncryption: 'aws:kms',
337
+ SSEKMSKeyId: 'arn:aws:kms:us-east-1:123456:key/abc-def',
338
+ }));
339
+ ```
340
+
341
+ ## CloudFront CDN Integration
342
+
343
+ Serve S3 objects through CloudFront for global caching and HTTPS:
344
+
345
+ 1. Create a CloudFront Origin Access Control (OAC)
346
+ 2. Point CloudFront origin to the S3 bucket
347
+ 3. Update bucket policy to allow CloudFront access only
348
+
349
+ ```json
350
+ {
351
+ "Version": "2012-10-17",
352
+ "Statement": [{
353
+ "Sid": "AllowCloudFrontOAC",
354
+ "Effect": "Allow",
355
+ "Principal": { "Service": "cloudfront.amazonaws.com" },
356
+ "Action": "s3:GetObject",
357
+ "Resource": "arn:aws:s3:::my-bucket/*",
358
+ "Condition": {
359
+ "StringEquals": {
360
+ "AWS:SourceArn": "arn:aws:cloudfront::123456:distribution/EDFDVBD6EXAMPLE"
361
+ }
362
+ }
363
+ }]
364
+ }
365
+ ```
366
+
367
+ ## Event Notifications
368
+
369
+ Trigger Lambda, SQS, or SNS on S3 events:
370
+
371
+ ```typescript
372
+ import { PutBucketNotificationConfigurationCommand } from '@aws-sdk/client-s3';
373
+
374
+ await s3.send(new PutBucketNotificationConfigurationCommand({
375
+ Bucket: 'my-bucket',
376
+ NotificationConfiguration: {
377
+ LambdaFunctionConfigurations: [
378
+ {
379
+ LambdaFunctionArn: 'arn:aws:lambda:us-east-1:123456:function:process-upload',
380
+ Events: ['s3:ObjectCreated:*'],
381
+ Filter: {
382
+ Key: { FilterRules: [{ Name: 'prefix', Value: 'uploads/' }] },
383
+ },
384
+ },
385
+ ],
386
+ },
387
+ }));
388
+ ```
389
+
390
+ ## Anti-Patterns
391
+
392
+ | Anti-Pattern | Why It Fails | Correct Approach |
393
+ |-------------|-------------|-----------------|
394
+ | Using SDK v2 (`aws-sdk`) | Deprecated, large bundle, no tree-shaking | Use `@aws-sdk/client-s3` (v3) |
395
+ | Storing files in the database | DB bloat, slow queries, expensive backups | Store in S3, save the key in DB |
396
+ | Public buckets without policy scoping | Full bucket exposure | Restrict `Principal` and `Resource` in policy |
397
+ | Long-lived presigned URLs | Security risk if URL leaks | Set `expiresIn` to minutes, not days |
398
+ | Not setting `ContentType` on upload | Files download instead of display in browser | Always set `ContentType` explicitly |
399
+ | Listing all objects without pagination | Timeout on large buckets | Use `ContinuationToken` pagination |
400
+ | Not aborting incomplete multipart uploads | Phantom storage charges | Add lifecycle rule to abort after N days |
401
+ | Using `forcePathStyle` with AWS S3 | Path-style is deprecated for AWS | Only use `forcePathStyle` for MinIO/local |
402
+
403
+ ## Decision Guide
404
+
405
+ | Need | S3 Feature |
406
+ |------|-----------|
407
+ | Browser direct upload | Presigned PUT URL + CORS |
408
+ | Browser direct download | Presigned GET URL |
409
+ | Large file upload (>100MB) | Multipart upload via `@aws-sdk/lib-storage` |
410
+ | Global low-latency reads | CloudFront CDN in front of S3 |
411
+ | Automatic cleanup of old files | Lifecycle rules with expiration |
412
+ | File version history | Bucket versioning |
413
+ | Trigger processing on upload | Event notifications to Lambda/SQS |
414
+ | Encryption at rest | SSE-S3 (default) or SSE-KMS (custom keys) |
415
+ | S3 locally for development | MinIO with `forcePathStyle: true` |