tribunal-kit 3.0.0 → 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 (226) hide show
  1. package/.agent/ARCHITECTURE.md +99 -99
  2. package/.agent/GEMINI.md +52 -52
  3. package/.agent/agents/accessibility-reviewer.md +187 -220
  4. package/.agent/agents/ai-code-reviewer.md +199 -233
  5. package/.agent/agents/backend-specialist.md +215 -238
  6. package/.agent/agents/code-archaeologist.md +161 -181
  7. package/.agent/agents/database-architect.md +184 -207
  8. package/.agent/agents/debugger.md +191 -218
  9. package/.agent/agents/dependency-reviewer.md +103 -136
  10. package/.agent/agents/devops-engineer.md +218 -238
  11. package/.agent/agents/documentation-writer.md +201 -221
  12. package/.agent/agents/explorer-agent.md +160 -180
  13. package/.agent/agents/frontend-reviewer.md +160 -194
  14. package/.agent/agents/frontend-specialist.md +248 -237
  15. package/.agent/agents/game-developer.md +48 -52
  16. package/.agent/agents/logic-reviewer.md +116 -149
  17. package/.agent/agents/mobile-developer.md +200 -223
  18. package/.agent/agents/mobile-reviewer.md +162 -195
  19. package/.agent/agents/orchestrator.md +181 -211
  20. package/.agent/agents/penetration-tester.md +157 -174
  21. package/.agent/agents/performance-optimizer.md +183 -203
  22. package/.agent/agents/performance-reviewer.md +178 -211
  23. package/.agent/agents/product-manager.md +142 -162
  24. package/.agent/agents/product-owner.md +6 -25
  25. package/.agent/agents/project-planner.md +142 -162
  26. package/.agent/agents/qa-automation-engineer.md +225 -242
  27. package/.agent/agents/security-auditor.md +174 -194
  28. package/.agent/agents/seo-specialist.md +193 -213
  29. package/.agent/agents/sql-reviewer.md +161 -194
  30. package/.agent/agents/supervisor-agent.md +184 -203
  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 +160 -193
  34. package/.agent/agents/test-engineer.md +0 -21
  35. package/.agent/agents/type-safety-reviewer.md +175 -208
  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/compress_skills.py +167 -0
  43. package/.agent/scripts/consolidate_skills.py +173 -0
  44. package/.agent/scripts/deep_compress.py +202 -0
  45. package/.agent/scripts/minify_context.py +80 -0
  46. package/.agent/scripts/security_scan.py +1 -1
  47. package/.agent/scripts/strip_tribunal.py +41 -0
  48. package/.agent/skills/agent-organizer/SKILL.md +92 -126
  49. package/.agent/skills/agentic-patterns/SKILL.md +0 -70
  50. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +126 -160
  51. package/.agent/skills/api-patterns/SKILL.md +123 -215
  52. package/.agent/skills/api-security-auditor/SKILL.md +143 -177
  53. package/.agent/skills/app-builder/SKILL.md +326 -50
  54. package/.agent/skills/app-builder/templates/SKILL.md +13 -15
  55. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +16 -16
  56. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +22 -22
  57. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +18 -18
  58. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +20 -20
  59. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +17 -17
  60. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +18 -18
  61. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +21 -21
  62. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +19 -19
  63. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +26 -26
  64. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +26 -26
  65. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +19 -19
  66. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +18 -18
  67. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +20 -20
  68. package/.agent/skills/appflow-wireframe/SKILL.md +87 -121
  69. package/.agent/skills/architecture/SKILL.md +82 -252
  70. package/.agent/skills/authentication-best-practices/SKILL.md +139 -173
  71. package/.agent/skills/bash-linux/SKILL.md +120 -154
  72. package/.agent/skills/behavioral-modes/SKILL.md +8 -69
  73. package/.agent/skills/brainstorming/SKILL.md +428 -104
  74. package/.agent/skills/building-native-ui/SKILL.md +143 -174
  75. package/.agent/skills/clean-code/SKILL.md +323 -360
  76. package/.agent/skills/code-review-checklist/SKILL.md +0 -62
  77. package/.agent/skills/config-validator/SKILL.md +107 -141
  78. package/.agent/skills/csharp-developer/SKILL.md +468 -528
  79. package/.agent/skills/database-design/SKILL.md +104 -369
  80. package/.agent/skills/deployment-procedures/SKILL.md +111 -145
  81. package/.agent/skills/devops-engineer/SKILL.md +295 -332
  82. package/.agent/skills/devops-incident-responder/SKILL.md +79 -113
  83. package/.agent/skills/doc.md +5 -5
  84. package/.agent/skills/documentation-templates/SKILL.md +19 -63
  85. package/.agent/skills/edge-computing/SKILL.md +123 -157
  86. package/.agent/skills/extract-design-system/SKILL.md +100 -134
  87. package/.agent/skills/framer-motion-expert/SKILL.md +111 -855
  88. package/.agent/skills/frontend-design/SKILL.md +151 -499
  89. package/.agent/skills/game-design-expert/SKILL.md +71 -105
  90. package/.agent/skills/game-engineering-expert/SKILL.md +88 -122
  91. package/.agent/skills/geo-fundamentals/SKILL.md +89 -124
  92. package/.agent/skills/github-operations/SKILL.md +279 -314
  93. package/.agent/skills/gsap-expert/SKILL.md +119 -826
  94. package/.agent/skills/i18n-localization/SKILL.md +104 -138
  95. package/.agent/skills/intelligent-routing/SKILL.md +159 -127
  96. package/.agent/skills/lint-and-validate/SKILL.md +8 -52
  97. package/.agent/skills/llm-engineering/SKILL.md +344 -357
  98. package/.agent/skills/local-first/SKILL.md +120 -154
  99. package/.agent/skills/mcp-builder/SKILL.md +84 -118
  100. package/.agent/skills/mobile-design/SKILL.md +213 -219
  101. package/.agent/skills/motion-engineering/SKILL.md +184 -0
  102. package/.agent/skills/nextjs-react-expert/SKILL.md +99 -698
  103. package/.agent/skills/nodejs-best-practices/SKILL.md +498 -559
  104. package/.agent/skills/observability/SKILL.md +293 -330
  105. package/.agent/skills/parallel-agents/SKILL.md +88 -122
  106. package/.agent/skills/performance-profiling/SKILL.md +217 -254
  107. package/.agent/skills/plan-writing/SKILL.md +84 -118
  108. package/.agent/skills/platform-engineer/SKILL.md +89 -123
  109. package/.agent/skills/playwright-best-practices/SKILL.md +128 -162
  110. package/.agent/skills/powershell-windows/SKILL.md +112 -146
  111. package/.agent/skills/python-patterns/SKILL.md +7 -35
  112. package/.agent/skills/python-pro/SKILL.md +148 -754
  113. package/.agent/skills/react-specialist/SKILL.md +123 -827
  114. package/.agent/skills/readme-builder/SKILL.md +15 -85
  115. package/.agent/skills/realtime-patterns/SKILL.md +269 -304
  116. package/.agent/skills/red-team-tactics/SKILL.md +10 -51
  117. package/.agent/skills/rust-pro/SKILL.md +623 -701
  118. package/.agent/skills/seo-fundamentals/SKILL.md +120 -154
  119. package/.agent/skills/server-management/SKILL.md +156 -190
  120. package/.agent/skills/shadcn-ui-expert/SKILL.md +172 -206
  121. package/.agent/skills/skill-creator/SKILL.md +18 -58
  122. package/.agent/skills/sql-pro/SKILL.md +579 -633
  123. package/.agent/skills/supabase-postgres-best-practices/SKILL.md +28 -68
  124. package/.agent/skills/swiftui-expert/SKILL.md +142 -176
  125. package/.agent/skills/systematic-debugging/SKILL.md +84 -118
  126. package/.agent/skills/tailwind-patterns/SKILL.md +516 -576
  127. package/.agent/skills/tdd-workflow/SKILL.md +103 -137
  128. package/.agent/skills/test-result-analyzer/SKILL.md +33 -73
  129. package/.agent/skills/testing-patterns/SKILL.md +512 -573
  130. package/.agent/skills/trend-researcher/SKILL.md +30 -71
  131. package/.agent/skills/ui-ux-pro-max/SKILL.md +0 -41
  132. package/.agent/skills/ui-ux-researcher/SKILL.md +51 -91
  133. package/.agent/skills/vue-expert/SKILL.md +127 -866
  134. package/.agent/skills/vulnerability-scanner/SKILL.md +354 -269
  135. package/.agent/skills/web-accessibility-auditor/SKILL.md +159 -193
  136. package/.agent/skills/web-design-guidelines/SKILL.md +17 -61
  137. package/.agent/skills/webapp-testing/SKILL.md +111 -145
  138. package/.agent/skills/whimsy-injector/SKILL.md +58 -132
  139. package/.agent/skills/workflow-optimizer/SKILL.md +28 -68
  140. package/.agent/workflows/api-tester.md +151 -151
  141. package/.agent/workflows/audit.md +127 -138
  142. package/.agent/workflows/brainstorm.md +110 -110
  143. package/.agent/workflows/changelog.md +112 -112
  144. package/.agent/workflows/create.md +124 -124
  145. package/.agent/workflows/debug.md +165 -189
  146. package/.agent/workflows/deploy.md +180 -189
  147. package/.agent/workflows/enhance.md +128 -151
  148. package/.agent/workflows/fix.md +114 -135
  149. package/.agent/workflows/generate.md +12 -4
  150. package/.agent/workflows/migrate.md +160 -160
  151. package/.agent/workflows/orchestrate.md +168 -168
  152. package/.agent/workflows/performance-benchmarker.md +114 -123
  153. package/.agent/workflows/plan.md +173 -173
  154. package/.agent/workflows/preview.md +80 -80
  155. package/.agent/workflows/refactor.md +161 -183
  156. package/.agent/workflows/review-ai.md +101 -129
  157. package/.agent/workflows/review.md +116 -116
  158. package/.agent/workflows/session.md +94 -94
  159. package/.agent/workflows/status.md +79 -79
  160. package/.agent/workflows/strengthen-skills.md +138 -139
  161. package/.agent/workflows/swarm.md +179 -179
  162. package/.agent/workflows/test.md +189 -211
  163. package/.agent/workflows/tribunal-backend.md +93 -113
  164. package/.agent/workflows/tribunal-database.md +94 -115
  165. package/.agent/workflows/tribunal-frontend.md +95 -118
  166. package/.agent/workflows/tribunal-full.md +92 -133
  167. package/.agent/workflows/tribunal-mobile.md +94 -119
  168. package/.agent/workflows/tribunal-performance.md +109 -133
  169. package/.agent/workflows/ui-ux-pro-max.md +122 -143
  170. package/package.json +1 -1
  171. package/.agent/skills/api-patterns/api-style.md +0 -42
  172. package/.agent/skills/api-patterns/auth.md +0 -24
  173. package/.agent/skills/api-patterns/documentation.md +0 -26
  174. package/.agent/skills/api-patterns/graphql.md +0 -41
  175. package/.agent/skills/api-patterns/rate-limiting.md +0 -31
  176. package/.agent/skills/api-patterns/response.md +0 -37
  177. package/.agent/skills/api-patterns/rest.md +0 -40
  178. package/.agent/skills/api-patterns/security-testing.md +0 -122
  179. package/.agent/skills/api-patterns/trpc.md +0 -41
  180. package/.agent/skills/api-patterns/versioning.md +0 -22
  181. package/.agent/skills/app-builder/agent-coordination.md +0 -71
  182. package/.agent/skills/app-builder/feature-building.md +0 -53
  183. package/.agent/skills/app-builder/project-detection.md +0 -34
  184. package/.agent/skills/app-builder/scaffolding.md +0 -118
  185. package/.agent/skills/app-builder/tech-stack.md +0 -40
  186. package/.agent/skills/architecture/context-discovery.md +0 -43
  187. package/.agent/skills/architecture/examples.md +0 -94
  188. package/.agent/skills/architecture/pattern-selection.md +0 -68
  189. package/.agent/skills/architecture/patterns-reference.md +0 -50
  190. package/.agent/skills/architecture/trade-off-analysis.md +0 -77
  191. package/.agent/skills/brainstorming/dynamic-questioning.md +0 -360
  192. package/.agent/skills/database-design/database-selection.md +0 -43
  193. package/.agent/skills/database-design/indexing.md +0 -39
  194. package/.agent/skills/database-design/migrations.md +0 -48
  195. package/.agent/skills/database-design/optimization.md +0 -36
  196. package/.agent/skills/database-design/orm-selection.md +0 -30
  197. package/.agent/skills/database-design/schema-design.md +0 -56
  198. package/.agent/skills/frontend-design/animation-guide.md +0 -331
  199. package/.agent/skills/frontend-design/color-system.md +0 -329
  200. package/.agent/skills/frontend-design/decision-trees.md +0 -418
  201. package/.agent/skills/frontend-design/motion-graphics.md +0 -306
  202. package/.agent/skills/frontend-design/typography-system.md +0 -363
  203. package/.agent/skills/frontend-design/ux-psychology.md +0 -1116
  204. package/.agent/skills/frontend-design/visual-effects.md +0 -383
  205. package/.agent/skills/intelligent-routing/router-manifest.md +0 -65
  206. package/.agent/skills/mobile-design/decision-trees.md +0 -516
  207. package/.agent/skills/mobile-design/mobile-backend.md +0 -491
  208. package/.agent/skills/mobile-design/mobile-color-system.md +0 -420
  209. package/.agent/skills/mobile-design/mobile-debugging.md +0 -122
  210. package/.agent/skills/mobile-design/mobile-design-thinking.md +0 -357
  211. package/.agent/skills/mobile-design/mobile-navigation.md +0 -458
  212. package/.agent/skills/mobile-design/mobile-performance.md +0 -767
  213. package/.agent/skills/mobile-design/mobile-testing.md +0 -356
  214. package/.agent/skills/mobile-design/mobile-typography.md +0 -433
  215. package/.agent/skills/mobile-design/platform-android.md +0 -666
  216. package/.agent/skills/mobile-design/platform-ios.md +0 -561
  217. package/.agent/skills/mobile-design/touch-psychology.md +0 -537
  218. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -312
  219. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -240
  220. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -490
  221. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -264
  222. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -581
  223. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -432
  224. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -684
  225. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -150
  226. package/.agent/skills/vulnerability-scanner/checklists.md +0 -121
@@ -2,184 +2,80 @@
2
2
  name: architecture
3
3
  description: Software architecture mastery. System design patterns, clean architecture, hexagonal/ports-and-adapters, event-driven architecture, microservices vs monolith decision framework, CQRS, domain-driven design, Architecture Decision Records (ADRs), and scalability patterns. Use when making architecture decisions, designing systems, or documenting technical decisions.
4
4
  allowed-tools: Read, Write, Edit, Glob, Grep
5
- version: 2.0.0
6
- last-updated: 2026-04-01
7
- applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
5
+ version: 3.1.0
6
+ last-updated: 2026-04-07
7
+ applies-to-model: gemini-3-1-pro, claude-3-7-sonnet
8
8
  ---
9
9
 
10
10
  # Architecture — System Design Mastery
11
11
 
12
- > Architecture is the set of decisions you wish you could get right the first time.
13
- > Every architecture decision is a trade-off. Document the trade-off, not just the choice.
14
-
15
- ---
16
-
17
12
  ## Architecture Selection
18
13
 
19
14
  ```
20
- ┌────────────────────────────────────────────────────────────────┐
21
- │ What Architecture Do You Need? │
22
- ├────────────────────────────────────────────────────────────────┤
23
- │ │
24
- │ Team size? │
25
- │ ├── 1-5 developers Modular Monolith │
26
- │ ├── 5-20 developers Modular Monolith + Event Bus │
27
- │ └── 20+ developers Microservices (with platform team) │
28
- │ │
29
- │ Scale requirements? │
30
- │ ├── Single region, <10K RPM → Monolith │
31
- │ ├── Multi-region, <100K RPM → Monolith + CDN + Read Replicas │
32
- │ └── Global, >100K RPM → Microservices + Edge │
33
- │ │
34
- │ Deployment cadence? │
35
- │ ├── Weekly releases → Monolith │
36
- │ ├── Daily releases, different modules → Modular Monolith │
37
- │ └── Continuous per-service deployment → Microservices │
38
- │ │
39
- │ ❌ HALLUCINATION TRAP: Microservices are NOT inherently better │
40
- │ A well-structured monolith beats a poorly designed microservice│
41
- │ architecture. Start monolith. Extract services when you MUST. │
42
- └────────────────────────────────────────────────────────────────┘
15
+ Team size? Scale? Cadence?
16
+ 1–5 → Monolith <10K RPM → Monolith Weekly → Monolith
17
+ 5–20 → Mod. Mono <100K RPM → Mono+CDN Daily → Modular Mono
18
+ 20+ → Microsvcs >100K RPM → Microsvcs Per-svc → Microsvcs
19
+
20
+ Microservices are NOT inherently better.
21
+ A well-structured monolith beats a poorly designed microservice system.
22
+ Start monolith. Extract services only when proven necessary.
43
23
  ```
44
24
 
25
+ **3 Questions Before Any Pattern:**
26
+ 1. What SPECIFIC problem does this pattern solve?
27
+ 2. Is there a simpler solution?
28
+ 3. Can we add this LATER when proven needed?
29
+
45
30
  ---
46
31
 
47
- ## Clean Architecture (Layered)
32
+ ## Clean Architecture (Dependency Rule)
48
33
 
49
34
  ```
50
- ┌───────────────────────────────────────────────┐
51
- Presentation Layer │
52
- │ Controllers / Minimal APIs / CLI / UI │
53
- ├───────────────────────────────────────────────┤
54
- Application Layer │
55
- │ Use Cases / Commands / Queries / DTOs │
56
- ├───────────────────────────────────────────────┤
57
- │ Domain Layer (Core) │
58
- │ Entities / Value Objects / Domain Events │
59
- │ Business Rules / Interfaces (Ports) │
60
- ├───────────────────────────────────────────────┤
61
- │ Infrastructure Layer │
62
- │ Database / External APIs / File System │
63
- │ Message Queues / Email / Cache (Adapters) │
64
- └───────────────────────────────────────────────┘
65
-
66
- Dependency Rule: Dependencies point INWARD only.
67
- - Infrastructure → Application → Domain
68
- - Domain knows NOTHING about infrastructure
69
- - Application defines interfaces (ports)
70
- - Infrastructure implements them (adapters)
35
+ Presentation → Application → Domain ← Infrastructure
36
+ (Controllers) (Use Cases) (Entities) (DB, APIs)
37
+
38
+ Dependency Rule: arrows point INWARD. Domain knows NOTHING about infra.
39
+ Application defines interfaces (ports). Infrastructure implements them (adapters).
71
40
  ```
72
41
 
73
42
  ```typescript
74
- // Domain layer — pure business logic, zero dependencies
75
- interface UserRepository {
76
- findById(id: string): Promise<User | null>;
77
- save(user: User): Promise<void>;
78
- }
79
-
43
+ // Domain — pure business logic, zero external dependencies
44
+ interface UserRepository { findById(id: string): Promise<User | null>; }
80
45
  class User {
81
- constructor(
82
- public readonly id: string,
83
- public name: string,
84
- public email: string,
85
- private _role: UserRole,
86
- ) {}
87
-
88
46
  promote(): void {
89
- if (this._role === UserRole.ADMIN) {
90
- throw new DomainError("Already admin");
91
- }
47
+ if (this._role === UserRole.ADMIN) throw new DomainError("Already admin");
92
48
  this._role = UserRole.ADMIN;
93
49
  }
94
50
  }
95
51
 
96
- // Application layer — orchestrates use cases
52
+ // Application — orchestrates use cases
97
53
  class PromoteUserUseCase {
98
- constructor(
99
- private userRepo: UserRepository,
100
- private eventBus: EventBus,
101
- ) {}
102
-
103
54
  async execute(userId: string): Promise<void> {
104
55
  const user = await this.userRepo.findById(userId);
105
56
  if (!user) throw new NotFoundError("User", userId);
106
-
107
- user.promote(); // domain logic
57
+ user.promote();
108
58
  await this.userRepo.save(user);
109
59
  await this.eventBus.publish(new UserPromotedEvent(userId));
110
60
  }
111
61
  }
112
62
 
113
- // Infrastructure — concrete implementations
63
+ // Infrastructure — concrete implementations of ports
114
64
  class PostgresUserRepository implements UserRepository {
115
- async findById(id: string): Promise<User | null> {
116
- const row = await db.query("SELECT * FROM users WHERE id = $1", [id]);
117
- return row ? User.fromRow(row) : null;
118
- }
65
+ async findById(id: string) { /* db.query(...) */ }
119
66
  }
120
67
  ```
121
68
 
122
69
  ---
123
70
 
124
- ## CQRS (Command Query Responsibility Segregation)
71
+ ## CQRS
125
72
 
126
73
  ```
127
- Commands (Write) Queries (Read)
128
- ┌─────────────┐ ┌──────────────┐
129
- │ CreateUser │──→ Write DB ──→ │ UserListView │
130
- │ UpdateOrder │ (normalized) │ OrderSummary │
131
- │ DeletePost │ │ Dashboard │
132
- └─────────────┘ └──────────────┘
133
-
134
- Read DB / Cache
135
- (denormalized, optimized)
136
-
137
- When to use CQRS:
138
- ✅ Read and write patterns are very different
139
- ✅ Read-heavy system (10:1+ read:write ratio)
140
- ✅ Need different optimization for reads vs writes
141
- ✅ Event sourcing
142
-
143
- When NOT to use:
144
- ❌ Simple CRUD app
145
- ❌ Small team (< 3 developers)
146
- ❌ Read and write models are nearly identical
147
- ```
74
+ Commands (Write) → Normalized Write DB
75
+ Queries (Read) → Denormalized/Cached Read Model
148
76
 
149
- ```typescript
150
- // Command
151
- class CreateOrderCommand {
152
- constructor(
153
- public readonly userId: string,
154
- public readonly items: OrderItem[],
155
- public readonly shippingAddress: Address,
156
- ) {}
157
- }
158
-
159
- // Command Handler
160
- class CreateOrderHandler {
161
- constructor(private orderRepo: OrderRepository, private eventBus: EventBus) {}
162
-
163
- async handle(cmd: CreateOrderCommand): Promise<string> {
164
- const order = Order.create(cmd.userId, cmd.items, cmd.shippingAddress);
165
- await this.orderRepo.save(order);
166
- await this.eventBus.publish(new OrderCreatedEvent(order.id));
167
- return order.id;
168
- }
169
- }
170
-
171
- // Query (reads from denormalized view)
172
- class GetOrderSummaryQuery {
173
- constructor(public readonly orderId: string) {}
174
- }
175
-
176
- class GetOrderSummaryHandler {
177
- constructor(private readDb: ReadOnlyDatabase) {}
178
-
179
- async handle(query: GetOrderSummaryQuery): Promise<OrderSummaryView> {
180
- return this.readDb.findOne("order_summaries", { id: query.orderId });
181
- }
182
- }
77
+ When to use: ✅ Read/write patterns diverge ✅ 10:1+ read:write ratio ✅ Event sourcing
78
+ When NOT to: ❌ Simple CRUD ❌ Team < 3 devs ❌ Read/write models are identical
183
79
  ```
184
80
 
185
81
  ---
@@ -187,145 +83,79 @@ class GetOrderSummaryHandler {
187
83
  ## Event-Driven Architecture
188
84
 
189
85
  ```
190
- Producer → Event Bus → Consumer(s)
191
-
192
- Event types:
193
- 1. Domain Events "OrderPlaced", "UserRegistered" (within bounded context)
194
- 2. Integration Events → cross-service communication (via message queue)
195
- 3. Notification Events → fire-and-forget (logging, analytics)
196
-
197
- Message brokers:
198
- - Redis Streams / BullMQ → simple, good for single-service queues
199
- - RabbitMQ → complex routing, exchanges, dead-letter queues
200
- - Apache Kafka → high throughput, event log, replay capability
201
- - AWS SQS/SNS → managed, serverless-friendly
202
- ```
86
+ Event Types:
87
+ Domain Events → "OrderPlaced" within a bounded context
88
+ Integration Events → Cross-service via message queue
89
+ Notification EventsFire-and-forget (logging, analytics)
203
90
 
204
- ```typescript
205
- // Domain event
206
- interface DomainEvent {
207
- eventId: string;
208
- eventType: string;
209
- aggregateId: string;
210
- occurredAt: Date;
211
- data: Record<string, unknown>;
212
- }
91
+ Broker Selection:
92
+ BullMQ / Redis Streams → Simple, single-service queues
93
+ RabbitMQ → Complex routing, dead-letter queues
94
+ Apache Kafka → High throughput, replay, event log
95
+ AWS SQS/SNS → Managed, serverless-friendly
213
96
 
214
- // Event handler
215
- class SendWelcomeEmailHandler {
216
- constructor(private emailService: EmailService) {}
97
+ Outbox Pattern (reliable publishing):
98
+ 1. Save entity + event in ONE DB transaction
99
+ 2. Background worker polls outbox → publishes to broker
100
+ 3. Mark as published → guarantees at-least-once delivery
101
+ ```
217
102
 
218
- async handle(event: DomainEvent & { eventType: "user.registered" }) {
219
- await this.emailService.send({
220
- to: event.data.email as string,
221
- template: "welcome",
222
- });
223
- }
224
- }
103
+ ---
225
104
 
226
- // Outbox pattern (reliable event publishing)
227
- // 1. Save entity + event in SAME db transaction
228
- // 2. Background worker polls outbox table publishes to event bus
229
- // 3. Mark as published
230
- // This guarantees at-least-once delivery without distributed transactions
231
- ```
105
+ ## Anti-Patterns Reference
106
+
107
+ | Pattern | When it's an Anti-Pattern | Simpler Alternative |
108
+ |---------|--------------------------|---------------------|
109
+ | Microservices | Before team or scale justifies it | Modular monolith |
110
+ | Clean/Hexagonal | Over-abstraction for simple CRUD | Concrete first, interfaces later |
111
+ | Event Sourcing | No business requirement for audit/replay | Append-only audit log |
112
+ | CQRS | Simple data model, no read/write divergence | Single model |
113
+ | Repository | Simple CRUD, single database | ORM direct access |
232
114
 
233
115
  ---
234
116
 
235
117
  ## Architecture Decision Records (ADRs)
236
118
 
237
119
  ```markdown
238
- # ADR-001: Use PostgreSQL as Primary Database
120
+ ## ADR-001: [Decision Title]
121
+ **Status:** Proposed | Accepted | Deprecated | Superseded by ADR-XXX
239
122
 
240
- ## Status: Accepted
123
+ **Context:** [Problem + constraints: team, scale, timeline]
241
124
 
242
- ## Context
243
- We need a relational database for our SaaS application with complex querying
244
- requirements, multi-tenancy, and full-text search capabilities.
125
+ **Decision:** [What was chosen — be specific]
245
126
 
246
- ## Decision
247
- We will use PostgreSQL 16 with pgvector extension for AI features.
127
+ **Rationale:** [Why — tied to requirements]
248
128
 
249
- ## Consequences
250
- ### Positive
251
- - Strong ecosystem, proven at scale (Instagram, Discord)
252
- - JSONB support for flexible schema fields
253
- - pgvector eliminates need for separate vector DB
129
+ **Trade-offs:** [What we consciously give up]
254
130
 
255
- ### Negative
256
- - More operational complexity than managed options (Supabase mitigates this)
257
- - Connection pooling required for serverless (PgBouncer)
131
+ **Consequences:**
132
+ - Positive: [Benefits]
133
+ - Negative: [Costs/Risks]
134
+ - Mitigation: [How to address negatives]
258
135
 
259
- ### Risks
260
- - Team has limited PostgreSQL DBA experience → mitigated by managed hosting
261
-
262
- ## Alternatives Considered
263
- | Database | Rejected Because |
264
- |-------------|----------------------------------------|
265
- | MySQL | Weaker JSON support, no pgvector |
266
- | MongoDB | No strong consistency, no JOINs |
267
- | PlanetScale | MySQL-based, no extensions |
136
+ **Revisit when:** [Trigger conditions]
268
137
  ```
269
138
 
139
+ ADR storage: `docs/architecture/adr-001-title.md`
140
+
270
141
  ---
271
142
 
272
143
  ## Scalability Patterns
273
144
 
274
145
  ```
275
- Vertical ScalingBigger machine (simple, limited)
276
- Horizontal ScalingMore machines (complex, unlimited)
277
-
278
- Read scaling:
279
- Cache layer (Redis) Read replicas CDN for static assets
280
-
281
- Write scaling:
282
- Queue writes → Partition/shard data → Event sourcing
283
-
284
- Stateless services:
285
- Sessions in Redis → JWT tokens → No server affinity
286
-
287
- Database scaling:
288
- Connection pooling → Read replicas → Partitioning → Sharding (last resort)
289
-
290
- Caching strategy:
291
- L1: In-memory (process)
292
- L2: Redis/Memcached (shared)
293
- L3: CDN (edge)
294
- Cache invalidation > Cache expiration (when possible)
146
+ Read scaling: Redis cache Read replicas CDN for static assets
147
+ Write scaling: Queue writes Partition data Event sourcing
148
+ Stateless: Sessions in Redis → JWT → No server affinity
149
+ DB scaling: Connection pooling → Read replicas → Partitioning → Sharding (last resort)
150
+ Cache layers: L1: In-memory (process) L2: Redis (shared) L3: CDN (edge)
295
151
  ```
296
152
 
297
- ---
298
-
299
- ## 🤖 LLM-Specific Traps
300
-
301
- 1. **Premature Microservices:** Don't split into microservices until you have team/scale pressure. Start with a modular monolith.
302
- 2. **CQRS for Simple CRUD:** CQRS adds complexity. Only use when read/write patterns are fundamentally different.
303
- 3. **"Clean Architecture" Without Domain Logic:** If your "domain layer" is just DTOs, you don't need Clean Architecture.
304
- 4. **Event Sourcing as Default:** Event sourcing is complex. Only use for audit-heavy domains (finance, compliance).
305
- 5. **Shared Database Between Services:** Microservices with a shared database are a distributed monolith.
306
- 6. **Missing ADRs:** Every significant technical decision needs a documented ADR. "We just decided" is not acceptable.
307
- 7. **Synchronous Microservice Chains:** Service A → B → C → D is a distributed monolith with worse latency.
308
- 8. **Ignoring Conway's Law:** Architecture mirrors org structure. Don't fight it.
309
- 9. **"Hexagonal Architecture" Without Ports:** Just having layers isn't hexagonal. You need explicit port interfaces.
310
- 10. **Over-Abstracting Day One:** YAGNI. Build the simplest thing that works, refactor when patterns emerge.
311
-
312
- ---
313
-
314
- ## 🏛️ Tribunal Integration
315
-
316
- **Slash command: `/tribunal-backend`**
317
-
318
- ### ✅ Pre-Flight Self-Audit
153
+ ## Scale-to-Architecture Matrix
319
154
 
320
155
  ```
321
- ✅ Did I document the architecture decision as an ADR?
322
- ✅ Is the architecture appropriate for team size and scale?
323
- ✅ Do dependencies point inward (domain has no infrastructure deps)?
324
- Did I start simple and avoid premature optimization?
325
- Is the system stateless (sessions in Redis/JWT)?
326
- ✅ Did I consider failure modes (what happens when service X is down)?
327
- ✅ Is there a caching strategy (L1/L2/L3)?
328
- ✅ Are cross-service calls async (events, not synchronous chains)?
329
- ✅ Did I document trade-offs, not just the chosen solution?
330
- ✅ Does the architecture match the team's actual skill set?
156
+ MVP SaaS Enterprise
157
+ Scale: <1K 1K–100K 100K+
158
+ Team: Solo 2–10 10+
159
+ Architecture: Simple Mono Modular Mono Distributed
160
+ Framework: Next.js API NestJS Microservices
331
161
  ```