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,108 +1,227 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: react-specialist
|
|
3
|
-
description:
|
|
4
|
-
allowed-tools: Read, Write, Edit, Glob, Grep
|
|
5
|
-
version: 1.0
|
|
6
|
-
last-updated: 2026-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
1
|
+
---
|
|
2
|
+
name: react-specialist
|
|
3
|
+
description: React 19+ specialist. use(), useActionState, useOptimistic, React Compiler, Server/Client Components, Zustand/Jotai, React Query. Use when building components, managing state, optimizing renders.
|
|
4
|
+
allowed-tools: Read, Write, Edit, Glob, Grep
|
|
5
|
+
version: 3.1.0
|
|
6
|
+
last-updated: 2026-04-06
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# React 19+ — Dense Reference
|
|
10
|
+
|
|
11
|
+
## Hallucination Traps (Read First)
|
|
12
|
+
- ❌ `useFormState` → ✅ `useActionState` (stable name)
|
|
13
|
+
- ❌ `useContext()` in conditionals → ✅ `use(Context)` CAN be conditional
|
|
14
|
+
- ❌ `useMemo/useCallback/React.memo` in React 19+ projects → ✅ React Compiler handles this
|
|
15
|
+
- ❌ `exitBeforeEnter` (Framer) → ✅ `mode="wait"` on `<AnimatePresence>`
|
|
16
|
+
- ❌ `next/router` → ✅ `next/navigation` in App Router
|
|
17
|
+
- ❌ Server Components using `useState/useEffect` → must be `"use client"`
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## React 19 Core APIs
|
|
22
|
+
|
|
23
|
+
### `use()` — Replaces many useEffect patterns
|
|
24
|
+
```tsx
|
|
25
|
+
import { use } from "react";
|
|
26
|
+
// Reads promises (suspends until resolved)
|
|
27
|
+
function UserProfile({ userPromise }: { userPromise: Promise<User> }) {
|
|
28
|
+
const user = use(userPromise); // suspends
|
|
29
|
+
return <h1>{user.name}</h1>;
|
|
30
|
+
}
|
|
31
|
+
// Reads context — CAN be called conditionally (unlike useContext)
|
|
32
|
+
function Admin({ isAdmin }: { isAdmin: boolean }) {
|
|
33
|
+
if (isAdmin) return <Panel theme={use(ThemeContext)} />;
|
|
34
|
+
return <PublicPanel />;
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### `useActionState` — Form actions with state
|
|
39
|
+
```tsx
|
|
40
|
+
import { useActionState } from "react"; // NOT useFormState
|
|
41
|
+
|
|
42
|
+
async function submitForm(prevState: FormState, formData: FormData) {
|
|
43
|
+
const email = formData.get("email") as string;
|
|
44
|
+
if (!email.includes("@")) return { error: "Invalid email" };
|
|
45
|
+
await saveToDatabase(email);
|
|
46
|
+
return { error: null, success: true };
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function SignupForm() {
|
|
50
|
+
const [state, formAction, isPending] = useActionState(submitForm, { error: null });
|
|
51
|
+
return (
|
|
52
|
+
<form action={formAction}>
|
|
53
|
+
<input name="email" disabled={isPending} />
|
|
54
|
+
{state.error && <p>{state.error}</p>}
|
|
55
|
+
<button disabled={isPending}>{isPending ? "Saving..." : "Submit"}</button>
|
|
56
|
+
</form>
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### `useOptimistic` — Instant UI feedback
|
|
62
|
+
```tsx
|
|
63
|
+
import { useOptimistic } from "react";
|
|
64
|
+
function TodoList({ todos }: { todos: Todo[] }) {
|
|
65
|
+
const [optimistic, addOptimistic] = useOptimistic(
|
|
66
|
+
todos,
|
|
67
|
+
(current, newTodo: Todo) => [...current, newTodo]
|
|
68
|
+
);
|
|
69
|
+
async function handleAdd(formData: FormData) {
|
|
70
|
+
addOptimistic({ id: crypto.randomUUID(), title: formData.get("title"), pending: true });
|
|
71
|
+
await saveTodo(formData.get("title") as string);
|
|
72
|
+
}
|
|
73
|
+
return (
|
|
74
|
+
<form action={handleAdd}>
|
|
75
|
+
{optimistic.map(t => <li key={t.id} style={{ opacity: t.pending ? 0.5 : 1 }}>{t.title}</li>)}
|
|
76
|
+
</form>
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### `useFormStatus` — Button pending state (must be INSIDE `<form>`)
|
|
82
|
+
```tsx
|
|
83
|
+
import { useFormStatus } from "react-dom";
|
|
84
|
+
// ❌ TRAP: Cannot be called in the same component as <form>
|
|
85
|
+
function SubmitButton() {
|
|
86
|
+
const { pending } = useFormStatus(); // reads nearest parent form
|
|
87
|
+
return <button disabled={pending}>{pending ? "Saving..." : "Save"}</button>;
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### `useTransition` — Non-blocking updates (React 19: supports async)
|
|
92
|
+
```tsx
|
|
93
|
+
const [isPending, startTransition] = useTransition();
|
|
94
|
+
startTransition(async () => {
|
|
95
|
+
const data = await search(query); // async supported in React 19 only
|
|
96
|
+
setResults(data);
|
|
97
|
+
});
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### `useDeferredValue` — Stale-while-rerender
|
|
101
|
+
```tsx
|
|
102
|
+
const deferredQuery = useDeferredValue(query);
|
|
103
|
+
const isStale = query !== deferredQuery;
|
|
104
|
+
return <div style={{ opacity: isStale ? 0.6 : 1 }}><ExpensiveList query={deferredQuery} /></div>;
|
|
105
|
+
// React 19: useDeferredValue(value, initialFallback) — 2-arg form
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## React Compiler (React 19)
|
|
111
|
+
- Auto-memoizes components/values/callbacks. **Don't manually memoize in React 19 projects.**
|
|
112
|
+
- ❌ `useMemo(() => calc(a), [a])` / `useCallback(fn, [id])` / `React.memo(Comp)` — legacy
|
|
113
|
+
- ✅ Write plain functions/values. Compiler optimizes automatically.
|
|
114
|
+
- Exception: still use manual memo if compiler is explicitly disabled in config.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Component Patterns
|
|
119
|
+
|
|
120
|
+
### Compound Components (shared state via context)
|
|
121
|
+
```tsx
|
|
122
|
+
const TabsContext = createContext<{ active: string; setActive: (id: string) => void } | null>(null);
|
|
123
|
+
function Tabs({ children, defaultTab }: { children: ReactNode; defaultTab: string }) {
|
|
124
|
+
const [active, setActive] = useState(defaultTab);
|
|
125
|
+
return <TabsContext value={{ active, setActive }}><div>{children}</div></TabsContext>;
|
|
126
|
+
}
|
|
127
|
+
function Tab({ id, children }: { id: string; children: ReactNode }) {
|
|
128
|
+
const ctx = use(TabsContext)!;
|
|
129
|
+
return <button onClick={() => ctx.setActive(id)} aria-selected={ctx.active === id}>{children}</button>;
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Render Props / Higher Order Hooks
|
|
134
|
+
Prefer custom hooks over render props for modern React.
|
|
135
|
+
|
|
136
|
+
### Context Performance Pattern
|
|
137
|
+
```tsx
|
|
138
|
+
// Split context — prevents all consumers from re-rendering on every change
|
|
139
|
+
const CountStateCtx = createContext<number>(0);
|
|
140
|
+
const CountDispatchCtx = createContext<Dispatch<Action>>(() => {});
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## State Management
|
|
146
|
+
|
|
147
|
+
### Zustand (preferred for global state)
|
|
148
|
+
```tsx
|
|
149
|
+
import { create } from "zustand";
|
|
150
|
+
import { persist } from "zustand/middleware";
|
|
151
|
+
const useStore = create<Store>()(
|
|
152
|
+
persist(
|
|
153
|
+
(set, get) => ({
|
|
154
|
+
count: 0,
|
|
155
|
+
increment: () => set(s => ({ count: s.count + 1 })),
|
|
156
|
+
getDoubled: () => get().count * 2,
|
|
157
|
+
}),
|
|
158
|
+
{ name: "my-store" }
|
|
159
|
+
)
|
|
160
|
+
);
|
|
161
|
+
// ❌ TRAP: Do NOT destructure the whole store — causes re-render on every change
|
|
162
|
+
// ✅ const count = useStore(s => s.count); // selector
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Jotai (preferred for derived/atomic state)
|
|
166
|
+
```tsx
|
|
167
|
+
import { atom, useAtom, useAtomValue, useSetAtom } from "jotai";
|
|
168
|
+
const countAtom = atom(0);
|
|
169
|
+
const doubledAtom = atom(get => get(countAtom) * 2); // derived atom
|
|
170
|
+
// ❌ TRAP: atomWithStorage is from jotai/utils — NOT from jotai
|
|
171
|
+
import { atomWithStorage } from "jotai/utils";
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### React Query / TanStack Query
|
|
175
|
+
```tsx
|
|
176
|
+
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
|
|
177
|
+
const { data, isPending, error } = useQuery({
|
|
178
|
+
queryKey: ["user", userId],
|
|
179
|
+
queryFn: () => fetchUser(userId),
|
|
180
|
+
staleTime: 5 * 60 * 1000, // don't refetch for 5 minutes
|
|
181
|
+
});
|
|
182
|
+
// Optimistic update:
|
|
183
|
+
const qc = useQueryClient();
|
|
184
|
+
const mutation = useMutation({
|
|
185
|
+
mutationFn: updateUser,
|
|
186
|
+
onMutate: async (newUser) => {
|
|
187
|
+
await qc.cancelQueries({ queryKey: ["user", newUser.id] });
|
|
188
|
+
const prev = qc.getQueryData(["user", newUser.id]);
|
|
189
|
+
qc.setQueryData(["user", newUser.id], newUser);
|
|
190
|
+
return { prev };
|
|
191
|
+
},
|
|
192
|
+
onError: (_, __, ctx) => qc.setQueryData(["user"], ctx?.prev),
|
|
193
|
+
onSettled: () => qc.invalidateQueries({ queryKey: ["user"] }),
|
|
194
|
+
});
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Performance
|
|
200
|
+
|
|
201
|
+
| Technique | When |
|
|
202
|
+
|-----------|------|
|
|
203
|
+
| `useDeferredValue` | Expensive derived render (charts, filters) |
|
|
204
|
+
| `useTransition` | Page nav, tab switches, data load |
|
|
205
|
+
| `lazy()` + `Suspense` | Code-split heavy components |
|
|
206
|
+
| `<Virtuoso>` / `<WindowVirtualizer>` | Lists > 200 items |
|
|
207
|
+
| Avoid `useEffect` for state transforms | Use `useMemo` or derived atoms |
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## Refs & DOM
|
|
212
|
+
|
|
213
|
+
```tsx
|
|
214
|
+
// React 19: ref is now a prop (no forwardRef needed)
|
|
215
|
+
function Input({ ref, ...props }: ComponentProps<"input"> & { ref?: Ref<HTMLInputElement> }) {
|
|
216
|
+
return <input ref={ref} {...props} />;
|
|
217
|
+
}
|
|
218
|
+
// ❌ TRAP: forwardRef is deprecated in React 19 — still works but not needed
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Testing Checklist
|
|
224
|
+
- ✅ Use React Testing Library — test behavior, not implementation
|
|
225
|
+
- ✅ `userEvent` over `fireEvent` (async, closer to real interaction)
|
|
226
|
+
- ✅ Mock server calls with MSW (Mock Service Worker)
|
|
227
|
+
- ❌ Never test internal state, ref values, or component instances
|
|
@@ -9,8 +9,6 @@ applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
|
|
|
9
9
|
|
|
10
10
|
# README Builder Skill
|
|
11
11
|
|
|
12
|
-
> A great README is a product pitch, a user manual, and a contributor's welcome — all in one document.
|
|
13
|
-
|
|
14
12
|
---
|
|
15
13
|
|
|
16
14
|
## Ground Rules
|
|
@@ -46,7 +44,7 @@ Before generating any README content, answer these questions by scanning the pro
|
|
|
46
44
|
```markdown
|
|
47
45
|
# [Project Name]
|
|
48
46
|
|
|
49
|
-
|
|
47
|
+
[One-line tagline: what it does and for whom]
|
|
50
48
|
|
|
51
49
|
[](LICENSE)
|
|
52
50
|
[](https://www.npmjs.com/package/package-name)
|
|
@@ -106,10 +104,10 @@ package-name init --config ./config.json --output ./dist
|
|
|
106
104
|
|
|
107
105
|
## ⚙️ Configuration
|
|
108
106
|
|
|
109
|
-
|
|
|
107
|
+
|Option|Type|Default|Description|
|
|
110
108
|
|--------|------|---------|-------------|
|
|
111
|
-
|
|
112
|
-
|
|
109
|
+
|`option1`|`string`|`"default"`|What it controls|
|
|
110
|
+
|`option2`|`boolean`|`false`|What it controls|
|
|
113
111
|
|
|
114
112
|
---
|
|
115
113
|
|
|
@@ -185,12 +183,12 @@ Add a dedicated `## Commands` section:
|
|
|
185
183
|
```markdown
|
|
186
184
|
## Commands
|
|
187
185
|
|
|
188
|
-
|
|
|
186
|
+
|Command|Description|
|
|
189
187
|
|---------|-------------|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
188
|
+
|`tool init`|Initialize a new project|
|
|
189
|
+
|`tool build`|Compile and bundle|
|
|
190
|
+
|`tool deploy`|Deploy to production|
|
|
191
|
+
|`tool --help`|Show all available options|
|
|
194
192
|
```
|
|
195
193
|
|
|
196
194
|
### Libraries / SDKs
|
|
@@ -203,10 +201,10 @@ Add a `## API Reference` section with function signatures:
|
|
|
203
201
|
|
|
204
202
|
Returns: `ReturnType`
|
|
205
203
|
|
|
206
|
-
|
|
|
204
|
+
|Parameter|Type|Description|
|
|
207
205
|
|-----------|------|-------------|
|
|
208
|
-
|
|
209
|
-
|
|
206
|
+
|`param1`|`string`|Description|
|
|
207
|
+
|`param2`|`options`|Optional config|
|
|
210
208
|
```
|
|
211
209
|
|
|
212
210
|
### Monorepos
|
|
@@ -215,10 +213,10 @@ Add a `## Packages` table:
|
|
|
215
213
|
```markdown
|
|
216
214
|
## Packages
|
|
217
215
|
|
|
218
|
-
|
|
|
216
|
+
|Package|Version|Description|
|
|
219
217
|
|---------|---------|-------------|
|
|
220
|
-
|
|
|
221
|
-
|
|
|
218
|
+
|[`@org/core`](packages/core)|[](https://npm.im/@org/core)|Core engine|
|
|
219
|
+
|[`@org/cli`](packages/cli)|[](https://npm.im/@org/cli)|CLI interface|
|
|
222
220
|
```
|
|
223
221
|
|
|
224
222
|
---
|
|
@@ -242,71 +240,3 @@ Evidence: [file written at path / content reviewed]
|
|
|
242
240
|
```
|
|
243
241
|
|
|
244
242
|
---
|
|
245
|
-
|
|
246
|
-
## 🏛️ Tribunal Integration (Anti-Hallucination)
|
|
247
|
-
|
|
248
|
-
**Slash command: `/review` or `/generate`**
|
|
249
|
-
**Active reviewers: `logic` · `frontend` · `documentation`**
|
|
250
|
-
|
|
251
|
-
### ❌ Forbidden AI Tropes in README Generation
|
|
252
|
-
|
|
253
|
-
1. **Placeholder content** — "Add your description here", "TODO", "Coming soon" are never acceptable.
|
|
254
|
-
2. **Fabricated badges** — never create badge URLs with invented package names or repo paths.
|
|
255
|
-
3. **Untested code blocks** — never write installation or usage commands without verifying them against the actual `package.json` or project config.
|
|
256
|
-
4. **Version number invention** — always read the actual version from `package.json`, `pyproject.toml`, or `Cargo.toml`.
|
|
257
|
-
5. **Generic feature claims** — "fast", "powerful", "easy to use" without concrete evidence or metrics.
|
|
258
|
-
|
|
259
|
-
### ✅ Pre-Flight Self-Audit
|
|
260
|
-
|
|
261
|
-
Review these questions before generating README content:
|
|
262
|
-
|
|
263
|
-
```
|
|
264
|
-
✅ Did I read the actual project files first (package.json, source)?
|
|
265
|
-
✅ Is the project name correct (not a guess)?
|
|
266
|
-
✅ Are all code block commands runnable against this actual project?
|
|
267
|
-
✅ Are badge URLs pointing to the real repo/package?
|
|
268
|
-
✅ Is the version number read from actual project files, not guessed?
|
|
269
|
-
✅ Does every feature bullet describe a concrete, provable capability?
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
---
|
|
274
|
-
|
|
275
|
-
## 🤖 LLM-Specific Traps
|
|
276
|
-
|
|
277
|
-
AI coding assistants often fall into specific bad habits when dealing with this domain. These are strictly forbidden:
|
|
278
|
-
|
|
279
|
-
1. **Over-engineering:** Proposing complex abstractions or distributed systems when a simpler approach suffices.
|
|
280
|
-
2. **Hallucinated Libraries/Methods:** Using non-existent methods or packages. Always `// VERIFY` or check `package.json` / `requirements.txt`.
|
|
281
|
-
3. **Skipping Edge Cases:** Writing the "happy path" and ignoring error handling, timeouts, or data validation.
|
|
282
|
-
4. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
|
|
283
|
-
5. **Silent Degradation:** Catching and suppressing errors without logging or re-raising.
|
|
284
|
-
|
|
285
|
-
---
|
|
286
|
-
|
|
287
|
-
## 🏛️ Tribunal Integration (Anti-Hallucination)
|
|
288
|
-
|
|
289
|
-
**Slash command: `/review` or `/tribunal-full`**
|
|
290
|
-
**Active reviewers: `logic-reviewer` · `security-auditor`**
|
|
291
|
-
|
|
292
|
-
### ❌ Forbidden AI Tropes
|
|
293
|
-
|
|
294
|
-
1. **Blind Assumptions:** Never make an assumption without documenting it clearly with `// VERIFY: [reason]`.
|
|
295
|
-
2. **Silent Degradation:** Catching and suppressing errors without logging or handling.
|
|
296
|
-
3. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
|
|
297
|
-
|
|
298
|
-
### ✅ Pre-Flight Self-Audit
|
|
299
|
-
|
|
300
|
-
Review these questions before confirming output:
|
|
301
|
-
```
|
|
302
|
-
✅ Did I rely ONLY on real, verified tools and methods?
|
|
303
|
-
✅ Is this solution appropriately scoped to the user's constraints?
|
|
304
|
-
✅ Did I handle potential failure modes and edge cases?
|
|
305
|
-
✅ Have I avoided generic boilerplate that doesn't add value?
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
### 🛑 Verification-Before-Completion (VBC) Protocol
|
|
309
|
-
|
|
310
|
-
**CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
|
|
311
|
-
- ❌ **Forbidden:** Declaring a task complete because the output "looks correct."
|
|
312
|
-
- ✅ **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.
|