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,195 +1,162 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: mobile-reviewer
|
|
3
|
-
description: Audits React Native and Expo code for Reanimated UI-thread violations, JS bridge bottlenecks, FlatList/FlashList performance anti-patterns, memory leaks from unresolved listeners, safe area boundary cases, and platform-specific API misuse. Activates on /tribunal-mobile and /tribunal-full.
|
|
4
|
-
version: 2.0.0
|
|
5
|
-
last-updated: 2026-04-02
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Mobile Reviewer — The Native Thread 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
|
-
// ❌ PERFORMANCE:
|
|
59
|
-
<FlatList
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
/>
|
|
66
|
-
|
|
67
|
-
// ❌ PERFORMANCE:
|
|
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
|
-
<View style={{
|
|
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
|
-
## Output Format
|
|
166
|
-
|
|
167
|
-
```
|
|
168
|
-
📱 Mobile Review: [APPROVED ✅ / REJECTED ❌ / WARNING ⚠️]
|
|
169
|
-
|
|
170
|
-
Issues found:
|
|
171
|
-
- Line 12: CRITICAL — setState inside Gesture.onUpdate() — UI→JS bridge crossing causes jank
|
|
172
|
-
- Line 28: HIGH — FlatList inside ScrollView — disables virtualization, loads all N items
|
|
173
|
-
- Line 41: HIGH — AppState.addEventListener with no cleanup return — memory leak
|
|
174
|
-
- Line 55: MEDIUM — Hardcoded paddingTop: 44 — ignores Dynamic Island on iPhone 15 Pro
|
|
175
|
-
|
|
176
|
-
Verdict: REJECTED — 1 critical thread violation must be resolved before Human Gate.
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
---
|
|
180
|
-
|
|
181
|
-
## 🏛️ Tribunal Integration
|
|
182
|
-
|
|
183
|
-
### ✅ Pre-Flight Self-Audit
|
|
184
|
-
```
|
|
185
|
-
✅ Did I verify Reanimated gesture handlers don't call setState (UI→JS bridge)?
|
|
186
|
-
✅ Did I ensure custom animation functions have the 'worklet' directive?
|
|
187
|
-
✅ Did I flag FlatList inside ScrollView (disables windowing)?
|
|
188
|
-
✅ Did I check FlatList has keyExtractor and memoized renderItem?
|
|
189
|
-
✅ Did I recommend FlashList for large datasets (>50 items)?
|
|
190
|
-
✅ Did I verify safe area insets are dynamic (not hardcoded pixels)?
|
|
191
|
-
✅ Did I catch useEffect subscriptions without cleanup return functions?
|
|
192
|
-
✅ Did I flag platform-specific APIs without Platform.OS guards?
|
|
193
|
-
✅ Did I verify Linking.openURL has web platform guard?
|
|
194
|
-
✅ Did I output a clear APPROVED/REJECTED/WARNING verdict with thread context?
|
|
195
|
-
```
|
|
1
|
+
---
|
|
2
|
+
name: mobile-reviewer
|
|
3
|
+
description: Audits React Native and Expo code for Reanimated UI-thread violations, JS bridge bottlenecks, FlatList/FlashList performance anti-patterns, memory leaks from unresolved listeners, safe area boundary cases, and platform-specific API misuse. Activates on /tribunal-mobile and /tribunal-full.
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
last-updated: 2026-04-02
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Mobile Reviewer — The Native Thread Guard
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Core Mandate
|
|
13
|
+
|
|
14
|
+
Mobile performance failure is permanent — the app store reviews mention it, the uninstall button gets pressed. Your job is to catch thread violations, bridge crossings, and memory leaks before they ship.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Section 1: Reanimated Thread Safety
|
|
19
|
+
|
|
20
|
+
React Native Reanimated 3 runs animations entirely on the UI thread — but only if you use the right APIs.
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
// ❌ BRIDGE CROSSING: Regular setState inside animation callback
|
|
24
|
+
const translateX = useSharedValue(0);
|
|
25
|
+
const gesture = Gesture.Pan()
|
|
26
|
+
.onUpdate((e) => {
|
|
27
|
+
setState(e.translationX); // Crosses from UI thread to JS thread — jank guaranteed
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
// ❌ BRIDGE CROSSING: Using regular function instead of worklet
|
|
31
|
+
const gesture = Gesture.Pan()
|
|
32
|
+
.onUpdate((e) => {
|
|
33
|
+
doSomething(e.translationX); // Regular function can't run on UI thread
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// ✅ APPROVED: Everything stays on UI thread
|
|
37
|
+
const translateX = useSharedValue(0);
|
|
38
|
+
const gesture = Gesture.Pan()
|
|
39
|
+
.onUpdate((e) => {
|
|
40
|
+
translateX.value = e.translationX; // Direct shared value update — UI thread only
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// ✅ APPROVED: worklet directive for custom functions used in animations
|
|
44
|
+
const clamp = (value: number, min: number, max: number): number => {
|
|
45
|
+
'worklet';
|
|
46
|
+
return Math.min(Math.max(value, min), max);
|
|
47
|
+
};
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Section 2: FlatList / FlashList Anti-Patterns
|
|
53
|
+
|
|
54
|
+
```tsx
|
|
55
|
+
// ❌ PERFORMANCE: Missing keyExtractor — React can't reuse items
|
|
56
|
+
<FlatList data={items} renderItem={({ item }) => <Item item={item} />} />
|
|
57
|
+
|
|
58
|
+
// ❌ PERFORMANCE: Inline renderItem — new function ref on every render
|
|
59
|
+
<FlatList
|
|
60
|
+
data={items}
|
|
61
|
+
renderItem={({ item }) => <ItemCard item={item} />} // Re-renders all items
|
|
62
|
+
/>
|
|
63
|
+
|
|
64
|
+
// ❌ PERFORMANCE: No getItemLayout on uniform-height lists — layout scan on scroll
|
|
65
|
+
<FlatList data={items} renderItem={renderItem} />
|
|
66
|
+
|
|
67
|
+
// ❌ PERFORMANCE: VirtualizedList in ScrollView — disables windowing, loads all items
|
|
68
|
+
<ScrollView>
|
|
69
|
+
<FlatList data={items} renderItem={renderItem} />
|
|
70
|
+
</ScrollView>
|
|
71
|
+
|
|
72
|
+
// ✅ APPROVED: FlashList for large lists (100x faster than FlatList)
|
|
73
|
+
<FlashList
|
|
74
|
+
data={items}
|
|
75
|
+
renderItem={renderItem}
|
|
76
|
+
estimatedItemSize={72} // Required for FlashList performance
|
|
77
|
+
keyExtractor={(item) => item.id}
|
|
78
|
+
/>
|
|
79
|
+
|
|
80
|
+
// ✅ APPROVED: Memoized renderItem
|
|
81
|
+
const renderItem = useCallback(({ item }: ListRenderItemInfo<Item>) => (
|
|
82
|
+
<ItemCard item={item} />
|
|
83
|
+
), []);
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Section 3: Safe Area Violations
|
|
89
|
+
|
|
90
|
+
```tsx
|
|
91
|
+
// ❌ CLS/LAYOUT: Hardcoded top padding ignores notch/Dynamic Island
|
|
92
|
+
<View style={{ paddingTop: 44 }}> {/* iPhone 15 Pro Max has 59px status bar */}
|
|
93
|
+
|
|
94
|
+
// ❌ LAYOUT: Bottom content hides behind home indicator
|
|
95
|
+
<View style={{ paddingBottom: 20 }}>
|
|
96
|
+
|
|
97
|
+
// ✅ APPROVED: SafeAreaView or useSafeAreaInsets
|
|
98
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
99
|
+
|
|
100
|
+
function Screen() {
|
|
101
|
+
const insets = useSafeAreaInsets();
|
|
102
|
+
return (
|
|
103
|
+
<View style={{ paddingTop: insets.top, paddingBottom: insets.bottom }}>
|
|
104
|
+
{/* Content safely inset from notch and home indicator */}
|
|
105
|
+
</View>
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Section 4: Memory Leak Patterns
|
|
113
|
+
|
|
114
|
+
```tsx
|
|
115
|
+
// ❌ MEMORY LEAK: AppState subscription not removed
|
|
116
|
+
useEffect(() => {
|
|
117
|
+
const subscription = AppState.addEventListener('change', handleChange);
|
|
118
|
+
// Missing: return () => subscription.remove();
|
|
119
|
+
}, []);
|
|
120
|
+
|
|
121
|
+
// ❌ MEMORY LEAK: Keyboard listener not removed
|
|
122
|
+
useEffect(() => {
|
|
123
|
+
const show = Keyboard.addListener('keyboardWillShow', onShow);
|
|
124
|
+
const hide = Keyboard.addListener('keyboardWillHide', onHide);
|
|
125
|
+
// Missing cleanup!
|
|
126
|
+
}, []);
|
|
127
|
+
|
|
128
|
+
// ✅ APPROVED: Always return cleanup
|
|
129
|
+
useEffect(() => {
|
|
130
|
+
const subscription = AppState.addEventListener('change', handleChange);
|
|
131
|
+
return () => subscription.remove();
|
|
132
|
+
}, []);
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Section 5: Platform-Specific API Misuse
|
|
138
|
+
|
|
139
|
+
```tsx
|
|
140
|
+
// ❌ CRASH: iOS-only API used without platform check
|
|
141
|
+
import { DatePickerIOS } from 'react-native'; // Removed in RN 0.65+
|
|
142
|
+
|
|
143
|
+
// ❌ WARN: Platform-specific style without guard
|
|
144
|
+
const styles = StyleSheet.create({
|
|
145
|
+
shadow: {
|
|
146
|
+
shadowColor: '#000', // iOS only
|
|
147
|
+
elevation: 5, // Android only — both fine, but document intent
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
// ❌ CRASH on web: Linking.openURL with tel: on web platforms
|
|
152
|
+
await Linking.openURL('tel:+1234567890'); // Throws on Expo Web
|
|
153
|
+
|
|
154
|
+
// ✅ APPROVED: Platform guard
|
|
155
|
+
if (Platform.OS !== 'web') {
|
|
156
|
+
await Linking.openURL('tel:+1234567890');
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
---
|