tribunal-kit 2.4.6 → 3.1.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 (250) hide show
  1. package/.agent/ARCHITECTURE.md +99 -99
  2. package/.agent/GEMINI.md +52 -52
  3. package/.agent/agents/accessibility-reviewer.md +139 -86
  4. package/.agent/agents/ai-code-reviewer.md +160 -90
  5. package/.agent/agents/backend-specialist.md +164 -127
  6. package/.agent/agents/code-archaeologist.md +115 -73
  7. package/.agent/agents/database-architect.md +130 -110
  8. package/.agent/agents/debugger.md +137 -97
  9. package/.agent/agents/dependency-reviewer.md +78 -30
  10. package/.agent/agents/devops-engineer.md +161 -118
  11. package/.agent/agents/documentation-writer.md +151 -87
  12. package/.agent/agents/explorer-agent.md +117 -99
  13. package/.agent/agents/frontend-reviewer.md +127 -47
  14. package/.agent/agents/frontend-specialist.md +169 -109
  15. package/.agent/agents/game-developer.md +28 -164
  16. package/.agent/agents/logic-reviewer.md +87 -49
  17. package/.agent/agents/mobile-developer.md +151 -103
  18. package/.agent/agents/mobile-reviewer.md +133 -50
  19. package/.agent/agents/orchestrator.md +121 -110
  20. package/.agent/agents/penetration-tester.md +103 -77
  21. package/.agent/agents/performance-optimizer.md +136 -92
  22. package/.agent/agents/performance-reviewer.md +139 -69
  23. package/.agent/agents/product-manager.md +104 -70
  24. package/.agent/agents/product-owner.md +6 -25
  25. package/.agent/agents/project-planner.md +95 -95
  26. package/.agent/agents/qa-automation-engineer.md +174 -87
  27. package/.agent/agents/security-auditor.md +133 -129
  28. package/.agent/agents/seo-specialist.md +160 -99
  29. package/.agent/agents/sql-reviewer.md +132 -44
  30. package/.agent/agents/supervisor-agent.md +137 -109
  31. package/.agent/agents/swarm-worker-contracts.md +17 -17
  32. package/.agent/agents/swarm-worker-registry.md +46 -46
  33. package/.agent/agents/test-coverage-reviewer.md +132 -53
  34. package/.agent/agents/test-engineer.md +0 -21
  35. package/.agent/agents/type-safety-reviewer.md +143 -33
  36. package/.agent/patterns/generator.md +9 -9
  37. package/.agent/patterns/inversion.md +12 -12
  38. package/.agent/patterns/pipeline.md +9 -9
  39. package/.agent/patterns/reviewer.md +13 -13
  40. package/.agent/patterns/tool-wrapper.md +9 -9
  41. package/.agent/rules/GEMINI.md +63 -63
  42. package/.agent/scripts/__pycache__/auto_preview.cpython-311.pyc +0 -0
  43. package/.agent/scripts/__pycache__/bundle_analyzer.cpython-311.pyc +0 -0
  44. package/.agent/scripts/__pycache__/checklist.cpython-311.pyc +0 -0
  45. package/.agent/scripts/__pycache__/dependency_analyzer.cpython-311.pyc +0 -0
  46. package/.agent/scripts/__pycache__/security_scan.cpython-311.pyc +0 -0
  47. package/.agent/scripts/__pycache__/session_manager.cpython-311.pyc +0 -0
  48. package/.agent/scripts/__pycache__/skill_integrator.cpython-311.pyc +0 -0
  49. package/.agent/scripts/__pycache__/swarm_dispatcher.cpython-311.pyc +0 -0
  50. package/.agent/scripts/__pycache__/test_runner.cpython-311.pyc +0 -0
  51. package/.agent/scripts/__pycache__/verify_all.cpython-311.pyc +0 -0
  52. package/.agent/scripts/compress_skills.py +167 -0
  53. package/.agent/scripts/consolidate_skills.py +173 -0
  54. package/.agent/scripts/deep_compress.py +202 -0
  55. package/.agent/scripts/minify_context.py +80 -0
  56. package/.agent/scripts/security_scan.py +1 -1
  57. package/.agent/scripts/strip_tribunal.py +41 -0
  58. package/.agent/skills/agent-organizer/SKILL.md +60 -100
  59. package/.agent/skills/agentic-patterns/SKILL.md +0 -70
  60. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +108 -53
  61. package/.agent/skills/api-patterns/SKILL.md +197 -257
  62. package/.agent/skills/api-security-auditor/SKILL.md +125 -57
  63. package/.agent/skills/app-builder/SKILL.md +326 -50
  64. package/.agent/skills/app-builder/templates/SKILL.md +13 -15
  65. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +16 -16
  66. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +22 -22
  67. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +18 -18
  68. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +20 -20
  69. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +17 -17
  70. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +18 -18
  71. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +21 -21
  72. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +19 -19
  73. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +26 -26
  74. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +26 -26
  75. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +19 -19
  76. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +18 -18
  77. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +20 -20
  78. package/.agent/skills/appflow-wireframe/SKILL.md +71 -98
  79. package/.agent/skills/architecture/SKILL.md +161 -200
  80. package/.agent/skills/authentication-best-practices/SKILL.md +121 -54
  81. package/.agent/skills/bash-linux/SKILL.md +71 -166
  82. package/.agent/skills/behavioral-modes/SKILL.md +8 -69
  83. package/.agent/skills/brainstorming/SKILL.md +345 -127
  84. package/.agent/skills/building-native-ui/SKILL.md +125 -57
  85. package/.agent/skills/clean-code/SKILL.md +266 -149
  86. package/.agent/skills/code-review-checklist/SKILL.md +0 -62
  87. package/.agent/skills/config-validator/SKILL.md +73 -131
  88. package/.agent/skills/csharp-developer/SKILL.md +434 -73
  89. package/.agent/skills/database-design/SKILL.md +190 -275
  90. package/.agent/skills/deployment-procedures/SKILL.md +81 -158
  91. package/.agent/skills/devops-engineer/SKILL.md +255 -94
  92. package/.agent/skills/devops-incident-responder/SKILL.md +50 -69
  93. package/.agent/skills/doc.md +5 -5
  94. package/.agent/skills/documentation-templates/SKILL.md +19 -63
  95. package/.agent/skills/edge-computing/SKILL.md +75 -165
  96. package/.agent/skills/extract-design-system/SKILL.md +84 -58
  97. package/.agent/skills/framer-motion-expert/SKILL.md +195 -0
  98. package/.agent/skills/frontend-design/SKILL.md +151 -499
  99. package/.agent/skills/game-design-expert/SKILL.md +71 -0
  100. package/.agent/skills/game-engineering-expert/SKILL.md +88 -0
  101. package/.agent/skills/geo-fundamentals/SKILL.md +52 -178
  102. package/.agent/skills/github-operations/SKILL.md +197 -272
  103. package/.agent/skills/gsap-expert/SKILL.md +194 -0
  104. package/.agent/skills/i18n-localization/SKILL.md +60 -172
  105. package/.agent/skills/intelligent-routing/SKILL.md +123 -103
  106. package/.agent/skills/lint-and-validate/SKILL.md +8 -52
  107. package/.agent/skills/llm-engineering/SKILL.md +281 -195
  108. package/.agent/skills/local-first/SKILL.md +76 -159
  109. package/.agent/skills/mcp-builder/SKILL.md +48 -188
  110. package/.agent/skills/mobile-design/SKILL.md +213 -219
  111. package/.agent/skills/motion-engineering/SKILL.md +184 -0
  112. package/.agent/skills/nextjs-react-expert/SKILL.md +184 -203
  113. package/.agent/skills/nodejs-best-practices/SKILL.md +403 -185
  114. package/.agent/skills/observability/SKILL.md +211 -203
  115. package/.agent/skills/parallel-agents/SKILL.md +53 -146
  116. package/.agent/skills/performance-profiling/SKILL.md +171 -151
  117. package/.agent/skills/plan-writing/SKILL.md +49 -153
  118. package/.agent/skills/platform-engineer/SKILL.md +57 -103
  119. package/.agent/skills/playwright-best-practices/SKILL.md +110 -63
  120. package/.agent/skills/powershell-windows/SKILL.md +61 -179
  121. package/.agent/skills/python-patterns/SKILL.md +7 -35
  122. package/.agent/skills/python-pro/SKILL.md +273 -114
  123. package/.agent/skills/react-specialist/SKILL.md +227 -108
  124. package/.agent/skills/readme-builder/SKILL.md +15 -85
  125. package/.agent/skills/realtime-patterns/SKILL.md +216 -243
  126. package/.agent/skills/red-team-tactics/SKILL.md +10 -51
  127. package/.agent/skills/rust-pro/SKILL.md +525 -142
  128. package/.agent/skills/seo-fundamentals/SKILL.md +92 -153
  129. package/.agent/skills/server-management/SKILL.md +110 -166
  130. package/.agent/skills/shadcn-ui-expert/SKILL.md +154 -55
  131. package/.agent/skills/skill-creator/SKILL.md +18 -58
  132. package/.agent/skills/sql-pro/SKILL.md +543 -68
  133. package/.agent/skills/supabase-postgres-best-practices/SKILL.md +28 -68
  134. package/.agent/skills/swiftui-expert/SKILL.md +124 -57
  135. package/.agent/skills/systematic-debugging/SKILL.md +49 -151
  136. package/.agent/skills/tailwind-patterns/SKILL.md +433 -149
  137. package/.agent/skills/tdd-workflow/SKILL.md +63 -169
  138. package/.agent/skills/test-result-analyzer/SKILL.md +33 -73
  139. package/.agent/skills/testing-patterns/SKILL.md +437 -130
  140. package/.agent/skills/trend-researcher/SKILL.md +30 -71
  141. package/.agent/skills/ui-ux-pro-max/SKILL.md +0 -41
  142. package/.agent/skills/ui-ux-researcher/SKILL.md +51 -91
  143. package/.agent/skills/vue-expert/SKILL.md +225 -119
  144. package/.agent/skills/vulnerability-scanner/SKILL.md +264 -226
  145. package/.agent/skills/web-accessibility-auditor/SKILL.md +141 -58
  146. package/.agent/skills/web-design-guidelines/SKILL.md +17 -61
  147. package/.agent/skills/webapp-testing/SKILL.md +71 -196
  148. package/.agent/skills/whimsy-injector/SKILL.md +58 -132
  149. package/.agent/skills/workflow-optimizer/SKILL.md +28 -68
  150. package/.agent/workflows/api-tester.md +96 -224
  151. package/.agent/workflows/audit.md +81 -122
  152. package/.agent/workflows/brainstorm.md +69 -105
  153. package/.agent/workflows/changelog.md +65 -97
  154. package/.agent/workflows/create.md +73 -88
  155. package/.agent/workflows/debug.md +80 -111
  156. package/.agent/workflows/deploy.md +119 -92
  157. package/.agent/workflows/enhance.md +80 -91
  158. package/.agent/workflows/fix.md +68 -97
  159. package/.agent/workflows/generate.md +165 -164
  160. package/.agent/workflows/migrate.md +106 -109
  161. package/.agent/workflows/orchestrate.md +103 -86
  162. package/.agent/workflows/performance-benchmarker.md +77 -268
  163. package/.agent/workflows/plan.md +120 -98
  164. package/.agent/workflows/preview.md +39 -96
  165. package/.agent/workflows/refactor.md +105 -97
  166. package/.agent/workflows/review-ai.md +63 -102
  167. package/.agent/workflows/review.md +71 -110
  168. package/.agent/workflows/session.md +53 -113
  169. package/.agent/workflows/status.md +42 -88
  170. package/.agent/workflows/strengthen-skills.md +90 -51
  171. package/.agent/workflows/swarm.md +114 -129
  172. package/.agent/workflows/test.md +125 -102
  173. package/.agent/workflows/tribunal-backend.md +60 -78
  174. package/.agent/workflows/tribunal-database.md +62 -100
  175. package/.agent/workflows/tribunal-frontend.md +62 -82
  176. package/.agent/workflows/tribunal-full.md +56 -100
  177. package/.agent/workflows/tribunal-mobile.md +65 -94
  178. package/.agent/workflows/tribunal-performance.md +62 -105
  179. package/.agent/workflows/ui-ux-pro-max.md +72 -121
  180. package/README.md +11 -15
  181. package/package.json +1 -1
  182. package/.agent/skills/api-patterns/api-style.md +0 -42
  183. package/.agent/skills/api-patterns/auth.md +0 -24
  184. package/.agent/skills/api-patterns/documentation.md +0 -26
  185. package/.agent/skills/api-patterns/graphql.md +0 -41
  186. package/.agent/skills/api-patterns/rate-limiting.md +0 -31
  187. package/.agent/skills/api-patterns/response.md +0 -37
  188. package/.agent/skills/api-patterns/rest.md +0 -40
  189. package/.agent/skills/api-patterns/security-testing.md +0 -122
  190. package/.agent/skills/api-patterns/trpc.md +0 -41
  191. package/.agent/skills/api-patterns/versioning.md +0 -22
  192. package/.agent/skills/app-builder/agent-coordination.md +0 -71
  193. package/.agent/skills/app-builder/feature-building.md +0 -53
  194. package/.agent/skills/app-builder/project-detection.md +0 -34
  195. package/.agent/skills/app-builder/scaffolding.md +0 -118
  196. package/.agent/skills/app-builder/tech-stack.md +0 -40
  197. package/.agent/skills/architecture/context-discovery.md +0 -43
  198. package/.agent/skills/architecture/examples.md +0 -94
  199. package/.agent/skills/architecture/pattern-selection.md +0 -68
  200. package/.agent/skills/architecture/patterns-reference.md +0 -50
  201. package/.agent/skills/architecture/trade-off-analysis.md +0 -77
  202. package/.agent/skills/brainstorming/dynamic-questioning.md +0 -360
  203. package/.agent/skills/database-design/database-selection.md +0 -43
  204. package/.agent/skills/database-design/indexing.md +0 -39
  205. package/.agent/skills/database-design/migrations.md +0 -48
  206. package/.agent/skills/database-design/optimization.md +0 -36
  207. package/.agent/skills/database-design/orm-selection.md +0 -30
  208. package/.agent/skills/database-design/schema-design.md +0 -56
  209. package/.agent/skills/dotnet-core-expert/SKILL.md +0 -103
  210. package/.agent/skills/framer-motion-animations/SKILL.md +0 -74
  211. package/.agent/skills/frontend-design/animation-guide.md +0 -331
  212. package/.agent/skills/frontend-design/color-system.md +0 -329
  213. package/.agent/skills/frontend-design/decision-trees.md +0 -418
  214. package/.agent/skills/frontend-design/motion-graphics.md +0 -306
  215. package/.agent/skills/frontend-design/typography-system.md +0 -363
  216. package/.agent/skills/frontend-design/ux-psychology.md +0 -1116
  217. package/.agent/skills/frontend-design/visual-effects.md +0 -383
  218. package/.agent/skills/game-development/2d-games/SKILL.md +0 -119
  219. package/.agent/skills/game-development/3d-games/SKILL.md +0 -135
  220. package/.agent/skills/game-development/SKILL.md +0 -236
  221. package/.agent/skills/game-development/game-art/SKILL.md +0 -185
  222. package/.agent/skills/game-development/game-audio/SKILL.md +0 -190
  223. package/.agent/skills/game-development/game-design/SKILL.md +0 -129
  224. package/.agent/skills/game-development/mobile-games/SKILL.md +0 -108
  225. package/.agent/skills/game-development/multiplayer/SKILL.md +0 -132
  226. package/.agent/skills/game-development/pc-games/SKILL.md +0 -144
  227. package/.agent/skills/game-development/vr-ar/SKILL.md +0 -123
  228. package/.agent/skills/game-development/web-games/SKILL.md +0 -150
  229. package/.agent/skills/intelligent-routing/router-manifest.md +0 -65
  230. package/.agent/skills/mobile-design/decision-trees.md +0 -516
  231. package/.agent/skills/mobile-design/mobile-backend.md +0 -491
  232. package/.agent/skills/mobile-design/mobile-color-system.md +0 -420
  233. package/.agent/skills/mobile-design/mobile-debugging.md +0 -122
  234. package/.agent/skills/mobile-design/mobile-design-thinking.md +0 -357
  235. package/.agent/skills/mobile-design/mobile-navigation.md +0 -458
  236. package/.agent/skills/mobile-design/mobile-performance.md +0 -767
  237. package/.agent/skills/mobile-design/mobile-testing.md +0 -356
  238. package/.agent/skills/mobile-design/mobile-typography.md +0 -433
  239. package/.agent/skills/mobile-design/platform-android.md +0 -666
  240. package/.agent/skills/mobile-design/platform-ios.md +0 -561
  241. package/.agent/skills/mobile-design/touch-psychology.md +0 -537
  242. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -312
  243. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -240
  244. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -490
  245. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -264
  246. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -581
  247. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -432
  248. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -684
  249. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -150
  250. package/.agent/skills/vulnerability-scanner/checklists.md +0 -121
@@ -1,275 +1,190 @@
1
- ---
2
- name: database-design
3
- description: Database design principles and decision-making. Schema design, indexing strategy, ORM selection, serverless databases.
4
- allowed-tools: Read, Write, Edit, Glob, Grep
5
- version: 1.0.0
6
- last-updated: 2026-03-12
7
- applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
8
- ---
9
-
10
- # Database Design Principles
11
-
12
- > A schema is cheap to design and expensive to migrate.
13
- > Design it right for the queries your app actually runs.
14
-
15
- ---
16
-
17
- ## Core Decision: What Database?
18
-
19
- Before schema design, the database type must be justified — not assumed.
20
-
21
- | Need | Consider |
22
- |---|---|
23
- | Relational data with integrity constraints | PostgreSQL (default choice for most apps) |
24
- | Horizontal write scaling, flexible schema | MongoDB, DynamoDB |
25
- | Sub-millisecond reads, ephemeral/session data | Redis, Upstash |
26
- | Full-text search as primary use case | Elasticsearch, Typesense |
27
- | Serverless, zero-ops, edge-deployable | Turso, PlanetScale, Neon |
28
- | Time-series events | InfluxDB, TimescaleDB |
29
- | Semantic / vector similarity search | pgvector (in PostgreSQL), Qdrant, Pinecone |
30
-
31
- **Default when uncertain:** PostgreSQL. It handles relational, JSON, full-text, and time-series use cases well enough that you rarely need to deviate for most applications.
32
-
33
- ---
34
-
35
- ## Vector Database Patterns
36
-
37
- AI applications need semantic search — finding documents by meaning, not keyword. Vector databases store high-dimensional embeddings and search them by similarity.
38
-
39
- ### pgvector — Stay in PostgreSQL
40
-
41
- ```sql
42
- -- Enable extension once
43
- CREATE EXTENSION IF NOT EXISTS vector;
44
-
45
- -- Add embedding column to existing table
46
- ALTER TABLE documents ADD COLUMN embedding vector(1536); -- 1536 for text-embedding-3-small
47
-
48
- -- IVFFlat index for approximate nearest neighbor search
49
- CREATE INDEX ON documents USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);
50
- -- lists = sqrt(num_rows) is a good starting point
51
-
52
- -- Query: find 5 most semantically similar documents
53
- SELECT id, content, 1 - (embedding <=> $1) AS similarity
54
- FROM documents
55
- ORDER BY embedding <=> $1 -- cosine distance operator
56
- LIMIT 5;
57
- ```
58
-
59
- ### Dedicated Vector DB: When pgvector Isn't Enough
60
-
61
- | Trigger to Upgrade | Recommended |
62
- |---|---|
63
- | > 1M vectors + sub-10ms p99 | Qdrant (self-hosted, Rust) or Pinecone (managed) |
64
- | Multimodal (text + images) | Weaviate |
65
- | Managed, predictable pricing | Pinecone |
66
- | Zero-ops prototype | ChromaDB (local) |
67
-
68
- ### Chunking + Storage Best Practice
69
-
70
- ```ts
71
- // Always store both the raw text AND the embedding — embeddings are not reversible
72
- await db.query(`
73
- INSERT INTO documents (content, source_url, chunk_index, embedding)
74
- VALUES ($1, $2, $3, $4)
75
- `, [chunkText, sourceUrl, chunkIndex, JSON.stringify(embedding)]);
76
- // embedding is float[] serialize to JSON for parameterized query
77
- ```
78
-
79
- ---
80
-
81
- ## Schema Design Rules
82
-
83
- ### Model for queries, not for elegance
84
-
85
- The most normalized schema is not always the right schema. Ask: **what does the application actually read?**
86
-
87
- Design the schema to make the most frequent, performance-critical queries fast — even if that means some denormalization.
88
-
89
- ### Naming Conventions
90
-
91
- ```sql
92
- -- Tables: plural, snake_case
93
- CREATE TABLE user_sessions (...);
94
-
95
- -- Primary keys: always "id"
96
- id UUID PRIMARY KEY DEFAULT gen_random_uuid();
97
-
98
- -- Foreign keys: {referenced_table_singular}_id
99
- user_id UUID REFERENCES users(id);
100
-
101
- -- Timestamps: always include both
102
- created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
103
- updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW();
104
-
105
- -- Booleans: is_ prefix
106
- is_active BOOLEAN NOT NULL DEFAULT TRUE;
107
- ```
108
-
109
- ### Required on Every Table
110
-
111
- ```sql
112
- id UUID PRIMARY KEY -- or BIGSERIAL for high-insert tables
113
- created_at TIMESTAMPTZ -- immutable creation time
114
- updated_at TIMESTAMPTZ -- changes on every update (trigger or ORM)
115
- ```
116
-
117
- ---
118
-
119
- ## Indexing Strategy
120
-
121
- An index makes reads faster and writes slightly slower. Index on the columns you filter and sort — not every column.
122
-
123
- **Index when:**
124
- - Column appears in `WHERE` clauses frequently
125
- - Column is used for `JOIN` conditions
126
- - Column is used in `ORDER BY` on large result sets
127
- - Column is a foreign key that will be queried by relationship
128
-
129
- **Don't index when:**
130
- - Table has under a few thousand rows — full scan is faster than index lookup overhead
131
- - Column has very low cardinality (e.g., a boolean field with 95% TRUE)
132
- - Column is rarely queried
133
-
134
- ```sql
135
- -- Composite index: order matters most selective first
136
- CREATE INDEX idx_orders_user_status ON orders(user_id, status);
137
-
138
- -- Partial index: only index what you query
139
- CREATE INDEX idx_active_users ON users(email) WHERE is_active = TRUE;
140
- ```
141
-
142
- ---
143
-
144
- ## N+1 Queries
145
-
146
- The most common ORM performance failure. N+1 happens when you fetch N records then make a separate query for each one.
147
-
148
- ```ts
149
- // N+1 1 query for posts + N queries for authors
150
- const posts = await Post.findAll();
151
- for (const post of posts) {
152
- post.author = await User.findById(post.userId); // N queries
153
- }
154
-
155
- // Eager load 2 queries total
156
- const posts = await Post.findAll({ include: ['author'] });
157
- ```
158
-
159
- **Detection:** Enable query logging in development. If you see repetitive queries differing only by ID, you have N+1.
160
-
161
- ---
162
-
163
- ## Migration Rules
164
-
165
- - Every schema change is a migration — never modify the database directly in production
166
- - Migrations are additive first: add the column, deploy code that uses it, then remove the old column later
167
- - Never drop a column in the same migration that deploys the code removing its references
168
- - Test migrations on a production-size dataset — a 10-second migration on dev can lock a table for hours on prod
169
-
170
- ---
171
-
172
- ## File Index
173
-
174
- | File | Covers | Load When |
175
- |---|---|---|
176
- | `schema-design.md` | Detailed schema patterns and relationship modeling | Designing or reviewing a schema |
177
- | `indexing.md` | When and how to index, partial indexes, covering indexes | Performance investigation |
178
- | `orm-selection.md` | Prisma vs Drizzle vs TypeORM vs raw SQL trade-offs | Choosing ORM |
179
- | `migrations.md` | Safe migration patterns, rollback strategy | Changing existing schema |
180
- | `optimization.md` | Query analysis, EXPLAIN output, common fixes | Slow query diagnosis |
181
- | `database-selection.md` | Detailed database selection framework | Architecture decision |
182
-
183
- ---
184
-
185
- ## Scripts
186
-
187
- | Script | Purpose | Run With |
188
- |---|---|---|
189
- | `scripts/schema_validator.py` | Validates schema for missing indexes, naming issues | `python scripts/schema_validator.py <project_path>` |
190
-
191
- ---
192
-
193
- ## Output Format
194
-
195
- When this skill produces a recommendation or design decision, structure your output as:
196
-
197
- ```
198
- ━━━ Database Design Recommendation ━━━━━━━━━━━━━━━━
199
- Decision: [what was chosen / proposed]
200
- Rationale: [why — one concise line]
201
- Trade-offs: [what is consciously accepted]
202
- Next action: [concrete next step for the user]
203
- ─────────────────────────────────────────────────
204
- Pre-Flight: ✅ All checks passed
205
- or ❌ [blocking item that must be resolved first]
206
- ```
207
-
208
-
209
- ---
210
-
211
- ## 🏛️ Tribunal Integration (Anti-Hallucination)
212
-
213
- **Slash command: `/tribunal-database`**
214
- **Active reviewers: `logic` · `security` · `sql`**
215
-
216
- ### ❌ Forbidden AI Tropes in Database Design
217
-
218
- 1. **Blindly guessing column types** — e.g., using `VARCHAR(255)` for everything instead of precise types or `TEXT`.
219
- 2. **Missing `updated_at` triggers** — defining `updated_at` without a mechanism to actually update it.
220
- 3. **N+1 queries by default** — returning code that queries relations in a loop.
221
- 4. **Destructive migrations** — dropping a column in the same migration that drops the code using it.
222
- 5. **Over-indexing** — adding indexes to every single column regardless of cardinality or query patterns.
223
-
224
- ### ✅ Pre-Flight Self-Audit
225
-
226
- Review these questions before generating database schemas or queries:
227
- ```
228
- ✅ Did I design for the queries the application actually runs, rather than theoretical elegance?
229
- ✅ Are my suggested indexes selective and actually used in `WHERE` or `JOIN` clauses?
230
- ✅ Is this code safe from N+1 query performance problems?
231
- ✅ Did I rely on parameterized queries (no string concatenation)?
232
- ✅ Did I use the correct primary key strategy (e.g., UUID vs BIGSERIAL) for the scale?
233
- ```
234
-
235
-
236
- ---
237
-
238
- ## 🤖 LLM-Specific Traps
239
-
240
- AI coding assistants often fall into specific bad habits when dealing with this domain. These are strictly forbidden:
241
-
242
- 1. **Over-engineering:** Proposing complex abstractions or distributed systems when a simpler approach suffices.
243
- 2. **Hallucinated Libraries/Methods:** Using non-existent methods or packages. Always `// VERIFY` or check `package.json` / `requirements.txt`.
244
- 3. **Skipping Edge Cases:** Writing the "happy path" and ignoring error handling, timeouts, or data validation.
245
- 4. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
246
- 5. **Silent Degradation:** Catching and suppressing errors without logging or re-raising.
247
-
248
- ---
249
-
250
- ## 🏛️ Tribunal Integration (Anti-Hallucination)
251
-
252
- **Slash command: `/review` or `/tribunal-full`**
253
- **Active reviewers: `logic-reviewer` · `security-auditor`**
254
-
255
- ### ❌ Forbidden AI Tropes
256
-
257
- 1. **Blind Assumptions:** Never make an assumption without documenting it clearly with `// VERIFY: [reason]`.
258
- 2. **Silent Degradation:** Catching and suppressing errors without logging or handling.
259
- 3. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
260
-
261
- ### ✅ Pre-Flight Self-Audit
262
-
263
- Review these questions before confirming output:
264
- ```
265
- ✅ Did I rely ONLY on real, verified tools and methods?
266
- ✅ Is this solution appropriately scoped to the user's constraints?
267
- ✅ Did I handle potential failure modes and edge cases?
268
- ✅ Have I avoided generic boilerplate that doesn't add value?
269
- ```
270
-
271
- ### 🛑 Verification-Before-Completion (VBC) Protocol
272
-
273
- **CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
274
- - ❌ **Forbidden:** Declaring a task complete because the output "looks correct."
275
- - ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended.
1
+ ---
2
+ name: database-design
3
+ description: Database design mastery. Schema design with normalization, denormalization strategies, indexing, migration pipelines, ORM selection (Prisma/Drizzle/SQLAlchemy/EF Core), connection pooling, soft deletes, audit trails, multi-tenancy, and serverless database patterns. Use when designing schemas, choosing databases, planning migrations, or architecting data layers.
4
+ allowed-tools: Read, Write, Edit, Glob, Grep
5
+ version: 3.1.0
6
+ last-updated: 2026-04-07
7
+ applies-to-model: gemini-3-1-pro, claude-3-7-sonnet
8
+ ---
9
+
10
+ # Database Design — Schema & Architecture Mastery
11
+
12
+ ## Hallucination Traps (Read First)
13
+ - `TIMESTAMP` Always `TIMESTAMPTZ` (with timezone). `TIMESTAMP` is ambiguous across timezones.
14
+ - ❌ UUID v4 as primary key → ✅ UUID v7 (time-ordered) or `BIGINT GENERATED ALWAYS AS IDENTITY`. UUID v4 is random — destroys B-tree index performance on high-insert tables.
15
+ - ❌ No index on foreign keys → ✅ PostgreSQL does NOT auto-index FK columns. Cascading deletes cause full table scans without them.
16
+ - ❌ Adding `NOT NULL` column directly to a large table → ✅ Locks the entire table. Add as nullable, backfill in batches, then add constraint.
17
+ - Soft delete without a partial index → ✅ Every query must filter `WHERE deleted_at IS NULL`. Add `CREATE INDEX ... WHERE deleted_at IS NULL` or use a view.
18
+ - ❌ Serverless functions without a connection pooler → ✅ Each Lambda/Vercel invocation opens a new connection. Use PgBouncer or Supabase Supavisor — without it, you'll hit `max_connections` instantly.
19
+
20
+ ---
21
+
22
+ ## Database Selection
23
+
24
+ ```
25
+ Relational / Complex queries PostgreSQL (primary choice)
26
+ Serverless PG → Neon, Supabase
27
+ Edge / Ultra-low latency → Turso (SQLite @ edge)
28
+ Simple / Embedded → SQLite
29
+ Global distribution (MySQL) PlanetScale (no FK support)
30
+
31
+ Key-value / Cache → Redis / Valkey / Upstash
32
+ Document store → MongoDB / Firestore
33
+ Full-text search → PostgreSQL tsvector (built-in) or Meilisearch / Typesense
34
+ Time-series → TimescaleDB / ClickHouse
35
+ Vector (AI embeddings) → pgvector (PostgreSQL ext) / Pinecone / Weaviate
36
+ ```
37
+
38
+ ---
39
+
40
+ ## Standard Table Template
41
+
42
+ ```sql
43
+ CREATE TABLE users (
44
+ id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
45
+ -- OR: id UUID DEFAULT gen_random_uuid() PRIMARY KEY (use v7 for perf)
46
+ email TEXT NOT NULL UNIQUE,
47
+ name TEXT NOT NULL,
48
+ role TEXT NOT NULL DEFAULT 'user' CHECK (role IN ('admin', 'user', 'moderator')),
49
+ is_active BOOLEAN NOT NULL DEFAULT true,
50
+ metadata JSONB DEFAULT '{}',
51
+ created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
52
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
53
+ deleted_at TIMESTAMPTZ -- soft delete
54
+ );
55
+
56
+ -- Required: auto-update updated_at
57
+ CREATE OR REPLACE FUNCTION update_updated_at() RETURNS TRIGGER AS $$
58
+ BEGIN NEW.updated_at = now(); RETURN NEW; END; $$ LANGUAGE plpgsql;
59
+ CREATE TRIGGER trg_users_updated_at BEFORE UPDATE ON users FOR EACH ROW EXECUTE FUNCTION update_updated_at();
60
+
61
+ -- Required indexes
62
+ CREATE INDEX idx_users_email ON users (email);
63
+ CREATE INDEX idx_users_active ON users (email) WHERE deleted_at IS NULL; -- partial index for soft delete
64
+ CREATE INDEX idx_users_created_at ON users (created_at DESC);
65
+ ```
66
+
67
+ ---
68
+
69
+ ## Schema Patterns
70
+
71
+ ### Relationships
72
+ ```sql
73
+ -- One-to-Many: FK on the "many" side + INDEX
74
+ CREATE TABLE posts (
75
+ id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
76
+ author_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
77
+ ...
78
+ );
79
+ CREATE INDEX idx_posts_author_id ON posts (author_id); -- REQUIRED in Postgres
80
+
81
+ -- Many-to-Many: junction table with composite PK
82
+ CREATE TABLE post_tags (
83
+ post_id BIGINT NOT NULL REFERENCES posts(id) ON DELETE CASCADE,
84
+ tag_id BIGINT NOT NULL REFERENCES tags(id) ON DELETE CASCADE,
85
+ PRIMARY KEY (post_id, tag_id)
86
+ );
87
+ CREATE INDEX idx_post_tags_tag_id ON post_tags (tag_id); -- index the non-PK side
88
+ ```
89
+
90
+ ### Multi-Tenancy
91
+ ```sql
92
+ -- Pattern 1: tenant_id column (simplest — enforce via RLS)
93
+ ALTER TABLE projects ENABLE ROW LEVEL SECURITY;
94
+ CREATE POLICY tenant_isolation ON projects
95
+ USING (tenant_id = current_setting('app.current_tenant_id')::bigint);
96
+
97
+ -- Pattern 2: Schema per tenant (better isolation, harder migrations)
98
+ -- CREATE SCHEMA tenant_acme;
99
+
100
+ -- Pattern 3: DB per tenant — only for compliance/regulatory needs
101
+ ```
102
+
103
+ ---
104
+
105
+ ## ORM Selection
106
+
107
+ | ORM | Best For | Trade-offs |
108
+ |-----|----------|------------|
109
+ | **Drizzle** | Edge, TypeScript, bundle-size sensitive | Newer, fewer examples |
110
+ | **Prisma** | DX, schema management, Prisma Studio | Heavy, NOT edge-compatible |
111
+ | **Kysely** | Type-safe SQL builder, full control | Manual migrations |
112
+ | **Raw SQL** | Complex queries, performance-critical | Manual type safety |
113
+ | **SQLAlchemy 2.0** | Python async ecosystem | Python only |
114
+
115
+ ```typescript
116
+ // Drizzle — SQL-like, edge-compatible
117
+ const result = await db.select({ id: users.id, name: users.name }).from(users)
118
+ .where(and(eq(users.role, "admin"), eq(users.isActive, true)))
119
+ .orderBy(desc(users.createdAt)).limit(20);
120
+
121
+ // Prisma TRAP: can't express complex joins natively use prisma.$queryRaw<Type>
122
+ const user = await prisma.user.findUnique({ where: { email }, include: { posts: { take: 10 } } });
123
+ ```
124
+
125
+ ---
126
+
127
+ ## Migrations (Zero-Downtime Strategy)
128
+
129
+ ```sql
130
+ -- Safe column add on a large production table:
131
+ -- Step 1: Add nullable (no lock)
132
+ ALTER TABLE users ADD COLUMN phone TEXT;
133
+ -- Step 2: Backfill in batches (non-blocking)
134
+ UPDATE users SET phone = '' WHERE phone IS NULL AND id BETWEEN 1 AND 10000;
135
+ -- Step 3: Add constraint AFTER all code deploys write the column
136
+ ALTER TABLE users ALTER COLUMN phone SET NOT NULL;
137
+ ```
138
+
139
+ **Migration Rules:**
140
+ - Never modify a migration already applied to production — create a new one
141
+ - Remove column in 2 deploys: first remove all code references, then `DROP COLUMN`
142
+ - `CREATE INDEX CONCURRENTLY` to avoid table locks on existing data
143
+ - Test migrations against a copy of production data before running live
144
+
145
+ ---
146
+
147
+ ## Indexing Reference
148
+
149
+ | Index Type | Use For |
150
+ |------------|---------|
151
+ | **B-tree** | General purpose — equality & range queries (default) |
152
+ | **Hash** | Equality-only lookups (faster than B-tree for =) |
153
+ | **GIN** | JSONB, arrays, full-text (`tsvector`) |
154
+ | **GiST** | Geometric, range types |
155
+ | **HNSW / IVFFlat** | Vector similarity (pgvector) |
156
+
157
+ **Composite index column order:** equality columns first → range columns last → most selective first
158
+
159
+ ---
160
+
161
+ ## Audit Trail
162
+
163
+ ```sql
164
+ CREATE TABLE audit_log (
165
+ id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
166
+ table_name TEXT NOT NULL, record_id BIGINT NOT NULL,
167
+ action TEXT NOT NULL CHECK (action IN ('INSERT', 'UPDATE', 'DELETE')),
168
+ old_data JSONB, new_data JSONB,
169
+ changed_by BIGINT REFERENCES users(id),
170
+ changed_at TIMESTAMPTZ NOT NULL DEFAULT now()
171
+ );
172
+ CREATE INDEX idx_audit_log_table_record ON audit_log (table_name, record_id);
173
+ CREATE INDEX idx_audit_log_changed_at ON audit_log USING brin (changed_at); -- BRIN for time-ordered append-only tables
174
+ ```
175
+
176
+ ---
177
+
178
+ ## Connection Pooling
179
+
180
+ ```
181
+ Without pooling: 100 concurrent requests 100 DB connections overwhelms DB
182
+ With pooling: 100 concurrent requests → 10–20 reused connections
183
+
184
+ Sizing formula: max_connections = (cpu_cores × 2) + disk_spindles (typically 25–50)
185
+
186
+ Poolers:
187
+ PgBouncer → External, most common for self-hosted Postgres
188
+ Prisma Accelerate → Managed, for Prisma projects
189
+ Supabase Supavisor Managed, for Supabase projects
190
+ ```