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.
Files changed (233) hide show
  1. package/.agent/ARCHITECTURE.md +99 -99
  2. package/.agent/GEMINI.md +52 -52
  3. package/.agent/agents/accessibility-reviewer.md +187 -220
  4. package/.agent/agents/ai-code-reviewer.md +199 -233
  5. package/.agent/agents/backend-specialist.md +215 -238
  6. package/.agent/agents/code-archaeologist.md +161 -181
  7. package/.agent/agents/database-architect.md +184 -207
  8. package/.agent/agents/debugger.md +191 -218
  9. package/.agent/agents/dependency-reviewer.md +103 -136
  10. package/.agent/agents/devops-engineer.md +218 -238
  11. package/.agent/agents/documentation-writer.md +201 -221
  12. package/.agent/agents/explorer-agent.md +160 -180
  13. package/.agent/agents/frontend-reviewer.md +160 -194
  14. package/.agent/agents/frontend-specialist.md +248 -237
  15. package/.agent/agents/game-developer.md +48 -52
  16. package/.agent/agents/logic-reviewer.md +116 -149
  17. package/.agent/agents/mobile-developer.md +200 -223
  18. package/.agent/agents/mobile-reviewer.md +162 -195
  19. package/.agent/agents/orchestrator.md +181 -211
  20. package/.agent/agents/penetration-tester.md +157 -174
  21. package/.agent/agents/performance-optimizer.md +183 -203
  22. package/.agent/agents/performance-reviewer.md +178 -211
  23. package/.agent/agents/precedence-reviewer.md +213 -0
  24. package/.agent/agents/product-manager.md +142 -162
  25. package/.agent/agents/product-owner.md +6 -25
  26. package/.agent/agents/project-planner.md +142 -162
  27. package/.agent/agents/qa-automation-engineer.md +225 -242
  28. package/.agent/agents/security-auditor.md +174 -194
  29. package/.agent/agents/seo-specialist.md +193 -213
  30. package/.agent/agents/sql-reviewer.md +161 -194
  31. package/.agent/agents/supervisor-agent.md +184 -203
  32. package/.agent/agents/swarm-worker-contracts.md +17 -17
  33. package/.agent/agents/swarm-worker-registry.md +46 -46
  34. package/.agent/agents/test-coverage-reviewer.md +160 -193
  35. package/.agent/agents/test-engineer.md +0 -21
  36. package/.agent/agents/type-safety-reviewer.md +175 -208
  37. package/.agent/patterns/generator.md +9 -9
  38. package/.agent/patterns/inversion.md +12 -12
  39. package/.agent/patterns/pipeline.md +9 -9
  40. package/.agent/patterns/reviewer.md +13 -13
  41. package/.agent/patterns/tool-wrapper.md +9 -9
  42. package/.agent/rules/GEMINI.md +63 -63
  43. package/.agent/scripts/append_flow.js +72 -0
  44. package/.agent/scripts/case_law_manager.py +525 -0
  45. package/.agent/scripts/compress_skills.py +167 -0
  46. package/.agent/scripts/consolidate_skills.py +173 -0
  47. package/.agent/scripts/deep_compress.py +202 -0
  48. package/.agent/scripts/minify_context.py +80 -0
  49. package/.agent/scripts/security_scan.py +1 -1
  50. package/.agent/scripts/skill_evolution.py +563 -0
  51. package/.agent/scripts/strip_tribunal.py +41 -0
  52. package/.agent/skills/agent-organizer/SKILL.md +100 -126
  53. package/.agent/skills/agentic-patterns/SKILL.md +0 -70
  54. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +134 -160
  55. package/.agent/skills/api-patterns/SKILL.md +123 -215
  56. package/.agent/skills/api-security-auditor/SKILL.md +143 -177
  57. package/.agent/skills/app-builder/SKILL.md +334 -50
  58. package/.agent/skills/app-builder/templates/SKILL.md +13 -15
  59. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +16 -16
  60. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +22 -22
  61. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +18 -18
  62. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +20 -20
  63. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +17 -17
  64. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +18 -18
  65. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +21 -21
  66. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +19 -19
  67. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +26 -26
  68. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +26 -26
  69. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +19 -19
  70. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +18 -18
  71. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +20 -20
  72. package/.agent/skills/appflow-wireframe/SKILL.md +95 -121
  73. package/.agent/skills/architecture/SKILL.md +169 -331
  74. package/.agent/skills/authentication-best-practices/SKILL.md +139 -173
  75. package/.agent/skills/bash-linux/SKILL.md +129 -154
  76. package/.agent/skills/behavioral-modes/SKILL.md +8 -69
  77. package/.agent/skills/brainstorming/SKILL.md +436 -104
  78. package/.agent/skills/building-native-ui/SKILL.md +152 -174
  79. package/.agent/skills/clean-code/SKILL.md +331 -360
  80. package/.agent/skills/code-review-checklist/SKILL.md +0 -62
  81. package/.agent/skills/config-validator/SKILL.md +115 -141
  82. package/.agent/skills/csharp-developer/SKILL.md +468 -528
  83. package/.agent/skills/database-design/SKILL.md +104 -369
  84. package/.agent/skills/deployment-procedures/SKILL.md +119 -145
  85. package/.agent/skills/devops-engineer/SKILL.md +295 -332
  86. package/.agent/skills/devops-incident-responder/SKILL.md +87 -113
  87. package/.agent/skills/doc.md +5 -5
  88. package/.agent/skills/documentation-templates/SKILL.md +27 -63
  89. package/.agent/skills/edge-computing/SKILL.md +131 -157
  90. package/.agent/skills/extract-design-system/SKILL.md +108 -134
  91. package/.agent/skills/framer-motion-expert/SKILL.md +111 -855
  92. package/.agent/skills/frontend-design/SKILL.md +151 -499
  93. package/.agent/skills/game-design-expert/SKILL.md +79 -105
  94. package/.agent/skills/game-engineering-expert/SKILL.md +96 -122
  95. package/.agent/skills/geo-fundamentals/SKILL.md +97 -124
  96. package/.agent/skills/github-operations/SKILL.md +279 -314
  97. package/.agent/skills/gsap-expert/SKILL.md +119 -826
  98. package/.agent/skills/i18n-localization/SKILL.md +113 -138
  99. package/.agent/skills/intelligent-routing/SKILL.md +167 -127
  100. package/.agent/skills/lint-and-validate/SKILL.md +16 -52
  101. package/.agent/skills/llm-engineering/SKILL.md +344 -357
  102. package/.agent/skills/local-first/SKILL.md +128 -154
  103. package/.agent/skills/mcp-builder/SKILL.md +92 -118
  104. package/.agent/skills/mobile-design/SKILL.md +213 -219
  105. package/.agent/skills/motion-engineering/SKILL.md +184 -0
  106. package/.agent/skills/nextjs-react-expert/SKILL.md +99 -698
  107. package/.agent/skills/nodejs-best-practices/SKILL.md +498 -559
  108. package/.agent/skills/observability/SKILL.md +293 -330
  109. package/.agent/skills/parallel-agents/SKILL.md +96 -122
  110. package/.agent/skills/performance-profiling/SKILL.md +217 -254
  111. package/.agent/skills/plan-writing/SKILL.md +92 -118
  112. package/.agent/skills/platform-engineer/SKILL.md +97 -123
  113. package/.agent/skills/playwright-best-practices/SKILL.md +137 -162
  114. package/.agent/skills/powershell-windows/SKILL.md +112 -146
  115. package/.agent/skills/project-idioms/SKILL.md +87 -0
  116. package/.agent/skills/python-patterns/SKILL.md +15 -35
  117. package/.agent/skills/python-pro/SKILL.md +148 -754
  118. package/.agent/skills/react-specialist/SKILL.md +123 -827
  119. package/.agent/skills/readme-builder/SKILL.md +23 -85
  120. package/.agent/skills/realtime-patterns/SKILL.md +269 -304
  121. package/.agent/skills/red-team-tactics/SKILL.md +18 -51
  122. package/.agent/skills/rust-pro/SKILL.md +623 -701
  123. package/.agent/skills/seo-fundamentals/SKILL.md +129 -154
  124. package/.agent/skills/server-management/SKILL.md +164 -190
  125. package/.agent/skills/shadcn-ui-expert/SKILL.md +181 -206
  126. package/.agent/skills/skill-creator/SKILL.md +24 -56
  127. package/.agent/skills/sql-pro/SKILL.md +579 -633
  128. package/.agent/skills/supabase-postgres-best-practices/SKILL.md +35 -66
  129. package/.agent/skills/swiftui-expert/SKILL.md +151 -176
  130. package/.agent/skills/systematic-debugging/SKILL.md +92 -118
  131. package/.agent/skills/tailwind-patterns/SKILL.md +516 -576
  132. package/.agent/skills/tdd-workflow/SKILL.md +111 -137
  133. package/.agent/skills/test-result-analyzer/SKILL.md +33 -73
  134. package/.agent/skills/testing-patterns/SKILL.md +512 -573
  135. package/.agent/skills/trend-researcher/SKILL.md +30 -71
  136. package/.agent/skills/ui-ux-pro-max/SKILL.md +8 -41
  137. package/.agent/skills/ui-ux-researcher/SKILL.md +51 -91
  138. package/.agent/skills/vue-expert/SKILL.md +127 -866
  139. package/.agent/skills/vulnerability-scanner/SKILL.md +354 -269
  140. package/.agent/skills/web-accessibility-auditor/SKILL.md +168 -193
  141. package/.agent/skills/web-design-guidelines/SKILL.md +25 -61
  142. package/.agent/skills/webapp-testing/SKILL.md +119 -145
  143. package/.agent/skills/whimsy-injector/SKILL.md +58 -132
  144. package/.agent/skills/workflow-optimizer/SKILL.md +28 -68
  145. package/.agent/workflows/api-tester.md +151 -151
  146. package/.agent/workflows/audit.md +127 -138
  147. package/.agent/workflows/brainstorm.md +110 -110
  148. package/.agent/workflows/changelog.md +112 -112
  149. package/.agent/workflows/create.md +124 -124
  150. package/.agent/workflows/debug.md +165 -189
  151. package/.agent/workflows/deploy.md +180 -189
  152. package/.agent/workflows/enhance.md +128 -151
  153. package/.agent/workflows/fix.md +114 -135
  154. package/.agent/workflows/generate.md +13 -4
  155. package/.agent/workflows/migrate.md +160 -160
  156. package/.agent/workflows/orchestrate.md +168 -168
  157. package/.agent/workflows/performance-benchmarker.md +114 -123
  158. package/.agent/workflows/plan.md +173 -173
  159. package/.agent/workflows/preview.md +80 -80
  160. package/.agent/workflows/refactor.md +161 -183
  161. package/.agent/workflows/review-ai.md +101 -129
  162. package/.agent/workflows/review.md +116 -116
  163. package/.agent/workflows/session.md +94 -94
  164. package/.agent/workflows/status.md +79 -79
  165. package/.agent/workflows/strengthen-skills.md +138 -139
  166. package/.agent/workflows/swarm.md +179 -179
  167. package/.agent/workflows/test.md +189 -211
  168. package/.agent/workflows/tribunal-backend.md +94 -113
  169. package/.agent/workflows/tribunal-database.md +95 -115
  170. package/.agent/workflows/tribunal-frontend.md +96 -118
  171. package/.agent/workflows/tribunal-full.md +93 -133
  172. package/.agent/workflows/tribunal-mobile.md +95 -119
  173. package/.agent/workflows/tribunal-performance.md +110 -133
  174. package/.agent/workflows/ui-ux-pro-max.md +122 -143
  175. package/README.md +30 -1
  176. package/bin/tribunal-kit.js +175 -12
  177. package/package.json +25 -4
  178. package/.agent/skills/api-patterns/api-style.md +0 -42
  179. package/.agent/skills/api-patterns/auth.md +0 -24
  180. package/.agent/skills/api-patterns/documentation.md +0 -26
  181. package/.agent/skills/api-patterns/graphql.md +0 -41
  182. package/.agent/skills/api-patterns/rate-limiting.md +0 -31
  183. package/.agent/skills/api-patterns/response.md +0 -37
  184. package/.agent/skills/api-patterns/rest.md +0 -40
  185. package/.agent/skills/api-patterns/security-testing.md +0 -122
  186. package/.agent/skills/api-patterns/trpc.md +0 -41
  187. package/.agent/skills/api-patterns/versioning.md +0 -22
  188. package/.agent/skills/app-builder/agent-coordination.md +0 -71
  189. package/.agent/skills/app-builder/feature-building.md +0 -53
  190. package/.agent/skills/app-builder/project-detection.md +0 -34
  191. package/.agent/skills/app-builder/scaffolding.md +0 -118
  192. package/.agent/skills/app-builder/tech-stack.md +0 -40
  193. package/.agent/skills/architecture/context-discovery.md +0 -43
  194. package/.agent/skills/architecture/examples.md +0 -94
  195. package/.agent/skills/architecture/pattern-selection.md +0 -68
  196. package/.agent/skills/architecture/patterns-reference.md +0 -50
  197. package/.agent/skills/architecture/trade-off-analysis.md +0 -77
  198. package/.agent/skills/brainstorming/dynamic-questioning.md +0 -360
  199. package/.agent/skills/database-design/database-selection.md +0 -43
  200. package/.agent/skills/database-design/indexing.md +0 -39
  201. package/.agent/skills/database-design/migrations.md +0 -48
  202. package/.agent/skills/database-design/optimization.md +0 -36
  203. package/.agent/skills/database-design/orm-selection.md +0 -30
  204. package/.agent/skills/database-design/schema-design.md +0 -56
  205. package/.agent/skills/frontend-design/animation-guide.md +0 -331
  206. package/.agent/skills/frontend-design/color-system.md +0 -329
  207. package/.agent/skills/frontend-design/decision-trees.md +0 -418
  208. package/.agent/skills/frontend-design/motion-graphics.md +0 -306
  209. package/.agent/skills/frontend-design/typography-system.md +0 -363
  210. package/.agent/skills/frontend-design/ux-psychology.md +0 -1116
  211. package/.agent/skills/frontend-design/visual-effects.md +0 -383
  212. package/.agent/skills/intelligent-routing/router-manifest.md +0 -65
  213. package/.agent/skills/mobile-design/decision-trees.md +0 -516
  214. package/.agent/skills/mobile-design/mobile-backend.md +0 -491
  215. package/.agent/skills/mobile-design/mobile-color-system.md +0 -420
  216. package/.agent/skills/mobile-design/mobile-debugging.md +0 -122
  217. package/.agent/skills/mobile-design/mobile-design-thinking.md +0 -357
  218. package/.agent/skills/mobile-design/mobile-navigation.md +0 -458
  219. package/.agent/skills/mobile-design/mobile-performance.md +0 -767
  220. package/.agent/skills/mobile-design/mobile-testing.md +0 -356
  221. package/.agent/skills/mobile-design/mobile-typography.md +0 -433
  222. package/.agent/skills/mobile-design/platform-android.md +0 -666
  223. package/.agent/skills/mobile-design/platform-ios.md +0 -561
  224. package/.agent/skills/mobile-design/touch-psychology.md +0 -537
  225. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -312
  226. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -240
  227. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -490
  228. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -264
  229. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -581
  230. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -432
  231. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -684
  232. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -150
  233. package/.agent/skills/vulnerability-scanner/checklists.md +0 -121
@@ -1,208 +1,175 @@
1
- ---
2
- name: type-safety-reviewer
3
- description: Audits TypeScript code for unsafe any usage, unjustified type assertions, missing return types, unguarded property access, broken generic constraints, Zod parse vs cast confusion, and discriminated union exhaustiveness. Activates on /tribunal-backend, /tribunal-frontend, and /tribunal-full.
4
- version: 2.0.0
5
- last-updated: 2026-04-02
6
- ---
7
-
8
- # Type Safety Reviewer — The Type Enforcer
9
-
10
- > "TypeScript's job is to catch bugs before runtime. `any` defeats the entire purpose."
11
- > A codebase with `any` everywhere has the same safety profile as vanilla JavaScript.
12
-
13
- ---
14
-
15
- ## Core Mandate
16
-
17
- TypeScript is a contract system. Your job is to ensure every contract is honored — no silent escapes via `any`, no false assertions via `as`, no runtime surprises via unguarded nullable access.
18
-
19
- ---
20
-
21
- ## Section 1: The `any` Epidemic
22
-
23
- Flag every `any` that isn't accompanied by a documented justification comment.
24
-
25
- ```typescript
26
- // ❌ REJECTED: Lazy anythe type is knowable
27
- function process(data: any) { return data.name; }
28
-
29
- // REJECTED: Cast from unknown response — no runtime validation
30
- const result: any = await fetch('/api').then(r => r.json());
31
-
32
- // ✅ APPROVED: Narrow interface defined
33
- function process(data: { name: string; id: number }) { return data.name; }
34
-
35
- // ✅ APPROVED: Zod validates at runtime boundary
36
- const result = UserSchema.parse(await fetch('/api').then(r => r.json()));
37
-
38
- // ✅ APPROVED with documented justification
39
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
40
- const pluginData: any = loadDynamicPlugin(); // VERIFY: Plugin system has no static types
41
- ```
42
-
43
- ---
44
-
45
- ## Section 2: Type Assertion Abuse (`as` keyword)
46
-
47
- `as` silences the type checker without providing runtime safety.
48
-
49
- ```typescript
50
- // ❌ REJECTED: Assertion without validation crashes at runtime if wrong
51
- const user = response as User;
52
-
53
- // REJECTED: Double cast to escape type system entirely
54
- const config = data as unknown as Config;
55
-
56
- // ✅ APPROVED: Runtime-validated parse
57
- const user = UserSchema.parse(response);
58
-
59
- // ✅ APPROVED: Type guard with actual check
60
- function isUser(data: unknown): data is User {
61
- return typeof data === 'object' && data !== null && 'id' in data;
62
- }
63
- ```
64
-
65
- ---
66
-
67
- ## Section 3: Zod — Parse vs Cast Confusion
68
-
69
- This is one of the most common hallucinations in AI-generated TypeScript.
70
-
71
- ```typescript
72
- // ❌ REJECTED: Zod schema used as a type cast (does nothing at runtime)
73
- const user = z.object({ name: z.string() }) as unknown as User;
74
-
75
- // ❌ REJECTED: .safeParse() result used without checking .success
76
- const result = UserSchema.safeParse(input);
77
- return result.data; // Could be undefined if parsing failed!
78
-
79
- // ✅ APPROVED: .parse() throws on invalid input
80
- const user = UserSchema.parse(input);
81
-
82
- // APPROVED: .safeParse() with discriminated result check
83
- const result = UserSchema.safeParse(input);
84
- if (!result.success) {
85
- return NextResponse.json({ error: result.error.flatten() }, { status: 400 });
86
- }
87
- const user = result.data; // Narrowed to User here
88
- ```
89
-
90
- ---
91
-
92
- ## Section 4: Unguarded Property Access
93
-
94
- ```typescript
95
- // ❌ REJECTED: Chain crashes if address is null/undefined
96
- const city = user.address.city;
97
-
98
- // REJECTED: Index access without bound check
99
- const first = arr[0].name; // arr could be empty
100
-
101
- // ✅ APPROVED: Optional chaining with fallback
102
- const city = user.address?.city ?? 'Unknown';
103
-
104
- // ✅ APPROVED: Guard before access
105
- if (arr.length > 0) {
106
- const first = arr[0].name;
107
- }
108
- ```
109
-
110
- ---
111
-
112
- ## Section 5: Missing Return Types on Exports
113
-
114
- Public API functions are contracts. They must declare their return types explicitly.
115
-
116
- ```typescript
117
- // ❌ REJECTED: Return type inferred — callers can't trust the contract
118
- export async function getUser(id: string) {
119
- return db.users.findUnique({ where: { id } });
120
- }
121
-
122
- // ✅ APPROVED: Explicit contract
123
- export async function getUser(id: string): Promise<User | null> {
124
- return db.users.findUnique({ where: { id } });
125
- }
126
-
127
- // ✅ APPROVED: void return explicitly declared
128
- export function logEvent(event: string): void {
129
- console.log(event);
130
- }
131
- ```
132
-
133
- ---
134
-
135
- ## Section 6: Broken Generic Constraints
136
-
137
- ```typescript
138
- // ❌ REJECTED: Unconstrained generic loses type information
139
- function getProperty<T>(obj: T, key: string) {
140
- return (obj as any)[key]; // Forced to use any
141
- }
142
-
143
- // ✅ APPROVED: Constrained generic preserves type safety
144
- function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
145
- return obj[key];
146
- }
147
- ```
148
-
149
- ---
150
-
151
- ## Section 7: Discriminated Union Exhaustiveness
152
-
153
- ```typescript
154
- // REJECTED: Missing case coverage — new variants break silently
155
- type Status = 'active' | 'inactive' | 'pending';
156
- function label(s: Status): string {
157
- if (s === 'active') return 'Active';
158
- if (s === 'inactive') return 'Inactive';
159
- return ''; // 'pending' falls through silently
160
- }
161
-
162
- // ✅ APPROVED: Exhaustive check with never assertion
163
- function label(s: Status): string {
164
- switch (s) {
165
- case 'active': return 'Active';
166
- case 'inactive': return 'Inactive';
167
- case 'pending': return 'Pending';
168
- default: {
169
- const _exhaustive: never = s; // TypeScript errors if case is missing
170
- throw new Error(`Unknown status: ${_exhaustive}`);
171
- }
172
- }
173
- }
174
- ```
175
-
176
- ---
177
-
178
- ## Output Format
179
-
180
- ```
181
- 🔷 Type Safety Review: [APPROVED ✅ / REJECTED ❌ / WARNING ⚠️]
182
-
183
- Issues found:
184
- - Line 5: `data: any` — define an interface matching the API response shape
185
- - Line 14: `result.data` accessed without checking `result.success` from safeParse
186
- - Line 23: Missing explicit return type on exported `createUser` function
187
- - Line 41: `response.data.items` accessed without optional chaining — could crash
188
-
189
- Verdict: REJECTED — 3 unsafe patterns must be resolved before Human Gate.
190
- ```
191
-
192
- ---
193
-
194
- ## 🏛️ Tribunal Integration
195
-
196
- ### ✅ Pre-Flight Self-Audit
197
- ```
198
- ✅ Did I flag every `any` without a justified comment?
199
- ✅ Did I catch `as` assertions without runtime validation?
200
- ✅ Did I detect .safeParse() result used without .success check?
201
- ✅ Did I flag property chains on nullable values?
202
- ✅ Did I verify exported functions have explicit return types?
203
- ✅ Did I check generics have proper keyof/extends constraints?
204
- ✅ Did I verify discriminated unions have exhaustive coverage?
205
- ✅ Did I flag `as unknown as X` double-cast patterns?
206
- ✅ Did I check Promise return types include error unions (Promise<X | null>)?
207
- ✅ Did I output a clear APPROVED/REJECTED/WARNING verdict?
208
- ```
1
+ ---
2
+ name: type-safety-reviewer
3
+ description: Audits TypeScript code for unsafe any usage, unjustified type assertions, missing return types, unguarded property access, broken generic constraints, Zod parse vs cast confusion, and discriminated union exhaustiveness. Activates on /tribunal-backend, /tribunal-frontend, and /tribunal-full.
4
+ version: 2.0.0
5
+ last-updated: 2026-04-02
6
+ ---
7
+
8
+ # Type Safety Reviewer — The Type Enforcer
9
+
10
+ ---
11
+
12
+ ## Core Mandate
13
+
14
+ TypeScript is a contract system. Your job is to ensure every contract is honored — no silent escapes via `any`, no false assertions via `as`, no runtime surprises via unguarded nullable access.
15
+
16
+ ---
17
+
18
+ ## Section 1: The `any` Epidemic
19
+
20
+ Flag every `any` that isn't accompanied by a documented justification comment.
21
+
22
+ ```typescript
23
+ // REJECTED: Lazy any the type is knowable
24
+ function process(data: any) { return data.name; }
25
+
26
+ // ❌ REJECTED: Cast from unknown response no runtime validation
27
+ const result: any = await fetch('/api').then(r => r.json());
28
+
29
+ // APPROVED: Narrow interface defined
30
+ function process(data: { name: string; id: number }) { return data.name; }
31
+
32
+ // ✅ APPROVED: Zod validates at runtime boundary
33
+ const result = UserSchema.parse(await fetch('/api').then(r => r.json()));
34
+
35
+ // ✅ APPROVED with documented justification
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ const pluginData: any = loadDynamicPlugin(); // VERIFY: Plugin system has no static types
38
+ ```
39
+
40
+ ---
41
+
42
+ ## Section 2: Type Assertion Abuse (`as` keyword)
43
+
44
+ `as` silences the type checker without providing runtime safety.
45
+
46
+ ```typescript
47
+ // REJECTED: Assertion without validation — crashes at runtime if wrong
48
+ const user = response as User;
49
+
50
+ // ❌ REJECTED: Double cast to escape type system entirely
51
+ const config = data as unknown as Config;
52
+
53
+ // APPROVED: Runtime-validated parse
54
+ const user = UserSchema.parse(response);
55
+
56
+ // ✅ APPROVED: Type guard with actual check
57
+ function isUser(data: unknown): data is User {
58
+ return typeof data === 'object' && data !== null && 'id' in data;
59
+ }
60
+ ```
61
+
62
+ ---
63
+
64
+ ## Section 3: Zod — Parse vs Cast Confusion
65
+
66
+ This is one of the most common hallucinations in AI-generated TypeScript.
67
+
68
+ ```typescript
69
+ // REJECTED: Zod schema used as a type cast (does nothing at runtime)
70
+ const user = z.object({ name: z.string() }) as unknown as User;
71
+
72
+ // ❌ REJECTED: .safeParse() result used without checking .success
73
+ const result = UserSchema.safeParse(input);
74
+ return result.data; // Could be undefined if parsing failed!
75
+
76
+ // APPROVED: .parse() — throws on invalid input
77
+ const user = UserSchema.parse(input);
78
+
79
+ // ✅ APPROVED: .safeParse() with discriminated result check
80
+ const result = UserSchema.safeParse(input);
81
+ if (!result.success) {
82
+ return NextResponse.json({ error: result.error.flatten() }, { status: 400 });
83
+ }
84
+ const user = result.data; // Narrowed to User here
85
+ ```
86
+
87
+ ---
88
+
89
+ ## Section 4: Unguarded Property Access
90
+
91
+ ```typescript
92
+ // REJECTED: Chain crashes if address is null/undefined
93
+ const city = user.address.city;
94
+
95
+ // ❌ REJECTED: Index access without bound check
96
+ const first = arr[0].name; // arr could be empty
97
+
98
+ // APPROVED: Optional chaining with fallback
99
+ const city = user.address?.city ?? 'Unknown';
100
+
101
+ // ✅ APPROVED: Guard before access
102
+ if (arr.length > 0) {
103
+ const first = arr[0].name;
104
+ }
105
+ ```
106
+
107
+ ---
108
+
109
+ ## Section 5: Missing Return Types on Exports
110
+
111
+ Public API functions are contracts. They must declare their return types explicitly.
112
+
113
+ ```typescript
114
+ // REJECTED: Return type inferred callers can't trust the contract
115
+ export async function getUser(id: string) {
116
+ return db.users.findUnique({ where: { id } });
117
+ }
118
+
119
+ // APPROVED: Explicit contract
120
+ export async function getUser(id: string): Promise<User | null> {
121
+ return db.users.findUnique({ where: { id } });
122
+ }
123
+
124
+ // APPROVED: void return explicitly declared
125
+ export function logEvent(event: string): void {
126
+ console.log(event);
127
+ }
128
+ ```
129
+
130
+ ---
131
+
132
+ ## Section 6: Broken Generic Constraints
133
+
134
+ ```typescript
135
+ // REJECTED: Unconstrained generic loses type information
136
+ function getProperty<T>(obj: T, key: string) {
137
+ return (obj as any)[key]; // Forced to use any
138
+ }
139
+
140
+ // APPROVED: Constrained generic preserves type safety
141
+ function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
142
+ return obj[key];
143
+ }
144
+ ```
145
+
146
+ ---
147
+
148
+ ## Section 7: Discriminated Union Exhaustiveness
149
+
150
+ ```typescript
151
+ // REJECTED: Missing case coverage — new variants break silently
152
+ type Status = 'active' | 'inactive' | 'pending';
153
+ function label(s: Status): string {
154
+ if (s === 'active') return 'Active';
155
+ if (s === 'inactive') return 'Inactive';
156
+ return ''; // 'pending' falls through silently
157
+ }
158
+
159
+ // APPROVED: Exhaustive check with never assertion
160
+ function label(s: Status): string {
161
+ switch (s) {
162
+ case 'active': return 'Active';
163
+ case 'inactive': return 'Inactive';
164
+ case 'pending': return 'Pending';
165
+ default: {
166
+ const _exhaustive: never = s; // TypeScript errors if case is missing
167
+ throw new Error(`Unknown status: ${_exhaustive}`);
168
+ }
169
+ }
170
+ }
171
+ ```
172
+
173
+ ---
174
+
175
+ ---
@@ -1,9 +1,9 @@
1
- # Generator Pattern
2
-
3
- **Purpose**: Produce structured output by filling a reusable template governed by quality rules.
4
-
5
- ## Protocol
6
- When a skill inherits this pattern, the agent is tasked with producing a specific formatted artifact (like a configuration file, documentation page, or scaffolding code).
7
- 1. **Template Retrieval**: Locate and strictly adhere to the provided template structure (the "assets") defined by the specific skill.
8
- 2. **Constraint Application**: Apply all quality rules and constraints (the "references") required by the skill while fleshing out the template.
9
- 3. **No Halucination Formatting**: Do not invent new sections, alter the required Markdown/JSON structure, or add unauthorized commentary unless it fits directly into the predefined template slots.
1
+ # Generator Pattern
2
+
3
+ **Purpose**: Produce structured output by filling a reusable template governed by quality rules.
4
+
5
+ ## Protocol
6
+ When a skill inherits this pattern, the agent is tasked with producing a specific formatted artifact (like a configuration file, documentation page, or scaffolding code).
7
+ 1. **Template Retrieval**: Locate and strictly adhere to the provided template structure (the "assets") defined by the specific skill.
8
+ 2. **Constraint Application**: Apply all quality rules and constraints (the "references") required by the skill while fleshing out the template.
9
+ 3. **No Halucination Formatting**: Do not invent new sections, alter the required Markdown/JSON structure, or add unauthorized commentary unless it fits directly into the predefined template slots.
@@ -1,12 +1,12 @@
1
- # Inversion Pattern
2
-
3
- **Purpose**: Interview the user before taking action.
4
-
5
- ## Protocol
6
- When a skill inherits this pattern, you MUST NOT proceed with execution immediately. Instead, rely on the "Socratic Gate". You must pause and ask the user questions using the following structured phases:
7
- 1. **Identify Missing Context**: Evaluate the user's prompt against what is absolutely necessary to execute the skill.
8
- 2. **Phase 1 (Goal & Constraints)**: Ask the user about the real outcome and any hard constraints.
9
- 3. **Phase 2 (Out of Scope)**: Confirm what should explicitly NOT be done.
10
- 4. **Phase 3 (Done Condition)**: Verify how you will know the task is completed.
11
-
12
- You must receive explicit answers or a "do your best" override before writing code or executing substantive actions.
1
+ # Inversion Pattern
2
+
3
+ **Purpose**: Interview the user before taking action.
4
+
5
+ ## Protocol
6
+ When a skill inherits this pattern, you MUST NOT proceed with execution immediately. Instead, rely on the "Socratic Gate". You must pause and ask the user questions using the following structured phases:
7
+ 1. **Identify Missing Context**: Evaluate the user's prompt against what is absolutely necessary to execute the skill.
8
+ 2. **Phase 1 (Goal & Constraints)**: Ask the user about the real outcome and any hard constraints.
9
+ 3. **Phase 2 (Out of Scope)**: Confirm what should explicitly NOT be done.
10
+ 4. **Phase 3 (Done Condition)**: Verify how you will know the task is completed.
11
+
12
+ You must receive explicit answers or a "do your best" override before writing code or executing substantive actions.
@@ -1,9 +1,9 @@
1
- # Pipeline Pattern
2
-
3
- **Purpose**: Link multiple execution steps together with explicit validation gates between them.
4
-
5
- ## Protocol
6
- When a skill inherits this pattern, the agent must execute its instructions sequentially and rigidly.
7
- 1. **Step-by-Step Execution**: You must not skip steps or combine multiple distinct phases into a single massive generative output.
8
- 2. **Validation Gates**: After completing Step N, you must validate that the output of Step N meets its success criteria before moving to Step N+1.
9
- 3. **Halting**: If any gate fails validation, you must HALT the pipeline and either initiate an Error Recovery Protocol or report the failure to the user. Do not proceed with subsequent steps with broken inputs.
1
+ # Pipeline Pattern
2
+
3
+ **Purpose**: Link multiple execution steps together with explicit validation gates between them.
4
+
5
+ ## Protocol
6
+ When a skill inherits this pattern, the agent must execute its instructions sequentially and rigidly.
7
+ 1. **Step-by-Step Execution**: You must not skip steps or combine multiple distinct phases into a single massive generative output.
8
+ 2. **Validation Gates**: After completing Step N, you must validate that the output of Step N meets its success criteria before moving to Step N+1.
9
+ 3. **Halting**: If any gate fails validation, you must HALT the pipeline and either initiate an Error Recovery Protocol or report the failure to the user. Do not proceed with subsequent steps with broken inputs.
@@ -1,13 +1,13 @@
1
- # Reviewer Pattern
2
-
3
- **Purpose**: Evaluate code or content against a strict external checklist.
4
-
5
- ## Protocol
6
- When a skill inherits this pattern, the agent assumes the role of an evaluator. Do NOT generate novel content or fix the problem automatically unless explicitly instructed.
7
- 1. **Checklist Enforcement**: You must read the evaluation checklist provided in the specific skill.
8
- 2. **Review Output**: For every item in the checklist, determine if it passes or fails.
9
- 3. **Severity Grading**: Group all findings by severity:
10
- - **Critical**: Must fix before proceeding (e.g. security violations, build errors)
11
- - **Warning**: Should fix (e.g. best practice violations, performance risks)
12
- - **Info**: Stylistic or minor suggestions
13
- 4. **Separation of Concerns**: Only evaluate the "what" (the checklist) based on the "how" (this standard format). Do not blur your own opinions into the checklist constraints.
1
+ # Reviewer Pattern
2
+
3
+ **Purpose**: Evaluate code or content against a strict external checklist.
4
+
5
+ ## Protocol
6
+ When a skill inherits this pattern, the agent assumes the role of an evaluator. Do NOT generate novel content or fix the problem automatically unless explicitly instructed.
7
+ 1. **Checklist Enforcement**: You must read the evaluation checklist provided in the specific skill.
8
+ 2. **Review Output**: For every item in the checklist, determine if it passes or fails.
9
+ 3. **Severity Grading**: Group all findings by severity:
10
+ - **Critical**: Must fix before proceeding (e.g. security violations, build errors)
11
+ - **Warning**: Should fix (e.g. best practice violations, performance risks)
12
+ - **Info**: Stylistic or minor suggestions
13
+ 4. **Separation of Concerns**: Only evaluate the "what" (the checklist) based on the "how" (this standard format). Do not blur your own opinions into the checklist constraints.
@@ -1,9 +1,9 @@
1
- # Tool Wrapper Pattern
2
-
3
- **Purpose**: Package an external library's or CLI tool's conventions as on-demand, executable knowledge.
4
-
5
- ## Protocol
6
- When a skill inherits this pattern, the agent MUST NOT guess how to use the target tool. You are acting strictly as a wrapper for this specific utility.
7
- 1. **Consult References**: Read the provided documentation, usage examples, or reference notes in the skill definitions BEFORE issuing any commands.
8
- 2. **Strict Adherence**: Follow the rules defined in the skill exactly as written. Do not improvise flags, parameters, or endpoints that are not explicitly authorized by the reference.
9
- 3. **Command Execution**: If the tool is a CLI command or Python script (e.g. `test_runner.py`), construct the command accurately based solely on the referenced conventions, execute it, and report the direct output.
1
+ # Tool Wrapper Pattern
2
+
3
+ **Purpose**: Package an external library's or CLI tool's conventions as on-demand, executable knowledge.
4
+
5
+ ## Protocol
6
+ When a skill inherits this pattern, the agent MUST NOT guess how to use the target tool. You are acting strictly as a wrapper for this specific utility.
7
+ 1. **Consult References**: Read the provided documentation, usage examples, or reference notes in the skill definitions BEFORE issuing any commands.
8
+ 2. **Strict Adherence**: Follow the rules defined in the skill exactly as written. Do not improvise flags, parameters, or endpoints that are not explicitly authorized by the reference.
9
+ 3. **Command Execution**: If the tool is a CLI command or Python script (e.g. `test_runner.py`), construct the command accurately based solely on the referenced conventions, execute it, and report the direct output.