sinapse-ai 9.4.0 → 9.5.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 (266) hide show
  1. package/.claude/CLAUDE.md +10 -4
  2. package/.claude/hooks/enforce-architecture-first.py +197 -197
  3. package/.claude/hooks/enforce-git-push-authority.sh +25 -4
  4. package/.claude/hooks/mind-clone-governance.py +193 -193
  5. package/.claude/hooks/read-protection.py +152 -152
  6. package/.claude/hooks/sql-governance.py +183 -183
  7. package/.claude/hooks/verify-packages.cjs +83 -0
  8. package/.claude/hooks/write-path-validation.py +195 -195
  9. package/.claude/rules/hook-governance.md +1 -0
  10. package/.claude/rules/mandatory-delegation.md +24 -0
  11. package/.claude/rules/project-intelligence.md +63 -0
  12. package/.claude/rules/response-format.md +4 -0
  13. package/.claude/rules/safe-collaboration.md +4 -2
  14. package/.claude/rules/security-data-protection.md +18 -0
  15. package/.claude/rules/squad-awareness.md +93 -67
  16. package/.claude/rules/token-economy.md +148 -0
  17. package/.codex/agents/analyst.md +90 -0
  18. package/.codex/agents/architect.md +78 -0
  19. package/.codex/agents/data-engineer.md +38 -0
  20. package/.codex/agents/developer.md +97 -0
  21. package/.codex/agents/devops.md +121 -0
  22. package/.codex/agents/product-lead.md +27 -0
  23. package/.codex/agents/project-lead.md +28 -0
  24. package/.codex/agents/quality-gate.md +89 -0
  25. package/.codex/agents/sprint-lead.md +28 -0
  26. package/.codex/agents/squad-creator.md +58 -0
  27. package/.codex/agents/ux-design-expert.md +28 -0
  28. package/.sinapse-ai/core/code-intel/registry-syncer.js +56 -3
  29. package/.sinapse-ai/core/doctor/checks/agent-memory.js +5 -1
  30. package/.sinapse-ai/core/doctor/checks/claude-md.js +4 -1
  31. package/.sinapse-ai/core/doctor/checks/code-intel.js +5 -1
  32. package/.sinapse-ai/core/doctor/checks/commands-count.js +4 -1
  33. package/.sinapse-ai/core/doctor/checks/constitution-consistency.js +4 -1
  34. package/.sinapse-ai/core/doctor/checks/core-config.js +4 -1
  35. package/.sinapse-ai/core/doctor/checks/entity-registry.js +6 -1
  36. package/.sinapse-ai/core/doctor/checks/git-hooks.js +5 -1
  37. package/.sinapse-ai/core/doctor/checks/graph-dashboard.js +4 -1
  38. package/.sinapse-ai/core/doctor/checks/hooks-claude-count.js +5 -1
  39. package/.sinapse-ai/core/doctor/checks/ide-sync.js +4 -1
  40. package/.sinapse-ai/core/doctor/checks/node-version.js +4 -1
  41. package/.sinapse-ai/core/doctor/checks/npm-packages.js +4 -1
  42. package/.sinapse-ai/core/doctor/checks/rules-files.js +4 -1
  43. package/.sinapse-ai/core/doctor/checks/settings-json.js +4 -1
  44. package/.sinapse-ai/core/doctor/checks/skills-count.js +4 -1
  45. package/.sinapse-ai/core/doctor/index.js +157 -50
  46. package/.sinapse-ai/core/ids/registry-updater.js +6 -1
  47. package/.sinapse-ai/core/logger/index.js +319 -0
  48. package/.sinapse-ai/core/orchestration/terminal-spawner.js +2 -2
  49. package/.sinapse-ai/core/telemetry/index.js +247 -0
  50. package/.sinapse-ai/data/entity-registry.yaml +1384 -944
  51. package/.sinapse-ai/development/agents/architect.md +5 -0
  52. package/.sinapse-ai/development/agents/data-engineer.md +38 -0
  53. package/.sinapse-ai/development/agents/developer.md +28 -0
  54. package/.sinapse-ai/development/agents/devops.md +4 -0
  55. package/.sinapse-ai/development/agents/product-lead.md +27 -0
  56. package/.sinapse-ai/development/agents/project-lead.md +28 -0
  57. package/.sinapse-ai/development/agents/quality-gate.md +4 -0
  58. package/.sinapse-ai/development/agents/sprint-lead/MEMORY.md +8 -0
  59. package/.sinapse-ai/development/agents/sprint-lead.md +28 -0
  60. package/.sinapse-ai/development/agents/squad-creator.md +58 -0
  61. package/.sinapse-ai/development/agents/ux-design-expert.md +28 -0
  62. package/.sinapse-ai/development/knowledge-base/agent-communication-protocol.md +127 -0
  63. package/.sinapse-ai/development/knowledge-base/database-scaling-patterns.md +374 -0
  64. package/.sinapse-ai/development/knowledge-base/environment-deployment-patterns.md +353 -0
  65. package/.sinapse-ai/development/knowledge-base/gotchas-patterns.md +224 -0
  66. package/.sinapse-ai/development/knowledge-base/infrastructure-decision-framework.md +221 -0
  67. package/.sinapse-ai/development/knowledge-base/security-pre-deploy-checklist.md +410 -0
  68. package/.sinapse-ai/development/knowledge-base/software-architecture-patterns.md +299 -0
  69. package/.sinapse-ai/development/knowledge-base/token-economy-guide.md +198 -0
  70. package/.sinapse-ai/development/scripts/populate-entity-registry.js +5 -1
  71. package/.sinapse-ai/development/skills/captcha-handler.md +82 -0
  72. package/.sinapse-ai/development/skills/chrome-brain.md +81 -0
  73. package/.sinapse-ai/development/skills/deploy-readiness.md +93 -0
  74. package/.sinapse-ai/development/skills/model-router.md +92 -0
  75. package/.sinapse-ai/development/skills/sinapse-methodology.md +175 -0
  76. package/.sinapse-ai/development/skills/story-fast-track.md +71 -0
  77. package/.sinapse-ai/development/tasks/dev-develop-story.md +10 -0
  78. package/.sinapse-ai/development/tasks/environment-promotion-pipeline.md +582 -0
  79. package/.sinapse-ai/development/tasks/generate-agent-handoff.md +223 -0
  80. package/.sinapse-ai/development/tasks/infrastructure-assessment.md +432 -0
  81. package/.sinapse-ai/development/tasks/load-testing-setup.md +611 -0
  82. package/.sinapse-ai/development/tasks/observability-blueprint.md +562 -0
  83. package/.sinapse-ai/development/templates/legal/breach-notification-tmpl.md +113 -0
  84. package/.sinapse-ai/development/templates/legal/privacy-policy-tmpl.md +93 -0
  85. package/.sinapse-ai/development/templates/legal/terms-of-service-tmpl.md +85 -0
  86. package/.sinapse-ai/development/templates/service-template/README.md.hbs +159 -159
  87. package/.sinapse-ai/development/templates/service-template/__tests__/index.test.ts.hbs +238 -238
  88. package/.sinapse-ai/development/templates/service-template/client.ts.hbs +404 -404
  89. package/.sinapse-ai/development/templates/service-template/errors.ts.hbs +183 -183
  90. package/.sinapse-ai/development/templates/service-template/index.ts.hbs +121 -121
  91. package/.sinapse-ai/development/templates/service-template/package.json.hbs +88 -88
  92. package/.sinapse-ai/development/templates/service-template/types.ts.hbs +146 -146
  93. package/.sinapse-ai/development/templates/squad-template/LICENSE +22 -22
  94. package/.sinapse-ai/development/workflows/story-development-cycle.yaml +40 -1
  95. package/.sinapse-ai/hooks/ids-post-commit.js +22 -0
  96. package/.sinapse-ai/infrastructure/contracts/compatibility/README.md +42 -0
  97. package/.sinapse-ai/infrastructure/contracts/compatibility/sinapse-current.yaml +35 -0
  98. package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/claude-free-tracked.cmd +127 -127
  99. package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/deepseek-proxy.cmd +71 -71
  100. package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/deepseek-usage.cmd +51 -51
  101. package/.sinapse-ai/infrastructure/scripts/pr-review-ai.js +16 -13
  102. package/.sinapse-ai/infrastructure/scripts/setup-project-infra.js +128 -0
  103. package/.sinapse-ai/infrastructure/scripts/test-discovery.js +8 -3
  104. package/.sinapse-ai/infrastructure/scripts/validate-manifest-parity.js +380 -0
  105. package/.sinapse-ai/infrastructure/scripts/validate-parity.js +76 -25
  106. package/.sinapse-ai/infrastructure/templates/coderabbit.yaml.template +280 -280
  107. package/.sinapse-ai/infrastructure/templates/config/env.example +16 -0
  108. package/.sinapse-ai/infrastructure/templates/config/gitignore-additions.tmpl +59 -0
  109. package/.sinapse-ai/infrastructure/templates/github/CODEOWNERS.template +12 -0
  110. package/.sinapse-ai/infrastructure/templates/github/PULL_REQUEST_TEMPLATE.md +29 -0
  111. package/.sinapse-ai/infrastructure/templates/github/ci-template.yml +77 -0
  112. package/.sinapse-ai/infrastructure/templates/github/issue-templates/bug_report.md +34 -0
  113. package/.sinapse-ai/infrastructure/templates/github/issue-templates/feature_request.md +19 -0
  114. package/.sinapse-ai/infrastructure/templates/github-workflows/ci.yml.template +170 -170
  115. package/.sinapse-ai/infrastructure/templates/github-workflows/pr-automation.yml.template +331 -331
  116. package/.sinapse-ai/infrastructure/templates/github-workflows/release.yml.template +197 -197
  117. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +19 -19
  118. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-node.tmpl +86 -86
  119. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-python.tmpl +146 -146
  120. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-sinapse-base.tmpl +64 -64
  121. package/.sinapse-ai/infrastructure/templates/sinapse-sync.yaml.template +183 -183
  122. package/.sinapse-ai/install-manifest.yaml +275 -140
  123. package/.sinapse-ai/local-config.yaml.template +65 -65
  124. package/.sinapse-ai/monitor/hooks/lib/__init__.py +2 -2
  125. package/.sinapse-ai/monitor/hooks/lib/enrich.py +59 -59
  126. package/.sinapse-ai/monitor/hooks/lib/send_event.py +48 -48
  127. package/.sinapse-ai/monitor/hooks/notification.py +30 -30
  128. package/.sinapse-ai/monitor/hooks/post_tool_use.py +46 -46
  129. package/.sinapse-ai/monitor/hooks/pre_compact.py +30 -30
  130. package/.sinapse-ai/monitor/hooks/pre_tool_use.py +41 -41
  131. package/.sinapse-ai/monitor/hooks/stop.py +30 -30
  132. package/.sinapse-ai/monitor/hooks/subagent_stop.py +30 -30
  133. package/.sinapse-ai/monitor/hooks/user_prompt_submit.py +39 -39
  134. package/.sinapse-ai/product/templates/adr.hbs +126 -126
  135. package/.sinapse-ai/product/templates/dbdr.hbs +242 -242
  136. package/.sinapse-ai/product/templates/epic.hbs +213 -213
  137. package/.sinapse-ai/product/templates/pmdr.hbs +187 -187
  138. package/.sinapse-ai/product/templates/prd-v2.0.hbs +217 -217
  139. package/.sinapse-ai/product/templates/prd.hbs +202 -202
  140. package/.sinapse-ai/product/templates/story-tmpl.yaml +59 -0
  141. package/.sinapse-ai/product/templates/story.hbs +264 -264
  142. package/.sinapse-ai/product/templates/task.hbs +171 -171
  143. package/.sinapse-ai/product/templates/tmpl-comment-on-examples.sql +159 -159
  144. package/.sinapse-ai/product/templates/tmpl-migration-script.sql +92 -92
  145. package/.sinapse-ai/product/templates/tmpl-rls-granular-policies.sql +105 -105
  146. package/.sinapse-ai/product/templates/tmpl-rls-kiss-policy.sql +11 -11
  147. package/.sinapse-ai/product/templates/tmpl-rls-roles.sql +136 -136
  148. package/.sinapse-ai/product/templates/tmpl-rls-simple.sql +78 -78
  149. package/.sinapse-ai/product/templates/tmpl-rls-tenant.sql +153 -153
  150. package/.sinapse-ai/product/templates/tmpl-rollback-script.sql +78 -78
  151. package/.sinapse-ai/product/templates/tmpl-seed-data.sql +141 -141
  152. package/.sinapse-ai/product/templates/tmpl-smoke-test.sql +17 -17
  153. package/.sinapse-ai/product/templates/tmpl-staging-copy-merge.sql +140 -140
  154. package/.sinapse-ai/product/templates/tmpl-stored-proc.sql +141 -141
  155. package/.sinapse-ai/product/templates/tmpl-trigger.sql +153 -153
  156. package/.sinapse-ai/product/templates/tmpl-view-materialized.sql +134 -134
  157. package/.sinapse-ai/product/templates/tmpl-view.sql +178 -178
  158. package/.sinapse-ai/scripts/diagnostics/health-dashboard/package-lock.json +427 -355
  159. package/LICENSE +34 -34
  160. package/README.en.md +167 -20
  161. package/README.md +190 -22
  162. package/bin/cli.js +510 -196
  163. package/bin/postinstall.js +564 -0
  164. package/bin/sinapse-cli +283 -283
  165. package/bin/sinapse-graph.js +9 -0
  166. package/bin/sinapse-init.js +36 -4
  167. package/bin/sinapse-minimal.js +20 -9
  168. package/bin/sinapse.js +202 -122
  169. package/bin/utils/deprecation-warning.js +46 -0
  170. package/bin/utils/pre-push-safety.js +14 -0
  171. package/docs/TELEMETRY.md +131 -0
  172. package/docs/chrome-brain-upgrade-plan.md +624 -0
  173. package/docs/framework/orqx-plan.md +1 -1
  174. package/docs/installation/chrome-brain.md +17 -7
  175. package/docs/mega-upgrade-orchestration-plan.md +71 -0
  176. package/docs/pt/contributing.md +20 -0
  177. package/docs/research-synthesis-for-upgrade.md +511 -0
  178. package/docs/security-audit-report.md +306 -0
  179. package/package.json +20 -8
  180. package/packages/installer/src/config/configure-environment.js +19 -44
  181. package/packages/installer/src/detection/detect-project-type.js +181 -63
  182. package/packages/installer/src/installer/manifest-signature.js +32 -17
  183. package/packages/installer/src/wizard/i18n.js +12 -0
  184. package/packages/installer/src/wizard/ide-config-generator.js +8 -39
  185. package/packages/installer/src/wizard/index.js +119 -14
  186. package/packages/installer/src/wizard/questions.js +2 -3
  187. package/packages/installer/tests/integration/environment-configuration.test.js +7 -5
  188. package/packages/installer/tests/unit/detection/detect-project-type.test.js +138 -1
  189. package/packages/installer/tests/unit/doctor/doctor-orchestrator.test.js +3 -3
  190. package/packages/sinapse-install/bin/edmcp.js +0 -0
  191. package/packages/sinapse-install/bin/sinapse-install.js +0 -0
  192. package/packages/sinapse-pro-cli/bin/sinapse-pro.js +0 -0
  193. package/scripts/check-markdown-links.py +353 -353
  194. package/scripts/coverage-report-summary.js +169 -0
  195. package/scripts/generate-install-manifest.js +6 -2
  196. package/scripts/release-readiness.js +169 -0
  197. package/scripts/test-install-matrix-local.sh +153 -0
  198. package/scripts/validate-install-docs.js +394 -0
  199. package/scripts/validate-no-external-refs.js +376 -0
  200. package/scripts/validate-squad-orqx.js +302 -0
  201. package/scripts/validate-story-meta.js +263 -0
  202. package/squads/claude-code-mastery/CHANGELOG.md +1 -1
  203. package/squads/claude-code-mastery/README.md +2 -2
  204. package/squads/claude-code-mastery/squad.yaml +1 -1
  205. package/squads/squad-artdir/README.md +90 -0
  206. package/squads/squad-artdir/agents/accessibility-guardian.md +184 -0
  207. package/squads/squad-artdir/agents/artdir-orqx.md +145 -0
  208. package/squads/squad-artdir/agents/color-psychologist.md +166 -0
  209. package/squads/squad-artdir/agents/cro-persuasion.md +161 -0
  210. package/squads/squad-artdir/agents/design-system-architect.md +100 -0
  211. package/squads/squad-artdir/agents/ia-architect.md +169 -0
  212. package/squads/squad-artdir/agents/interaction-designer.md +162 -0
  213. package/squads/squad-artdir/agents/layout-engineer.md +163 -0
  214. package/squads/squad-artdir/agents/motion-architect.md +185 -0
  215. package/squads/squad-artdir/agents/platform-aesthetic-director.md +84 -0
  216. package/squads/squad-artdir/agents/premium-packaging-strategist.md +107 -0
  217. package/squads/squad-artdir/agents/product-surface-director.md +86 -0
  218. package/squads/squad-artdir/agents/type-systemist.md +138 -0
  219. package/squads/squad-artdir/agents/visual-strategist.md +127 -0
  220. package/squads/squad-artdir/checklists/seven-pillars-validation-checklist.md +172 -0
  221. package/squads/squad-artdir/knowledge-base/case-nyo-ia-reference.md +289 -0
  222. package/squads/squad-artdir/knowledge-base/deliverables-templates.md +457 -0
  223. package/squads/squad-artdir/knowledge-base/motion-technique-catalog.md +247 -0
  224. package/squads/squad-artdir/knowledge-base/premium-packaging-principles.md +133 -0
  225. package/squads/squad-artdir/knowledge-base/psychological-toolkit.md +229 -0
  226. package/squads/squad-artdir/knowledge-base/saas-art-direction-canon.md +242 -0
  227. package/squads/squad-artdir/knowledge-base/seven-pillars-framework.md +289 -0
  228. package/squads/squad-artdir/knowledge-base/ten-pillars-framework.md +221 -0
  229. package/squads/squad-artdir/package.json +20 -0
  230. package/squads/squad-artdir/squad.yaml +271 -0
  231. package/squads/squad-artdir/tasks/audit-conversion.md +97 -0
  232. package/squads/squad-artdir/tasks/audit-drift-multi-surface.md +55 -0
  233. package/squads/squad-artdir/tasks/consult-saas-canon.md +54 -0
  234. package/squads/squad-artdir/tasks/create-art-direction-brief.md +110 -0
  235. package/squads/squad-artdir/tasks/create-premium-packaging-brief.md +61 -0
  236. package/squads/squad-artdir/tasks/create-wireflow.md +84 -0
  237. package/squads/squad-artdir/tasks/design-color-system.md +81 -0
  238. package/squads/squad-artdir/tasks/design-product-surface.md +60 -0
  239. package/squads/squad-artdir/tasks/design-token-system.md +58 -0
  240. package/squads/squad-artdir/tasks/diagnose-visual-language.md +92 -0
  241. package/squads/squad-artdir/tasks/first-5-minutes-choreography.md +65 -0
  242. package/squads/squad-artdir/tasks/specify-motion-system.md +84 -0
  243. package/squads/squad-artdir/tasks/validate-against-pillars.md +143 -0
  244. package/squads/squad-artdir/templates/art-direction-brief-template.md +215 -0
  245. package/squads/squad-artdir/workflows/conversion-audit-cycle.yaml +78 -0
  246. package/squads/squad-artdir/workflows/full-art-direction-cycle.yaml +98 -0
  247. package/squads/squad-artdir/workflows/saas-platform-art-direction-cycle.yaml +174 -0
  248. package/squads/squad-brand/knowledge-base/ai-visual-generation-canon.md +234 -0
  249. package/squads/squad-brand/squad.yaml +20 -6
  250. package/squads/squad-claude/knowledge-base/context-window-optimization.md +1 -1
  251. package/squads/squad-claude/knowledge-base/swarm-orchestration-patterns.md +2 -2
  252. package/squads/squad-content/knowledge-base/ai-native-content-loop.md +220 -0
  253. package/squads/squad-content/knowledge-base/signal-intelligence-v2.md +234 -0
  254. package/squads/squad-content/knowledge-base/task-ownership-map.md +235 -0
  255. package/squads/squad-content/squad.yaml +187 -27
  256. package/squads/squad-copy/knowledge-base/ai-copy-human-loop-canon.md +235 -0
  257. package/squads/squad-copy/squad.yaml +19 -4
  258. package/squads/squad-design/knowledge-base/cross-surface-token-canon.md +209 -0
  259. package/squads/squad-design/squad.yaml +19 -4
  260. package/.sinapse-ai/core/registry/service-registry.json +0 -6346
  261. package/.sinapse-ai/data/registry-update-log.jsonl +0 -1323
  262. package/.sinapse-ai/manifests/agents.csv +0 -29
  263. package/.sinapse-ai/manifests/tasks.csv +0 -204
  264. package/.sinapse-ai/manifests/workers.csv +0 -196
  265. package/squads/squad-growth/tasks/calculate-sample-size.md +0 -121
  266. package/squads/squad-paidmedia/tasks/calculate-sample-size.md +0 -57
@@ -0,0 +1,374 @@
1
+ # Database Scaling Patterns
2
+
3
+ > **Agente(s):** @data-engineer (Tensor)
4
+ > **Fonte:** supabase-at-scale.md, database-selection-architecture.md
5
+ > **Uso:** Consultar ao projetar schemas, otimizar queries, escolher banco de dados ou escalar Supabase
6
+
7
+ ---
8
+
9
+ ## 1. Regra "Start with PostgreSQL"
10
+
11
+ PostgreSQL cobre ~90% dos casos de uso. E a recomendacao default para QUALQUER projeto novo.
12
+
13
+ **Por que PostgreSQL primeiro:**
14
+ - #1 banco mais desejado (Stack Overflow 2026)
15
+ - 45.55% market share entre devs (superou MySQL em 2025)
16
+ - JSONB para dados semi-estruturados (evita precisar de MongoDB)
17
+ - pgvector para AI/ML (evita precisar de Pinecone)
18
+ - Full-text search nativo (evita Elasticsearch para casos simples)
19
+ - PostGIS para geoespacial
20
+ - pg_cron para agendamento
21
+
22
+ **Quando adicionar outro banco:**
23
+ ```
24
+ PostgreSQL resolve seu problema?
25
+ |-- SIM --> Use PostgreSQL
26
+ +-- NAO --> Qual e o problema especifico?
27
+ |-- Latencia < 1ms para cache --> Redis / Upstash
28
+ |-- Busca full-text com typo tolerance --> Meilisearch / Typesense
29
+ |-- Time-series em volume extremo --> TimescaleDB (extension) ou InfluxDB
30
+ |-- Key-value com escala ilimitada --> DynamoDB
31
+ |-- Embeddings/vector search em escala --> Pinecone (se pgvector nao basta)
32
+ |-- Write throughput extremo (IoT) --> ScyllaDB / Cassandra
33
+ |-- Multi-region active-active com SQL --> CockroachDB / Aurora DSQL
34
+ +-- Schema variavel com nested docs --> MongoDB Atlas
35
+ ```
36
+
37
+ ---
38
+
39
+ ## 2. Database Selection Matrix
40
+
41
+ | Caso de Uso | Banco Primario | Alternativa | Evitar |
42
+ |------------|---------------|-------------|--------|
43
+ | CRUD web app | PostgreSQL (Supabase) | MySQL | MongoDB (overengineering) |
44
+ | Cache / Sessions | Redis (Upstash) | Memcached | PostgreSQL (lento para cache) |
45
+ | Busca textual < 10M docs | PostgreSQL FTS | Meilisearch | Elasticsearch (overhead) |
46
+ | Busca textual > 10M docs | Meilisearch / Typesense | Elasticsearch | PostgreSQL FTS (lento) |
47
+ | AI embeddings (< 5M vectors) | pgvector (PostgreSQL) | -- | Pinecone (custo) |
48
+ | AI embeddings (> 5M vectors) | Pinecone / pgvectorscale | Qdrant | pgvector puro (performance) |
49
+ | Real-time sync | Supabase Realtime | Firestore | WebSocket custom |
50
+ | Event logging | PostgreSQL + partitioning | TimescaleDB | DynamoDB (overengineering) |
51
+ | IoT / metrics volume extremo | TimescaleDB / InfluxDB | ScyllaDB | PostgreSQL (nao escala) |
52
+ | E-commerce catalogo variavel | PostgreSQL JSONB | MongoDB | DynamoDB (queries limitadas) |
53
+ | Mobile offline-first | Firestore | -- | Supabase (offline imaturo) |
54
+ | Multi-region global SQL | CockroachDB / Aurora DSQL | -- | PostgreSQL simples |
55
+
56
+ ---
57
+
58
+ ## 3. Supabase Scaling Playbook
59
+
60
+ ### 3.1 Connection Pooling (Supavisor)
61
+
62
+ | Modo | Porta | Prepared Statements | Ideal Para |
63
+ |------|-------|---------------------|------------|
64
+ | Transaction | 6543 | Nao | Serverless, APIs, Edge Functions |
65
+ | Session | 5432 | Sim | ORMs (Prisma, Drizzle) |
66
+ | Direct | conexao direta | Sim | Migrations, DDL |
67
+
68
+ **Regras:**
69
+ - Next.js API Routes / Edge Functions --> Transaction mode (6543)
70
+ - ORM com prepared statements --> Session mode (5432)
71
+ - Migrations / DDL --> Direct connection (sem pooler)
72
+ - Pool size default: 15. Para producao intensa, ajustar via dashboard.
73
+
74
+ ### 3.2 Read Replicas
75
+
76
+ **Quando usar:**
77
+
78
+ | Cenario | Solucao | Motivo |
79
+ |---------|---------|--------|
80
+ | Alto volume de leitura | Read Replicas | Distribui carga de SELECT |
81
+ | Queries complexas pesadas | Compute maior | CPU/RAM por query |
82
+ | Usuarios globais | Replicas multi-regiao | Reduz latencia (geo-routing) |
83
+ | Writes pesados | Compute maior | Replicas nao aceitam writes |
84
+ | Analytics/reporting | Replica dedicada | Isola carga analitica |
85
+
86
+ **Mudanca abril 2025:** Geo-routing automatico (vs round-robin anterior).
87
+
88
+ ### 3.3 Table Partitioning
89
+
90
+ | Tipo | Quando Usar | Exemplo |
91
+ |------|-------------|---------|
92
+ | Range | Dados temporais | `PARTITION BY RANGE (created_at)` |
93
+ | List | Categorias discretas | `PARTITION BY LIST (region)` |
94
+ | Hash | Distribuicao uniforme | `PARTITION BY HASH (user_id)` |
95
+
96
+ ```sql
97
+ -- Exemplo: particoes mensais para eventos
98
+ CREATE TABLE events (
99
+ id BIGINT GENERATED ALWAYS AS IDENTITY,
100
+ tenant_id UUID NOT NULL,
101
+ payload JSONB,
102
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
103
+ ) PARTITION BY RANGE (created_at);
104
+
105
+ CREATE TABLE events_2025_01 PARTITION OF events
106
+ FOR VALUES FROM ('2025-01-01') TO ('2025-02-01');
107
+ ```
108
+
109
+ **Regra:** Particionar quando tabela > 10M rows ou > 10GB.
110
+
111
+ ### 3.4 Vacuum Tuning
112
+
113
+ | Parametro | Default | Producao | Motivo |
114
+ |----------|---------|----------|--------|
115
+ | `autovacuum_max_workers` | 3 | 5 | Mais workers paralelos |
116
+ | `autovacuum_naptime` | 1min | 45s | Checa mais frequente |
117
+ | `vacuum_cost_limit` | 200 | 2000 | Vacuum mais agressivo |
118
+ | `autovacuum_vacuum_scale_factor` | 0.2 | 0.05 | Dispara com 5% dead tuples |
119
+
120
+ ```sql
121
+ -- Tuning por tabela (alto volume de writes)
122
+ ALTER TABLE events SET (
123
+ autovacuum_vacuum_scale_factor = 0.01,
124
+ autovacuum_vacuum_threshold = 1000,
125
+ autovacuum_analyze_scale_factor = 0.02
126
+ );
127
+ ```
128
+
129
+ ---
130
+
131
+ ## 4. RLS Optimization Patterns
132
+
133
+ ### Impacto Real
134
+
135
+ | Cenario | Sem otimizacao | Com otimizacao | Melhoria |
136
+ |---------|---------------|----------------|----------|
137
+ | SELECT com RLS em 1M rows | > 3 min (timeout) | 2ms | 90.000x |
138
+ | auth.uid() sem indice | Seq Scan | Index Scan | 100x+ |
139
+ | Funcao sem SELECT wrapper | Chamada por row | Cached (initPlan) | 1000x+ |
140
+
141
+ ### Regra #1: SEMPRE indexe colunas em RLS policies
142
+
143
+ ```sql
144
+ CREATE INDEX idx_orders_user_id ON orders USING btree (user_id);
145
+ CREATE INDEX idx_orders_tenant_id ON orders USING btree (tenant_id);
146
+ ```
147
+
148
+ ### Regra #2: SELECT wrapper para cache de funcoes
149
+
150
+ ```sql
151
+ -- ANTI-PATTERN (executado para CADA row)
152
+ CREATE POLICY "user_access" ON orders
153
+ FOR ALL USING (auth.uid() = user_id);
154
+
155
+ -- CORRETO (cached, executado UMA vez)
156
+ CREATE POLICY "user_access" ON orders
157
+ FOR ALL USING ((SELECT auth.uid()) = user_id);
158
+ ```
159
+
160
+ ### Regra #3: Security definer para subqueries complexas
161
+
162
+ ```sql
163
+ -- ANTI-PATTERN (subquery por row)
164
+ CREATE POLICY "team_access" ON documents
165
+ FOR ALL USING (
166
+ team_id IN (SELECT team_id FROM team_members WHERE user_id = auth.uid())
167
+ );
168
+
169
+ -- CORRETO (funcao cacheada)
170
+ CREATE OR REPLACE FUNCTION get_user_team_ids()
171
+ RETURNS UUID[]
172
+ LANGUAGE sql SECURITY DEFINER STABLE
173
+ SET search_path = ''
174
+ AS $$
175
+ SELECT ARRAY(
176
+ SELECT team_id FROM public.team_members
177
+ WHERE user_id = (SELECT auth.uid())
178
+ );
179
+ $$;
180
+
181
+ CREATE POLICY "team_access" ON documents
182
+ FOR ALL USING (team_id = ANY((SELECT get_user_team_ids())));
183
+ ```
184
+
185
+ ---
186
+
187
+ ## 5. Multi-Tenant Decision Tree
188
+
189
+ ```
190
+ Quantos tenants esperados?
191
+ |
192
+ +-- < 10 --> Schema por tenant (maximo isolamento)
193
+ | Cada tenant = schema PostgreSQL separado
194
+ | Pro: isolamento total, RLS por schema
195
+ | Con: migrations em N schemas, complexidade operacional
196
+ |
197
+ +-- 10-1000 --> Coluna tenant_id (shared database)
198
+ | Todas as tabelas tem coluna tenant_id
199
+ | RLS filtra por tenant via JWT custom claims
200
+ | Pro: simples, escala bem, uma migration
201
+ | Con: risco de data leak se RLS falhar
202
+ |
203
+ +-- > 1000 --> Database por tenant (se budget permitir)
204
+ | Ou: shared database com partitioning por tenant
205
+ | Pro: isolamento completo, escala independente
206
+ | Con: custo alto, gestao complexa
207
+ ```
208
+
209
+ ### Pattern Recomendado: Tenant via JWT Claims
210
+
211
+ ```sql
212
+ -- RLS policy com tenant isolation
213
+ CREATE POLICY "tenant_isolation" ON orders
214
+ FOR ALL USING (
215
+ tenant_id = (
216
+ SELECT (auth.jwt() -> 'app_metadata' ->> 'tenant_id')::uuid
217
+ )
218
+ );
219
+
220
+ -- Indice obrigatorio
221
+ CREATE INDEX idx_orders_tenant ON orders (tenant_id);
222
+ ```
223
+
224
+ ---
225
+
226
+ ## 6. Index Strategy Quick-Reference
227
+
228
+ ### Tipos de Indice
229
+
230
+ | Tipo | Operadores | Quando Usar |
231
+ |------|-----------|-------------|
232
+ | B-Tree | `=`, `<`, `>`, `BETWEEN`, `ORDER BY` | Default para a maioria das queries |
233
+ | GIN | `@>`, `?`, `@@` | Arrays, JSONB, full-text search |
234
+ | GiST | `<<`, `>>`, `&&` | Geometria, ranges |
235
+ | BRIN | `<`, `>`, `=` | Dados naturalmente ordenados (time-series) |
236
+ | Hash | `=` apenas | Igualdade exata (sessions, tokens) |
237
+
238
+ ### Patterns Avancados
239
+
240
+ ```sql
241
+ -- Partial Index (indexa apenas linhas relevantes)
242
+ CREATE INDEX idx_active_users ON users (email)
243
+ WHERE status = 'active';
244
+
245
+ -- Covering Index (evita table lookup)
246
+ CREATE INDEX idx_orders_lookup ON orders (user_id, created_at)
247
+ INCLUDE (total, status);
248
+
249
+ -- Expression Index
250
+ CREATE INDEX idx_users_lower_email ON users (LOWER(email));
251
+
252
+ -- Composite Index (mais seletiva primeiro)
253
+ CREATE INDEX idx_products_cat_price ON products (category_id, price DESC);
254
+ ```
255
+
256
+ ### Regras de Ouro
257
+
258
+ 1. Cada indice desacelera writes (INSERT, UPDATE, DELETE)
259
+ 2. Monitore com `pg_stat_user_indexes` para indices nao utilizados
260
+ 3. Use `EXPLAIN ANALYZE` antes e depois de criar indices
261
+ 4. Indices em colunas boolean raramente ajudam
262
+ 5. Composite: coluna mais seletiva primeiro
263
+
264
+ ---
265
+
266
+ ## 7. Query Optimization Checklist
267
+
268
+ ### Diagnostico
269
+
270
+ ```sql
271
+ -- Habilitar tracking de queries lentas
272
+ CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
273
+
274
+ -- Top 10 queries mais lentas
275
+ SELECT calls, mean_exec_time::numeric(10,2) AS avg_ms,
276
+ total_exec_time::numeric(10,2) AS total_ms, query
277
+ FROM pg_stat_statements
278
+ ORDER BY total_exec_time DESC LIMIT 10;
279
+
280
+ -- Analisar plano de execucao
281
+ EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
282
+ SELECT * FROM orders WHERE user_id = $1 AND created_at > NOW() - '30 days'::interval;
283
+ ```
284
+
285
+ ### Checklist de Otimizacao
286
+
287
+ - [ ] `EXPLAIN ANALYZE` mostra Index Scan (nao Seq Scan)?
288
+ - [ ] Indice existe para colunas em WHERE/JOIN/ORDER BY?
289
+ - [ ] N+1 queries eliminadas (usar JOINs ou batch)?
290
+ - [ ] CTEs nao estao forçando materializacao desnecessaria?
291
+ - [ ] Materialized views para dashboards pesados?
292
+ - [ ] Connection pool configurado corretamente?
293
+ - [ ] Vacuum rodando com frequencia adequada?
294
+ - [ ] Dead tuples abaixo de 5% em tabelas criticas?
295
+
296
+ ### Materialized Views para Dashboards
297
+
298
+ ```sql
299
+ CREATE MATERIALIZED VIEW mv_daily_revenue AS
300
+ SELECT DATE_TRUNC('day', created_at) AS day, tenant_id,
301
+ SUM(total) AS revenue, COUNT(*) AS order_count
302
+ FROM orders WHERE status = 'completed'
303
+ GROUP BY 1, 2;
304
+
305
+ -- Indice unico para REFRESH CONCURRENTLY
306
+ CREATE UNIQUE INDEX idx_mv_daily ON mv_daily_revenue (day, tenant_id);
307
+
308
+ -- Refresh sem lock
309
+ REFRESH MATERIALIZED VIEW CONCURRENTLY mv_daily_revenue;
310
+ ```
311
+
312
+ ---
313
+
314
+ ## 8. Redis/Cache Patterns
315
+
316
+ ### Quando Adicionar Cache
317
+
318
+ | Sinal | Acao |
319
+ |-------|------|
320
+ | Mesma query repetida > 100x/min | Cache-aside com Redis |
321
+ | API response > 200ms para dados estáticos | Stale-while-revalidate |
322
+ | Rate limiting necessario | Redis sorted sets ou Upstash Ratelimit |
323
+ | Session management em serverless | Upstash Redis (HTTP API) |
324
+
325
+ ### Cache-Aside Pattern
326
+
327
+ ```javascript
328
+ async function getUser(userId) {
329
+ const cached = await redis.get(`user:${userId}`);
330
+ if (cached) return JSON.parse(cached);
331
+
332
+ const user = await db.query('SELECT * FROM users WHERE id = $1', [userId]);
333
+ await redis.set(`user:${userId}`, JSON.stringify(user), 'EX', 3600);
334
+ return user;
335
+ }
336
+ ```
337
+
338
+ **Upstash** para serverless (Edge Functions, Vercel): HTTP REST API, sem TCP connection.
339
+
340
+ ---
341
+
342
+ ## 9. Testing RLS com pgTAP
343
+
344
+ ```sql
345
+ BEGIN;
346
+ SELECT plan(3);
347
+
348
+ SELECT tests.create_supabase_user('user_a', 'a@test.com');
349
+ SELECT tests.create_supabase_user('user_b', 'b@test.com');
350
+
351
+ -- User A insere dados
352
+ SELECT tests.authenticate_as('user_a');
353
+ INSERT INTO orders (user_id, total) VALUES ((SELECT auth.uid()), 100);
354
+
355
+ -- User B insere dados
356
+ SELECT tests.authenticate_as('user_b');
357
+ INSERT INTO orders (user_id, total) VALUES ((SELECT auth.uid()), 200);
358
+
359
+ -- User A so ve seus pedidos
360
+ SELECT tests.authenticate_as('user_a');
361
+ SELECT is((SELECT COUNT(*) FROM orders)::int, 1,
362
+ 'User A should only see own orders');
363
+
364
+ SELECT * FROM finish();
365
+ ROLLBACK;
366
+ ```
367
+
368
+ ---
369
+
370
+ ## 10. Cross-References
371
+
372
+ - Infrastructure tiers e quando graduar: ver `infrastructure-decision-framework.md`
373
+ - Secrets para database credentials: ver `environment-deployment-patterns.md`
374
+ - RLS validation no deploy: ver `security-pre-deploy-checklist.md`