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.
- package/.agent/ARCHITECTURE.md +99 -99
- package/.agent/GEMINI.md +52 -52
- package/.agent/agents/accessibility-reviewer.md +139 -86
- package/.agent/agents/ai-code-reviewer.md +160 -90
- package/.agent/agents/backend-specialist.md +164 -127
- package/.agent/agents/code-archaeologist.md +115 -73
- package/.agent/agents/database-architect.md +130 -110
- package/.agent/agents/debugger.md +137 -97
- package/.agent/agents/dependency-reviewer.md +78 -30
- package/.agent/agents/devops-engineer.md +161 -118
- package/.agent/agents/documentation-writer.md +151 -87
- package/.agent/agents/explorer-agent.md +117 -99
- package/.agent/agents/frontend-reviewer.md +127 -47
- package/.agent/agents/frontend-specialist.md +169 -109
- package/.agent/agents/game-developer.md +28 -164
- package/.agent/agents/logic-reviewer.md +87 -49
- package/.agent/agents/mobile-developer.md +151 -103
- package/.agent/agents/mobile-reviewer.md +133 -50
- package/.agent/agents/orchestrator.md +121 -110
- package/.agent/agents/penetration-tester.md +103 -77
- package/.agent/agents/performance-optimizer.md +136 -92
- package/.agent/agents/performance-reviewer.md +139 -69
- package/.agent/agents/product-manager.md +104 -70
- package/.agent/agents/product-owner.md +6 -25
- package/.agent/agents/project-planner.md +95 -95
- package/.agent/agents/qa-automation-engineer.md +174 -87
- package/.agent/agents/security-auditor.md +133 -129
- package/.agent/agents/seo-specialist.md +160 -99
- package/.agent/agents/sql-reviewer.md +132 -44
- package/.agent/agents/supervisor-agent.md +137 -109
- package/.agent/agents/swarm-worker-contracts.md +17 -17
- package/.agent/agents/swarm-worker-registry.md +46 -46
- package/.agent/agents/test-coverage-reviewer.md +132 -53
- package/.agent/agents/test-engineer.md +0 -21
- package/.agent/agents/type-safety-reviewer.md +143 -33
- package/.agent/patterns/generator.md +9 -9
- package/.agent/patterns/inversion.md +12 -12
- package/.agent/patterns/pipeline.md +9 -9
- package/.agent/patterns/reviewer.md +13 -13
- package/.agent/patterns/tool-wrapper.md +9 -9
- package/.agent/rules/GEMINI.md +63 -63
- package/.agent/scripts/__pycache__/auto_preview.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/bundle_analyzer.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/checklist.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/dependency_analyzer.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/security_scan.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/session_manager.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/skill_integrator.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/swarm_dispatcher.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/test_runner.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/verify_all.cpython-311.pyc +0 -0
- package/.agent/scripts/compress_skills.py +167 -0
- package/.agent/scripts/consolidate_skills.py +173 -0
- package/.agent/scripts/deep_compress.py +202 -0
- package/.agent/scripts/minify_context.py +80 -0
- package/.agent/scripts/security_scan.py +1 -1
- package/.agent/scripts/strip_tribunal.py +41 -0
- package/.agent/skills/agent-organizer/SKILL.md +60 -100
- package/.agent/skills/agentic-patterns/SKILL.md +0 -70
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +108 -53
- package/.agent/skills/api-patterns/SKILL.md +197 -257
- package/.agent/skills/api-security-auditor/SKILL.md +125 -57
- package/.agent/skills/app-builder/SKILL.md +326 -50
- package/.agent/skills/app-builder/templates/SKILL.md +13 -15
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +16 -16
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +22 -22
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +18 -18
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +20 -20
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +17 -17
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +18 -18
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +21 -21
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +19 -19
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +26 -26
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +26 -26
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +19 -19
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +18 -18
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +20 -20
- package/.agent/skills/appflow-wireframe/SKILL.md +71 -98
- package/.agent/skills/architecture/SKILL.md +161 -200
- package/.agent/skills/authentication-best-practices/SKILL.md +121 -54
- package/.agent/skills/bash-linux/SKILL.md +71 -166
- package/.agent/skills/behavioral-modes/SKILL.md +8 -69
- package/.agent/skills/brainstorming/SKILL.md +345 -127
- package/.agent/skills/building-native-ui/SKILL.md +125 -57
- package/.agent/skills/clean-code/SKILL.md +266 -149
- package/.agent/skills/code-review-checklist/SKILL.md +0 -62
- package/.agent/skills/config-validator/SKILL.md +73 -131
- package/.agent/skills/csharp-developer/SKILL.md +434 -73
- package/.agent/skills/database-design/SKILL.md +190 -275
- package/.agent/skills/deployment-procedures/SKILL.md +81 -158
- package/.agent/skills/devops-engineer/SKILL.md +255 -94
- package/.agent/skills/devops-incident-responder/SKILL.md +50 -69
- package/.agent/skills/doc.md +5 -5
- package/.agent/skills/documentation-templates/SKILL.md +19 -63
- package/.agent/skills/edge-computing/SKILL.md +75 -165
- package/.agent/skills/extract-design-system/SKILL.md +84 -58
- package/.agent/skills/framer-motion-expert/SKILL.md +195 -0
- package/.agent/skills/frontend-design/SKILL.md +151 -499
- package/.agent/skills/game-design-expert/SKILL.md +71 -0
- package/.agent/skills/game-engineering-expert/SKILL.md +88 -0
- package/.agent/skills/geo-fundamentals/SKILL.md +52 -178
- package/.agent/skills/github-operations/SKILL.md +197 -272
- package/.agent/skills/gsap-expert/SKILL.md +194 -0
- package/.agent/skills/i18n-localization/SKILL.md +60 -172
- package/.agent/skills/intelligent-routing/SKILL.md +123 -103
- package/.agent/skills/lint-and-validate/SKILL.md +8 -52
- package/.agent/skills/llm-engineering/SKILL.md +281 -195
- package/.agent/skills/local-first/SKILL.md +76 -159
- package/.agent/skills/mcp-builder/SKILL.md +48 -188
- package/.agent/skills/mobile-design/SKILL.md +213 -219
- package/.agent/skills/motion-engineering/SKILL.md +184 -0
- package/.agent/skills/nextjs-react-expert/SKILL.md +184 -203
- package/.agent/skills/nodejs-best-practices/SKILL.md +403 -185
- package/.agent/skills/observability/SKILL.md +211 -203
- package/.agent/skills/parallel-agents/SKILL.md +53 -146
- package/.agent/skills/performance-profiling/SKILL.md +171 -151
- package/.agent/skills/plan-writing/SKILL.md +49 -153
- package/.agent/skills/platform-engineer/SKILL.md +57 -103
- package/.agent/skills/playwright-best-practices/SKILL.md +110 -63
- package/.agent/skills/powershell-windows/SKILL.md +61 -179
- package/.agent/skills/python-patterns/SKILL.md +7 -35
- package/.agent/skills/python-pro/SKILL.md +273 -114
- package/.agent/skills/react-specialist/SKILL.md +227 -108
- package/.agent/skills/readme-builder/SKILL.md +15 -85
- package/.agent/skills/realtime-patterns/SKILL.md +216 -243
- package/.agent/skills/red-team-tactics/SKILL.md +10 -51
- package/.agent/skills/rust-pro/SKILL.md +525 -142
- package/.agent/skills/seo-fundamentals/SKILL.md +92 -153
- package/.agent/skills/server-management/SKILL.md +110 -166
- package/.agent/skills/shadcn-ui-expert/SKILL.md +154 -55
- package/.agent/skills/skill-creator/SKILL.md +18 -58
- package/.agent/skills/sql-pro/SKILL.md +543 -68
- package/.agent/skills/supabase-postgres-best-practices/SKILL.md +28 -68
- package/.agent/skills/swiftui-expert/SKILL.md +124 -57
- package/.agent/skills/systematic-debugging/SKILL.md +49 -151
- package/.agent/skills/tailwind-patterns/SKILL.md +433 -149
- package/.agent/skills/tdd-workflow/SKILL.md +63 -169
- package/.agent/skills/test-result-analyzer/SKILL.md +33 -73
- package/.agent/skills/testing-patterns/SKILL.md +437 -130
- package/.agent/skills/trend-researcher/SKILL.md +30 -71
- package/.agent/skills/ui-ux-pro-max/SKILL.md +0 -41
- package/.agent/skills/ui-ux-researcher/SKILL.md +51 -91
- package/.agent/skills/vue-expert/SKILL.md +225 -119
- package/.agent/skills/vulnerability-scanner/SKILL.md +264 -226
- package/.agent/skills/web-accessibility-auditor/SKILL.md +141 -58
- package/.agent/skills/web-design-guidelines/SKILL.md +17 -61
- package/.agent/skills/webapp-testing/SKILL.md +71 -196
- package/.agent/skills/whimsy-injector/SKILL.md +58 -132
- package/.agent/skills/workflow-optimizer/SKILL.md +28 -68
- package/.agent/workflows/api-tester.md +96 -224
- package/.agent/workflows/audit.md +81 -122
- package/.agent/workflows/brainstorm.md +69 -105
- package/.agent/workflows/changelog.md +65 -97
- package/.agent/workflows/create.md +73 -88
- package/.agent/workflows/debug.md +80 -111
- package/.agent/workflows/deploy.md +119 -92
- package/.agent/workflows/enhance.md +80 -91
- package/.agent/workflows/fix.md +68 -97
- package/.agent/workflows/generate.md +165 -164
- package/.agent/workflows/migrate.md +106 -109
- package/.agent/workflows/orchestrate.md +103 -86
- package/.agent/workflows/performance-benchmarker.md +77 -268
- package/.agent/workflows/plan.md +120 -98
- package/.agent/workflows/preview.md +39 -96
- package/.agent/workflows/refactor.md +105 -97
- package/.agent/workflows/review-ai.md +63 -102
- package/.agent/workflows/review.md +71 -110
- package/.agent/workflows/session.md +53 -113
- package/.agent/workflows/status.md +42 -88
- package/.agent/workflows/strengthen-skills.md +90 -51
- package/.agent/workflows/swarm.md +114 -129
- package/.agent/workflows/test.md +125 -102
- package/.agent/workflows/tribunal-backend.md +60 -78
- package/.agent/workflows/tribunal-database.md +62 -100
- package/.agent/workflows/tribunal-frontend.md +62 -82
- package/.agent/workflows/tribunal-full.md +56 -100
- package/.agent/workflows/tribunal-mobile.md +65 -94
- package/.agent/workflows/tribunal-performance.md +62 -105
- package/.agent/workflows/ui-ux-pro-max.md +72 -121
- package/README.md +11 -15
- package/package.json +1 -1
- package/.agent/skills/api-patterns/api-style.md +0 -42
- package/.agent/skills/api-patterns/auth.md +0 -24
- package/.agent/skills/api-patterns/documentation.md +0 -26
- package/.agent/skills/api-patterns/graphql.md +0 -41
- package/.agent/skills/api-patterns/rate-limiting.md +0 -31
- package/.agent/skills/api-patterns/response.md +0 -37
- package/.agent/skills/api-patterns/rest.md +0 -40
- package/.agent/skills/api-patterns/security-testing.md +0 -122
- package/.agent/skills/api-patterns/trpc.md +0 -41
- package/.agent/skills/api-patterns/versioning.md +0 -22
- package/.agent/skills/app-builder/agent-coordination.md +0 -71
- package/.agent/skills/app-builder/feature-building.md +0 -53
- package/.agent/skills/app-builder/project-detection.md +0 -34
- package/.agent/skills/app-builder/scaffolding.md +0 -118
- package/.agent/skills/app-builder/tech-stack.md +0 -40
- package/.agent/skills/architecture/context-discovery.md +0 -43
- package/.agent/skills/architecture/examples.md +0 -94
- package/.agent/skills/architecture/pattern-selection.md +0 -68
- package/.agent/skills/architecture/patterns-reference.md +0 -50
- package/.agent/skills/architecture/trade-off-analysis.md +0 -77
- package/.agent/skills/brainstorming/dynamic-questioning.md +0 -360
- package/.agent/skills/database-design/database-selection.md +0 -43
- package/.agent/skills/database-design/indexing.md +0 -39
- package/.agent/skills/database-design/migrations.md +0 -48
- package/.agent/skills/database-design/optimization.md +0 -36
- package/.agent/skills/database-design/orm-selection.md +0 -30
- package/.agent/skills/database-design/schema-design.md +0 -56
- package/.agent/skills/dotnet-core-expert/SKILL.md +0 -103
- package/.agent/skills/framer-motion-animations/SKILL.md +0 -74
- package/.agent/skills/frontend-design/animation-guide.md +0 -331
- package/.agent/skills/frontend-design/color-system.md +0 -329
- package/.agent/skills/frontend-design/decision-trees.md +0 -418
- package/.agent/skills/frontend-design/motion-graphics.md +0 -306
- package/.agent/skills/frontend-design/typography-system.md +0 -363
- package/.agent/skills/frontend-design/ux-psychology.md +0 -1116
- package/.agent/skills/frontend-design/visual-effects.md +0 -383
- package/.agent/skills/game-development/2d-games/SKILL.md +0 -119
- package/.agent/skills/game-development/3d-games/SKILL.md +0 -135
- package/.agent/skills/game-development/SKILL.md +0 -236
- package/.agent/skills/game-development/game-art/SKILL.md +0 -185
- package/.agent/skills/game-development/game-audio/SKILL.md +0 -190
- package/.agent/skills/game-development/game-design/SKILL.md +0 -129
- package/.agent/skills/game-development/mobile-games/SKILL.md +0 -108
- package/.agent/skills/game-development/multiplayer/SKILL.md +0 -132
- package/.agent/skills/game-development/pc-games/SKILL.md +0 -144
- package/.agent/skills/game-development/vr-ar/SKILL.md +0 -123
- package/.agent/skills/game-development/web-games/SKILL.md +0 -150
- package/.agent/skills/intelligent-routing/router-manifest.md +0 -65
- package/.agent/skills/mobile-design/decision-trees.md +0 -516
- package/.agent/skills/mobile-design/mobile-backend.md +0 -491
- package/.agent/skills/mobile-design/mobile-color-system.md +0 -420
- package/.agent/skills/mobile-design/mobile-debugging.md +0 -122
- package/.agent/skills/mobile-design/mobile-design-thinking.md +0 -357
- package/.agent/skills/mobile-design/mobile-navigation.md +0 -458
- package/.agent/skills/mobile-design/mobile-performance.md +0 -767
- package/.agent/skills/mobile-design/mobile-testing.md +0 -356
- package/.agent/skills/mobile-design/mobile-typography.md +0 -433
- package/.agent/skills/mobile-design/platform-android.md +0 -666
- package/.agent/skills/mobile-design/platform-ios.md +0 -561
- package/.agent/skills/mobile-design/touch-psychology.md +0 -537
- package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -312
- package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -240
- package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -490
- package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -264
- package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -581
- package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -432
- package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -684
- package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -150
- package/.agent/skills/vulnerability-scanner/checklists.md +0 -121
|
@@ -1,275 +1,190 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: database-design
|
|
3
|
-
description: Database design
|
|
4
|
-
allowed-tools: Read, Write, Edit, Glob, Grep
|
|
5
|
-
version: 1.0
|
|
6
|
-
last-updated: 2026-
|
|
7
|
-
applies-to-model: gemini-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Database Design
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
CREATE
|
|
44
|
-
|
|
45
|
-
--
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
```sql
|
|
92
|
-
--
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
--
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
--
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
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
|
+
```
|