tribunal-kit 2.4.6 → 3.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.
Files changed (142) hide show
  1. package/.agent/agents/accessibility-reviewer.md +220 -134
  2. package/.agent/agents/ai-code-reviewer.md +233 -129
  3. package/.agent/agents/backend-specialist.md +238 -178
  4. package/.agent/agents/code-archaeologist.md +181 -119
  5. package/.agent/agents/database-architect.md +207 -164
  6. package/.agent/agents/debugger.md +218 -151
  7. package/.agent/agents/dependency-reviewer.md +136 -55
  8. package/.agent/agents/devops-engineer.md +238 -175
  9. package/.agent/agents/documentation-writer.md +221 -137
  10. package/.agent/agents/explorer-agent.md +180 -142
  11. package/.agent/agents/frontend-reviewer.md +194 -80
  12. package/.agent/agents/frontend-specialist.md +237 -188
  13. package/.agent/agents/game-developer.md +52 -184
  14. package/.agent/agents/logic-reviewer.md +149 -78
  15. package/.agent/agents/mobile-developer.md +223 -152
  16. package/.agent/agents/mobile-reviewer.md +195 -79
  17. package/.agent/agents/orchestrator.md +211 -170
  18. package/.agent/agents/penetration-tester.md +174 -131
  19. package/.agent/agents/performance-optimizer.md +203 -139
  20. package/.agent/agents/performance-reviewer.md +211 -108
  21. package/.agent/agents/product-manager.md +162 -108
  22. package/.agent/agents/project-planner.md +162 -142
  23. package/.agent/agents/qa-automation-engineer.md +242 -138
  24. package/.agent/agents/security-auditor.md +194 -170
  25. package/.agent/agents/seo-specialist.md +213 -132
  26. package/.agent/agents/sql-reviewer.md +194 -73
  27. package/.agent/agents/supervisor-agent.md +203 -156
  28. package/.agent/agents/test-coverage-reviewer.md +193 -81
  29. package/.agent/agents/type-safety-reviewer.md +208 -65
  30. package/.agent/scripts/__pycache__/auto_preview.cpython-311.pyc +0 -0
  31. package/.agent/scripts/__pycache__/bundle_analyzer.cpython-311.pyc +0 -0
  32. package/.agent/scripts/__pycache__/checklist.cpython-311.pyc +0 -0
  33. package/.agent/scripts/__pycache__/dependency_analyzer.cpython-311.pyc +0 -0
  34. package/.agent/scripts/__pycache__/security_scan.cpython-311.pyc +0 -0
  35. package/.agent/scripts/__pycache__/session_manager.cpython-311.pyc +0 -0
  36. package/.agent/scripts/__pycache__/skill_integrator.cpython-311.pyc +0 -0
  37. package/.agent/scripts/__pycache__/swarm_dispatcher.cpython-311.pyc +0 -0
  38. package/.agent/scripts/__pycache__/test_runner.cpython-311.pyc +0 -0
  39. package/.agent/scripts/__pycache__/verify_all.cpython-311.pyc +0 -0
  40. package/.agent/skills/agent-organizer/SKILL.md +126 -132
  41. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +155 -66
  42. package/.agent/skills/api-patterns/SKILL.md +289 -257
  43. package/.agent/skills/api-security-auditor/SKILL.md +172 -70
  44. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +1 -1
  45. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +1 -1
  46. package/.agent/skills/appflow-wireframe/SKILL.md +107 -100
  47. package/.agent/skills/architecture/SKILL.md +331 -200
  48. package/.agent/skills/authentication-best-practices/SKILL.md +168 -67
  49. package/.agent/skills/bash-linux/SKILL.md +154 -215
  50. package/.agent/skills/brainstorming/SKILL.md +104 -210
  51. package/.agent/skills/building-native-ui/SKILL.md +169 -70
  52. package/.agent/skills/clean-code/SKILL.md +360 -206
  53. package/.agent/skills/config-validator/SKILL.md +141 -165
  54. package/.agent/skills/csharp-developer/SKILL.md +528 -107
  55. package/.agent/skills/database-design/SKILL.md +455 -275
  56. package/.agent/skills/deployment-procedures/SKILL.md +145 -188
  57. package/.agent/skills/devops-engineer/SKILL.md +332 -134
  58. package/.agent/skills/devops-incident-responder/SKILL.md +113 -98
  59. package/.agent/skills/edge-computing/SKILL.md +157 -213
  60. package/.agent/skills/extract-design-system/SKILL.md +129 -69
  61. package/.agent/skills/framer-motion-expert/SKILL.md +939 -0
  62. package/.agent/skills/game-design-expert/SKILL.md +105 -0
  63. package/.agent/skills/game-engineering-expert/SKILL.md +122 -0
  64. package/.agent/skills/geo-fundamentals/SKILL.md +124 -215
  65. package/.agent/skills/github-operations/SKILL.md +314 -354
  66. package/.agent/skills/gsap-expert/SKILL.md +901 -0
  67. package/.agent/skills/i18n-localization/SKILL.md +138 -216
  68. package/.agent/skills/intelligent-routing/SKILL.md +127 -139
  69. package/.agent/skills/llm-engineering/SKILL.md +357 -258
  70. package/.agent/skills/local-first/SKILL.md +154 -203
  71. package/.agent/skills/mcp-builder/SKILL.md +118 -224
  72. package/.agent/skills/nextjs-react-expert/SKILL.md +783 -203
  73. package/.agent/skills/nodejs-best-practices/SKILL.md +559 -280
  74. package/.agent/skills/observability/SKILL.md +330 -285
  75. package/.agent/skills/parallel-agents/SKILL.md +122 -181
  76. package/.agent/skills/performance-profiling/SKILL.md +254 -197
  77. package/.agent/skills/plan-writing/SKILL.md +118 -188
  78. package/.agent/skills/platform-engineer/SKILL.md +123 -135
  79. package/.agent/skills/playwright-best-practices/SKILL.md +157 -76
  80. package/.agent/skills/powershell-windows/SKILL.md +146 -230
  81. package/.agent/skills/python-pro/SKILL.md +879 -114
  82. package/.agent/skills/react-specialist/SKILL.md +931 -108
  83. package/.agent/skills/realtime-patterns/SKILL.md +304 -296
  84. package/.agent/skills/rust-pro/SKILL.md +701 -240
  85. package/.agent/skills/seo-fundamentals/SKILL.md +154 -181
  86. package/.agent/skills/server-management/SKILL.md +190 -212
  87. package/.agent/skills/shadcn-ui-expert/SKILL.md +201 -68
  88. package/.agent/skills/sql-pro/SKILL.md +633 -104
  89. package/.agent/skills/swiftui-expert/SKILL.md +171 -70
  90. package/.agent/skills/systematic-debugging/SKILL.md +118 -186
  91. package/.agent/skills/tailwind-patterns/SKILL.md +576 -232
  92. package/.agent/skills/tdd-workflow/SKILL.md +137 -209
  93. package/.agent/skills/testing-patterns/SKILL.md +573 -205
  94. package/.agent/skills/vue-expert/SKILL.md +964 -119
  95. package/.agent/skills/vulnerability-scanner/SKILL.md +269 -316
  96. package/.agent/skills/web-accessibility-auditor/SKILL.md +188 -71
  97. package/.agent/skills/webapp-testing/SKILL.md +145 -236
  98. package/.agent/workflows/api-tester.md +151 -279
  99. package/.agent/workflows/audit.md +138 -168
  100. package/.agent/workflows/brainstorm.md +110 -146
  101. package/.agent/workflows/changelog.md +112 -144
  102. package/.agent/workflows/create.md +124 -139
  103. package/.agent/workflows/debug.md +189 -196
  104. package/.agent/workflows/deploy.md +189 -153
  105. package/.agent/workflows/enhance.md +151 -139
  106. package/.agent/workflows/fix.md +135 -143
  107. package/.agent/workflows/generate.md +157 -164
  108. package/.agent/workflows/migrate.md +160 -163
  109. package/.agent/workflows/orchestrate.md +168 -151
  110. package/.agent/workflows/performance-benchmarker.md +123 -305
  111. package/.agent/workflows/plan.md +173 -151
  112. package/.agent/workflows/preview.md +80 -137
  113. package/.agent/workflows/refactor.md +183 -153
  114. package/.agent/workflows/review-ai.md +129 -140
  115. package/.agent/workflows/review.md +116 -155
  116. package/.agent/workflows/session.md +94 -154
  117. package/.agent/workflows/status.md +79 -125
  118. package/.agent/workflows/strengthen-skills.md +139 -99
  119. package/.agent/workflows/swarm.md +179 -194
  120. package/.agent/workflows/test.md +211 -166
  121. package/.agent/workflows/tribunal-backend.md +113 -111
  122. package/.agent/workflows/tribunal-database.md +115 -132
  123. package/.agent/workflows/tribunal-frontend.md +118 -115
  124. package/.agent/workflows/tribunal-full.md +133 -136
  125. package/.agent/workflows/tribunal-mobile.md +119 -123
  126. package/.agent/workflows/tribunal-performance.md +133 -152
  127. package/.agent/workflows/ui-ux-pro-max.md +143 -171
  128. package/README.md +11 -15
  129. package/package.json +1 -1
  130. package/.agent/skills/dotnet-core-expert/SKILL.md +0 -103
  131. package/.agent/skills/framer-motion-animations/SKILL.md +0 -74
  132. package/.agent/skills/game-development/2d-games/SKILL.md +0 -119
  133. package/.agent/skills/game-development/3d-games/SKILL.md +0 -135
  134. package/.agent/skills/game-development/SKILL.md +0 -236
  135. package/.agent/skills/game-development/game-art/SKILL.md +0 -185
  136. package/.agent/skills/game-development/game-audio/SKILL.md +0 -190
  137. package/.agent/skills/game-development/game-design/SKILL.md +0 -129
  138. package/.agent/skills/game-development/mobile-games/SKILL.md +0 -108
  139. package/.agent/skills/game-development/multiplayer/SKILL.md +0 -132
  140. package/.agent/skills/game-development/pc-games/SKILL.md +0 -144
  141. package/.agent/skills/game-development/vr-ar/SKILL.md +0 -123
  142. package/.agent/skills/game-development/web-games/SKILL.md +0 -150
@@ -1,203 +1,154 @@
1
- ---
2
- name: local-first
3
- description: Local-first software principles. Offline-capable apps, CRDTs, sync engines (ElectricSQL, Replicache, Zero), conflict resolution, and the migration path from REST-first to local-first architecture. Use when building apps that need offline support, fast UI, or collaborative editing.
4
- allowed-tools: Read, Write, Edit, Glob, Grep
5
- version: 1.0.0
6
- last-updated: 2026-03-12
7
- applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
8
- ---
9
-
10
- # Local-First Software Principles
11
-
12
- > In a local-first app, the network is an enhancement, not a requirement.
13
- > The app works fully offline. Sync happens in the background when possible.
14
-
15
- ---
16
-
17
- ## The Local-First Promise
18
-
19
- Local-first apps satisfy all of these simultaneously traditional web apps satisfy none:
20
-
21
- ```
22
- Fast UI — reads from local replica, never waits for network
23
- Offline use — full functionality without internet
24
- Collaboration multiple users edit the same data
25
- ✅ Privacy — data lives on device by default
26
- ✅ Longevity — app works even if vendor servers go down
27
- ```
28
-
29
- ---
30
-
31
- ## Architecture Spectrum
32
-
33
- ```
34
- REST-First (most apps today):
35
- Client HTTP Server DB
36
- Offline: ❌ Speed: Network-bound Collaboration: Manual
37
-
38
- Optimistic UI (halfway):
39
- Client → Local cache → HTTP → Server → DB
40
- Offline: Partial Speed: Fast for reads Collaboration: Conflict-prone
41
-
42
- Local-First:
43
- Client → Local replica (SQLite/CRDT) → Sync engine ↔ Server → DB
44
- Offline: ✅ Speed: Instant Collaboration: via CRDTs
45
- ```
46
-
47
- ---
48
-
49
- ## Sync Engine Selection
50
-
51
- Choose based on your database, team size, and product requirements:
52
-
53
- | Engine | Sync Model | Database | Best For |
54
- |---|---|---|---|
55
- | **ElectricSQL** | Postgres → SQLite on client | PostgreSQL only | Postgres-native teams |
56
- | **Replicache** | Mutation log + pull | Any backend | Custom sync logic needed |
57
- | **Zero (Rocicorp)** | Reactive queries | PostgreSQL | Real-time apps, Figma-speed UIs |
58
- | **Liveblocks** | CRDT + storage API | Managed | Collaborative SaaS (no own server) |
59
- | **Yjs + y-indexeddb** | CRDT + local persistence | Any | Text editing, whiteboard |
60
-
61
- ---
62
-
63
- ## CRDT Choices
64
-
65
- CRDTs (Conflict-free Replicated Data Types) resolve concurrent edits mathematically — no server arbitration needed:
66
-
67
- | CRDT Type | Use For | Library |
68
- |---|---|---|
69
- | **LWW Register** | Scalar values (settings, status) | Built-in or custom |
70
- | **G-Counter** | Incrementing counters (likes, views) | Custom |
71
- | **OR-Set** | Sets that support add + remove | Yjs `Y.Array` |
72
- | **Y.Text** | Collaborative rich text | Yjs |
73
- | **Y.Map** | Shared key-value state | Yjs |
74
-
75
- ```ts
76
- import * as Y from 'yjs';
77
- import { IndexeddbPersistence } from 'y-indexeddb';
78
-
79
- const doc = new Y.Doc();
80
-
81
- // Persist to IndexedDB — survives page reload, works offline
82
- new IndexeddbPersistence('my-doc-id', doc);
83
-
84
- // Shared text — any concurrent edits from any user auto-merge
85
- const text = doc.getText('content');
86
- text.insert(0, 'Hello '); // User A
87
- text.insert(6, 'World'); // User B — concurrent, no conflict
88
- // Result: "Hello World" always correct, always the same
89
- ```
90
-
91
- ---
92
-
93
- ## Optimistic UI Patterns
94
-
95
- Before full local-first, optimistic UI gives most of the speed benefit:
96
-
97
- ```ts
98
- // Pessimistic user waits for server response before any UI update
99
- async function likePost(postId: string) {
100
- const updated = await api.likePost(postId); // 200ms wait → UI freezes
101
- setPost(updated);
102
- }
103
-
104
- // ✅ Optimistic — update UI immediately, sync in background
105
- async function likePost(postId: string) {
106
- // 1. Instant UI update
107
- setPost(prev => ({ ...prev, likes: prev.likes + 1, liked: true }));
108
-
109
- try {
110
- // 2. Sync to server in background
111
- await api.likePost(postId);
112
- } catch {
113
- // 3. Rollback on failure
114
- setPost(prev => ({ ...prev, likes: prev.likes - 1, liked: false }));
115
- toast.error('Failed to like post');
116
- }
117
- }
118
- ```
119
-
120
- ---
121
-
122
- ## Conflict Resolution Strategies
123
-
124
- When two users edit the same data offline and then sync:
125
-
126
- | Strategy | When to Use | Downside |
127
- |---|---|---|
128
- | **Last-Write-Wins (LWW)** | Settings, preferences | Concurrent edits silently overwrite each other |
129
- | **First-Write-Wins** | Booking/reservation slots | Rejecters unhappy, complex UX |
130
- | **CRDT merge** | Text, lists, collaborative state | Complex to implement from scratch use Yjs |
131
- | **3-way merge** | Code files, configs | Requires common ancestor to compute diff |
132
- | **User-prompted resolution** | Critical data (contracts) | Adds friction but preserves intent |
133
-
134
- ---
135
-
136
- ## Migration Path: REST Local-First
137
-
138
- Don't try to go from REST to full local-first in one step:
139
-
140
- ```
141
- Phase 1: Optimistic UI
142
- Client mutates locally, syncs async
143
- → Easy win: 200ms → 0ms perceived latency
144
- Risk: conflicts on concurrent updates
145
-
146
- Phase 2: Offline Detection + Queue
147
- Queue mutations when offline
148
- Apply queue on reconnect
149
- Risk: conflict ordering
150
-
151
- Phase 3: CRDT-backed Shared State
152
- Replace mutable shared data with CRDTs
153
- Full offline + collaboration
154
- → No more conflicts
155
- ```
156
-
157
- ---
158
-
159
- ## Output Format
160
-
161
- When this skill produces or reviews code, structure your output as follows:
162
-
163
- ```
164
- ━━━ Local First Report ━━━━━━━━━━━━━━━━━━━━━━━━
165
- Skill: Local First
166
- Language: [detected language / framework]
167
- Scope: [N files · N functions]
168
- ─────────────────────────────────────────────────
169
- ✅ Passed: [checks that passed, or "All clean"]
170
- ⚠️ Warnings: [non-blocking issues, or "None"]
171
- ❌ Blocked: [blocking issues requiring fix, or "None"]
172
- ─────────────────────────────────────────────────
173
- VBC status: PENDING → VERIFIED
174
- Evidence: [test output / lint pass / compile success]
175
- ```
176
-
177
- **VBC (Verification-Before-Completion) is mandatory.**
178
- Do not mark status as VERIFIED until concrete terminal evidence is provided.
179
-
180
-
181
- ---
182
-
183
- ## 🏛️ Tribunal Integration (Anti-Hallucination)
184
-
185
- **Slash command: `/tribunal-backend`**
186
- **Active reviewers: `logic` · `security`**
187
-
188
- ### ❌ Forbidden AI Tropes in Local-First
189
-
190
- 1. **Treating CRDTs as magic** — CRDTs solve concurrent edits to shared state, not schema migrations or access control.
191
- 2. **Inventing CRDT libraries** — `crdt-js`, `conflict-free`, `local-sync` are not real packages. Yjs, Automerge, and Loro are the real libraries.
192
- 3. **Skipping conflict detection in LWW** — Last-Write-Wins silently drops data. Always make the conflict resolution strategy explicit and communicate it to the user.
193
- 4. **Local storage for everything** — `localStorage` is synchronous, has a 5MB limit, and is not available in workers. Use IndexedDB via Dexie or Origin Private File System.
194
-
195
- ### ✅ Pre-Flight Self-Audit
196
-
197
- ```
198
- ✅ Is the conflict resolution strategy explicit and documented?
199
- ✅ Are only real CRDT libraries used (Yjs, Automerge, Loro)?
200
- ✅ Is offline state persisted to IndexedDB, not localStorage?
201
- ✅ Is the sync queue replay idempotent (safe to process the same mutation twice)?
202
- ✅ Does the UI clearly communicate offline/syncing/synced state to the user?
203
- ```
1
+ ---
2
+ name: local-first
3
+ description: Local-first software architecture mastery. CRDTs (Conflict-free Replicated Data Types), IndexedDB synchronization, sync engines (ElectricSQL, Replicache, PowerSync), offline-capable data fetching, optimistic UI, and SQLite in the browser (WASM). Use when building PWA offline capabilities, rapid UIs, or multiplayer collaborative tools.
4
+ allowed-tools: Read, Write, Edit, Glob, Grep
5
+ version: 2.0.0
6
+ last-updated: 2026-04-02
7
+ applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
8
+ ---
9
+
10
+ # Local-First Architecture — Offline-capable Mastery
11
+
12
+ > The network is the bottleneck. The database should live on the user's device.
13
+ > Traditional SaaS is Cloud-First. The future of UX is Local-First.
14
+
15
+ ---
16
+
17
+ ## 1. Core Principles of Local-First
18
+
19
+ In a Cloud-First app (REST/GraphQL), the UI waits for the server.
20
+ In a Local-First app, the UI talks *only* to a local database. A background engine syncs that database to the cloud when online.
21
+
22
+ 1. **Fast by default**: Zero network latency because reads/writes happen locally.
23
+ 2. **Offline works flawlessly**: The app bounds to a local store (SQLite via WASM, IndexedDB).
24
+ 3. **Multi-device Sync**: Conflict resolution is handled natively (usually via CRDTs or central conflict ledgers).
25
+
26
+ ---
27
+
28
+ ## 2. Sync Engines vs traditional fetching
29
+
30
+ Do not use React Query / SWR to build local-first. They are HTTP caching mechanisms.
31
+
32
+ ```typescript
33
+ // ❌ CLOUD-FIRST (React Query / Fetch)
34
+ // Fails when offline. Subject to UI latency.
35
+ const { data, isLoading } = useQuery({
36
+ queryKey: ['todos'],
37
+ queryFn: () => fetch('/api/todos').then(res => res.json())
38
+ })
39
+
40
+ // LOCAL-FIRST (e.g. PowerSync / ElectricSQL / WatermelonDB)
41
+ // Resolves instantly. Data lives locally. Syncs silently in background.
42
+ import { useQuery } from '@powersync/react';
43
+
44
+ const { data, isLoading } = useQuery('SELECT * FROM todos ORDER BY created_at DESC');
45
+
46
+ // Writes are also local First
47
+ const addTodo = async (text: string) => {
48
+ // Written to the local SQLite WASM database instantly.
49
+ await localDb.execute('INSERT INTO todos (id, text) VALUES (uuid(), ?)', [text]);
50
+ // Background worker syncs to Postgres later.
51
+ }
52
+ ```
53
+
54
+ ---
55
+
56
+ ## 3. Conflict Resolution (CRDTs)
57
+
58
+ When two users edit the exact same document offline and then reconnect, how is it resolved?
59
+
60
+ **Conflict-free Replicated Data Types (CRDTs)** automatically merge data without requiring a central server to decide the "winner."
61
+
62
+ ```typescript
63
+ // Yjs - The leading CRDT library for collaborative text/state
64
+ import * as Y from 'yjs'
65
+ import { WebsocketProvider } from 'y-websocket'
66
+
67
+ const ydoc = new Y.Doc()
68
+ const provider = new WebsocketProvider('wss://sync.example.com', 'room-1', ydoc)
69
+
70
+ // Shared state array
71
+ const yarray = ydoc.getArray('todos')
72
+
73
+ // Observe changes (Fires locally and when peers sync)
74
+ yarray.observe(event => {
75
+ console.log("State updated natively without conflict:", yarray.toArray())
76
+ })
77
+
78
+ // Insert data (Instantly merges cleanly with remote peers)
79
+ yarray.insert(0, ['Buy milk'])
80
+ ```
81
+
82
+ ---
83
+
84
+ ## 4. In-Browser Databases
85
+
86
+ Storing megabytes of relational data in `localStorage` will crash the browser.
87
+
88
+ | Technology | Use Case | Pros | Cons |
89
+ |:---|:---|:---|:---|
90
+ | **IndexedDB** | Key-Value | Native to browser | Hideous callback API, weak querying |
91
+ | **Dexie.js** | Key-Value | Wraps IndexedDB with clean Promises | Not relational |
92
+ | **SQLite WASM (OPFS)** | Relational | True SQL in browser | Setup complexity (Origin Private File System) |
93
+ | **RxDB** | NoSQL Offline | Reactive UI out-of-the-box | Requires learning RxJS/Observables |
94
+ | **WatermelonDB** | Relational | Built for React Native & Web | Requires native module setup on mobile |
95
+
96
+ ```typescript
97
+ // Clean IndexedDB Wrapper Example (Dexie)
98
+ import Dexie, { type EntityTable } from 'dexie';
99
+
100
+ interface Friend {
101
+ id: number;
102
+ name: string;
103
+ age: number;
104
+ }
105
+
106
+ const db = new Dexie('FriendsDatabase') as Dexie & {
107
+ friends: EntityTable<Friend, 'id'>;
108
+ };
109
+
110
+ // Schema configuration
111
+ db.version(1).stores({
112
+ friends: '++id, name, age' // Primary key and indexed props
113
+ });
114
+
115
+ // Write to DB instantly
116
+ await db.friends.add({ name: 'Alice', age: 25 });
117
+
118
+ // Live query natively drives React state without network calls
119
+ import { useLiveQuery } from "dexie-react-hooks";
120
+ const friends = useLiveQuery(() => db.friends.where('age').above(21).toArray());
121
+ ```
122
+
123
+ ---
124
+
125
+ ## 🤖 LLM-Specific Traps (Local-First)
126
+
127
+ 1. **`localStorage` Abuse:** Using `localStorage` as a database. It is synchronous, blocking the main UI thread, and limited to 5MB. Use IndexedDB/SQLite WASM.
128
+ 2. **Re-inventing Conflict Logic:** Writing manual "last-write-wins" logic using timestamps (`updatedAt`). In distributed systems, clock drift guarantees this will fail and overwrite data corruptly. Use CRDTs (Yjs/Automerge).
129
+ 3. **Optimistic UI as Local-First:** Thinking React Query's `onMutate` rollback logic is local-first architecture. It is not. It is a UX trick masking Cloud-First latency.
130
+ 4. **Offline Auth Blindness:** Trying to execute local queries while wrapped in an `AuthGuard` that requires a server-side JWT verification on boot. Auth states must be cached locally to allow offline boots.
131
+ 5. **Schema Migration Chaos:** Updating cloud schemas without providing local migration scripts. If the local client SQLite DB schema differs from the Postgres cloud schema, the sync engine will crash silently.
132
+ 6. **Background Sync Blocking:** Writing custom `setInterval` sync loops on the main JavaScript thread, causing UI stutter. Sync logic must run in a Web Worker (or Service Worker).
133
+ 7. **Ignoring IndexedDB Quotas:** Browsers will unpredictably evict IndexedDB data if the user's disk gets full. Architect apps resolving local data as a cache of the cloud, not as the irrevocable source of truth.
134
+ 8. **Heavy Client Boot Times:** Bootstrapping a massive 50MB SQLite WASM database onto the client payload, destroying First Contentful Paint. WASM blobs should be pre-fetched/lazy-loaded.
135
+ 9. **Eventual Consistency Panic:** Developing UIs that throw errors if a foreign key relation hasn't synced yet. Local-first UIs must defensively handle partial data relationships seamlessly.
136
+ 10. **WebSocket vs Local Priority:** Over-relying on WebSockets connected directly to the server. The UI should strictly read from the Local DB; the Local DB gets updated by the WebSocket.
137
+
138
+ ---
139
+
140
+ ## 🏛️ Tribunal Integration
141
+
142
+ ### Pre-Flight Self-Audit
143
+ ```
144
+ Is the UI strictly reading from a local DB instead of HTTP network calls?
145
+ ✅ Are background sync tasks isolated in a Web Worker (or managed Sync Engine)?
146
+ Is complex relational data stored in IndexedDB/SQLite (not `localStorage`)?
147
+ Are conflicts resolved using CRDT structures rather than arbitrary timestamp comparisons?
148
+ Have authentication states been cached locally to permit true offline app launches?
149
+ Does the local database schema precisely mirror the required subset of the cloud database?
150
+ ✅ Are writes executed locally first, instantly updating the UI?
151
+ Have I utilized established Local-First sync engines (PowerSync, ElectricSQL, Yjs) instead of manual queuing?
152
+ Is the UI built to degrade gracefully if sync relationships are temporarily shattered?
153
+ Is the app's initial WASM/DB payload lazy-loaded to preserve fast initial page loads?
154
+ ```