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
@@ -17,6 +17,7 @@ last-updated: 2026-07-29
17
17
  ## Mandatory Pre-Flight Context Inspection
18
18
 
19
19
  Before generating metadata, sitemaps, or structured data, you MUST inspect:
20
+
20
21
  1. `app/layout.tsx` / `next.config.js` → Read base URL, default metadata options, and OpenGraph defaults
21
22
  2. Page templates (`app/**/page.tsx`) → Verify heading hierarchy (single `<h1>` per page) and Schema.org JSON-LD scripts
22
23
  3. AI bot middleware / GEO paths → Audit `sitemap.ts`, `robots.ts`, and crawler detection rules
@@ -25,20 +26,24 @@ Before generating metadata, sitemaps, or structured data, you MUST inspect:
25
26
 
26
27
  ```typescript
27
28
  // app/products/[slug]/page.tsx
28
- import { Metadata } from "next";
29
+ import { Metadata } from 'next';
29
30
 
30
31
  // Static metadata
31
32
  export const metadata: Metadata = {
32
- title: "Product Name | Brand",
33
- description: "Compelling 155-character description that matches search intent.",
33
+ title: 'Product Name | Brand',
34
+ description: 'Compelling 155-character description that matches search intent.',
34
35
  };
35
36
 
36
37
  // Dynamic metadata (fetched per-page)
37
- export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {
38
+ export async function generateMetadata({
39
+ params,
40
+ }: {
41
+ params: Promise<{ slug: string }>;
42
+ }): Promise<Metadata> {
38
43
  const { slug } = await params;
39
44
  const product = await getProduct(slug);
40
45
 
41
- if (!product) return { title: "Not Found" };
46
+ if (!product) return { title: 'Not Found' };
42
47
 
43
48
  return {
44
49
  title: `${product.name} | Brand`,
@@ -56,12 +61,12 @@ export async function generateMetadata({ params }: { params: Promise<{ slug: str
56
61
  alt: product.name,
57
62
  },
58
63
  ],
59
- siteName: "Your Brand",
60
- type: "website",
64
+ siteName: 'Your Brand',
65
+ type: 'website',
61
66
  },
62
67
 
63
68
  twitter: {
64
- card: "summary_large_image",
69
+ card: 'summary_large_image',
65
70
  title: product.name,
66
71
  description: product.seoDescription,
67
72
  images: [product.imageUrl],
@@ -81,21 +86,23 @@ export default async function ProductPage({ params }) {
81
86
  const product = await getProduct(slug);
82
87
 
83
88
  const jsonLd = {
84
- "@context": "https://schema.org",
85
- "@type": "Product",
89
+ '@context': 'https://schema.org',
90
+ '@type': 'Product',
86
91
  name: product.name,
87
92
  image: product.imageUrl,
88
93
  description: product.description,
89
94
  sku: product.sku,
90
95
  offers: {
91
- "@type": "Offer",
96
+ '@type': 'Offer',
92
97
  price: product.price,
93
- priceCurrency: "USD",
94
- availability: product.inStock ? "https://schema.org/InStock" : "https://schema.org/OutOfStock",
98
+ priceCurrency: 'USD',
99
+ availability: product.inStock
100
+ ? 'https://schema.org/InStock'
101
+ : 'https://schema.org/OutOfStock',
95
102
  url: `https://yoursite.com/products/${slug}`,
96
103
  },
97
104
  aggregateRating: {
98
- "@type": "AggregateRating",
105
+ '@type': 'AggregateRating',
99
106
  ratingValue: product.averageRating,
100
107
  reviewCount: product.reviewCount,
101
108
  },
@@ -103,7 +110,10 @@ export default async function ProductPage({ params }) {
103
110
 
104
111
  return (
105
112
  <>
106
- <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} />
113
+ <script
114
+ type="application/ld+json"
115
+ dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
116
+ />
107
117
  {/* page content */}
108
118
  </>
109
119
  );
@@ -116,29 +126,29 @@ export default async function ProductPage({ params }) {
116
126
 
117
127
  ```typescript
118
128
  // app/sitemap.ts
119
- import { MetadataRoute } from "next";
129
+ import { MetadataRoute } from 'next';
120
130
 
121
131
  export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
122
132
  const products = await getAllProducts();
123
133
 
124
- const productUrls = products.map((product) => ({
134
+ const productUrls = products.map(product => ({
125
135
  url: `https://yoursite.com/products/${product.slug}`,
126
136
  lastModified: product.updatedAt,
127
- changeFrequency: "weekly" as const,
137
+ changeFrequency: 'weekly' as const,
128
138
  priority: 0.8,
129
139
  }));
130
140
 
131
141
  return [
132
142
  {
133
- url: "https://yoursite.com",
143
+ url: 'https://yoursite.com',
134
144
  lastModified: new Date(),
135
- changeFrequency: "daily",
145
+ changeFrequency: 'daily',
136
146
  priority: 1.0,
137
147
  },
138
148
  {
139
- url: "https://yoursite.com/products",
149
+ url: 'https://yoursite.com/products',
140
150
  lastModified: new Date(),
141
- changeFrequency: "daily",
151
+ changeFrequency: 'daily',
142
152
  priority: 0.9,
143
153
  },
144
154
  ...productUrls,
@@ -177,7 +187,7 @@ When AI engines (Perplexity, ChatGPT Search) index your site, they need:
177
187
  // Next.js Edge Middleware: serve bare markdown to AI bots
178
188
  // middleware.ts
179
189
  export function middleware(req: NextRequest) {
180
- const ua = req.headers.get("user-agent") ?? "";
190
+ const ua = req.headers.get('user-agent') ?? '';
181
191
  const isAIBot = /ChatGPT-User|PerplexityBot|ClaudeBot|GPTBot/i.test(ua);
182
192
 
183
193
  if (isAIBot) {
@@ -21,6 +21,7 @@ SQL mistakes are quiet, catastrophic, and permanent. Injection vulnerabilities e
21
21
  ## Mandatory Pre-Flight Context Inspection
22
22
 
23
23
  Before auditing SQL queries or ORM calls, you MUST inspect:
24
+
24
25
  1. `schema.prisma` / `drizzle.schema.ts` / DB migrations → Inspect table schema, existing indices, and foreign key relations
25
26
  2. ORM & DB driver in `package.json` → Confirm parameterization syntax (`$1` in pg vs `?` in mysql vs Prisma objects)
26
27
  3. Query invocation sites → Check for raw SQL strings (`SELECT ... ${input}`) or `for` loops making queries inside loop bodies
@@ -40,7 +41,7 @@ await db.execute(query);
40
41
  const result = await db.execute(`SELECT * FROM orders WHERE id = ${orderId}`);
41
42
 
42
43
  // ✅ SAFE: Parameterized query (Postgres/pg driver)
43
- const result = await client.query("SELECT * FROM users WHERE email = $1", [userInput]);
44
+ const result = await client.query('SELECT * FROM users WHERE email = $1', [userInput]);
44
45
 
45
46
  // ✅ SAFE: Prisma — never interpolates user input into SQL
46
47
  const user = await prisma.user.findUnique({
@@ -73,14 +74,14 @@ const users = await prisma.user.findMany({
73
74
  // ❌ N+1: GraphQL resolver without DataLoader
74
75
  const resolver = {
75
76
  User: {
76
- posts: (parent) => db.posts.findAll({ where: { userId: parent.id } }), // Fires per user!
77
+ posts: parent => db.posts.findAll({ where: { userId: parent.id } }), // Fires per user!
77
78
  },
78
79
  };
79
80
 
80
81
  // ✅ FIXED: DataLoader batches all requests into one query
81
- const postsLoader = new DataLoader(async (userIds) => {
82
+ const postsLoader = new DataLoader(async userIds => {
82
83
  const posts = await db.posts.findAll({ where: { userId: userIds } });
83
- return userIds.map((id) => posts.filter((p) => p.userId === id));
84
+ return userIds.map(id => posts.filter(p => p.userId === id));
84
85
  });
85
86
  ```
86
87
 
@@ -18,6 +18,7 @@ last-updated: 2026-07-29
18
18
  ## Mandatory Pre-Flight Context Inspection
19
19
 
20
20
  Before decomposing goals into worker dispatches, you MUST inspect:
21
+
21
22
  1. `swarm-worker-registry.md` → Read the primary routing table and specialist worker capabilities
22
23
  2. Active codebase file layout (`task.md`, file structure) → Ensure worker target file paths do not overlap across parallel tasks
23
24
  3. System constraints & dependencies (`package.json`, environment variables) → Verify context passed to workers is grounded in current repo state
@@ -78,8 +79,17 @@ Every worker receives a structured JSON dispatch. No unstructured natural langua
78
79
  "scope": "Refactor the UserCard component to use Server Components and remove client-side state that belongs on the server.",
79
80
  "files_to_read": ["src/components/UserCard.tsx", "src/app/users/[id]/page.tsx"],
80
81
  "files_to_write": ["src/components/UserCard.tsx", "src/components/UserCardClient.tsx"],
81
- "context_summary": ["The app uses Next.js 15 App Router", "Authentication is handled via next-auth v5 (now 'auth' package)", "Database uses Prisma 6 with PostgreSQL", "No existing tests for this component"],
82
- "constraints": ["Do NOT modify any files outside the listed files_to_write", "Store only interactive state in the Client Component", "Maintain identical visual output — no design changes"],
82
+ "context_summary": [
83
+ "The app uses Next.js 15 App Router",
84
+ "Authentication is handled via next-auth v5 (now 'auth' package)",
85
+ "Database uses Prisma 6 with PostgreSQL",
86
+ "No existing tests for this component"
87
+ ],
88
+ "constraints": [
89
+ "Do NOT modify any files outside the listed files_to_write",
90
+ "Store only interactive state in the Client Component",
91
+ "Maintain identical visual output — no design changes"
92
+ ],
83
93
  "output_format": {
84
94
  "status": "COMPLETE | BLOCKED | ERROR",
85
95
  "files_modified": ["list of files actually changed"],
@@ -18,16 +18,16 @@ interface WorkerRequest {
18
18
 
19
19
  // The category of work being requested.
20
20
  type:
21
- | "research" // Understand or explain something
22
- | "generate_code" // Write new code
23
- | "review_code" // Audit existing code
24
- | "debug" // Find and fix a bug
25
- | "plan" // Produce a structured plan only (no code)
26
- | "design_schema" // Design a database or data schema
27
- | "write_docs" // Write documentation or comments
28
- | "security_audit" // OWASP security review
29
- | "optimize" // Refactor for performance
30
- | "test"; // Write or run tests
21
+ | 'research' // Understand or explain something
22
+ | 'generate_code' // Write new code
23
+ | 'review_code' // Audit existing code
24
+ | 'debug' // Find and fix a bug
25
+ | 'plan' // Produce a structured plan only (no code)
26
+ | 'design_schema' // Design a database or data schema
27
+ | 'write_docs' // Write documentation or comments
28
+ | 'security_audit' // OWASP security review
29
+ | 'optimize' // Refactor for performance
30
+ | 'test'; // Write or run tests
31
31
 
32
32
  // The agent to route this WorkerRequest to.
33
33
  // MUST match a filename in .agent/agents/ (without the .md extension).
@@ -77,9 +77,9 @@ interface WorkerResult {
77
77
 
78
78
  // Outcome of the Worker's execution.
79
79
  status:
80
- | "success" // Task completed. Output is valid.
81
- | "failure" // Task failed but retries remain.
82
- | "escalate"; // Task failed after max_retries. Requires human intervention.
80
+ | 'success' // Task completed. Output is valid.
81
+ | 'failure' // Task failed but retries remain.
82
+ | 'escalate'; // Task failed after max_retries. Requires human intervention.
83
83
 
84
84
  // The agent's output if status is "success".
85
85
  // Empty string if status is "failure" or "escalate".
@@ -8,35 +8,35 @@ All agents listed here MUST exist as `.md` files in `.agent/agents/`.
8
8
 
9
9
  ## Primary Routing Table
10
10
 
11
- | Task Type | Domain Keywords | Route to Agent |
12
- | ---------------- | ------------------------------------------------ | ----------------------- |
13
- | `research` | any | `explorer-agent` |
14
- | `research` | security, vulnerability, owasp | `security-auditor` |
15
- | `research` | database, schema, sql, orm | `database-architect` |
16
- | `research` | performance, profiling, optimization | `performance-optimizer` |
17
- | `generate_code` | api, route, endpoint, server, express, auth, jwt | `backend-specialist` |
18
- | `generate_code` | python, fastapi, django, flask | `python-pro` |
19
- | `generate_code` | c#, .net, blazor, aspnet | `csharp-developer` |
20
- | `generate_code` | component, hook, react, next, ui, css | `frontend-specialist` |
21
- | `generate_code` | mobile, react native, flutter, ios, android | `mobile-developer` |
22
- | `generate_code` | docker, ci, cd, deploy, github actions, cloud | `devops-engineer` |
23
- | `generate_code` | sql, query, migration, prisma, drizzle | `sql-pro` |
24
- | `generate_code` | vue, nuxt | `vue-expert` |
25
- | `review_code` | api, backend, auth | `backend-specialist` |
26
- | `review_code` | react, component, hook | `frontend-specialist` |
27
- | `review_code` | sql, query | `sql-pro` |
28
- | `review_code` | security (any domain) | `security-auditor` |
29
- | `debug` | any | `debugger` |
30
- | `plan` | any | `project-planner` |
31
- | `design_schema` | any | `database-architect` |
32
- | `write_docs` | any | `documentation-writer` |
33
- | `security_audit` | any | `security-auditor` |
34
- | `optimize` | any | `performance-optimizer` |
35
- | `test` | any | `test-engineer` |
36
- | `visual_audit` | ui, component, visual, screenshot, layout, render| `ui-visual-auditor` |
37
- | `generate_code` | aws, terraform, ecs, fargate, lambda, iac, vpc | `cloud-engineer` |
38
- | `plan` | system design, scale, capacity, architecture | `system-architect` |
39
- | `test` | e2e, playwright, automation, cypress | `qa-automation-engineer`|
11
+ | Task Type | Domain Keywords | Route to Agent |
12
+ | ---------------- | ------------------------------------------------- | ------------------------ |
13
+ | `research` | any | `explorer-agent` |
14
+ | `research` | security, vulnerability, owasp | `security-auditor` |
15
+ | `research` | database, schema, sql, orm | `database-architect` |
16
+ | `research` | performance, profiling, optimization | `performance-optimizer` |
17
+ | `generate_code` | api, route, endpoint, server, express, auth, jwt | `backend-specialist` |
18
+ | `generate_code` | python, fastapi, django, flask | `python-pro` |
19
+ | `generate_code` | c#, .net, blazor, aspnet | `csharp-developer` |
20
+ | `generate_code` | component, hook, react, next, ui, css | `frontend-specialist` |
21
+ | `generate_code` | mobile, react native, flutter, ios, android | `mobile-developer` |
22
+ | `generate_code` | docker, ci, cd, deploy, github actions, cloud | `devops-engineer` |
23
+ | `generate_code` | sql, query, migration, prisma, drizzle | `sql-pro` |
24
+ | `generate_code` | vue, nuxt | `vue-expert` |
25
+ | `review_code` | api, backend, auth | `backend-specialist` |
26
+ | `review_code` | react, component, hook | `frontend-specialist` |
27
+ | `review_code` | sql, query | `sql-pro` |
28
+ | `review_code` | security (any domain) | `security-auditor` |
29
+ | `debug` | any | `debugger` |
30
+ | `plan` | any | `project-planner` |
31
+ | `design_schema` | any | `database-architect` |
32
+ | `write_docs` | any | `documentation-writer` |
33
+ | `security_audit` | any | `security-auditor` |
34
+ | `optimize` | any | `performance-optimizer` |
35
+ | `test` | any | `test-engineer` |
36
+ | `visual_audit` | ui, component, visual, screenshot, layout, render | `ui-visual-auditor` |
37
+ | `generate_code` | aws, terraform, ecs, fargate, lambda, iac, vpc | `cloud-engineer` |
38
+ | `plan` | system design, scale, capacity, architecture | `system-architect` |
39
+ | `test` | e2e, playwright, automation, cypress | `qa-automation-engineer` |
40
40
 
41
41
  ---
42
42
 
@@ -54,28 +54,28 @@ When multiple domain keywords match, apply the following priority order:
54
54
 
55
55
  Quick reference for Supervisor triage. Full instructions are in each agent's `.md` file.
56
56
 
57
- | Agent File | Best For | Do NOT Use For |
58
- | -------------------------- | ------------------------------------------------ | ----------------------- |
59
- | `backend-specialist.md` | REST APIs, auth flows, server logic | React components |
60
- | `python-pro.md` | FastAPI, Django, data scripts | Node/TypeScript code |
61
- | `csharp-developer` | .NET 8+, C#, Blazor, AOT | Python or Node backends |
62
- | `frontend-specialist.md` | Web UI, CSS, components | Server code |
63
- | `react-specialist.md` | Advanced React patterns, Next.js architecture | Vue or mobile |
64
- | `vue-expert.md` | Vue 3, Nuxt 3, Pinia | React or Angular |
65
- | `mobile-developer.md` | React Native, Flutter | Web browser UI |
66
- | `database-architect.md` | Schema design, ORM selection, migrations | Raw SQL query tuning |
67
- | `sql-pro.md` | Complex queries, CTEs, window functions, indexes | Schema design |
68
- | `devops-engineer.md` | CI/CD, Docker, Kubernetes, cloud infra | Application code |
69
- | `security-auditor.md` | OWASP review, pen test findings, auth hardening | Feature development |
70
- | `performance-optimizer.md` | Profiling, bottleneck resolution, caching | New feature design |
71
- | `debugger.md` | Root cause analysis, systematic issue isolation | Code generation |
72
- | `project-planner.md` | Planning, task breakdown, estimates | Implementation |
73
- | `documentation-writer.md` | READMEs, API docs, inline comments | Code or schemas |
74
- | `test-engineer.md` | Unit/integration test design and strategy | Production code |
75
- | `explorer-agent.md` | Mapping unknown codebases before acting | Building new features |
76
- | `cloud-engineer.md` | AWS, Terraform, Docker, ECS, GitHub Actions CI | Application code |
77
- | `system-architect.md` | System design, capacity planning, scalability | Implementation details |
78
- | `qa-automation-engineer.md`| E2E testing, Playwright, test automation | Unit test design |
57
+ | Agent File | Best For | Do NOT Use For |
58
+ | --------------------------- | ------------------------------------------------ | ----------------------- |
59
+ | `backend-specialist.md` | REST APIs, auth flows, server logic | React components |
60
+ | `python-pro.md` | FastAPI, Django, data scripts | Node/TypeScript code |
61
+ | `csharp-developer` | .NET 8+, C#, Blazor, AOT | Python or Node backends |
62
+ | `frontend-specialist.md` | Web UI, CSS, components | Server code |
63
+ | `react-specialist.md` | Advanced React patterns, Next.js architecture | Vue or mobile |
64
+ | `vue-expert.md` | Vue 3, Nuxt 3, Pinia | React or Angular |
65
+ | `mobile-developer.md` | React Native, Flutter | Web browser UI |
66
+ | `database-architect.md` | Schema design, ORM selection, migrations | Raw SQL query tuning |
67
+ | `sql-pro.md` | Complex queries, CTEs, window functions, indexes | Schema design |
68
+ | `devops-engineer.md` | CI/CD, Docker, Kubernetes, cloud infra | Application code |
69
+ | `security-auditor.md` | OWASP review, pen test findings, auth hardening | Feature development |
70
+ | `performance-optimizer.md` | Profiling, bottleneck resolution, caching | New feature design |
71
+ | `debugger.md` | Root cause analysis, systematic issue isolation | Code generation |
72
+ | `project-planner.md` | Planning, task breakdown, estimates | Implementation |
73
+ | `documentation-writer.md` | READMEs, API docs, inline comments | Code or schemas |
74
+ | `test-engineer.md` | Unit/integration test design and strategy | Production code |
75
+ | `explorer-agent.md` | Mapping unknown codebases before acting | Building new features |
76
+ | `cloud-engineer.md` | AWS, Terraform, Docker, ECS, GitHub Actions CI | Application code |
77
+ | `system-architect.md` | System design, capacity planning, scalability | Implementation details |
78
+ | `qa-automation-engineer.md` | E2E testing, Playwright, test automation | Unit test design |
79
79
 
80
80
  ---
81
81
 
@@ -15,6 +15,7 @@ last-updated: 2026-07-29
15
15
  ## Mandatory Pre-Flight Context Inspection
16
16
 
17
17
  Before designing high-level system architectures, you MUST inspect:
18
+
18
19
  1. Active codebase scale & dependencies (`package.json`, `ARCHITECTURE.md`, microservices vs monolith setup)
19
20
  2. Data storage models (`schema.prisma`, SQL schemas, cache configs) → Assess read/write ratios, partitioning, and replica setups
20
21
  3. Scale targets (DAU, peak QPS, storage growth, latency SLOs) → Establish quantitative bounds before making component choices
@@ -21,6 +21,7 @@ Coverage numbers are vanity metrics. You audit for **behavioral completeness**
21
21
  ## Mandatory Pre-Flight Context Inspection
22
22
 
23
23
  Before auditing test coverage and quality, you MUST inspect:
24
+
24
25
  1. Active test runner config (`vitest.config.ts`, `jest.config.js`, `playwright.config.ts`) → Read coverage thresholds and test match globs
25
26
  2. Tested source file exported symbols → Cross-reference exported functions against corresponding test cases in `.test.ts` or `.spec.ts`
26
27
  3. Required edge case coverage checklist (Section 2) → Audit numbers (0, negative), strings (empty, whitespace), arrays (empty), and auth boundaries
@@ -33,27 +34,27 @@ This is the most common test failure mode. AI generates tests for the success ca
33
34
 
34
35
  ```typescript
35
36
  // ❌ INCOMPLETE: Only tests the success path
36
- describe("calculateDiscount()", () => {
37
- it("applies 10% to orders over $100", () => {
37
+ describe('calculateDiscount()', () => {
38
+ it('applies 10% to orders over $100', () => {
38
39
  expect(calculateDiscount(150)).toBe(135);
39
40
  });
40
41
  });
41
42
 
42
43
  // ✅ COMPLETE: Tests all behavioral boundaries
43
- describe("calculateDiscount()", () => {
44
- it("applies 10% to orders over $100", () => {
44
+ describe('calculateDiscount()', () => {
45
+ it('applies 10% to orders over $100', () => {
45
46
  expect(calculateDiscount(150)).toBe(135);
46
47
  });
47
- it("applies no discount to orders at exactly $100", () => {
48
+ it('applies no discount to orders at exactly $100', () => {
48
49
  expect(calculateDiscount(100)).toBe(100); // Boundary edge case
49
50
  });
50
- it("applies no discount to orders under $100", () => {
51
+ it('applies no discount to orders under $100', () => {
51
52
  expect(calculateDiscount(50)).toBe(50);
52
53
  });
53
- it("throws on negative input", () => {
54
+ it('throws on negative input', () => {
54
55
  expect(() => calculateDiscount(-50)).toThrow(/negative/i);
55
56
  });
56
- it("handles zero input", () => {
57
+ it('handles zero input', () => {
57
58
  expect(calculateDiscount(0)).toBe(0);
58
59
  });
59
60
  });
@@ -81,19 +82,19 @@ For any function being tested, flag if these are missing:
81
82
 
82
83
  ```typescript
83
84
  // ❌ BRITTLE: CSS selectors break on UI refactoring
84
- const button = container.querySelector(".btn-primary > span");
85
+ const button = container.querySelector('.btn-primary > span');
85
86
 
86
87
  // ❌ BRITTLE: Index-based selection — breaks when order changes
87
- const firstItem = getAllByRole("listitem")[0];
88
+ const firstItem = getAllByRole('listitem')[0];
88
89
 
89
90
  // ❌ BRITTLE: Text content in another language context (i18n risk)
90
- const btn = getByText("Enregistrer"); // French — breaks if locale changes
91
+ const btn = getByText('Enregistrer'); // French — breaks if locale changes
91
92
 
92
93
  // ✅ RESILIENT: Role-based selector — verifies accessibility simultaneously
93
- const submitBtn = getByRole("button", { name: /submit/i });
94
+ const submitBtn = getByRole('button', { name: /submit/i });
94
95
 
95
96
  // ✅ RESILIENT: data-testid for non-semantic elements
96
- const card = getByTestId("product-card-42");
97
+ const card = getByTestId('product-card-42');
97
98
  ```
98
99
 
99
100
  ---
@@ -102,25 +103,27 @@ const card = getByTestId("product-card-42");
102
103
 
103
104
  ```typescript
104
105
  // ❌ BAD: Mocking internal business logic — tests nothing real
105
- vi.mock("./calculateTax"); // Now the test just verifies the mock, not the function
106
+ vi.mock('./calculateTax'); // Now the test just verifies the mock, not the function
106
107
 
107
108
  // ❌ BAD: Overspecified mock — asserting exact call parameters that will change
108
109
  expect(mockSendEmail).toHaveBeenCalledWith(
109
- "user@example.com",
110
- "Welcome!",
110
+ 'user@example.com',
111
+ 'Welcome!',
111
112
  expect.any(String),
112
113
  { cc: undefined, bcc: undefined, replyTo: null }, // Too brittle
113
114
  );
114
115
 
115
116
  // ✅ GOOD: Mock at architectural boundaries only (network, DB, filesystem)
116
117
  // MSW intercepts network — component behaves exactly as in production
117
- import { setupServer } from "msw/node";
118
- const server = setupServer(http.get("/api/users", () => HttpResponse.json([{ id: 1, name: "Alice" }])));
118
+ import { setupServer } from 'msw/node';
119
+ const server = setupServer(
120
+ http.get('/api/users', () => HttpResponse.json([{ id: 1, name: 'Alice' }])),
121
+ );
119
122
 
120
123
  // ✅ GOOD: Assert meaningful behavior — not exact implementation
121
124
  expect(mockSendEmail).toHaveBeenCalledWith(
122
- "user@example.com",
123
- expect.stringContaining("Welcome"), // Cares about content, not exact format
125
+ 'user@example.com',
126
+ expect.stringContaining('Welcome'), // Cares about content, not exact format
124
127
  );
125
128
  ```
126
129
 
@@ -130,14 +133,14 @@ expect(mockSendEmail).toHaveBeenCalledWith(
130
133
 
131
134
  ```typescript
132
135
  // ❌ BAD: Tests internal private state (breaks on refactor)
133
- test("stores user in internal cache", () => {
136
+ test('stores user in internal cache', () => {
134
137
  const service = new UserService();
135
138
  service.fetchUser(1);
136
139
  expect(service._cache.has(1)).toBe(true); // Internal implementation detail
137
140
  });
138
141
 
139
142
  // ✅ GOOD: Tests observable behavior — the public contract
140
- test("returns cached user on second call without network request", async () => {
143
+ test('returns cached user on second call without network request', async () => {
141
144
  const service = new UserService();
142
145
  await service.fetchUser(1); // First call — hits network
143
146
  await service.fetchUser(1); // Second call — from cache
@@ -18,6 +18,7 @@ last-updated: 2026-07-29
18
18
  ## Mandatory Pre-Flight Context Inspection
19
19
 
20
20
  Before generating unit or integration tests, you MUST inspect:
21
+
21
22
  1. `package.json` → Confirm test runner engine (`vitest`, `jest`, `playwright`, `pytest`) and assertions configuration
22
23
  2. Target source file (`src/`, `lib/`, `app/`) → Read function signatures, export statements, and exception paths
23
24
  3. Existing test utilities (`test/setup.ts`, `vitest.config.ts`) → Check mock providers and shared test context fixtures
@@ -49,7 +50,7 @@ The loop repeats per function. The key is that the test drives the design — no
49
50
 
50
51
  ```typescript
51
52
  // ✅ Tests a specific, observable output
52
- expect(formatCurrency(1500)).toBe("$1,500.00");
53
+ expect(formatCurrency(1500)).toBe('$1,500.00');
53
54
 
54
55
  // ❌ Tests that the function ran (not what it produced)
55
56
  const result = formatCurrency(1500);
@@ -63,16 +64,16 @@ expect(formatCurrency(1500)).toBe(formatCurrency(1500));
63
64
 
64
65
  ```typescript
65
66
  // ✅ One test → one behavior
66
- it("adds VAT to the price", () => {
67
+ it('adds VAT to the price', () => {
67
68
  expect(addVat(100, 0.2)).toBe(120);
68
69
  });
69
70
 
70
- it("throws when rate is negative", () => {
71
- expect(() => addVat(100, -0.2)).toThrow("Rate must be positive");
71
+ it('throws when rate is negative', () => {
72
+ expect(() => addVat(100, -0.2)).toThrow('Rate must be positive');
72
73
  });
73
74
 
74
75
  // ❌ Two behaviors in one test — which one failed?
75
- it("adds VAT correctly", () => {
76
+ it('adds VAT correctly', () => {
76
77
  expect(addVat(100, 0.2)).toBe(120);
77
78
  expect(() => addVat(100, -0.2)).toThrow();
78
79
  });
@@ -86,15 +87,15 @@ it("adds VAT correctly", () => {
86
87
  // ✅ Mock only the direct external dependency
87
88
  // Testing: userService.create()
88
89
  // Mock: the DB layer (because we don't need a real DB for this unit)
89
- vi.mock("../db", () => ({
90
- insert: vi.fn().mockResolvedValue({ id: "u1", email: "test@example.com" }),
90
+ vi.mock('../db', () => ({
91
+ insert: vi.fn().mockResolvedValue({ id: 'u1', email: 'test@example.com' }),
91
92
  }));
92
93
 
93
94
  // ❌ Over-mocking — nothing real is being tested
94
- vi.mock("../db");
95
- vi.mock("../logger");
96
- vi.mock("../validator");
97
- vi.mock("../emailService");
95
+ vi.mock('../db');
96
+ vi.mock('../logger');
97
+ vi.mock('../validator');
98
+ vi.mock('../emailService');
98
99
  // At this point you're testing that mocks return mocks
99
100
  ```
100
101