tribunal-kit 6.0.0 → 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 (353) hide show
  1. package/.agent/.manifest.json +78 -0
  2. package/.agent/ARCHITECTURE.md +19 -241
  3. package/.agent/agents/accessibility-reviewer.md +23 -16
  4. package/.agent/agents/ai-code-reviewer.md +25 -21
  5. package/.agent/agents/anti-pattern-reviewer.md +12 -7
  6. package/.agent/agents/api-architect.md +1 -0
  7. package/.agent/agents/backend-specialist.md +23 -22
  8. package/.agent/agents/cloud-engineer.md +1 -0
  9. package/.agent/agents/code-archaeologist.md +1 -0
  10. package/.agent/agents/complexity-reviewer.md +10 -7
  11. package/.agent/agents/database-architect.md +3 -2
  12. package/.agent/agents/db-latency-auditor.md +6 -2
  13. package/.agent/agents/debugger.md +3 -2
  14. package/.agent/agents/dependency-reviewer.md +1 -0
  15. package/.agent/agents/devops-engineer.md +9 -8
  16. package/.agent/agents/documentation-writer.md +6 -5
  17. package/.agent/agents/explorer-agent.md +1 -0
  18. package/.agent/agents/frontend-reviewer.md +21 -17
  19. package/.agent/agents/frontend-specialist.md +23 -20
  20. package/.agent/agents/game-developer.md +1 -0
  21. package/.agent/agents/interaction-reviewer.md +10 -5
  22. package/.agent/agents/logic-reviewer.md +3 -0
  23. package/.agent/agents/minimalist-reviewer.md +6 -0
  24. package/.agent/agents/mobile-developer.md +7 -6
  25. package/.agent/agents/mobile-reviewer.md +14 -13
  26. package/.agent/agents/orchestrator.md +3 -0
  27. package/.agent/agents/penetration-tester.md +1 -0
  28. package/.agent/agents/performance-optimizer.md +6 -5
  29. package/.agent/agents/performance-reviewer.md +6 -6
  30. package/.agent/agents/pipeline-reviewer.md +144 -0
  31. package/.agent/agents/precedence-reviewer.md +1 -0
  32. package/.agent/agents/product-manager.md +1 -0
  33. package/.agent/agents/product-owner.md +1 -0
  34. package/.agent/agents/product-reviewer.md +12 -7
  35. package/.agent/agents/project-planner.md +3 -0
  36. package/.agent/agents/qa-automation-engineer.md +50 -43
  37. package/.agent/agents/resilience-reviewer.md +1 -0
  38. package/.agent/agents/schema-reviewer.md +1 -0
  39. package/.agent/agents/security-auditor.md +24 -24
  40. package/.agent/agents/seo-specialist.md +33 -23
  41. package/.agent/agents/sql-reviewer.md +5 -4
  42. package/.agent/agents/supervisor-agent.md +12 -2
  43. package/.agent/agents/swarm-worker-contracts.md +13 -13
  44. package/.agent/agents/swarm-worker-registry.md +51 -51
  45. package/.agent/agents/system-architect.md +1 -0
  46. package/.agent/agents/test-coverage-reviewer.md +25 -22
  47. package/.agent/agents/test-engineer.md +12 -11
  48. package/.agent/agents/throughput-optimizer.md +45 -40
  49. package/.agent/agents/type-safety-reviewer.md +5 -4
  50. package/.agent/agents/ui-ux-auditor.md +6 -4
  51. package/.agent/agents/ui-visual-auditor.md +3 -0
  52. package/.agent/agents/ux-reviewer.md +11 -6
  53. package/.agent/agents/visual-reviewer.md +11 -6
  54. package/.agent/agents/vitals-reviewer.md +5 -4
  55. package/.agent/history/memory/.memory.idx +3716 -1
  56. package/.agent/history/memory/MEMORY.md +246 -1
  57. package/.agent/mcp_config.json +1 -6
  58. package/.agent/routing_index.json +2034 -263
  59. package/.agent/rules/GEMINI.md +12 -10
  60. package/.agent/rules/GEMINI_PLANNER.md +19 -21
  61. package/.agent/scripts/_colors.js +52 -54
  62. package/.agent/scripts/_utils.js +52 -53
  63. package/.agent/scripts/auto_preview.js +39 -43
  64. package/.agent/scripts/bundle_analyzer.js +47 -60
  65. package/.agent/scripts/case_law_manager.js +200 -294
  66. package/.agent/scripts/checklist.js +73 -94
  67. package/.agent/scripts/cicd_validator.js +305 -0
  68. package/.agent/scripts/compile_router.py +4 -111
  69. package/.agent/scripts/context_broker.js +317 -412
  70. package/.agent/scripts/contract_engine.js +402 -0
  71. package/.agent/scripts/dependency_analyzer.js +112 -124
  72. package/.agent/scripts/graph_builder.js +75 -103
  73. package/.agent/scripts/graph_visualizer.js +10 -12
  74. package/.agent/scripts/graph_zoom.js +38 -55
  75. package/.agent/scripts/guardrail_engine.js +195 -145
  76. package/.agent/scripts/impact_classifier.js +55 -30
  77. package/.agent/scripts/inner_loop_validator.js +108 -159
  78. package/.agent/scripts/integrity_manifest.js +59 -67
  79. package/.agent/scripts/lint_runner.js +65 -75
  80. package/.agent/scripts/marathon_harness.js +131 -208
  81. package/.agent/scripts/migrate_skills_frontmatter.py +4 -63
  82. package/.agent/scripts/minify_context.js +29 -33
  83. package/.agent/scripts/minimal_change_engine.js +95 -87
  84. package/.agent/scripts/mutation_runner.js +46 -62
  85. package/.agent/scripts/pipeline_engine.js +320 -209
  86. package/.agent/scripts/prompt_compiler.js +118 -93
  87. package/.agent/scripts/schema_validator.js +73 -121
  88. package/.agent/scripts/security_scan.js +88 -117
  89. package/.agent/scripts/session_manager.js +52 -69
  90. package/.agent/scripts/signal_detector.js +24 -22
  91. package/.agent/scripts/skill_evolution.js +184 -245
  92. package/.agent/scripts/skill_integrator.js +35 -48
  93. package/.agent/scripts/socratic_gate_policy.js +15 -12
  94. package/.agent/scripts/strengthen_skills.js +29 -33
  95. package/.agent/scripts/swarm_dispatcher.js +120 -151
  96. package/.agent/scripts/test_runner.js +54 -56
  97. package/.agent/scripts/token_budget_broker.js +9 -7
  98. package/.agent/scripts/trace_engine.js +126 -0
  99. package/.agent/scripts/verify_all.js +76 -93
  100. package/.agent/scripts/visual_audit.js +16 -21
  101. package/.agent/skill_topic_map.json +237 -0
  102. package/.agent/skills/12-principles-of-animation/SKILL.md +7 -0
  103. package/.agent/skills/60fps-animation/SKILL.md +7 -0
  104. package/.agent/skills/accessible-animation/SKILL.md +5 -1
  105. package/.agent/skills/adapt/SKILL.md +7 -1
  106. package/.agent/skills/advanced-rag-pipelines/SKILL.md +1 -0
  107. package/.agent/skills/agent-organizer/SKILL.md +1 -0
  108. package/.agent/skills/agentic-patterns/SKILL.md +33 -25
  109. package/.agent/skills/agentic-workflows-2026/SKILL.md +80 -0
  110. package/.agent/skills/ai-app-hardening/SKILL.md +59 -0
  111. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +7 -6
  112. package/.agent/skills/animation-on-scroll/SKILL.md +24 -15
  113. package/.agent/skills/animation-systems/SKILL.md +11 -10
  114. package/.agent/skills/antfu-conventions/SKILL.md +7 -2
  115. package/.agent/skills/api-patterns/SKILL.md +14 -10
  116. package/.agent/skills/api-security-auditor/SKILL.md +15 -14
  117. package/.agent/skills/app-builder/SKILL.md +1 -0
  118. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +2 -2
  119. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +1 -1
  120. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +12 -12
  121. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +3 -3
  122. package/.agent/skills/apple-design/SKILL.md +8 -7
  123. package/.agent/skills/architecture/SKILL.md +3 -2
  124. package/.agent/skills/audit-and-fix/SKILL.md +8 -5
  125. package/.agent/skills/authentication-best-practices/SKILL.md +9 -8
  126. package/.agent/skills/backend-security-expert/SKILL.md +1 -0
  127. package/.agent/skills/baseline-ui/SKILL.md +8 -7
  128. package/.agent/skills/bash-linux/SKILL.md +1 -0
  129. package/.agent/skills/behavioral-modes/SKILL.md +1 -0
  130. package/.agent/skills/better-colors/SKILL.md +11 -7
  131. package/.agent/skills/better-typography/SKILL.md +30 -16
  132. package/.agent/skills/better-ui/SKILL.md +17 -10
  133. package/.agent/skills/bolder/SKILL.md +6 -0
  134. package/.agent/skills/brainstorming/SKILL.md +6 -4
  135. package/.agent/skills/browser-native-ai/SKILL.md +5 -4
  136. package/.agent/skills/build-primitive/SKILL.md +5 -0
  137. package/.agent/skills/building-native-ui/SKILL.md +1 -0
  138. package/.agent/skills/cicd-pro/SKILL.md +2 -1
  139. package/.agent/skills/clarify/SKILL.md +19 -14
  140. package/.agent/skills/clean-code/SKILL.md +16 -15
  141. package/.agent/skills/cloud-architect/SKILL.md +1 -0
  142. package/.agent/skills/cobejs/SKILL.md +7 -9
  143. package/.agent/skills/code-review-checklist/SKILL.md +1 -0
  144. package/.agent/skills/codebase-design/SKILL.md +7 -2
  145. package/.agent/skills/colorize/SKILL.md +8 -3
  146. package/.agent/skills/compact-landing/SKILL.md +8 -3
  147. package/.agent/skills/company-logos/SKILL.md +6 -0
  148. package/.agent/skills/config-validator/SKILL.md +10 -9
  149. package/.agent/skills/containerization-pro/SKILL.md +6 -5
  150. package/.agent/skills/context-engineering-pro/SKILL.md +70 -0
  151. package/.agent/skills/create-design-md/SKILL.md +13 -5
  152. package/.agent/skills/critique/SKILL.md +10 -8
  153. package/.agent/skills/csharp-developer/SKILL.md +1 -0
  154. package/.agent/skills/data-validation-schemas/SKILL.md +28 -23
  155. package/.agent/skills/database-design/SKILL.md +2 -1
  156. package/.agent/skills/delight/SKILL.md +6 -0
  157. package/.agent/skills/deployment-procedures/SKILL.md +2 -1
  158. package/.agent/skills/design-lab/SKILL.md +5 -0
  159. package/.agent/skills/devops-engineer/SKILL.md +3 -2
  160. package/.agent/skills/devops-incident-responder/SKILL.md +2 -1
  161. package/.agent/skills/diagnosing-bugs/SKILL.md +12 -2
  162. package/.agent/skills/distill/SKILL.md +7 -2
  163. package/.agent/skills/documentation-templates/SKILL.md +3 -2
  164. package/.agent/skills/domain-modeling/SKILL.md +12 -4
  165. package/.agent/skills/duckdb-analytical-sql/SKILL.md +59 -0
  166. package/.agent/skills/edge-ai-mobile/SKILL.md +50 -0
  167. package/.agent/skills/edge-computing/SKILL.md +9 -8
  168. package/.agent/skills/emil-design-eng/SKILL.md +43 -27
  169. package/.agent/skills/error-resilience/SKILL.md +34 -16
  170. package/.agent/skills/expo-router-v4/SKILL.md +81 -0
  171. package/.agent/skills/extract-design-system/SKILL.md +12 -11
  172. package/.agent/skills/fabel-protocol/SKILL.md +24 -17
  173. package/.agent/skills/fixing-accessibility/SKILL.md +23 -16
  174. package/.agent/skills/fixing-metadata/SKILL.md +24 -13
  175. package/.agent/skills/fixing-motion-performance/SKILL.md +7 -5
  176. package/.agent/skills/framer-motion-expert/SKILL.md +29 -15
  177. package/.agent/skills/frontend-design/SKILL.md +21 -13
  178. package/.agent/skills/frontend-security-expert/SKILL.md +1 -0
  179. package/.agent/skills/game-design-expert/SKILL.md +1 -0
  180. package/.agent/skills/game-engineering-expert/SKILL.md +1 -0
  181. package/.agent/skills/generative-ui-expert/SKILL.md +3 -2
  182. package/.agent/skills/geo-fundamentals/SKILL.md +2 -1
  183. package/.agent/skills/git-pro/SKILL.md +10 -9
  184. package/.agent/skills/github-operations/SKILL.md +2 -1
  185. package/.agent/skills/gpt-taste/SKILL.md +7 -0
  186. package/.agent/skills/gsap-core/SKILL.md +26 -22
  187. package/.agent/skills/gsap-frameworks/SKILL.md +6 -5
  188. package/.agent/skills/gsap-performance/SKILL.md +4 -3
  189. package/.agent/skills/gsap-plugins/SKILL.md +34 -33
  190. package/.agent/skills/gsap-react/SKILL.md +9 -8
  191. package/.agent/skills/gsap-scrolltrigger/SKILL.md +34 -33
  192. package/.agent/skills/gsap-timeline/SKILL.md +18 -15
  193. package/.agent/skills/gsap-utils/SKILL.md +25 -24
  194. package/.agent/skills/harden/SKILL.md +9 -3
  195. package/.agent/skills/harness-protocol/SKILL.md +1 -0
  196. package/.agent/skills/i18n-localization/SKILL.md +10 -9
  197. package/.agent/skills/impeccable/SKILL.md +5 -0
  198. package/.agent/skills/improve-codebase-architecture/SKILL.md +10 -5
  199. package/.agent/skills/improve-ui/SKILL.md +12 -5
  200. package/.agent/skills/intelligent-routing/SKILL.md +7 -6
  201. package/.agent/skills/knowledge-graph/SKILL.md +1 -0
  202. package/.agent/skills/landing-page/SKILL.md +1 -0
  203. package/.agent/skills/lint-and-validate/SKILL.md +9 -4
  204. package/.agent/skills/llm-engineering/SKILL.md +55 -54
  205. package/.agent/skills/local-first/SKILL.md +20 -19
  206. package/.agent/skills/local-first-architecture/SKILL.md +6 -1
  207. package/.agent/skills/lottie-animation/SKILL.md +7 -3
  208. package/.agent/skills/marquee-loop/SKILL.md +1 -0
  209. package/.agent/skills/masked-reveal/SKILL.md +17 -4
  210. package/.agent/skills/mcp-builder/SKILL.md +13 -10
  211. package/.agent/skills/micro-interaction/SKILL.md +20 -5
  212. package/.agent/skills/mobile-design/SKILL.md +26 -15
  213. package/.agent/skills/monorepo-management/SKILL.md +3 -2
  214. package/.agent/skills/morphing-icons/SKILL.md +16 -6
  215. package/.agent/skills/motion-engineering/SKILL.md +19 -15
  216. package/.agent/skills/nextjs-react-expert/SKILL.md +26 -21
  217. package/.agent/skills/nodejs-best-practices/SKILL.md +89 -76
  218. package/.agent/skills/observability/SKILL.md +45 -44
  219. package/.agent/skills/opentelemetry-observability/SKILL.md +59 -0
  220. package/.agent/skills/page-transition-animation/SKILL.md +6 -3
  221. package/.agent/skills/parallel-agents/SKILL.md +7 -2
  222. package/.agent/skills/performance-profiling/SKILL.md +24 -13
  223. package/.agent/skills/plan-writing/SKILL.md +1 -0
  224. package/.agent/skills/platform-engineer/SKILL.md +3 -2
  225. package/.agent/skills/platform-engineering-opentofu/SKILL.md +68 -0
  226. package/.agent/skills/playwright-ai-e2e/SKILL.md +60 -0
  227. package/.agent/skills/playwright-best-practices/SKILL.md +29 -28
  228. package/.agent/skills/polish/SKILL.md +13 -12
  229. package/.agent/skills/powershell-windows/SKILL.md +1 -0
  230. package/.agent/skills/pricing-page/SKILL.md +8 -3
  231. package/.agent/skills/product-aware-heuristics/SKILL.md +122 -72
  232. package/.agent/skills/progressive-blur/SKILL.md +9 -4
  233. package/.agent/skills/project-idioms/SKILL.md +1 -0
  234. package/.agent/skills/property-based-testing/SKILL.md +58 -0
  235. package/.agent/skills/python-patterns/SKILL.md +1 -0
  236. package/.agent/skills/python-pro/SKILL.md +1 -0
  237. package/.agent/skills/quieter/SKILL.md +6 -0
  238. package/.agent/skills/react-doctor/SKILL.md +6 -0
  239. package/.agent/skills/react-specialist/SKILL.md +32 -28
  240. package/.agent/skills/readme-builder/SKILL.md +1 -0
  241. package/.agent/skills/realtime-patterns/SKILL.md +34 -33
  242. package/.agent/skills/red-team-tactics/SKILL.md +1 -0
  243. package/.agent/skills/redesign-skill/SKILL.md +6 -0
  244. package/.agent/skills/review-animations/SKILL.md +5 -2
  245. package/.agent/skills/review-animations/STANDARDS.md +37 -23
  246. package/.agent/skills/rust-pro/SKILL.md +1 -0
  247. package/.agent/skills/seo-fundamentals/SKILL.md +4 -3
  248. package/.agent/skills/server-management/SKILL.md +1 -0
  249. package/.agent/skills/shadcn-ui-expert/SKILL.md +28 -22
  250. package/.agent/skills/shape/SKILL.md +9 -2
  251. package/.agent/skills/skill-creator/SKILL.md +1 -0
  252. package/.agent/skills/soft-skill/SKILL.md +6 -0
  253. package/.agent/skills/sounds-on-the-web/SKILL.md +1 -0
  254. package/.agent/skills/sql-pro/SKILL.md +1 -0
  255. package/.agent/skills/supabase-postgres-best-practices/SKILL.md +1 -0
  256. package/.agent/skills/svg-animation/SKILL.md +16 -7
  257. package/.agent/skills/swiftui-expert/SKILL.md +1 -0
  258. package/.agent/skills/swiss-design/SKILL.md +5 -0
  259. package/.agent/skills/system-design-pro/SKILL.md +1 -0
  260. package/.agent/skills/systematic-debugging/SKILL.md +1 -0
  261. package/.agent/skills/tailwind-patterns/SKILL.md +25 -11
  262. package/.agent/skills/taste-skill/SKILL.md +6 -0
  263. package/.agent/skills/tdd-workflow/SKILL.md +5 -0
  264. package/.agent/skills/test-result-analyzer/SKILL.md +1 -0
  265. package/.agent/skills/testing-patterns/SKILL.md +123 -115
  266. package/.agent/skills/thermo-nuclear-code-quality-review/SKILL.md +5 -0
  267. package/.agent/skills/thinking-protocol/SKILL.md +3 -0
  268. package/.agent/skills/to-spring-or-not-to-spring/SKILL.md +9 -8
  269. package/.agent/skills/transitions-dev/SKILL.md +19 -6
  270. package/.agent/skills/trend-researcher/SKILL.md +1 -0
  271. package/.agent/skills/typescript-advanced/SKILL.md +23 -18
  272. package/.agent/skills/typeset/SKILL.md +10 -1
  273. package/.agent/skills/ui-reasoning-engine/SKILL.md +67 -48
  274. package/.agent/skills/ui-skill-packs/SKILL.md +6 -1
  275. package/.agent/skills/ui-skills-root/SKILL.md +39 -38
  276. package/.agent/skills/ui-ux-pro-max/SKILL.md +34 -26
  277. package/.agent/skills/ui-ux-researcher/SKILL.md +1 -0
  278. package/.agent/skills/vector-search-pgvector/SKILL.md +78 -0
  279. package/.agent/skills/vue-expert/SKILL.md +22 -19
  280. package/.agent/skills/vulnerability-scanner/SKILL.md +22 -21
  281. package/.agent/skills/web-accessibility-auditor/SKILL.md +2 -1
  282. package/.agent/skills/web-design-guidelines/SKILL.md +16 -10
  283. package/.agent/skills/web-quality-audit/SKILL.md +5 -0
  284. package/.agent/skills/webapp-testing/SKILL.md +14 -13
  285. package/.agent/skills/webgpu-performance/SKILL.md +1 -0
  286. package/.agent/skills/whimsy-injector/SKILL.md +9 -5
  287. package/.agent/skills/workflow-optimizer/SKILL.md +1 -0
  288. package/.agent/skills/zero-trust-passkeys/SKILL.md +90 -0
  289. package/.agent/templates/DESIGN.md +119 -110
  290. package/.agent/templates/design-tokens.json +9 -6
  291. package/.agent/workflows/acf.md +1 -0
  292. package/.agent/workflows/api-tester.md +1 -0
  293. package/.agent/workflows/audit.md +1 -0
  294. package/.agent/workflows/brainstorm.md +1 -0
  295. package/.agent/workflows/changelog.md +1 -0
  296. package/.agent/workflows/contract.md +60 -0
  297. package/.agent/workflows/create.md +1 -0
  298. package/.agent/workflows/debug.md +1 -0
  299. package/.agent/workflows/deploy.md +1 -0
  300. package/.agent/workflows/enhance.md +1 -0
  301. package/.agent/workflows/fix-ci.md +89 -0
  302. package/.agent/workflows/fix.md +1 -0
  303. package/.agent/workflows/generate.md +1 -0
  304. package/.agent/workflows/marathon.md +1 -0
  305. package/.agent/workflows/migrate.md +1 -0
  306. package/.agent/workflows/minimal.md +9 -7
  307. package/.agent/workflows/orchestrate.md +1 -0
  308. package/.agent/workflows/performance-benchmarker.md +1 -0
  309. package/.agent/workflows/pipeline.md +26 -21
  310. package/.agent/workflows/plan.md +1 -0
  311. package/.agent/workflows/preview.md +1 -0
  312. package/.agent/workflows/refactor.md +3 -2
  313. package/.agent/workflows/review-ai.md +4 -3
  314. package/.agent/workflows/review.md +1 -0
  315. package/.agent/workflows/session.md +1 -0
  316. package/.agent/workflows/status.md +1 -0
  317. package/.agent/workflows/strengthen-skills.md +1 -0
  318. package/.agent/workflows/super-prompt.md +1 -0
  319. package/.agent/workflows/swarm.md +15 -3
  320. package/.agent/workflows/test.md +8 -7
  321. package/.agent/workflows/tribunal-backend.md +3 -2
  322. package/.agent/workflows/tribunal-cicd.md +104 -0
  323. package/.agent/workflows/tribunal-database.md +1 -0
  324. package/.agent/workflows/tribunal-frontend.md +8 -6
  325. package/.agent/workflows/tribunal-full.md +15 -14
  326. package/.agent/workflows/tribunal-mobile.md +6 -5
  327. package/.agent/workflows/tribunal-performance.md +1 -0
  328. package/.agent/workflows/tribunal-speed.md +1 -0
  329. package/.agent/workflows/tribunal-ui.md +29 -21
  330. package/.agent/workflows/ui-ux-pro-max.md +19 -15
  331. package/CONTRIBUTING.md +3 -3
  332. package/README.md +160 -88
  333. package/SECURITY.md +11 -11
  334. package/bin/mcp-server.js +512 -233
  335. package/bin/tribunal-kit.js +29 -30
  336. package/bin/wrapper.js +45 -48
  337. package/dist/cli.js +26 -0
  338. package/dist/commands/case.js +2 -0
  339. package/dist/commands/contract.js +440 -0
  340. package/dist/commands/memory.js +3 -2
  341. package/dist/commands/native.js +36 -0
  342. package/dist/commands/status.js +6 -0
  343. package/dist/esm/index.mjs +32 -0
  344. package/dist/index.d.ts +58 -3
  345. package/package.json +20 -16
  346. package/scripts/benchmark.js +62 -86
  347. package/scripts/changelog.js +67 -73
  348. package/scripts/fix-vbc.js +13 -15
  349. package/scripts/fix-vbc.ps1 +2 -118
  350. package/scripts/stress_benchmark.js +358 -0
  351. package/scripts/sync-version.js +71 -41
  352. package/scripts/validate-payload.js +23 -30
  353. package/scripts/visual_audit.js +23 -13
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before engineering game state loops or physics engines, you MUST inspect:
23
+
23
24
  1. Clamped DeltaTime Rule (Section 25) → Clamp `deltaTime` (max 0.05s) to prevent physics explosions on frame rate drops
24
25
  2. Garbage Collection & Object Pooling (Section 50) → Pre-allocate and pool game objects; ban `Instantiate()` or dynamic memory allocations in frame update loops
25
26
  3. FixedUpdate vs Update Separation (Section 43) → Put all physics logic in `FixedUpdate()`; use `Update()` strictly for visual interpolation and input collection
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before implementing Generative UI streaming pipelines, you MUST inspect:
23
+
23
24
  1. Tool Parameter Schemas (Section 87) → Validate all LLM tool parameters with Zod schemas
24
25
  2. RSC Server Action Boundaries (Section 33) → Annotate server actions with `"use server"` and yield Server Components directly from `streamUI`
25
26
  3. Intermediate Skeleton Yielding (Section 80) → Always `yield <SkeletonLoader />` before awaiting async APIs or external LLM tool calls
@@ -74,11 +75,11 @@ Use this when you need strict JSON streams for charts, tables, or complex states
74
75
 
75
76
  ```typescript
76
77
  const result = await streamObject({
77
- model: openai("gpt-4-turbo"),
78
+ model: openai('gpt-4-turbo'),
78
79
  schema: z.object({
79
80
  points: z.array(z.object({ x: z.number(), y: z.number() })),
80
81
  }),
81
- prompt: "Generate a sales forecast chart data",
82
+ prompt: 'Generate a sales forecast chart data',
82
83
  });
83
84
  // Client consumes via useObject
84
85
  ```
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before optimizing content for AI engine ingestion, you MUST inspect:
23
+
23
24
  1. High Information Density Rule (Section 25) → Maximize factual density; eliminate marketing boilerplate so LLM context windows aren't truncated
24
25
  2. Explicit Claim-to-Source Mapping (Section 51) → Map stats and claims directly to explicit `<cite>` sources/links; ban vague unanchored assertions
25
26
  3. Text-Based Architecture Diagrams (Section 94) → Represent architecture via text/Mermaid.js code blocks; ban image-only architecture diagrams
@@ -49,7 +50,7 @@ Modern sites should natively serve structured markdown if they detect an AI User
49
50
  ```typescript
50
51
  // Next.js Edge Middleware for GEO
51
52
  export function middleware(req: NextRequest) {
52
- const ua = req.headers.get("user-agent") || "";
53
+ const ua = req.headers.get('user-agent') || '';
53
54
  const isBot = /ChatGPT|Perplexity|ClaudeBot/i.test(ua);
54
55
 
55
56
  if (isBot) {
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before running complex Git operations or writing release workflows, you MUST inspect:
23
+
23
24
  1. Safe Force Push Rule (Section 18) → Use `--force-with-lease` exclusively; ban raw `git push --force` on shared/remote branches
24
25
  2. Reflog Recovery Strategy (Section 30) → Inspect `git reflog` to recover lost commits or bad resets before discarding uncommitted state
25
26
  3. OIDC Authentication Protocol (Section 208) → Configure OIDC AWS auth (`id-token: write`) in GitHub Actions workflows; ban static AWS access keys
@@ -166,18 +167,18 @@ git checkout main
166
167
  ```javascript
167
168
  // release.config.js
168
169
  export default {
169
- branches: ["main", { name: "beta", prerelease: true }],
170
+ branches: ['main', { name: 'beta', prerelease: true }],
170
171
  plugins: [
171
- "@semantic-release/commit-analyzer", // reads conventional commits
172
- "@semantic-release/release-notes-generator",
173
- "@semantic-release/changelog", // updates CHANGELOG.md
174
- "@semantic-release/npm", // bumps package.json version
175
- "@semantic-release/github", // creates GitHub Release
172
+ '@semantic-release/commit-analyzer', // reads conventional commits
173
+ '@semantic-release/release-notes-generator',
174
+ '@semantic-release/changelog', // updates CHANGELOG.md
175
+ '@semantic-release/npm', // bumps package.json version
176
+ '@semantic-release/github', // creates GitHub Release
176
177
  [
177
- "@semantic-release/git",
178
+ '@semantic-release/git',
178
179
  {
179
- assets: ["CHANGELOG.md", "package.json"],
180
- message: "chore(release): ${nextRelease.version} [skip ci]",
180
+ assets: ['CHANGELOG.md', 'package.json'],
181
+ message: 'chore(release): ${nextRelease.version} [skip ci]',
181
182
  },
182
183
  ],
183
184
  ],
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before running Git commands or writing GitHub workflows, you MUST inspect:
23
+
23
24
  1. Local-Only Interactive Rebase (Section 172) → Perform interactive rebases (`git rebase -i`) ONLY on local unpushed commits; ban rebasing public/shared history
24
25
  2. Conventional Commit Standards (Section 55) → Format commit messages using Conventional Commits (`type(scope): description`) for automated changelogs
25
26
  3. Squash Merge Default (Section 146) → Enforce squash merge strategy for feature branches merging into main to keep history linear and clean
@@ -295,7 +296,7 @@ npx commitlint --edit $1
295
296
  ```javascript
296
297
  // commitlint.config.js
297
298
  export default {
298
- extends: ["@commitlint/config-conventional"],
299
+ extends: ['@commitlint/config-conventional'],
299
300
  };
300
301
  ```
301
302
 
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before generating UI layouts or visual code, you MUST inspect:
23
+
23
24
  1. Structural Layout Variance (Section 24) → Vary structural layout across sections; ban uniform 3-card bento grids
24
25
  2. OKLCH Perceptual Palette (Section 30) → Declare all color tokens using OKLCH color space for perceptual uniformity
25
26
  3. Zero Truncation Rule (Section 39) → Strictly ban `// TODO: add remaining items` placeholder comments; generate complete production-ready code
@@ -31,21 +32,27 @@ Inject high-agency visual judgment and layout variance into AI-generated interfa
31
32
  ## 4 High-Agency Visual Constraints
32
33
 
33
34
  ### 1. Structural Layout Variance
35
+
34
36
  Never use standard symmetrical layouts by default. Vary structural axes across sections:
37
+
35
38
  - **Hero**: Asymmetric 60/40 split or left-aligned stacked text with offset app preview frame.
36
39
  - **Features**: Alternating 2-column image/text rhythm or horizontal scroll cards.
37
40
  - **CTA**: Single full-width card with progressive backdrop blur overlay.
38
41
 
39
42
  ### 2. OKLCH Perceptual Palette Generation
43
+
40
44
  Always generate color schemes in OKLCH:
45
+
41
46
  - Background: `oklch(0.98 0.005 240)`
42
47
  - Foreground: `oklch(0.18 0.01 240)`
43
48
  - Accent: `oklch(0.62 0.22 250)`
44
49
 
45
50
  ### 3. GSAP / Motion Engineering Integration
51
+
46
52
  When animation is requested, use explicit GSAP timelines with custom easing curves (`power3.out`, `expo.out`), avoiding default linear transitions.
47
53
 
48
54
  ### 4. Zero Output Truncation
55
+
49
56
  Never output placeholder `// TODO: add remaining items` comments in UI code. Generate full, production-ready JSX/CSS markup.
50
57
 
51
58
  ---
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before creating or editing GSAP animations, you MUST inspect:
23
+
23
24
  1. Transform Aliases vs Layout Properties (Section 74) → Animate transform aliases (`x`, `y`, `scale`, `rotation`); ban animating layout-heavy properties (`width`, `height`, `top`, `left`)
24
25
  2. GSAP 3 Object Syntax (Section 280) → Use GSAP 3 object parameter syntax (`gsap.to(target, { duration: 1, x: 100 })`); ban legacy GSAP 2 signature (`gsap.to(target, 1, { x: 100 })`)
25
26
  3. Accessible Responsive Motion with matchMedia (Section 213) → Wrap responsive or reduced-motion animations in `gsap.matchMedia()`; set `duration: 0` when `prefers-reduced-motion` matches
@@ -109,9 +110,9 @@ Relative values work: `x: "+=20"`, `rotation: "-=30"`. Default units: x/y in px,
109
110
  - **clearProps** — Comma-separated list of property names (or `"all"` / `true`) to **remove** from the element’s inline style when the tween completes. Use when a class or other CSS should take over after the animation. Clearing any transform-related property (e.g. `x`, `scale`, `rotation`) clears the **entire** transform.
110
111
 
111
112
  ```javascript
112
- gsap.to(".box", { x: 100, rotation: "360_cw", duration: 1 });
113
- gsap.to(".fade", { autoAlpha: 0, duration: 0.5, clearProps: "visibility" });
114
- gsap.to(svgEl, { rotation: 90, svgOrigin: "100 100" });
113
+ gsap.to('.box', { x: 100, rotation: '360_cw', duration: 1 });
114
+ gsap.to('.fade', { autoAlpha: 0, duration: 0.5, clearProps: 'visibility' });
115
+ gsap.to(svgEl, { rotation: 90, svgOrigin: '100 100' });
115
116
  ```
116
117
 
117
118
  ## Targets
@@ -123,7 +124,7 @@ gsap.to(svgEl, { rotation: 90, svgOrigin: "100 100" });
123
124
  Offset the animation of each item by 0.1 second like this:
124
125
 
125
126
  ```javascript
126
- gsap.to(".item", {
127
+ gsap.to('.item', {
127
128
  y: -20,
128
129
  stagger: 0.1,
129
130
  });
@@ -140,11 +141,11 @@ https://gsap.com/resources/getting-started/Staggers
140
141
  Use string eases unless a custom curve is needed:
141
142
 
142
143
  ```javascript
143
- ease: "power1.out"; // default feel
144
- ease: "power3.inOut";
145
- ease: "back.out(1.7)"; // overshoot
146
- ease: "elastic.out(1, 0.3)";
147
- ease: "none"; // linear
144
+ ease: 'power1.out'; // default feel
145
+ ease: 'power3.inOut';
146
+ ease: 'back.out(1.7)'; // overshoot
147
+ ease: 'elastic.out(1, 0.3)';
148
+ ease: 'none'; // linear
148
149
  ```
149
150
 
150
151
  Built-in eases: base (same as `.out`), `.in`, `.out`, `.inOut` where "power" refers to the strength of the curve (1 is more gradual, 4 is steepest):
@@ -169,17 +170,20 @@ base (out) .in .out .inOut
169
170
  Simple cubic-bezier values (as used in CSS `cubic-bezier()`):
170
171
 
171
172
  ```javascript
172
- const myEase = CustomEase.create("my-ease", ".17,.67,.83,.67");
173
+ const myEase = CustomEase.create('my-ease', '.17,.67,.83,.67');
173
174
 
174
- gsap.to(".item", { x: 100, ease: myEase, duration: 1 });
175
+ gsap.to('.item', { x: 100, ease: myEase, duration: 1 });
175
176
  ```
176
177
 
177
178
  Complex curve with any number of control points, described as normalized SVG path data:
178
179
 
179
180
  ```javascript
180
- const myEase = CustomEase.create("hop", "M0,0 C0,0 0.056,0.442 0.175,0.442 0.294,0.442 0.332,0 0.332,0 0.332,0 0.414,1 0.671,1 0.991,1 1,0 1,0");
181
+ const myEase = CustomEase.create(
182
+ 'hop',
183
+ 'M0,0 C0,0 0.056,0.442 0.175,0.442 0.294,0.442 0.332,0 0.332,0 0.332,0 0.414,1 0.671,1 0.991,1 1,0 1,0',
184
+ );
181
185
 
182
- gsap.to(".item", { x: 100, ease: myEase, duration: 1 });
186
+ gsap.to('.item', { x: 100, ease: myEase, duration: 1 });
183
187
  ```
184
188
 
185
189
  ## Returning and Controlling Tweens
@@ -187,7 +191,7 @@ gsap.to(".item", { x: 100, ease: myEase, duration: 1 });
187
191
  All tween methods return a **Tween** instance. Store the return value when controlling playback is needed:
188
192
 
189
193
  ```javascript
190
- const tween = gsap.to(".box", { x: 100, duration: 1, repeat: 1, yoyo: true });
194
+ const tween = gsap.to('.box', { x: 100, duration: 1, repeat: 1, yoyo: true });
191
195
  tween.pause();
192
196
  tween.play();
193
197
  tween.reverse();
@@ -202,7 +206,7 @@ tween.totalTime(1.5);
202
206
  Use a function for a `vars` value and it will get called **once for each target** the first time the tween renders, and whatever is returned by that function will be used as the animation value.
203
207
 
204
208
  ```javascript
205
- gsap.to(".item", {
209
+ gsap.to('.item', {
206
210
  x: (i, target, targetsArray) => i * 50, // first item animates to 0, the second to 50, the third to 100, etc.
207
211
  stagger: 0.1,
208
212
  });
@@ -213,7 +217,7 @@ gsap.to(".item", {
213
217
  Use a `+=`, `-=`, `*=`, or `/=` prefix to indicate a **relative** value. For example, the following will animate x to 20 pixels less than whatever it is when the tween renders for the first time.
214
218
 
215
219
  ```javascript
216
- gsap.to(".class", { x: "-=20" });
220
+ gsap.to('.class', { x: '-=20' });
217
221
  ```
218
222
 
219
223
  `x: "+=20"` would add 20 to the current value. `"*=2"` would multiply by 2, and `"/=2"` would divide by 2.
@@ -223,7 +227,7 @@ gsap.to(".class", { x: "-=20" });
223
227
  Set project-wide Tween defaults with **gsap.defaults()**:
224
228
 
225
229
  ```javascript
226
- gsap.defaults({ duration: 0.6, ease: "power2.out" });
230
+ gsap.defaults({ duration: 0.6, ease: 'power2.out' });
227
231
  ```
228
232
 
229
233
  ## Accessibility and responsive (gsap.matchMedia())
@@ -240,13 +244,13 @@ gsap.defaults({ duration: 0.6, ease: "power2.out" });
240
244
  ```javascript
241
245
  mm.add(
242
246
  {
243
- isDesktop: "(min-width: 800px)",
244
- isMobile: "(max-width: 799px)",
245
- reduceMotion: "(prefers-reduced-motion: reduce)",
247
+ isDesktop: '(min-width: 800px)',
248
+ isMobile: '(max-width: 799px)',
249
+ reduceMotion: '(prefers-reduced-motion: reduce)',
246
250
  },
247
- (context) => {
251
+ context => {
248
252
  const { isDesktop, reduceMotion } = context.conditions;
249
- gsap.to(".box", {
253
+ gsap.to('.box', {
250
254
  rotation: isDesktop ? 360 : 180,
251
255
  duration: reduceMotion ? 0 : 2, // skip animation when user prefers reduced motion
252
256
  });
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before using GSAP in Vue, Svelte, or non-React frameworks, you MUST inspect:
23
+
23
24
  1. Lifecycle Initialization Rule (Section 175) → Create GSAP animations strictly inside `onMounted` / `onMount`; ban creating tweens in un-mounted setup phases
24
25
  2. Scoped Selector Context (Section 176) → Scope selectors via `gsap.context(callback, containerRef)`; ban un-scoped global class selectors (`.item`)
25
26
  3. Mandatory Context Reversion on Unmount (Section 177) → Call `ctx.revert()` inside `onUnmounted` / returned cleanup function to prevent memory leaks
@@ -43,9 +44,9 @@ Apply when writing or reviewing GSAP code in Vue (or Nuxt), Svelte (or SvelteKit
43
44
  Use **onMounted** to run GSAP after the component is in the DOM. Use **onUnmounted** to clean up.
44
45
 
45
46
  ```javascript
46
- import { onMounted, onUnmounted, ref } from "vue";
47
- import { gsap } from "gsap";
48
- import { ScrollTrigger } from "gsap/ScrollTrigger";
47
+ import { onMounted, onUnmounted, ref } from 'vue';
48
+ import { gsap } from 'gsap';
49
+ import { ScrollTrigger } from 'gsap/ScrollTrigger';
49
50
  gsap.registerPlugin(ScrollTrigger); // once per app, e.g. in main.js
50
51
 
51
52
  export default {
@@ -56,8 +57,8 @@ export default {
56
57
  onMounted(() => {
57
58
  if (!container.value) return;
58
59
  ctx = gsap.context(() => {
59
- gsap.to(".box", { x: 100, duration: 0.6 });
60
- gsap.from(".item", { autoAlpha: 0, y: 20, stagger: 0.1 });
60
+ gsap.to('.box', { x: 100, duration: 0.6 });
61
+ gsap.from('.item', { autoAlpha: 0, y: 20, stagger: 0.1 });
61
62
  }, container.value);
62
63
  });
63
64
 
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before optimizing GSAP animations for performance, you MUST inspect:
23
+
23
24
  1. Target properties (Section 18) → Animate Composite properties (`x`, `y`, `scale`, `rotation`, `opacity`) instead of layout properties (`left`, `top`, `width`, `height`)
24
25
  2. Frequent Updates (Section 45) → Use `gsap.quickTo()` for mouse followers or rapid pointer movement loops
25
26
  3. Batching & Staggering (Section 39) → Use GSAP `stagger` instead of creating multiple individual delayed tweens
@@ -62,10 +63,10 @@ GSAP batches updates internally. When mixing GSAP with direct DOM reads/writes o
62
63
  Prefer **gsap.quickTo()** for properties that are updated often (e.g. mouse-follower x/y). It reuses a single tween instead of creating new tweens on each update.
63
64
 
64
65
  ```javascript
65
- let xTo = gsap.quickTo("#id", "x", { duration: 0.4, ease: "power3" }),
66
- yTo = gsap.quickTo("#id", "y", { duration: 0.4, ease: "power3" });
66
+ let xTo = gsap.quickTo('#id', 'x', { duration: 0.4, ease: 'power3' }),
67
+ yTo = gsap.quickTo('#id', 'y', { duration: 0.4, ease: 'power3' });
67
68
 
68
- document.querySelector("#container").addEventListener("mousemove", (e) => {
69
+ document.querySelector('#container').addEventListener('mousemove', e => {
69
70
  xTo(e.pageX);
70
71
  yTo(e.pageY);
71
72
  });
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before invoking GSAP plugins, you MUST inspect:
23
+
23
24
  1. `package.json` → Verify plugin installation and check for Club GSAP licensing requirements (`MorphSVG`, `SplitText`, `ScrollSmoother`)
24
25
  2. Plugin Registration (Section 18) → Always register plugins explicitly via `gsap.registerPlugin(...)` at module root
25
26
  3. Revert & Cleanup (Section 418) → Call `.revert()` on SplitText and Flip instances during component unmount
@@ -35,10 +36,10 @@ Apply when using or reviewing code that uses GSAP plugins: registering plugins,
35
36
  Register each plugin once so GSAP (and bundlers) know to include it. Use **gsap.registerPlugin()** with every plugin used in the project:
36
37
 
37
38
  ```javascript
38
- import gsap from "gsap";
39
- import { ScrollToPlugin } from "gsap/ScrollToPlugin";
40
- import { Flip } from "gsap/Flip";
41
- import { Draggable } from "gsap/Draggable";
39
+ import gsap from 'gsap';
40
+ import { ScrollToPlugin } from 'gsap/ScrollToPlugin';
41
+ import { Flip } from 'gsap/Flip';
42
+ import { Draggable } from 'gsap/Draggable';
42
43
 
43
44
  gsap.registerPlugin(ScrollToPlugin, Flip, Draggable);
44
45
  ```
@@ -56,8 +57,8 @@ Animates scroll position (window or a scrollable element). Use for “scroll to
56
57
  gsap.registerPlugin(ScrollToPlugin);
57
58
 
58
59
  gsap.to(window, { duration: 1, scrollTo: { y: 500 } });
59
- gsap.to(window, { duration: 1, scrollTo: { y: "#section", offsetY: 50 } });
60
- gsap.to(scrollContainer, { duration: 1, scrollTo: { x: "max" } });
60
+ gsap.to(window, { duration: 1, scrollTo: { y: '#section', offsetY: 50 } });
61
+ gsap.to(scrollContainer, { duration: 1, scrollTo: { x: 'max' } });
61
62
  ```
62
63
 
63
64
  **ScrollToPlugin — key config (scrollTo object):**
@@ -92,9 +93,9 @@ Capture state with `Flip.getState()`, then apply changes (e.g. layout or class c
92
93
  ```javascript
93
94
  gsap.registerPlugin(Flip);
94
95
 
95
- const state = Flip.getState(".item");
96
+ const state = Flip.getState('.item');
96
97
  // change DOM (reorder, add/remove, change classes)
97
- Flip.from(state, { duration: 0.5, ease: "power2.inOut" });
98
+ Flip.from(state, { duration: 0.5, ease: 'power2.inOut' });
98
99
  ```
99
100
 
100
101
  **Flip — key config (Flip.from vars):**
@@ -118,8 +119,8 @@ Makes elements draggable, spinnable, or throwable with mouse/touch. Use for slid
118
119
  ```javascript
119
120
  gsap.registerPlugin(Draggable, InertiaPlugin);
120
121
 
121
- Draggable.create(".box", { type: "x,y", bounds: "#container", inertia: true });
122
- Draggable.create(".knob", { type: "rotation" });
122
+ Draggable.create('.box', { type: 'x,y', bounds: '#container', inertia: true });
123
+ Draggable.create('.knob', { type: 'rotation' });
123
124
  ```
124
125
 
125
126
  **Draggable — key config options:**
@@ -140,19 +141,19 @@ Works with Draggable for momentum after release, or track the inertia/velocity o
140
141
 
141
142
  ```javascript
142
143
  gsap.registerPlugin(Draggable, InertiaPlugin);
143
- Draggable.create(".box", { type: "x,y", inertia: true });
144
+ Draggable.create('.box', { type: 'x,y', inertia: true });
144
145
  ```
145
146
 
146
147
  Or track velocity of a property:
147
148
 
148
149
  ```javascript
149
- InertiaPlugin.track(".box", "x");
150
+ InertiaPlugin.track('.box', 'x');
150
151
  ```
151
152
 
152
153
  Then use `"auto"` to continue the current velocity and glide to a stop:
153
154
 
154
155
  ```javascript
155
- gsap.to(obj, { inertia: { x: "auto" } });
156
+ gsap.to(obj, { inertia: { x: 'auto' } });
156
157
  ```
157
158
 
158
159
  ### Observer
@@ -163,7 +164,7 @@ Normalizes pointer and scroll input across devices. Use for swipe, scroll direct
163
164
  gsap.registerPlugin(Observer);
164
165
 
165
166
  Observer.create({
166
- target: "#area",
167
+ target: '#area',
167
168
  onUp: () => {},
168
169
  onDown: () => {},
169
170
  onLeft: () => {},
@@ -190,7 +191,7 @@ Splits an element’s text into characters, words, and/or lines (each in its own
190
191
  ```javascript
191
192
  gsap.registerPlugin(SplitText);
192
193
 
193
- const split = SplitText.create(".heading", { type: "words, chars" });
194
+ const split = SplitText.create('.heading', { type: 'words, chars' });
194
195
  gsap.from(split.chars, { opacity: 0, y: 20, stagger: 0.03, duration: 0.4 });
195
196
  // later: split.revert() or let gsap.context() cleanup revert
196
197
  ```
@@ -198,8 +199,8 @@ gsap.from(split.chars, { opacity: 0, y: 20, stagger: 0.03, duration: 0.4 });
198
199
  With **onSplit()** (v3.13.0+), animations run on each split and on re-split when **autoSplit** is used; returning a tween/timeline from **onSplit()** lets SplitText clean up and sync progress on re-split:
199
200
 
200
201
  ```javascript
201
- SplitText.create(".split", {
202
- type: "lines",
202
+ SplitText.create('.split', {
203
+ type: 'lines',
203
204
  autoSplit: true,
204
205
  onSplit(self) {
205
206
  return gsap.from(self.lines, { y: 100, opacity: 0, stagger: 0.05, duration: 0.5 });
@@ -238,9 +239,9 @@ Animates text with a scramble/glitch effect. Use when revealing or transitioning
238
239
  ```javascript
239
240
  gsap.registerPlugin(ScrambleTextPlugin);
240
241
 
241
- gsap.to(".text", {
242
+ gsap.to('.text', {
242
243
  duration: 1,
243
- scrambleText: { text: "New message", chars: "01", revealDelay: 0.5 },
244
+ scrambleText: { text: 'New message', chars: '01', revealDelay: 0.5 },
244
245
  });
245
246
  ```
246
247
 
@@ -258,11 +259,11 @@ Reveals or hides the stroke of SVG elements by animating `stroke-dashoffset` / `
258
259
  gsap.registerPlugin(DrawSVGPlugin);
259
260
 
260
261
  // draw from nothing to full stroke
261
- gsap.from("#path", { duration: 1, drawSVG: 0 });
262
+ gsap.from('#path', { duration: 1, drawSVG: 0 });
262
263
  // or explicit segment: from 0–0 to 0–100%
263
- gsap.fromTo("#path", { drawSVG: "0% 0%" }, { drawSVG: "0% 100%", duration: 1 });
264
+ gsap.fromTo('#path', { drawSVG: '0% 0%' }, { drawSVG: '0% 100%', duration: 1 });
264
265
  // stroke only in the middle (gaps at ends)
265
- gsap.to("#path", { duration: 1, drawSVG: "20% 80%" });
266
+ gsap.to('#path', { duration: 1, drawSVG: '20% 80%' });
266
267
  ```
267
268
 
268
269
  **Caveats:** Only affects stroke (not fill). Prefer single-segment `<path>` elements; multi-segment paths can render oddly in some browsers. Contents of `<use>` cannot be visually changed. **DrawSVGPlugin.getLength(element)** and **DrawSVGPlugin.getPosition(element)** return stroke length and current position.
@@ -279,13 +280,13 @@ Morphs one SVG shape into another by animating the `d` attribute (path data). St
279
280
  gsap.registerPlugin(MorphSVGPlugin);
280
281
 
281
282
  // convert primitives to path first if needed:
282
- MorphSVGPlugin.convertToPath("circle, rect, ellipse, line");
283
+ MorphSVGPlugin.convertToPath('circle, rect, ellipse, line');
283
284
 
284
- gsap.to("#diamond", { duration: 1, morphSVG: "#lightning", ease: "power2.inOut" });
285
+ gsap.to('#diamond', { duration: 1, morphSVG: '#lightning', ease: 'power2.inOut' });
285
286
  // object form:
286
- gsap.to("#diamond", {
287
+ gsap.to('#diamond', {
287
288
  duration: 1,
288
- morphSVG: { shape: "#lightning", type: "rotational", shapeIndex: 2 },
289
+ morphSVG: { shape: '#lightning', type: 'rotational', shapeIndex: 2 },
289
290
  });
290
291
  ```
291
292
 
@@ -318,9 +319,9 @@ Animates an element along an SVG path. Use when moving an object along a path (e
318
319
  ```javascript
319
320
  gsap.registerPlugin(MotionPathPlugin);
320
321
 
321
- gsap.to(".dot", {
322
+ gsap.to('.dot', {
322
323
  duration: 2,
323
- motionPath: { path: "#path", align: "#path", alignOrigin: [0.5, 0.5] },
324
+ motionPath: { path: '#path', align: '#path', alignOrigin: [0.5, 0.5] },
324
325
  });
325
326
  ```
326
327
 
@@ -341,7 +342,7 @@ Visual editor for MotionPath (alignment, offset). Use during development to tune
341
342
  ```javascript
342
343
  gsap.registerPlugin(MotionPathPlugin, MotionPathHelperPlugin);
343
344
 
344
- const helper = MotionPathHelper.create(".dot", "#path", { end: 0.5 });
345
+ const helper = MotionPathHelper.create('.dot', '#path', { end: 0.5 });
345
346
  // adjust in UI, then use helper.path or helper.getProgress() in your animation
346
347
  ```
347
348
 
@@ -353,8 +354,8 @@ Custom easing curves (cubic-bezier or SVG path). Use when a built-in ease is not
353
354
 
354
355
  ```javascript
355
356
  gsap.registerPlugin(CustomEase);
356
- const ease = CustomEase.create("name", ".17,.67,.83,.67");
357
- gsap.to(".el", { x: 100, ease: ease, duration: 1 });
357
+ const ease = CustomEase.create('name', '.17,.67,.83,.67');
358
+ gsap.to('.el', { x: 100, ease: ease, duration: 1 });
358
359
  ```
359
360
 
360
361
  ### EasePack
@@ -378,7 +379,7 @@ Bounce-style easing with configurable strength.
378
379
  ```javascript
379
380
  gsap.registerPlugin(Physics2DPlugin);
380
381
 
381
- gsap.to(".ball", {
382
+ gsap.to('.ball', {
382
383
  duration: 2,
383
384
  physics2D: {
384
385
  velocity: 250,
@@ -395,7 +396,7 @@ Applies physics to property values. Use for physics-driven property animation.
395
396
  ```javascript
396
397
  gsap.registerPlugin(PhysicsPropsPlugin);
397
398
 
398
- gsap.to(".obj", {
399
+ gsap.to('.obj', {
399
400
  duration: 2,
400
401
  physicsProps: {
401
402
  x: { velocity: 100, end: 300 },
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before writing GSAP animation logic in React, you MUST inspect:
23
+
23
24
  1. `package.json` → Verify `@gsap/react` and `gsap` dependencies
24
25
  2. `useGSAP()` Hook setup (Section 27) → Pass `{ scope: containerRef }` so selectors target DOM nodes within component scope
25
26
  3. Cleanup & Context-Safe Callbacks (Section 89) → Use `contextSafe` for event handlers attached after component mount to prevent memory leaks
@@ -44,7 +45,7 @@ npm install @gsap/react
44
45
  When **@gsap/react** is available, use the **useGSAP()** hook instead of `useEffect()` for GSAP setup. It handles cleanup automatically and provides a scope and **contextSafe** for callbacks.
45
46
 
46
47
  ```javascript
47
- import { useGSAP } from "@gsap/react";
48
+ import { useGSAP } from '@gsap/react';
48
49
 
49
50
  gsap.registerPlugin(useGSAP); // register before running useGSAP or any GSAP code
50
51
 
@@ -52,8 +53,8 @@ const containerRef = useRef(null);
52
53
 
53
54
  useGSAP(
54
55
  () => {
55
- gsap.to(".box", { x: 100 });
56
- gsap.from(".item", { opacity: 0, stagger: 0.1 });
56
+ gsap.to('.box', { x: 100 });
57
+ gsap.from('.item', { opacity: 0, stagger: 0.1 });
57
58
  },
58
59
  { scope: containerRef },
59
60
  );
@@ -91,8 +92,8 @@ It's okay to use **gsap.context()** inside a regular **useEffect()** when @gsap/
91
92
  ```javascript
92
93
  useEffect(() => {
93
94
  const ctx = gsap.context(() => {
94
- gsap.to(".box", { x: 100 });
95
- gsap.from(".item", { opacity: 0, stagger: 0.1 });
95
+ gsap.to('.box', { x: 100 });
96
+ gsap.from('.item', { opacity: 0, stagger: 0.1 });
96
97
  }, containerRef);
97
98
  return () => ctx.revert();
98
99
  }, []);
@@ -116,7 +117,7 @@ useGSAP(
116
117
  gsap.to(goodRef.current, { x: 100 });
117
118
 
118
119
  // ❌ DANGER! This animation is created in an event handler that executes AFTER useGSAP() executes. It's not added to the context so it won't get cleaned up (reverted). The event listener isn't removed in cleanup function below either, so it persists between component renders (bad).
119
- badRef.current.addEventListener("click", () => {
120
+ badRef.current.addEventListener('click', () => {
120
121
  gsap.to(badRef.current, { y: 100 });
121
122
  });
122
123
 
@@ -125,12 +126,12 @@ useGSAP(
125
126
  gsap.to(goodRef.current, { rotation: 180 });
126
127
  });
127
128
 
128
- goodRef.current.addEventListener("click", onClickGood);
129
+ goodRef.current.addEventListener('click', onClickGood);
129
130
 
130
131
  // 👍 we remove the event listener in the cleanup function below.
131
132
  return () => {
132
133
  // <-- cleanup
133
- goodRef.current.removeEventListener("click", onClickGood);
134
+ goodRef.current.removeEventListener('click', onClickGood);
134
135
  };
135
136
  },
136
137
  { scope: container },