tribunal-kit 6.0.1 → 7.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 (349) hide show
  1. package/.agent/ARCHITECTURE.md +9 -6
  2. package/.agent/agents/accessibility-reviewer.md +23 -16
  3. package/.agent/agents/ai-code-reviewer.md +25 -21
  4. package/.agent/agents/anti-pattern-reviewer.md +12 -7
  5. package/.agent/agents/api-architect.md +1 -0
  6. package/.agent/agents/backend-specialist.md +23 -22
  7. package/.agent/agents/cloud-engineer.md +1 -0
  8. package/.agent/agents/code-archaeologist.md +1 -0
  9. package/.agent/agents/complexity-reviewer.md +10 -7
  10. package/.agent/agents/database-architect.md +3 -2
  11. package/.agent/agents/db-latency-auditor.md +6 -2
  12. package/.agent/agents/debugger.md +3 -2
  13. package/.agent/agents/dependency-reviewer.md +1 -0
  14. package/.agent/agents/devops-engineer.md +9 -8
  15. package/.agent/agents/documentation-writer.md +6 -5
  16. package/.agent/agents/explorer-agent.md +1 -0
  17. package/.agent/agents/frontend-reviewer.md +21 -17
  18. package/.agent/agents/frontend-specialist.md +23 -20
  19. package/.agent/agents/game-developer.md +1 -0
  20. package/.agent/agents/interaction-reviewer.md +10 -5
  21. package/.agent/agents/logic-reviewer.md +3 -0
  22. package/.agent/agents/minimalist-reviewer.md +6 -0
  23. package/.agent/agents/mobile-developer.md +7 -6
  24. package/.agent/agents/mobile-reviewer.md +14 -13
  25. package/.agent/agents/orchestrator.md +3 -0
  26. package/.agent/agents/penetration-tester.md +1 -0
  27. package/.agent/agents/performance-optimizer.md +6 -5
  28. package/.agent/agents/performance-reviewer.md +6 -6
  29. package/.agent/agents/pipeline-reviewer.md +144 -0
  30. package/.agent/agents/precedence-reviewer.md +1 -0
  31. package/.agent/agents/product-manager.md +1 -0
  32. package/.agent/agents/product-owner.md +1 -0
  33. package/.agent/agents/product-reviewer.md +12 -7
  34. package/.agent/agents/project-planner.md +3 -0
  35. package/.agent/agents/qa-automation-engineer.md +50 -43
  36. package/.agent/agents/resilience-reviewer.md +1 -0
  37. package/.agent/agents/schema-reviewer.md +1 -0
  38. package/.agent/agents/security-auditor.md +24 -24
  39. package/.agent/agents/seo-specialist.md +33 -23
  40. package/.agent/agents/sql-reviewer.md +5 -4
  41. package/.agent/agents/supervisor-agent.md +12 -2
  42. package/.agent/agents/swarm-worker-contracts.md +13 -13
  43. package/.agent/agents/swarm-worker-registry.md +51 -51
  44. package/.agent/agents/system-architect.md +1 -0
  45. package/.agent/agents/test-coverage-reviewer.md +25 -22
  46. package/.agent/agents/test-engineer.md +12 -11
  47. package/.agent/agents/throughput-optimizer.md +45 -40
  48. package/.agent/agents/type-safety-reviewer.md +5 -4
  49. package/.agent/agents/ui-ux-auditor.md +6 -4
  50. package/.agent/agents/ui-visual-auditor.md +3 -0
  51. package/.agent/agents/ux-reviewer.md +11 -6
  52. package/.agent/agents/visual-reviewer.md +11 -6
  53. package/.agent/agents/vitals-reviewer.md +5 -4
  54. package/.agent/history/memory/.memory.idx +1532 -1
  55. package/.agent/history/memory/MEMORY.md +102 -1
  56. package/.agent/mcp_config.json +1 -6
  57. package/.agent/routing_index.json +2033 -263
  58. package/.agent/rules/GEMINI.md +11 -9
  59. package/.agent/rules/GEMINI_PLANNER.md +19 -21
  60. package/.agent/scripts/_colors.js +52 -54
  61. package/.agent/scripts/_utils.js +52 -53
  62. package/.agent/scripts/auto_preview.js +39 -43
  63. package/.agent/scripts/bundle_analyzer.js +47 -60
  64. package/.agent/scripts/case_law_manager.js +200 -294
  65. package/.agent/scripts/checklist.js +73 -94
  66. package/.agent/scripts/cicd_validator.js +305 -0
  67. package/.agent/scripts/compile_router.py +4 -111
  68. package/.agent/scripts/context_broker.js +317 -412
  69. package/.agent/scripts/contract_engine.js +402 -0
  70. package/.agent/scripts/dependency_analyzer.js +112 -124
  71. package/.agent/scripts/graph_builder.js +75 -103
  72. package/.agent/scripts/graph_visualizer.js +10 -12
  73. package/.agent/scripts/graph_zoom.js +38 -55
  74. package/.agent/scripts/guardrail_engine.js +195 -145
  75. package/.agent/scripts/impact_classifier.js +55 -30
  76. package/.agent/scripts/inner_loop_validator.js +108 -159
  77. package/.agent/scripts/integrity_manifest.js +59 -67
  78. package/.agent/scripts/lint_runner.js +65 -75
  79. package/.agent/scripts/marathon_harness.js +131 -208
  80. package/.agent/scripts/migrate_skills_frontmatter.py +4 -63
  81. package/.agent/scripts/minify_context.js +29 -33
  82. package/.agent/scripts/minimal_change_engine.js +95 -87
  83. package/.agent/scripts/mutation_runner.js +46 -62
  84. package/.agent/scripts/pipeline_engine.js +320 -209
  85. package/.agent/scripts/prompt_compiler.js +118 -93
  86. package/.agent/scripts/schema_validator.js +73 -121
  87. package/.agent/scripts/security_scan.js +88 -117
  88. package/.agent/scripts/session_manager.js +52 -69
  89. package/.agent/scripts/signal_detector.js +24 -22
  90. package/.agent/scripts/skill_evolution.js +184 -245
  91. package/.agent/scripts/skill_integrator.js +35 -48
  92. package/.agent/scripts/socratic_gate_policy.js +15 -12
  93. package/.agent/scripts/strengthen_skills.js +29 -33
  94. package/.agent/scripts/swarm_dispatcher.js +120 -151
  95. package/.agent/scripts/test_runner.js +54 -56
  96. package/.agent/scripts/token_budget_broker.js +9 -7
  97. package/.agent/scripts/trace_engine.js +126 -0
  98. package/.agent/scripts/verify_all.js +76 -93
  99. package/.agent/scripts/visual_audit.js +16 -21
  100. package/.agent/skill_topic_map.json +22 -3
  101. package/.agent/skills/12-principles-of-animation/SKILL.md +7 -0
  102. package/.agent/skills/60fps-animation/SKILL.md +7 -0
  103. package/.agent/skills/accessible-animation/SKILL.md +5 -1
  104. package/.agent/skills/adapt/SKILL.md +7 -1
  105. package/.agent/skills/advanced-rag-pipelines/SKILL.md +1 -0
  106. package/.agent/skills/agent-organizer/SKILL.md +1 -0
  107. package/.agent/skills/agentic-patterns/SKILL.md +33 -25
  108. package/.agent/skills/agentic-workflows-2026/SKILL.md +6 -2
  109. package/.agent/skills/ai-app-hardening/SKILL.md +9 -8
  110. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +7 -6
  111. package/.agent/skills/animation-on-scroll/SKILL.md +24 -15
  112. package/.agent/skills/animation-systems/SKILL.md +11 -10
  113. package/.agent/skills/antfu-conventions/SKILL.md +7 -2
  114. package/.agent/skills/api-patterns/SKILL.md +14 -10
  115. package/.agent/skills/api-security-auditor/SKILL.md +15 -14
  116. package/.agent/skills/app-builder/SKILL.md +1 -0
  117. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +2 -2
  118. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +1 -1
  119. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +12 -12
  120. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +3 -3
  121. package/.agent/skills/apple-design/SKILL.md +8 -7
  122. package/.agent/skills/architecture/SKILL.md +3 -2
  123. package/.agent/skills/audit-and-fix/SKILL.md +8 -5
  124. package/.agent/skills/authentication-best-practices/SKILL.md +9 -8
  125. package/.agent/skills/backend-security-expert/SKILL.md +1 -0
  126. package/.agent/skills/baseline-ui/SKILL.md +8 -7
  127. package/.agent/skills/bash-linux/SKILL.md +1 -0
  128. package/.agent/skills/behavioral-modes/SKILL.md +1 -0
  129. package/.agent/skills/better-colors/SKILL.md +11 -7
  130. package/.agent/skills/better-typography/SKILL.md +30 -16
  131. package/.agent/skills/better-ui/SKILL.md +17 -10
  132. package/.agent/skills/bolder/SKILL.md +6 -0
  133. package/.agent/skills/brainstorming/SKILL.md +6 -4
  134. package/.agent/skills/browser-native-ai/SKILL.md +5 -4
  135. package/.agent/skills/build-primitive/SKILL.md +5 -0
  136. package/.agent/skills/building-native-ui/SKILL.md +1 -0
  137. package/.agent/skills/cicd-pro/SKILL.md +2 -1
  138. package/.agent/skills/clarify/SKILL.md +19 -14
  139. package/.agent/skills/clean-code/SKILL.md +16 -15
  140. package/.agent/skills/cloud-architect/SKILL.md +1 -0
  141. package/.agent/skills/cobejs/SKILL.md +7 -9
  142. package/.agent/skills/code-review-checklist/SKILL.md +1 -0
  143. package/.agent/skills/codebase-design/SKILL.md +7 -2
  144. package/.agent/skills/colorize/SKILL.md +8 -3
  145. package/.agent/skills/compact-landing/SKILL.md +8 -3
  146. package/.agent/skills/company-logos/SKILL.md +6 -0
  147. package/.agent/skills/config-validator/SKILL.md +10 -9
  148. package/.agent/skills/containerization-pro/SKILL.md +6 -5
  149. package/.agent/skills/context-engineering-pro/SKILL.md +5 -4
  150. package/.agent/skills/create-design-md/SKILL.md +13 -5
  151. package/.agent/skills/critique/SKILL.md +10 -8
  152. package/.agent/skills/csharp-developer/SKILL.md +1 -0
  153. package/.agent/skills/data-validation-schemas/SKILL.md +28 -23
  154. package/.agent/skills/database-design/SKILL.md +2 -1
  155. package/.agent/skills/delight/SKILL.md +6 -0
  156. package/.agent/skills/deployment-procedures/SKILL.md +2 -1
  157. package/.agent/skills/design-lab/SKILL.md +5 -0
  158. package/.agent/skills/devops-engineer/SKILL.md +3 -2
  159. package/.agent/skills/devops-incident-responder/SKILL.md +2 -1
  160. package/.agent/skills/diagnosing-bugs/SKILL.md +12 -2
  161. package/.agent/skills/distill/SKILL.md +7 -2
  162. package/.agent/skills/documentation-templates/SKILL.md +3 -2
  163. package/.agent/skills/domain-modeling/SKILL.md +12 -4
  164. package/.agent/skills/duckdb-analytical-sql/SKILL.md +7 -3
  165. package/.agent/skills/edge-ai-mobile/SKILL.md +5 -1
  166. package/.agent/skills/edge-computing/SKILL.md +9 -8
  167. package/.agent/skills/emil-design-eng/SKILL.md +43 -27
  168. package/.agent/skills/error-resilience/SKILL.md +34 -16
  169. package/.agent/skills/expo-router-v4/SKILL.md +2 -1
  170. package/.agent/skills/extract-design-system/SKILL.md +12 -11
  171. package/.agent/skills/fabel-protocol/SKILL.md +24 -17
  172. package/.agent/skills/fixing-accessibility/SKILL.md +23 -16
  173. package/.agent/skills/fixing-metadata/SKILL.md +24 -13
  174. package/.agent/skills/fixing-motion-performance/SKILL.md +7 -5
  175. package/.agent/skills/framer-motion-expert/SKILL.md +29 -15
  176. package/.agent/skills/frontend-design/SKILL.md +21 -13
  177. package/.agent/skills/frontend-security-expert/SKILL.md +1 -0
  178. package/.agent/skills/game-design-expert/SKILL.md +1 -0
  179. package/.agent/skills/game-engineering-expert/SKILL.md +1 -0
  180. package/.agent/skills/generative-ui-expert/SKILL.md +3 -2
  181. package/.agent/skills/geo-fundamentals/SKILL.md +2 -1
  182. package/.agent/skills/git-pro/SKILL.md +10 -9
  183. package/.agent/skills/github-operations/SKILL.md +2 -1
  184. package/.agent/skills/gpt-taste/SKILL.md +7 -0
  185. package/.agent/skills/gsap-core/SKILL.md +26 -22
  186. package/.agent/skills/gsap-frameworks/SKILL.md +6 -5
  187. package/.agent/skills/gsap-performance/SKILL.md +4 -3
  188. package/.agent/skills/gsap-plugins/SKILL.md +34 -33
  189. package/.agent/skills/gsap-react/SKILL.md +9 -8
  190. package/.agent/skills/gsap-scrolltrigger/SKILL.md +34 -33
  191. package/.agent/skills/gsap-timeline/SKILL.md +18 -15
  192. package/.agent/skills/gsap-utils/SKILL.md +25 -24
  193. package/.agent/skills/harden/SKILL.md +9 -3
  194. package/.agent/skills/harness-protocol/SKILL.md +1 -0
  195. package/.agent/skills/i18n-localization/SKILL.md +10 -9
  196. package/.agent/skills/impeccable/SKILL.md +5 -0
  197. package/.agent/skills/improve-codebase-architecture/SKILL.md +10 -5
  198. package/.agent/skills/improve-ui/SKILL.md +12 -5
  199. package/.agent/skills/intelligent-routing/SKILL.md +7 -6
  200. package/.agent/skills/knowledge-graph/SKILL.md +1 -0
  201. package/.agent/skills/landing-page/SKILL.md +1 -0
  202. package/.agent/skills/lint-and-validate/SKILL.md +9 -4
  203. package/.agent/skills/llm-engineering/SKILL.md +55 -54
  204. package/.agent/skills/local-first/SKILL.md +20 -19
  205. package/.agent/skills/local-first-architecture/SKILL.md +6 -1
  206. package/.agent/skills/lottie-animation/SKILL.md +7 -3
  207. package/.agent/skills/marquee-loop/SKILL.md +1 -0
  208. package/.agent/skills/masked-reveal/SKILL.md +17 -4
  209. package/.agent/skills/mcp-builder/SKILL.md +13 -10
  210. package/.agent/skills/micro-interaction/SKILL.md +20 -5
  211. package/.agent/skills/mobile-design/SKILL.md +26 -15
  212. package/.agent/skills/monorepo-management/SKILL.md +3 -2
  213. package/.agent/skills/morphing-icons/SKILL.md +16 -6
  214. package/.agent/skills/motion-engineering/SKILL.md +19 -15
  215. package/.agent/skills/nextjs-react-expert/SKILL.md +26 -21
  216. package/.agent/skills/nodejs-best-practices/SKILL.md +89 -76
  217. package/.agent/skills/observability/SKILL.md +45 -44
  218. package/.agent/skills/opentelemetry-observability/SKILL.md +2 -1
  219. package/.agent/skills/page-transition-animation/SKILL.md +6 -3
  220. package/.agent/skills/parallel-agents/SKILL.md +7 -2
  221. package/.agent/skills/performance-profiling/SKILL.md +24 -13
  222. package/.agent/skills/plan-writing/SKILL.md +1 -0
  223. package/.agent/skills/platform-engineer/SKILL.md +3 -2
  224. package/.agent/skills/platform-engineering-opentofu/SKILL.md +1 -0
  225. package/.agent/skills/playwright-ai-e2e/SKILL.md +3 -2
  226. package/.agent/skills/playwright-best-practices/SKILL.md +29 -28
  227. package/.agent/skills/polish/SKILL.md +13 -12
  228. package/.agent/skills/powershell-windows/SKILL.md +1 -0
  229. package/.agent/skills/pricing-page/SKILL.md +8 -3
  230. package/.agent/skills/product-aware-heuristics/SKILL.md +122 -72
  231. package/.agent/skills/progressive-blur/SKILL.md +9 -4
  232. package/.agent/skills/project-idioms/SKILL.md +1 -0
  233. package/.agent/skills/property-based-testing/SKILL.md +10 -12
  234. package/.agent/skills/python-patterns/SKILL.md +1 -0
  235. package/.agent/skills/python-pro/SKILL.md +1 -0
  236. package/.agent/skills/quieter/SKILL.md +6 -0
  237. package/.agent/skills/react-doctor/SKILL.md +6 -0
  238. package/.agent/skills/react-specialist/SKILL.md +32 -28
  239. package/.agent/skills/readme-builder/SKILL.md +1 -0
  240. package/.agent/skills/realtime-patterns/SKILL.md +34 -33
  241. package/.agent/skills/red-team-tactics/SKILL.md +1 -0
  242. package/.agent/skills/redesign-skill/SKILL.md +6 -0
  243. package/.agent/skills/review-animations/SKILL.md +5 -2
  244. package/.agent/skills/review-animations/STANDARDS.md +37 -23
  245. package/.agent/skills/rust-pro/SKILL.md +1 -0
  246. package/.agent/skills/seo-fundamentals/SKILL.md +4 -3
  247. package/.agent/skills/server-management/SKILL.md +1 -0
  248. package/.agent/skills/shadcn-ui-expert/SKILL.md +28 -22
  249. package/.agent/skills/shape/SKILL.md +9 -2
  250. package/.agent/skills/skill-creator/SKILL.md +1 -0
  251. package/.agent/skills/soft-skill/SKILL.md +6 -0
  252. package/.agent/skills/sounds-on-the-web/SKILL.md +1 -0
  253. package/.agent/skills/sql-pro/SKILL.md +1 -0
  254. package/.agent/skills/supabase-postgres-best-practices/SKILL.md +1 -0
  255. package/.agent/skills/svg-animation/SKILL.md +16 -7
  256. package/.agent/skills/swiftui-expert/SKILL.md +1 -0
  257. package/.agent/skills/swiss-design/SKILL.md +5 -0
  258. package/.agent/skills/system-design-pro/SKILL.md +1 -0
  259. package/.agent/skills/systematic-debugging/SKILL.md +1 -0
  260. package/.agent/skills/tailwind-patterns/SKILL.md +25 -11
  261. package/.agent/skills/taste-skill/SKILL.md +6 -0
  262. package/.agent/skills/tdd-workflow/SKILL.md +5 -0
  263. package/.agent/skills/test-result-analyzer/SKILL.md +1 -0
  264. package/.agent/skills/testing-patterns/SKILL.md +123 -115
  265. package/.agent/skills/thermo-nuclear-code-quality-review/SKILL.md +5 -0
  266. package/.agent/skills/thinking-protocol/SKILL.md +3 -0
  267. package/.agent/skills/to-spring-or-not-to-spring/SKILL.md +9 -8
  268. package/.agent/skills/transitions-dev/SKILL.md +19 -6
  269. package/.agent/skills/trend-researcher/SKILL.md +1 -0
  270. package/.agent/skills/typescript-advanced/SKILL.md +23 -18
  271. package/.agent/skills/typeset/SKILL.md +10 -1
  272. package/.agent/skills/ui-reasoning-engine/SKILL.md +67 -48
  273. package/.agent/skills/ui-skill-packs/SKILL.md +6 -1
  274. package/.agent/skills/ui-skills-root/SKILL.md +39 -38
  275. package/.agent/skills/ui-ux-pro-max/SKILL.md +34 -26
  276. package/.agent/skills/ui-ux-researcher/SKILL.md +1 -0
  277. package/.agent/skills/vector-search-pgvector/SKILL.md +3 -2
  278. package/.agent/skills/vue-expert/SKILL.md +22 -19
  279. package/.agent/skills/vulnerability-scanner/SKILL.md +22 -21
  280. package/.agent/skills/web-accessibility-auditor/SKILL.md +2 -1
  281. package/.agent/skills/web-design-guidelines/SKILL.md +16 -10
  282. package/.agent/skills/web-quality-audit/SKILL.md +5 -0
  283. package/.agent/skills/webapp-testing/SKILL.md +14 -13
  284. package/.agent/skills/webgpu-performance/SKILL.md +1 -0
  285. package/.agent/skills/whimsy-injector/SKILL.md +9 -5
  286. package/.agent/skills/workflow-optimizer/SKILL.md +1 -0
  287. package/.agent/skills/zero-trust-passkeys/SKILL.md +11 -6
  288. package/.agent/templates/DESIGN.md +119 -110
  289. package/.agent/templates/design-tokens.json +9 -6
  290. package/.agent/workflows/acf.md +1 -0
  291. package/.agent/workflows/api-tester.md +1 -0
  292. package/.agent/workflows/audit.md +1 -0
  293. package/.agent/workflows/brainstorm.md +1 -0
  294. package/.agent/workflows/changelog.md +1 -0
  295. package/.agent/workflows/contract.md +60 -0
  296. package/.agent/workflows/create.md +1 -0
  297. package/.agent/workflows/debug.md +1 -0
  298. package/.agent/workflows/deploy.md +1 -0
  299. package/.agent/workflows/enhance.md +1 -0
  300. package/.agent/workflows/fix-ci.md +89 -0
  301. package/.agent/workflows/fix.md +1 -0
  302. package/.agent/workflows/generate.md +1 -0
  303. package/.agent/workflows/marathon.md +1 -0
  304. package/.agent/workflows/migrate.md +1 -0
  305. package/.agent/workflows/minimal.md +9 -7
  306. package/.agent/workflows/orchestrate.md +1 -0
  307. package/.agent/workflows/performance-benchmarker.md +1 -0
  308. package/.agent/workflows/pipeline.md +26 -21
  309. package/.agent/workflows/plan.md +1 -0
  310. package/.agent/workflows/preview.md +1 -0
  311. package/.agent/workflows/refactor.md +3 -2
  312. package/.agent/workflows/review-ai.md +4 -3
  313. package/.agent/workflows/review.md +1 -0
  314. package/.agent/workflows/session.md +1 -0
  315. package/.agent/workflows/status.md +1 -0
  316. package/.agent/workflows/strengthen-skills.md +1 -0
  317. package/.agent/workflows/super-prompt.md +1 -0
  318. package/.agent/workflows/swarm.md +15 -3
  319. package/.agent/workflows/test.md +8 -7
  320. package/.agent/workflows/tribunal-backend.md +3 -2
  321. package/.agent/workflows/tribunal-cicd.md +104 -0
  322. package/.agent/workflows/tribunal-database.md +1 -0
  323. package/.agent/workflows/tribunal-frontend.md +8 -6
  324. package/.agent/workflows/tribunal-full.md +2 -1
  325. package/.agent/workflows/tribunal-mobile.md +6 -5
  326. package/.agent/workflows/tribunal-performance.md +1 -0
  327. package/.agent/workflows/tribunal-speed.md +1 -0
  328. package/.agent/workflows/tribunal-ui.md +29 -21
  329. package/.agent/workflows/ui-ux-pro-max.md +19 -15
  330. package/CONTRIBUTING.md +3 -3
  331. package/README.md +94 -44
  332. package/SECURITY.md +10 -10
  333. package/bin/mcp-server.js +385 -252
  334. package/bin/tribunal-kit.js +29 -30
  335. package/bin/wrapper.js +40 -46
  336. package/dist/cli.js +6 -0
  337. package/dist/commands/case.js +2 -0
  338. package/dist/commands/contract.js +440 -0
  339. package/dist/commands/status.js +6 -0
  340. package/dist/index.d.ts +8 -1
  341. package/package.json +13 -12
  342. package/scripts/benchmark.js +62 -86
  343. package/scripts/changelog.js +67 -73
  344. package/scripts/fix-vbc.js +13 -15
  345. package/scripts/fix-vbc.ps1 +2 -118
  346. package/scripts/stress_benchmark.js +358 -0
  347. package/scripts/sync-version.js +71 -41
  348. package/scripts/validate-payload.js +23 -30
  349. package/scripts/visual_audit.js +23 -13
@@ -21,6 +21,7 @@ You audit **server-side files only** — `.ts` and `.js` in `/api`, `/server`, `
21
21
  ## Mandatory Pre-Flight Context Inspection
22
22
 
23
23
  Before auditing server throughput, you MUST inspect:
24
+
24
25
  1. `package.json` → Check Node.js version, HTTP client (`undici`, `axios`, native `fetch`), and caching engines (`lru-cache`, `redis`)
25
26
  2. Server entry points (`server.ts`, `app/api/`) → Identify event-loop blocking operations (`readFileSync`, `JSON.parse` on large payloads)
26
27
  3. Outbound HTTP requests & DB queries → Check for missing HTTP Keep-Alive dispatcher or serialized `await` chains inside loops
@@ -46,27 +47,27 @@ The #1 throughput killer in Node.js. A single 50ms sync call blocks ALL concurre
46
47
 
47
48
  ```typescript
48
49
  // ❌ BLOCKS EVENT LOOP: Synchronous file read in async handler
49
- app.get("/config", async (req, res) => {
50
- const data = fs.readFileSync("/etc/config.json", "utf8"); // BLOCKS all requests
50
+ app.get('/config', async (req, res) => {
51
+ const data = fs.readFileSync('/etc/config.json', 'utf8'); // BLOCKS all requests
51
52
  res.json(JSON.parse(data));
52
53
  });
53
54
 
54
55
  // ✅ APPROVED: Async file read — yields to event loop
55
- app.get("/config", async (req, res) => {
56
- const data = await fs.promises.readFile("/etc/config.json", "utf8");
56
+ app.get('/config', async (req, res) => {
57
+ const data = await fs.promises.readFile('/etc/config.json', 'utf8');
57
58
  res.json(JSON.parse(data));
58
59
  });
59
60
 
60
61
  // ❌ BLOCKS EVENT LOOP: JSON.parse on large payload (> 1MB) on main thread
61
- app.post("/import", async (req, res) => {
62
+ app.post('/import', async (req, res) => {
62
63
  const data = JSON.parse(largeBuffer.toString()); // 50-200ms blocking
63
64
  });
64
65
 
65
66
  // ✅ APPROVED: Stream-parse large JSON
66
- import { parser } from "stream-json";
67
- import { streamArray } from "stream-json/streamers/StreamArray";
67
+ import { parser } from 'stream-json';
68
+ import { streamArray } from 'stream-json/streamers/StreamArray';
68
69
 
69
- app.post("/import", async (req, res) => {
70
+ app.post('/import', async (req, res) => {
70
71
  const pipeline = req.pipe(parser()).pipe(streamArray());
71
72
  for await (const { value } of pipeline) {
72
73
  await processItem(value); // Non-blocking, item-by-item
@@ -74,11 +75,11 @@ app.post("/import", async (req, res) => {
74
75
  });
75
76
 
76
77
  // ❌ BLOCKS EVENT LOOP: Synchronous crypto operations
77
- const hash = crypto.pbkdf2Sync(password, salt, 100000, 64, "sha512");
78
+ const hash = crypto.pbkdf2Sync(password, salt, 100000, 64, 'sha512');
78
79
 
79
80
  // ✅ APPROVED: Async crypto
80
81
  const hash = await new Promise((resolve, reject) => {
81
- crypto.pbkdf2(password, salt, 100000, 64, "sha512", (err, key) => {
82
+ crypto.pbkdf2(password, salt, 100000, 64, 'sha512', (err, key) => {
82
83
  err ? reject(err) : resolve(key);
83
84
  });
84
85
  });
@@ -101,7 +102,11 @@ async function getDashboard(userId: string) {
101
102
 
102
103
  // ✅ APPROVED: Parallel execution (300ms total — 3x faster)
103
104
  async function getDashboard(userId: string) {
104
- const [user, orders, notifications] = await Promise.all([getUser(userId), getOrders(userId), getNotifications(userId)]);
105
+ const [user, orders, notifications] = await Promise.all([
106
+ getUser(userId),
107
+ getOrders(userId),
108
+ getNotifications(userId),
109
+ ]);
105
110
  return { user, orders, notifications };
106
111
  }
107
112
 
@@ -112,12 +117,12 @@ for (const id of userIds) {
112
117
  }
113
118
 
114
119
  // ✅ APPROVED: Parallel with controlled concurrency
115
- const results = await Promise.all(userIds.map((id) => fetchUser(id)));
120
+ const results = await Promise.all(userIds.map(id => fetchUser(id)));
116
121
 
117
122
  // ✅ APPROVED: Batched concurrency for large arrays (avoid overwhelming DB)
118
- import pLimit from "p-limit";
123
+ import pLimit from 'p-limit';
119
124
  const limit = pLimit(10); // Max 10 concurrent
120
- const results = await Promise.all(userIds.map((id) => limit(() => fetchUser(id))));
125
+ const results = await Promise.all(userIds.map(id => limit(() => fetchUser(id))));
121
126
  ```
122
127
 
123
128
  ---
@@ -128,7 +133,7 @@ const results = await Promise.all(userIds.map((id) => limit(() => fetchUser(id))
128
133
  // ❌ MEMORY LEAK: Global cache with no eviction — grows unbounded
129
134
  const cache = new Map<string, any>(); // Lives forever, entries never removed
130
135
 
131
- app.get("/data/:id", async (req, res) => {
136
+ app.get('/data/:id', async (req, res) => {
132
137
  if (!cache.has(req.params.id)) {
133
138
  cache.set(req.params.id, await fetchData(req.params.id));
134
139
  }
@@ -137,7 +142,7 @@ app.get("/data/:id", async (req, res) => {
137
142
  // After 100K unique IDs → hundreds of MB consumed → OOM crash
138
143
 
139
144
  // ✅ APPROVED: LRU cache with max size and TTL
140
- import { LRUCache } from "lru-cache";
145
+ import { LRUCache } from 'lru-cache';
141
146
  const cache = new LRUCache<string, any>({
142
147
  max: 1000, // Maximum 1000 entries
143
148
  ttl: 1000 * 60 * 5, // 5-minute TTL
@@ -149,17 +154,17 @@ const id = setInterval(() => syncMetrics(), 30000);
149
154
 
150
155
  // ✅ APPROVED: Graceful shutdown clears interval
151
156
  const id = setInterval(() => syncMetrics(), 30000);
152
- process.on("SIGTERM", () => clearInterval(id));
153
- process.on("SIGINT", () => clearInterval(id));
157
+ process.on('SIGTERM', () => clearInterval(id));
158
+ process.on('SIGINT', () => clearInterval(id));
154
159
 
155
160
  // ❌ MEMORY LEAK: Event emitter listeners accumulate
156
- server.on("request", handler);
161
+ server.on('request', handler);
157
162
  // If called repeatedly (hot reload) → MaxListenersExceededWarning
158
163
 
159
164
  // ✅ APPROVED: Remove listener on cleanup
160
- server.on("request", handler);
165
+ server.on('request', handler);
161
166
  // On shutdown/reload:
162
- server.removeListener("request", handler);
167
+ server.removeListener('request', handler);
163
168
  ```
164
169
 
165
170
  ---
@@ -168,20 +173,20 @@ server.removeListener("request", handler);
168
173
 
169
174
  ```typescript
170
175
  // ❌ MAIN THREAD: CPU-heavy operation blocks ALL requests
171
- app.post("/resize", async (req, res) => {
176
+ app.post('/resize', async (req, res) => {
172
177
  const resized = sharp(buffer).resize(800, 600).toBuffer(); // 200-500ms blocking
173
178
  res.send(resized);
174
179
  });
175
180
 
176
181
  // ✅ APPROVED: Offload to Worker Thread
177
- import { Worker } from "worker_threads";
182
+ import { Worker } from 'worker_threads';
178
183
 
179
- app.post("/resize", async (req, res) => {
180
- const worker = new Worker("./workers/resize.js", {
184
+ app.post('/resize', async (req, res) => {
185
+ const worker = new Worker('./workers/resize.js', {
181
186
  workerData: { buffer: req.body, width: 800, height: 600 },
182
187
  });
183
- worker.on("message", (result) => res.send(result));
184
- worker.on("error", (err) => res.status(500).json({ error: err.message }));
188
+ worker.on('message', result => res.send(result));
189
+ worker.on('error', err => res.status(500).json({ error: err.message }));
185
190
  });
186
191
 
187
192
  // Flag these operations as Worker Thread candidates:
@@ -198,16 +203,16 @@ app.post("/resize", async (req, res) => {
198
203
 
199
204
  ```typescript
200
205
  // ❌ BUFFER BLOAT: Entire file loaded into memory before sending
201
- app.get("/export", async (req, res) => {
206
+ app.get('/export', async (req, res) => {
202
207
  const data = await db.orders.findMany(); // 50MB result set
203
208
  const csv = convertToCSV(data); // Another 50MB in memory
204
209
  res.send(csv); // Total: 100MB per request
205
210
  });
206
211
 
207
212
  // ✅ APPROVED: Stream directly to response
208
- app.get("/export", async (req, res) => {
209
- res.setHeader("Content-Type", "text/csv");
210
- res.setHeader("Transfer-Encoding", "chunked");
213
+ app.get('/export', async (req, res) => {
214
+ res.setHeader('Content-Type', 'text/csv');
215
+ res.setHeader('Transfer-Encoding', 'chunked');
211
216
 
212
217
  const cursor = db.orders.findMany({ cursor: true });
213
218
  for await (const batch of cursor) {
@@ -217,16 +222,16 @@ app.get("/export", async (req, res) => {
217
222
  });
218
223
 
219
224
  // ❌ BUFFER BLOAT: Reading entire upload before processing
220
- app.post("/upload", async (req, res) => {
225
+ app.post('/upload', async (req, res) => {
221
226
  const body = await req.arrayBuffer(); // Entire file in memory
222
227
  await processFile(Buffer.from(body));
223
228
  });
224
229
 
225
230
  // ✅ APPROVED: Pipe stream directly
226
- app.post("/upload", async (req, res) => {
231
+ app.post('/upload', async (req, res) => {
227
232
  const writeStream = fs.createWriteStream(`/uploads/${filename}`);
228
233
  req.pipe(writeStream);
229
- writeStream.on("finish", () => res.json({ status: "uploaded" }));
234
+ writeStream.on('finish', () => res.json({ status: 'uploaded' }));
230
235
  });
231
236
  ```
232
237
 
@@ -237,15 +242,15 @@ app.post("/upload", async (req, res) => {
237
242
  ```typescript
238
243
  // ❌ NO KEEP-ALIVE: New TCP connection per outbound fetch
239
244
  async function callExternalAPI(data: any) {
240
- const res = await fetch("https://api.external.com/v1/data", {
241
- method: "POST",
245
+ const res = await fetch('https://api.external.com/v1/data', {
246
+ method: 'POST',
242
247
  body: JSON.stringify(data),
243
248
  });
244
249
  // Each call = DNS lookup + TCP handshake + TLS negotiation (100-300ms overhead)
245
250
  }
246
251
 
247
252
  // ✅ APPROVED: Reuse connections with http.Agent
248
- import { Agent } from "undici";
253
+ import { Agent } from 'undici';
249
254
 
250
255
  const agent = new Agent({
251
256
  keepAliveTimeout: 30_000,
@@ -254,8 +259,8 @@ const agent = new Agent({
254
259
  });
255
260
 
256
261
  async function callExternalAPI(data: any) {
257
- const res = await fetch("https://api.external.com/v1/data", {
258
- method: "POST",
262
+ const res = await fetch('https://api.external.com/v1/data', {
263
+ method: 'POST',
259
264
  body: JSON.stringify(data),
260
265
  dispatcher: agent,
261
266
  });
@@ -279,7 +284,7 @@ do {
279
284
  const batch = await prisma.user.findMany({
280
285
  take: 100,
281
286
  ...(cursor ? { skip: 1, cursor: { id: cursor } } : {}),
282
- orderBy: { id: "asc" },
287
+ orderBy: { id: 'asc' },
283
288
  });
284
289
  for (const user of batch) {
285
290
  await sendEmail(user.email);
@@ -20,6 +20,7 @@ TypeScript is a contract system. Your job is to ensure every contract is honored
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before auditing TypeScript safety, you MUST inspect:
23
+
23
24
  1. `tsconfig.json` → Check `strict`, `noImplicitAny`, `strictNullChecks`, `noUncheckedIndexedAccess` settings
24
25
  2. `package.json` → Check `@types/*` dependencies and TypeScript compiler version
25
26
  3. Imported module declarations (`.d.ts` files or exported types) → Ensure interfaces exist and match contract usage
@@ -37,7 +38,7 @@ function process(data: any) {
37
38
  }
38
39
 
39
40
  // ❌ REJECTED: Cast from unknown response — no runtime validation
40
- const result: any = await fetch("/api").then((r) => r.json());
41
+ const result: any = await fetch('/api').then(r => r.json());
41
42
 
42
43
  // ✅ APPROVED: Narrow interface defined
43
44
  function process(data: { name: string; id: number }) {
@@ -45,7 +46,7 @@ function process(data: { name: string; id: number }) {
45
46
  }
46
47
 
47
48
  // ✅ APPROVED: Zod validates at runtime boundary
48
- const result = UserSchema.parse(await fetch("/api").then((r) => r.json()));
49
+ const result = UserSchema.parse(await fetch('/api').then(r => r.json()));
49
50
 
50
51
  // ✅ APPROVED with documented justification
51
52
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -70,7 +71,7 @@ const user = UserSchema.parse(response);
70
71
 
71
72
  // ✅ APPROVED: Type guard with actual check
72
73
  function isUser(data: unknown): data is User {
73
- return typeof data === "object" && data !== null && "id" in data;
74
+ return typeof data === 'object' && data !== null && 'id' in data;
74
75
  }
75
76
  ```
76
77
 
@@ -111,7 +112,7 @@ const city = user.address.city;
111
112
  const first = arr[0].name; // arr could be empty
112
113
 
113
114
  // ✅ APPROVED: Optional chaining with fallback
114
- const city = user.address?.city ?? "Unknown";
115
+ const city = user.address?.city ?? 'Unknown';
115
116
 
116
117
  // ✅ APPROVED: Guard before access
117
118
  if (arr.length > 0) {
@@ -22,6 +22,7 @@ skills:
22
22
  ## Mandatory Pre-Flight Context Inspection
23
23
 
24
24
  Before auditing UI/UX governance, you MUST inspect:
25
+
25
26
  1. `DESIGN.md` / `theme.css` → Check active visual direction, color system, and spatial tokens
26
27
  2. Component hierarchy → Check if the `🧠 UI Reasoning Engine Trace` block was produced before component code
27
28
  3. Accessibility & Layout → Check touch targets (min 44x44px), ARIA roles, and responsive breakpoint rules
@@ -31,6 +32,7 @@ Before auditing UI/UX governance, you MUST inspect:
31
32
  ## The UI Multi-Agent Orchestration Loop
32
33
 
33
34
  When reviewing code, you must synthesize findings from the 6 specialized reviewers:
35
+
34
36
  1. **ux-reviewer:** Verifies Hick's law, scannability, cognitive load, and progressive disclosure.
35
37
  2. **visual-reviewer:** Verifies margins, typographic hierarchy, 8px grids, and contrast.
36
38
  3. **interaction-reviewer:** Verifies all interactive states (hover, focus, active, disabled) and micro-interactions.
@@ -42,10 +44,10 @@ When reviewing code, you must synthesize findings from the 6 specialized reviewe
42
44
 
43
45
  ## Strict Rejection Gates (Blocking)
44
46
 
45
- * **Missing Reasoning Trace:** If the Maker agent fails to output the `🧠 UI Reasoning Engine Trace` block before the code, output is immediately REJECTED.
46
- * **The Purple brand color (#7C3AED):** Immediately REJECTED.
47
- * **Lack of Hover/Active states:** Rejects any clickable button or card that does not explicitly implement hover scales or `active:scale-[0.97]` click indicators.
48
- * **Layout Shift (CLS):** Rejects images or media content containers that do not declare explicit aspect ratios or spacing dimensions.
47
+ - **Missing Reasoning Trace:** If the Maker agent fails to output the `🧠 UI Reasoning Engine Trace` block before the code, output is immediately REJECTED.
48
+ - **The Purple brand color (#7C3AED):** Immediately REJECTED.
49
+ - **Lack of Hover/Active states:** Rejects any clickable button or card that does not explicitly implement hover scales or `active:scale-[0.97]` click indicators.
50
+ - **Layout Shift (CLS):** Rejects images or media content containers that do not declare explicit aspect ratios or spacing dimensions.
49
51
 
50
52
  ---
51
53
 
@@ -18,6 +18,7 @@ skills:
18
18
  ## Mandatory Pre-Flight Context Inspection
19
19
 
20
20
  Before auditing rendered visuals and DOM layouts, you MUST inspect:
21
+
21
22
  1. Breakpoint configs (`tailwind.config.js`, `media.css`) → Verify 375px (mobile), 768px (tablet), and 1440px (desktop) breakpoint bounds
22
23
  2. Image & Video assets → Confirm presence of `aspect-ratio` or explicit width/height dimensions to eliminate layout shifts
23
24
  3. Typography wrap rules → Verify `text-wrap: balance` / `pretty` usage on headings and body text
@@ -39,6 +40,7 @@ You inspect rendered HTML, DOM elements, or captured screenshots at multiple vie
39
40
  ## Code Comparison Examples
40
41
 
41
42
  ### Layout Shift (CLS) Violation
43
+
42
44
  ```tsx
43
45
  // ❌ REJECTED: Missing width/height or aspect-ratio on image. Causes layout jump on load.
44
46
  <img src="/hero-illustration.webp" className="w-full h-auto" />
@@ -50,6 +52,7 @@ You inspect rendered HTML, DOM elements, or captured screenshots at multiple vie
50
52
  ```
51
53
 
52
54
  ### Responsive Container Overflow
55
+
53
56
  ```tsx
54
57
  // ❌ REJECTED: Hardcoded width on container causing horizontal overflow on mobile viewports
55
58
  <div className="w-[600px] p-4">
@@ -17,6 +17,7 @@ You evaluate usability, layout scannability, cognitive safety, information archi
17
17
  ## Mandatory Pre-Flight Context Inspection
18
18
 
19
19
  Before auditing usability and information architecture, you MUST inspect:
20
+
20
21
  1. Target user workflow & product type (SaaS Dashboard, Marketing Landing, DevTool, AI Interface, Fintech)
21
22
  2. Interactive button/input groupings → Verify destructive actions are separated from primary CTA buttons
22
23
  3. Progressive disclosure structures → Ensure complex forms (>5 fields) use multi-step wizards or grouped fieldsets
@@ -26,20 +27,23 @@ Before auditing usability and information architecture, you MUST inspect:
26
27
  ## What This Reviewer Catches
27
28
 
28
29
  ### ❌ REJECTED Criteria (Blocking)
29
- * **Action Isolation Failures:** Primary actions placed far from user eye-tracking zones or too close to destructive actions without distinct styling.
30
- * **Choice Overload (Hick's Law):** Exposing 10+ options or inputs on a single screen layer without progressive disclosure (tabs, dropdowns, expandables).
31
- * **Nonsensical Grouping (Gestalt violation):** Visual spacing that breaks parent-child relationships (e.g., input labels placed closer to the preceding input than the target input).
32
- * **Form Blockages:** Multi-step forms without visual progress indicators, or missing explicit validation message bindings.
30
+
31
+ - **Action Isolation Failures:** Primary actions placed far from user eye-tracking zones or too close to destructive actions without distinct styling.
32
+ - **Choice Overload (Hick's Law):** Exposing 10+ options or inputs on a single screen layer without progressive disclosure (tabs, dropdowns, expandables).
33
+ - **Nonsensical Grouping (Gestalt violation):** Visual spacing that breaks parent-child relationships (e.g., input labels placed closer to the preceding input than the target input).
34
+ - **Form Blockages:** Multi-step forms without visual progress indicators, or missing explicit validation message bindings.
33
35
 
34
36
  ### ⚠️ WARNING Criteria (Non-blocking)
35
- * *Progressive Disclosure:* Tooltips or collapsible sections missing for secondary glossary terms.
36
- * *Scanning Rhythm:* Lack of section headings to break up long blocks of inputs.
37
+
38
+ - _Progressive Disclosure:_ Tooltips or collapsible sections missing for secondary glossary terms.
39
+ - _Scanning Rhythm:_ Lack of section headings to break up long blocks of inputs.
37
40
 
38
41
  ---
39
42
 
40
43
  ## Code Comparison Examples
41
44
 
42
45
  ### Action Isolation Failure
46
+
43
47
  ```tsx
44
48
  // ❌ REJECTED: Destructive delete button right next to primary save button with same styling
45
49
  <div className="flex gap-2">
@@ -59,6 +63,7 @@ Before auditing usability and information architecture, you MUST inspect:
59
63
  ```
60
64
 
61
65
  ### Gestalt Grouping Violation
66
+
62
67
  ```tsx
63
68
  // ❌ REJECTED: Label is closer to the preceding input than the input it describes
64
69
  <div className="space-y-4">
@@ -18,6 +18,7 @@ You evaluate margins, visual rhythm, typography scales, alignment, line lengths,
18
18
  ## Mandatory Pre-Flight Context Inspection
19
19
 
20
20
  Before auditing visual rhythm and typography, you MUST inspect:
21
+
21
22
  1. `DESIGN.md` / `theme.css` → Check font family mappings (display vs body vs mono) and scale steps (`text-xs` to `text-6xl`)
22
23
  2. Spatial grid rules → Verify padding/margin/gap utilities adhere to the 8px grid (8px, 16px, 24px, 32px, 48px, 64px)
23
24
  3. Line length limits → Confirm paragraph bounds use `max-w-prose` or `max-w-[65ch]` to prevent wide, unreadable columns
@@ -27,20 +28,23 @@ Before auditing visual rhythm and typography, you MUST inspect:
27
28
  ## What This Reviewer Catches
28
29
 
29
30
  ### ❌ REJECTED Criteria (Blocking)
30
- * **Typography Overlap/Orphans:** Display headings wrapping awkwardly without balancing (`text-wrap: balance` missing on dynamic headings).
31
- * **Arbitrary Spacing:** Spacing values (margin, padding, gap) that deviate from the strict 8px spatial grid system (e.g., mixing `15px`, `9px`, `19px`).
32
- * **Line-Length Violations:** Text paragraph columns wider than `75ch` or narrower than `45ch` for body content.
33
- * **Poor Contrast:** Color combinations failing contrast thresholds. Dark surfaces casting harsh pitch-black shadows instead of stepping background lightness.
31
+
32
+ - **Typography Overlap/Orphans:** Display headings wrapping awkwardly without balancing (`text-wrap: balance` missing on dynamic headings).
33
+ - **Arbitrary Spacing:** Spacing values (margin, padding, gap) that deviate from the strict 8px spatial grid system (e.g., mixing `15px`, `9px`, `19px`).
34
+ - **Line-Length Violations:** Text paragraph columns wider than `75ch` or narrower than `45ch` for body content.
35
+ - **Poor Contrast:** Color combinations failing contrast thresholds. Dark surfaces casting harsh pitch-black shadows instead of stepping background lightness.
34
36
 
35
37
  ### ⚠️ WARNING Criteria (Non-blocking)
36
- * *Font Pairing:* Monotonous font setups (e.g., Inter for both Display and Body) that feel generic.
37
- * *Negative Space:* Tight component paddings that crush text elements.
38
+
39
+ - _Font Pairing:_ Monotonous font setups (e.g., Inter for both Display and Body) that feel generic.
40
+ - _Negative Space:_ Tight component paddings that crush text elements.
38
41
 
39
42
  ---
40
43
 
41
44
  ## Code Comparison Examples
42
45
 
43
46
  ### Arbitrary Spacing vs. Grid Spacing
47
+
44
48
  ```tsx
45
49
  // ❌ REJECTED: Mixing arbitrary values (m-3, p-[15px], gap-5) outside the 8px spatial grid
46
50
  <div className="p-[15px] m-3 gap-5 flex">
@@ -56,6 +60,7 @@ Before auditing visual rhythm and typography, you MUST inspect:
56
60
  ```
57
61
 
58
62
  ### Unbalanced Typography vs. Balanced Readability
63
+
59
64
  ```tsx
60
65
  // ❌ REJECTED: Raw unconstrained width heading and paragraph without orphans balancing
61
66
  <div>
@@ -22,6 +22,7 @@ You audit **frontend files only** — `.tsx`, `.jsx`, `.css`, `.module.css`. You
22
22
  ## Mandatory Pre-Flight Context Inspection
23
23
 
24
24
  Before auditing Core Web Vitals, you MUST inspect:
25
+
25
26
  1. `app/layout.tsx` / `next.config.js` → Check font declarations (`next/font`), image domains, and scripts (`next/script` strategy)
26
27
  2. Above-the-fold media elements → Check image `priority`, `aspect-ratio` reserves, and layout shift triggers
27
28
  3. Animation & Event listener code → Verify `useTransition` usage for expensive state updates and `passive: true` on scroll listeners
@@ -91,13 +92,13 @@ function handleSearch(query: string) {
91
92
  }
92
93
 
93
94
  // ❌ INP DAMAGE: Non-passive scroll listener (blocks scroll painting)
94
- element.addEventListener("scroll", handler); // Missing { passive: true }
95
+ element.addEventListener('scroll', handler); // Missing { passive: true }
95
96
 
96
97
  // ✅ APPROVED: Passive listener — browser paints immediately
97
- element.addEventListener("scroll", handler, { passive: true });
98
+ element.addEventListener('scroll', handler, { passive: true });
98
99
 
99
100
  // ❌ INP DAMAGE: Complex computation on mousemove (fires 60+/sec)
100
- document.addEventListener("mousemove", (e) => {
101
+ document.addEventListener('mousemove', e => {
101
102
  renderComplexGradient(e.clientX, e.clientY);
102
103
  });
103
104
  ```
@@ -114,7 +115,7 @@ document.addEventListener("mousemove", (e) => {
114
115
  container.prepend(banner); // Pushes existing content down
115
116
 
116
117
  // ✅ APPROVED: Reserved space with aspect-ratio
117
- <div style={{ aspectRatio: "16/9", width: "100%" }}>
118
+ <div style={{ aspectRatio: '16/9', width: '100%' }}>
118
119
  <Image src="/photo.jpg" fill alt="Photo" />
119
120
  </div>;
120
121