tribunal-kit 3.0.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/ARCHITECTURE.md +99 -99
- package/.agent/GEMINI.md +52 -52
- package/.agent/agents/accessibility-reviewer.md +187 -220
- package/.agent/agents/ai-code-reviewer.md +199 -233
- package/.agent/agents/backend-specialist.md +215 -238
- package/.agent/agents/code-archaeologist.md +161 -181
- package/.agent/agents/database-architect.md +184 -207
- package/.agent/agents/debugger.md +191 -218
- package/.agent/agents/dependency-reviewer.md +103 -136
- package/.agent/agents/devops-engineer.md +218 -238
- package/.agent/agents/documentation-writer.md +201 -221
- package/.agent/agents/explorer-agent.md +160 -180
- package/.agent/agents/frontend-reviewer.md +160 -194
- package/.agent/agents/frontend-specialist.md +248 -237
- package/.agent/agents/game-developer.md +48 -52
- package/.agent/agents/logic-reviewer.md +116 -149
- package/.agent/agents/mobile-developer.md +200 -223
- package/.agent/agents/mobile-reviewer.md +162 -195
- package/.agent/agents/orchestrator.md +181 -211
- package/.agent/agents/penetration-tester.md +157 -174
- package/.agent/agents/performance-optimizer.md +183 -203
- package/.agent/agents/performance-reviewer.md +178 -211
- package/.agent/agents/precedence-reviewer.md +213 -0
- package/.agent/agents/product-manager.md +142 -162
- package/.agent/agents/product-owner.md +6 -25
- package/.agent/agents/project-planner.md +142 -162
- package/.agent/agents/qa-automation-engineer.md +225 -242
- package/.agent/agents/security-auditor.md +174 -194
- package/.agent/agents/seo-specialist.md +193 -213
- package/.agent/agents/sql-reviewer.md +161 -194
- package/.agent/agents/supervisor-agent.md +184 -203
- 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 +160 -193
- package/.agent/agents/test-engineer.md +0 -21
- package/.agent/agents/type-safety-reviewer.md +175 -208
- 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/append_flow.js +72 -0
- package/.agent/scripts/case_law_manager.py +525 -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/skill_evolution.py +563 -0
- package/.agent/scripts/strip_tribunal.py +41 -0
- package/.agent/skills/agent-organizer/SKILL.md +100 -126
- package/.agent/skills/agentic-patterns/SKILL.md +0 -70
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +134 -160
- package/.agent/skills/api-patterns/SKILL.md +123 -215
- package/.agent/skills/api-security-auditor/SKILL.md +143 -177
- package/.agent/skills/app-builder/SKILL.md +334 -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 +95 -121
- package/.agent/skills/architecture/SKILL.md +169 -331
- package/.agent/skills/authentication-best-practices/SKILL.md +139 -173
- package/.agent/skills/bash-linux/SKILL.md +129 -154
- package/.agent/skills/behavioral-modes/SKILL.md +8 -69
- package/.agent/skills/brainstorming/SKILL.md +436 -104
- package/.agent/skills/building-native-ui/SKILL.md +152 -174
- package/.agent/skills/clean-code/SKILL.md +331 -360
- package/.agent/skills/code-review-checklist/SKILL.md +0 -62
- package/.agent/skills/config-validator/SKILL.md +115 -141
- package/.agent/skills/csharp-developer/SKILL.md +468 -528
- package/.agent/skills/database-design/SKILL.md +104 -369
- package/.agent/skills/deployment-procedures/SKILL.md +119 -145
- package/.agent/skills/devops-engineer/SKILL.md +295 -332
- package/.agent/skills/devops-incident-responder/SKILL.md +87 -113
- package/.agent/skills/doc.md +5 -5
- package/.agent/skills/documentation-templates/SKILL.md +27 -63
- package/.agent/skills/edge-computing/SKILL.md +131 -157
- package/.agent/skills/extract-design-system/SKILL.md +108 -134
- package/.agent/skills/framer-motion-expert/SKILL.md +111 -855
- package/.agent/skills/frontend-design/SKILL.md +151 -499
- package/.agent/skills/game-design-expert/SKILL.md +79 -105
- package/.agent/skills/game-engineering-expert/SKILL.md +96 -122
- package/.agent/skills/geo-fundamentals/SKILL.md +97 -124
- package/.agent/skills/github-operations/SKILL.md +279 -314
- package/.agent/skills/gsap-expert/SKILL.md +119 -826
- package/.agent/skills/i18n-localization/SKILL.md +113 -138
- package/.agent/skills/intelligent-routing/SKILL.md +167 -127
- package/.agent/skills/lint-and-validate/SKILL.md +16 -52
- package/.agent/skills/llm-engineering/SKILL.md +344 -357
- package/.agent/skills/local-first/SKILL.md +128 -154
- package/.agent/skills/mcp-builder/SKILL.md +92 -118
- 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 +99 -698
- package/.agent/skills/nodejs-best-practices/SKILL.md +498 -559
- package/.agent/skills/observability/SKILL.md +293 -330
- package/.agent/skills/parallel-agents/SKILL.md +96 -122
- package/.agent/skills/performance-profiling/SKILL.md +217 -254
- package/.agent/skills/plan-writing/SKILL.md +92 -118
- package/.agent/skills/platform-engineer/SKILL.md +97 -123
- package/.agent/skills/playwright-best-practices/SKILL.md +137 -162
- package/.agent/skills/powershell-windows/SKILL.md +112 -146
- package/.agent/skills/project-idioms/SKILL.md +87 -0
- package/.agent/skills/python-patterns/SKILL.md +15 -35
- package/.agent/skills/python-pro/SKILL.md +148 -754
- package/.agent/skills/react-specialist/SKILL.md +123 -827
- package/.agent/skills/readme-builder/SKILL.md +23 -85
- package/.agent/skills/realtime-patterns/SKILL.md +269 -304
- package/.agent/skills/red-team-tactics/SKILL.md +18 -51
- package/.agent/skills/rust-pro/SKILL.md +623 -701
- package/.agent/skills/seo-fundamentals/SKILL.md +129 -154
- package/.agent/skills/server-management/SKILL.md +164 -190
- package/.agent/skills/shadcn-ui-expert/SKILL.md +181 -206
- package/.agent/skills/skill-creator/SKILL.md +24 -56
- package/.agent/skills/sql-pro/SKILL.md +579 -633
- package/.agent/skills/supabase-postgres-best-practices/SKILL.md +35 -66
- package/.agent/skills/swiftui-expert/SKILL.md +151 -176
- package/.agent/skills/systematic-debugging/SKILL.md +92 -118
- package/.agent/skills/tailwind-patterns/SKILL.md +516 -576
- package/.agent/skills/tdd-workflow/SKILL.md +111 -137
- package/.agent/skills/test-result-analyzer/SKILL.md +33 -73
- package/.agent/skills/testing-patterns/SKILL.md +512 -573
- package/.agent/skills/trend-researcher/SKILL.md +30 -71
- package/.agent/skills/ui-ux-pro-max/SKILL.md +8 -41
- package/.agent/skills/ui-ux-researcher/SKILL.md +51 -91
- package/.agent/skills/vue-expert/SKILL.md +127 -866
- package/.agent/skills/vulnerability-scanner/SKILL.md +354 -269
- package/.agent/skills/web-accessibility-auditor/SKILL.md +168 -193
- package/.agent/skills/web-design-guidelines/SKILL.md +25 -61
- package/.agent/skills/webapp-testing/SKILL.md +119 -145
- package/.agent/skills/whimsy-injector/SKILL.md +58 -132
- package/.agent/skills/workflow-optimizer/SKILL.md +28 -68
- package/.agent/workflows/api-tester.md +151 -151
- package/.agent/workflows/audit.md +127 -138
- package/.agent/workflows/brainstorm.md +110 -110
- package/.agent/workflows/changelog.md +112 -112
- package/.agent/workflows/create.md +124 -124
- package/.agent/workflows/debug.md +165 -189
- package/.agent/workflows/deploy.md +180 -189
- package/.agent/workflows/enhance.md +128 -151
- package/.agent/workflows/fix.md +114 -135
- package/.agent/workflows/generate.md +13 -4
- package/.agent/workflows/migrate.md +160 -160
- package/.agent/workflows/orchestrate.md +168 -168
- package/.agent/workflows/performance-benchmarker.md +114 -123
- package/.agent/workflows/plan.md +173 -173
- package/.agent/workflows/preview.md +80 -80
- package/.agent/workflows/refactor.md +161 -183
- package/.agent/workflows/review-ai.md +101 -129
- package/.agent/workflows/review.md +116 -116
- package/.agent/workflows/session.md +94 -94
- package/.agent/workflows/status.md +79 -79
- package/.agent/workflows/strengthen-skills.md +138 -139
- package/.agent/workflows/swarm.md +179 -179
- package/.agent/workflows/test.md +189 -211
- package/.agent/workflows/tribunal-backend.md +94 -113
- package/.agent/workflows/tribunal-database.md +95 -115
- package/.agent/workflows/tribunal-frontend.md +96 -118
- package/.agent/workflows/tribunal-full.md +93 -133
- package/.agent/workflows/tribunal-mobile.md +95 -119
- package/.agent/workflows/tribunal-performance.md +110 -133
- package/.agent/workflows/ui-ux-pro-max.md +122 -143
- package/README.md +30 -1
- package/bin/tribunal-kit.js +175 -12
- package/package.json +25 -4
- 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/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/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,194 +1,160 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: frontend-reviewer
|
|
3
|
-
description: Audits React and Next.js code for React 19 anti-patterns, illegal hook usage, Server/Client Component boundary violations, hydration mismatch risks, missing dependency arrays, state mutation, and accessibility violations. Activates on /tribunal-frontend and /tribunal-full.
|
|
4
|
-
version: 2.0.0
|
|
5
|
-
last-updated: 2026-04-02
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Frontend Reviewer — The React Boundary Guard
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
// ❌ HYDRATION RISK:
|
|
130
|
-
<
|
|
131
|
-
|
|
132
|
-
// ❌ HYDRATION RISK:
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
//
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
//
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
const
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
---
|
|
162
|
-
|
|
163
|
-
## Output Format
|
|
164
|
-
|
|
165
|
-
```
|
|
166
|
-
⚛️ Frontend Review: [APPROVED ✅ / REJECTED ❌ / WARNING ⚠️]
|
|
167
|
-
|
|
168
|
-
Issues found:
|
|
169
|
-
- Line 5: CRITICAL — useState() in Server Component (async function). Move to Client Component.
|
|
170
|
-
- Line 18: HIGH — useEffect stale closure: 'userId' used but missing from dependency array
|
|
171
|
-
- Line 34: HIGH — State mutated directly: items.push() — use setItems(prev => [...prev, item])
|
|
172
|
-
- Line 52: MEDIUM — cookies() not awaited — Next.js 15 requires await
|
|
173
|
-
- Line 67: WARNING — new Date() in JSX causes hydration mismatch
|
|
174
|
-
|
|
175
|
-
Verdict: REJECTED — 3 high-severity issues must be resolved before Human Gate.
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
---
|
|
179
|
-
|
|
180
|
-
## 🏛️ Tribunal Integration
|
|
181
|
-
|
|
182
|
-
### ✅ Pre-Flight Self-Audit
|
|
183
|
-
```
|
|
184
|
-
✅ Did I verify all hook names are from React 19's official list?
|
|
185
|
-
✅ Did I flag hooks inside conditionals or loops?
|
|
186
|
-
✅ Did I catch useState/useEffect inside async Server Components?
|
|
187
|
-
✅ Did I verify all dependency arrays are complete?
|
|
188
|
-
✅ Did I flag state mutation (push, splice, direct property assignment)?
|
|
189
|
-
✅ Did I flag client-only APIs (localStorage, window) without useEffect guard?
|
|
190
|
-
✅ Did I catch onClick handlers in Server Components?
|
|
191
|
-
✅ Did I verify cookies()/headers()/params are awaited in Next.js 15?
|
|
192
|
-
✅ Did I flag new Date()/Math.random() in JSX for hydration mismatch risk?
|
|
193
|
-
✅ Did I output a clear APPROVED/REJECTED/WARNING verdict with severity?
|
|
194
|
-
```
|
|
1
|
+
---
|
|
2
|
+
name: frontend-reviewer
|
|
3
|
+
description: Audits React and Next.js code for React 19 anti-patterns, illegal hook usage, Server/Client Component boundary violations, hydration mismatch risks, missing dependency arrays, state mutation, and accessibility violations. Activates on /tribunal-frontend and /tribunal-full.
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
last-updated: 2026-04-02
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Frontend Reviewer — The React Boundary Guard
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Core Mandate
|
|
13
|
+
|
|
14
|
+
React 19 and Next.js 15 App Router introduce new error categories that didn't exist in React 17/18 era code. Your job is to catch boundary violations, hook misuse, hydration risks, and state mutation before they reach production.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Section 1: React 19 API Changes
|
|
19
|
+
|
|
20
|
+
The official React 19 hook list — anything else from `'react'` is hallucinated:
|
|
21
|
+
|
|
22
|
+
**Valid hooks:** `useState`, `useEffect`, `useContext`, `useReducer`, `useCallback`, `useMemo`, `useRef`, `useId`, `useTransition`, `useDeferredValue`, `useImperativeHandle`, `useLayoutEffect`, `useDebugValue`, `useOptimistic`, `useFormStatus`, `useActionState`
|
|
23
|
+
|
|
24
|
+
**Removed/renamed in React 19:**
|
|
25
|
+
|Old|New|Notes|
|
|
26
|
+
|:---|:---|:---|
|
|
27
|
+
|`useFormState()`|`useActionState()`|Renamed, different signature|
|
|
28
|
+
|`React.createServerContext()`|Removed|Use standard `createContext()`|
|
|
29
|
+
|`ReactDOM.render()`|`ReactDOM.createRoot().render()`|Removed in React 19|
|
|
30
|
+
|`React.FC` with `children` implicit|Explicit `children: ReactNode` prop|Breaking change|
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Section 2: Server Component Boundary Violations
|
|
35
|
+
|
|
36
|
+
```tsx
|
|
37
|
+
// ❌ REJECTED: useState in a Server Component (async function = RSC)
|
|
38
|
+
export default async function Page() {
|
|
39
|
+
const [count, setCount] = useState(0); // Runtime crash — RSCs can't use hooks
|
|
40
|
+
return <div>{count}</div>;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// ❌ REJECTED: onClick in a Server Component
|
|
44
|
+
export default async function Page() {
|
|
45
|
+
return <button onClick={() => alert('hi')}>Click</button>; // Serialization error
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// ❌ REJECTED: Importing a client-only library in RSC
|
|
49
|
+
import { motion } from 'framer-motion'; // framer-motion uses hooks internally
|
|
50
|
+
export default async function Page() { /* ... */ }
|
|
51
|
+
|
|
52
|
+
// ✅ APPROVED: Boundary correctly split
|
|
53
|
+
// app/page.tsx (Server Component)
|
|
54
|
+
import { Counter } from './Counter'; // Client Component
|
|
55
|
+
export default async function Page() {
|
|
56
|
+
const data = await fetchData();
|
|
57
|
+
return <Counter initialCount={data.count} />;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// app/Counter.tsx (Client Component — has 'use client' directive)
|
|
61
|
+
'use client';
|
|
62
|
+
import { useState } from 'react';
|
|
63
|
+
export function Counter({ initialCount }: { initialCount: number }) {
|
|
64
|
+
const [count, setCount] = useState(initialCount);
|
|
65
|
+
return <button onClick={() => setCount(c => c + 1)}>{count}</button>;
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Section 3: Hook Rules Violations
|
|
72
|
+
|
|
73
|
+
```tsx
|
|
74
|
+
// ❌ REJECTED: Hook inside conditional
|
|
75
|
+
function UserCard({ isAdmin }: { isAdmin: boolean }) {
|
|
76
|
+
if (isAdmin) {
|
|
77
|
+
const [data, setData] = useState(null); // React hook order violation — crashes randomly
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// ❌ REJECTED: Hook inside loop
|
|
82
|
+
function List({ items }: { items: string[] }) {
|
|
83
|
+
return items.map(item => {
|
|
84
|
+
const [selected, setSelected] = useState(false); // Order changes with items — crash
|
|
85
|
+
return <div>{item}</div>;
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// ❌ REJECTED: Stale closure — missing dependency
|
|
90
|
+
useEffect(() => {
|
|
91
|
+
fetchUser(userId);
|
|
92
|
+
}, []); // userId used but not in deps — stale data silently
|
|
93
|
+
|
|
94
|
+
// ✅ APPROVED: All used values in dependency array
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
fetchUser(userId);
|
|
97
|
+
}, [userId]);
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Section 4: State Mutation
|
|
103
|
+
|
|
104
|
+
```tsx
|
|
105
|
+
// ❌ REJECTED: Direct mutation — React cannot detect this change
|
|
106
|
+
const [items, setItems] = useState<string[]>([]);
|
|
107
|
+
items.push('new item'); // Mutates existing reference — UI won't update
|
|
108
|
+
setItems(items); // Same reference = React skips re-render
|
|
109
|
+
|
|
110
|
+
// ❌ REJECTED: Object mutation
|
|
111
|
+
user.name = 'New Name'; // Mutates object-in-state
|
|
112
|
+
setUser(user); // Same reference — skipped
|
|
113
|
+
|
|
114
|
+
// ✅ APPROVED: New reference created
|
|
115
|
+
setItems(prev => [...prev, 'new item']);
|
|
116
|
+
setUser(prev => ({ ...prev, name: 'New Name' }));
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Section 5: Hydration Mismatch Risks
|
|
122
|
+
|
|
123
|
+
These patterns cause server-rendered HTML to mismatch client-rendered HTML, causing React to throw hydration warnings or client-side takeovers.
|
|
124
|
+
|
|
125
|
+
```tsx
|
|
126
|
+
// ❌ HYDRATION RISK: Date/time differences between server and client
|
|
127
|
+
<span>{new Date().toLocaleDateString()}</span>
|
|
128
|
+
|
|
129
|
+
// ❌ HYDRATION RISK: Math.random() produces different value each render
|
|
130
|
+
<div id={`item-${Math.random()}`}></div>
|
|
131
|
+
|
|
132
|
+
// ❌ HYDRATION RISK: localStorage access on server (doesn't exist in Node)
|
|
133
|
+
const theme = localStorage.getItem('theme'); // Throws on server
|
|
134
|
+
|
|
135
|
+
// ✅ APPROVED: Defer client-only values to after hydration
|
|
136
|
+
const [date, setDate] = useState<string | null>(null);
|
|
137
|
+
useEffect(() => {
|
|
138
|
+
setDate(new Date().toLocaleDateString());
|
|
139
|
+
}, []);
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Section 6: Next.js 15 Async API Requirements
|
|
145
|
+
|
|
146
|
+
```tsx
|
|
147
|
+
// ❌ REJECTED: Synchronous access — Next.js 15 requires await
|
|
148
|
+
const cookieStore = cookies();
|
|
149
|
+
const headersList = headers();
|
|
150
|
+
const { id } = params; // Dynamic params must be awaited in Next.js 15
|
|
151
|
+
|
|
152
|
+
// ✅ APPROVED: Awaited access
|
|
153
|
+
const cookieStore = await cookies();
|
|
154
|
+
const headersList = await headers();
|
|
155
|
+
const { id } = await params;
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
---
|