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
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before designing agentic loops, tool schemas, or memory architectures, you MUST inspect:
23
+
23
24
  1. `package.json` / LLM SDK definitions → Check tool calling syntax (Zod schemas, OpenAI/Anthropic function calling API)
24
25
  2. Agent Loop boundaries (Section 1) → Define hard caps on `MAX_STEPS` (default: 10) and explicit termination reasons
25
26
  3. Human-in-the-loop gates (Section 5) → Ensure approval gates for destructive, data-deleting, or high-cost API calls
@@ -45,7 +46,7 @@ PERCEIVE → PLAN → ACT → OBSERVE → (repeat or terminate)
45
46
  ```ts
46
47
  // The three termination conditions — always define all three
47
48
  type AgentResult = {
48
- reason: "goal_reached" | "max_steps_exceeded" | "human_escalation";
49
+ reason: 'goal_reached' | 'max_steps_exceeded' | 'human_escalation';
49
50
  steps: number;
50
51
  result: string;
51
52
  };
@@ -63,23 +64,24 @@ Tools are the agent's interface to the real world. Design them defensively:
63
64
  // Tool definition — what the LLM sees and how to call it
64
65
  const tools = [
65
66
  {
66
- type: "function",
67
+ type: 'function',
67
68
  function: {
68
- name: "search_database",
69
- description: "Search the product database. Use this before creating a new record to avoid duplicates.",
69
+ name: 'search_database',
70
+ description:
71
+ 'Search the product database. Use this before creating a new record to avoid duplicates.',
70
72
  parameters: {
71
- type: "object",
73
+ type: 'object',
72
74
  properties: {
73
75
  query: {
74
- type: "string",
75
- description: "Search terms — be specific",
76
+ type: 'string',
77
+ description: 'Search terms — be specific',
76
78
  },
77
79
  limit: {
78
- type: "number",
79
- description: "Max results to return. Default: 5, max: 20",
80
+ type: 'number',
81
+ description: 'Max results to return. Default: 5, max: 20',
80
82
  },
81
83
  },
82
- required: ["query"],
84
+ required: ['query'],
83
85
  },
84
86
  },
85
87
  },
@@ -145,10 +147,13 @@ async function buildContext(userId: string, currentQuery: string) {
145
147
  });
146
148
 
147
149
  return [
148
- { role: "system", content: systemPrompt },
150
+ { role: 'system', content: systemPrompt },
149
151
  // Inject relevant past context — NOT entire history
150
- { role: "system", content: `Relevant past context:\n${pastMemories.map((m) => m.content).join("\n")}` },
151
- { role: "user", content: currentQuery },
152
+ {
153
+ role: 'system',
154
+ content: `Relevant past context:\n${pastMemories.map(m => m.content).join('\n')}`,
155
+ },
156
+ { role: 'user', content: currentQuery },
152
157
  ];
153
158
  }
154
159
  ```
@@ -175,7 +180,10 @@ Supervisor agent ─→ breaks task into subtasks
175
180
 
176
181
  ```ts
177
182
  // Two independent agents answer the same question — supervisor resolves disagreement
178
- const [answerA, answerB] = await Promise.all([agentA.complete(question), agentB.complete(question)]);
183
+ const [answerA, answerB] = await Promise.all([
184
+ agentA.complete(question),
185
+ agentB.complete(question),
186
+ ]);
179
187
 
180
188
  if (answerA.answer === answerB.answer) {
181
189
  return answerA; // Agreement — high confidence
@@ -209,13 +217,13 @@ async function agentLoop(task: string) {
209
217
  reason: planned.reasoning,
210
218
  confidence: planned.confidence,
211
219
  });
212
- if (!approved) return { reason: "human_rejected", step };
220
+ if (!approved) return { reason: 'human_rejected', step };
213
221
  }
214
222
 
215
223
  // ✅ Confidence gate — don't act when uncertain
216
224
  if (planned.confidence < 0.7) {
217
225
  return {
218
- reason: "human_escalation",
226
+ reason: 'human_escalation',
219
227
  message: `Low confidence (${planned.confidence}) on: ${planned.action.description}`,
220
228
  };
221
229
  }
@@ -238,23 +246,23 @@ Every production agent needs:
238
246
  const guardrails = {
239
247
  // Input guardrails — reject bad prompts before they reach the agent
240
248
  input: [
241
- { check: "no_prompt_injection", action: "reject" },
242
- { check: "within_scope", action: "reject" }, // Off-topic requests
243
- { check: "pii_detection", action: "redact" }, // Redact before processing
249
+ { check: 'no_prompt_injection', action: 'reject' },
250
+ { check: 'within_scope', action: 'reject' }, // Off-topic requests
251
+ { check: 'pii_detection', action: 'redact' }, // Redact before processing
244
252
  ],
245
253
 
246
254
  // Output guardrails — validate before returning
247
255
  output: [
248
- { check: "no_hallucinated_citations", action: "flag" },
249
- { check: "schema_valid", action: "retry_once" },
250
- { check: "no_pii_leaked", action: "reject" },
256
+ { check: 'no_hallucinated_citations', action: 'flag' },
257
+ { check: 'schema_valid', action: 'retry_once' },
258
+ { check: 'no_pii_leaked', action: 'reject' },
251
259
  ],
252
260
 
253
261
  // Resource guardrails — prevent runaway cost/loops
254
262
  resource: [
255
- { check: "max_tokens_per_session", limit: 100_000 },
256
- { check: "max_tool_calls_per_session", limit: 50 },
257
- { check: "max_cost_per_session_usd", limit: 1.0 },
263
+ { check: 'max_tokens_per_session', limit: 100_000 },
264
+ { check: 'max_tool_calls_per_session', limit: 50 },
265
+ { check: 'max_cost_per_session_usd', limit: 1.0 },
258
266
  ],
259
267
  };
260
268
  ```
@@ -19,6 +19,7 @@ skills:
19
19
  ## Mandatory Pre-Flight Context Inspection
20
20
 
21
21
  Before designing autonomous agent loops:
22
+
22
23
  1. Tool Contract Validation → Enforce strict JSON Schema / Zod validation for every tool call
23
24
  2. Hard Execution Limit → Enforce a maximum iteration cap (max 10 turns) to prevent infinite loops
24
25
  3. Human-in-the-Loop Gate → Require human approval for destructive operations (file deletion, production deploy, DB writes)
@@ -44,9 +45,12 @@ export async function runAgentLoop(task: string, maxTurns = 10) {
44
45
  turn++;
45
46
  const response = await callLLM(history);
46
47
  const parsed = ToolCallSchema.safeParse(response);
47
-
48
+
48
49
  if (!parsed.success) {
49
- history.push({ role: 'system', content: `Invalid tool call payload: ${parsed.error.message}` });
50
+ history.push({
51
+ role: 'system',
52
+ content: `Invalid tool call payload: ${parsed.error.message}`,
53
+ });
50
54
  continue;
51
55
  }
52
56
 
@@ -19,6 +19,7 @@ skills:
19
19
  ## Mandatory Pre-Flight Context Inspection
20
20
 
21
21
  Before deploying AI features:
22
+
22
23
  1. Indirect Prompt Injection Defense → Sanitize third-party content (scraped URLs, PDF imports, RAG docs) before feeding to LLMs
23
24
  2. XML Delimiter Sandboxing → Enclose user/external inputs inside `<external_context>` and instruct model to ignore instructions within
24
25
  3. Insecure Output Handling (OWASP LLM02) → Escape HTML/script tags on all rendered model outputs
@@ -28,13 +29,13 @@ Before deploying AI features:
28
29
  ```typescript
29
30
  export function sanitizeRAGDocument(rawDocumentContent: string): string {
30
31
  if (!rawDocumentContent || typeof rawDocumentContent !== 'string') return '';
31
-
32
+
32
33
  // 1. Redact indirect prompt injection trigger phrases
33
34
  let cleaned = rawDocumentContent.replace(
34
35
  /(?:system:\s*ignore|override system prompt|you are now in developer mode|print system prompt)/gi,
35
- '[REDACTED_INDIRECT_INJECTION]'
36
+ '[REDACTED_INDIRECT_INJECTION]',
36
37
  );
37
-
38
+
38
39
  // 2. Escape structural tag injection attempts
39
40
  cleaned = cleaned.replace(/<\/?(?:system|user_input|external_context)[^>]*>/gi, '');
40
41
 
@@ -45,12 +46,12 @@ export function sanitizeRAGDocument(rawDocumentContent: string): string {
45
46
 
46
47
  ## OWASP LLM Top 10 (2026 Matrix)
47
48
 
48
- | Risk ID | Vulnerability | Defense Implementation |
49
- |---|---|---|
49
+ | Risk ID | Vulnerability | Defense Implementation |
50
+ | --------- | ------------------------------------ | --------------------------------------------------- |
50
51
  | **LLM01** | Prompt Injection (Direct & Indirect) | Delimiter sandboxing + `sanitizeRAGDocument` filter |
51
- | **LLM02** | Insecure Output Handling | Strict Zod output parsing + DOMPurify on frontend |
52
- | **LLM04** | Model Denial of Service | Hard `max_tokens` limit + IP bucket rate limiting |
53
- | **LLM07** | System Prompt Leakage | System prompt redaction guards in output stream |
52
+ | **LLM02** | Insecure Output Handling | Strict Zod output parsing + DOMPurify on frontend |
53
+ | **LLM04** | Model Denial of Service | Hard `max_tokens` limit + IP bucket rate limiting |
54
+ | **LLM07** | System Prompt Leakage | System prompt redaction guards in output stream |
54
55
 
55
56
  ## 🛑 Verification-Before-Completion (VBC) Protocol
56
57
 
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before engineering LLM prompts or processing untrusted user input, you MUST inspect:
23
+
23
24
  1. Message Role Isolation (Section 15) → Place user input exclusively in `role: "user"` messages; never concatenate user input into `role: "system"`
24
25
  2. Delimiter Sandboxing (Section 49) → Frame untrusted input inside XML tags (`<user_input>`) or randomized nonces (`<data_a8b4f1c9>`)
25
26
  3. Human-in-the-Loop Gate (Section 119) → Require explicit human approval before executing state-changing tool operations (`delete_user`, `process_payment`)
@@ -74,9 +75,9 @@ ${userInput}
74
75
  If an attacker guesses your delimiter (`</user_input> Ignore that.`), they can escape the sandbox. Generating random delimit tokens prevents this.
75
76
 
76
77
  ```typescript
77
- import crypto from "crypto";
78
+ import crypto from 'crypto';
78
79
 
79
- const nonce = crypto.randomBytes(8).toString("hex"); // e.g., "a8b4f1c9"
80
+ const nonce = crypto.randomBytes(8).toString('hex'); // e.g., "a8b4f1c9"
80
81
  const startTag = `<data_${nonce}>`;
81
82
  const endTag = `</data_${nonce}>`;
82
83
 
@@ -106,12 +107,12 @@ ${userInput}
106
107
  </text>`;
107
108
 
108
109
  const response = await scanWithFastModel(checkPrompt);
109
- return response.trim().includes("MALICIOUS");
110
+ return response.trim().includes('MALICIOUS');
110
111
  }
111
112
 
112
113
  // Flow:
113
114
  if (await detectInjection(req.body.text)) {
114
- return res.status(400).json({ error: "Input violates security policy." });
115
+ return res.status(400).json({ error: 'Input violates security policy.' });
115
116
  }
116
117
  // Proceed to main agent
117
118
  ```
@@ -136,8 +137,8 @@ If the LLM has tools (Function Calling):
136
137
  ```typescript
137
138
  // ❌ VULNERABLE TOOL DEFINITION
138
139
  const deleteUserTool = {
139
- name: "delete_user",
140
- description: "Deletes a user account from the DB",
140
+ name: 'delete_user',
141
+ description: 'Deletes a user account from the DB',
141
142
  }; // An injected prompt can trigger this autonomously
142
143
 
143
144
  // ✅ PREVENTATIVE ARCHITECTURE
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before implementing scroll-driven animations, you MUST inspect:
23
+
23
24
  1. Target browser support → Prefer pure CSS `animation-timeline: view()` / `scroll()` when possible
24
25
  2. Pinning & Scrubbing rules (Section 45) → Use `scrub: 1` in GSAP ScrollTrigger timelines for smooth inertia
25
26
  3. Anti-Scrolljacking rule (Section 88) → Never hijack native scroll wheel momentum or override browser scrolling velocity
@@ -31,6 +32,7 @@ Architect performant scroll-linked motion and scrollytelling sequences that feel
31
32
  ## 3 Scroll-Driven Architecture Patterns
32
33
 
33
34
  ### 1. Modern Pure CSS `view-timeline` (No JavaScript Required)
35
+
34
36
  ```css
35
37
  @keyframes reveal-on-scroll {
36
38
  from {
@@ -51,30 +53,37 @@ Architect performant scroll-linked motion and scrollytelling sequences that feel
51
53
  ```
52
54
 
53
55
  ### 2. Sticky Canvas / Section Pinned Storytelling (GSAP ScrollTrigger)
56
+
54
57
  ```javascript
55
- import { gsap } from "gsap";
56
- import { ScrollTrigger } from "gsap/ScrollTrigger";
58
+ import { gsap } from 'gsap';
59
+ import { ScrollTrigger } from 'gsap/ScrollTrigger';
57
60
 
58
61
  gsap.registerPlugin(ScrollTrigger);
59
62
 
60
- gsap.timeline({
61
- scrollTrigger: {
62
- trigger: ".story-container",
63
- start: "top top",
64
- end: "+=200%",
65
- pin: true,
66
- scrub: 1, // Smooth scrub delay
67
- }
68
- })
69
- .to(".story-step-1", { opacity: 0, y: -20 })
70
- .from(".story-step-2", { opacity: 0, y: 20 });
63
+ gsap
64
+ .timeline({
65
+ scrollTrigger: {
66
+ trigger: '.story-container',
67
+ start: 'top top',
68
+ end: '+=200%',
69
+ pin: true,
70
+ scrub: 1, // Smooth scrub delay
71
+ },
72
+ })
73
+ .to('.story-step-1', { opacity: 0, y: -20 })
74
+ .from('.story-step-2', { opacity: 0, y: 20 });
71
75
  ```
72
76
 
73
77
  ### 3. Scroll Progress Indicator Bar
78
+
74
79
  ```css
75
80
  @keyframes grow-progress {
76
- from { transform: scaleX(0); }
77
- to { transform: scaleX(1); }
81
+ from {
82
+ transform: scaleX(0);
83
+ }
84
+ to {
85
+ transform: scaleX(1);
86
+ }
78
87
  }
79
88
 
80
89
  .scroll-progress-bar {
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before defining animation tokens or styling transitions, you MUST inspect:
23
+
23
24
  1. `index.css` / `DESIGN.md` → Verify presence of centralized `--duration-*` and `--ease-*` CSS custom properties
24
25
  2. Centralized Motion Tokens Schema (Section 26) → Enforce standardized duration tiers (80ms instant to 500ms delight)
25
26
  3. Anti-Ad-Hoc Easing Rule (Section 48) → Strictly prohibit inline custom cubic-bezier curves; reference motion tokens instead
@@ -35,18 +36,18 @@ Define standardized design tokens for motion in global CSS or Tailwind config:
35
36
  ```css
36
37
  :root {
37
38
  /* Duration Scale */
38
- --duration-instant: 80ms; /* Micro feedback, toggle switches */
39
- --duration-fast: 150ms; /* Tooltips, hover states, press feedback */
40
- --duration-normal: 220ms; /* Dropdowns, menus, tab switching */
41
- --duration-slow: 320ms; /* Modals, drawers, page reveals */
42
- --duration-delight: 500ms; /* Milestone celebrations, toasts */
39
+ --duration-instant: 80ms; /* Micro feedback, toggle switches */
40
+ --duration-fast: 150ms; /* Tooltips, hover states, press feedback */
41
+ --duration-normal: 220ms; /* Dropdowns, menus, tab switching */
42
+ --duration-slow: 320ms; /* Modals, drawers, page reveals */
43
+ --duration-delight: 500ms; /* Milestone celebrations, toasts */
43
44
 
44
45
  /* Standardized Easing Curves */
45
- --ease-snappy: cubic-bezier(0.2, 0, 0, 1); /* Quick response for press/active */
46
- --ease-out-ui: cubic-bezier(0.16, 1, 0.3, 1); /* Smooth entrance for popovers/modals */
47
- --ease-in-ui: cubic-bezier(0.7, 0, 0.84, 0); /* Smooth exit for modals */
48
- --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);/* Subtle spring overshoot */
49
- --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1); /* Morphing layout changes */
46
+ --ease-snappy: cubic-bezier(0.2, 0, 0, 1); /* Quick response for press/active */
47
+ --ease-out-ui: cubic-bezier(0.16, 1, 0.3, 1); /* Smooth entrance for popovers/modals */
48
+ --ease-in-ui: cubic-bezier(0.7, 0, 0.84, 0); /* Smooth exit for modals */
49
+ --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1); /* Subtle spring overshoot */
50
+ --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1); /* Morphing layout changes */
50
51
  }
51
52
  ```
52
53
 
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before configuring JS/TS tooling or lint rules, you MUST inspect:
23
+
23
24
  1. Pure ESM-First Requirement (Section 24) → Set `"type": "module"` in `package.json`; ban CommonJS `require()` or `module.exports`
24
25
  2. ESLint Flat Config (`eslint.config.js`) (Section 28) → Use `@antfu/eslint-config` with flat config format; ban legacy `.eslintrc.json`
25
26
  3. Explicit Type Imports (`import type`) (Section 45) → Enforce `import type` for type-only symbols to allow clean tree-shaking compilation
@@ -33,27 +34,31 @@ Enforce Anthony Fu's modern JavaScript/TypeScript engineering conventions: ESM-f
33
34
  ## 4 Core Tooling Conventions
34
35
 
35
36
  ### 1. ESM-First Standards
37
+
36
38
  - Use pure ES Modules (`"type": "module"` in `package.json`).
37
39
  - Avoid CommonJS `require()` or `module.exports`. Use explicit `.js` extension in relative imports when building Node ESM modules.
38
40
 
39
41
  ### 2. Single ESLint Flat Config (`eslint.config.js`)
42
+
40
43
  - Use `@antfu/eslint-config` for unified linting across TypeScript, Vue, React, JSON, and Markdown in 1 simple config file.
41
44
 
42
45
  ```javascript
43
46
  // eslint.config.js
44
- import antfu from '@antfu/eslint-config'
47
+ import antfu from '@antfu/eslint-config';
45
48
 
46
49
  export default antfu({
47
50
  typescript: true,
48
51
  vue: true,
49
52
  react: true,
50
- })
53
+ });
51
54
  ```
52
55
 
53
56
  ### 3. PNPM Catalog & Workspace Monorepo
57
+
54
58
  - Use `pnpm-workspace.yaml` with PNPM catalogs (`catalog:`) to lock unified dependency versions across monorepos.
55
59
 
56
60
  ### 4. Explicit Type Imports (`import type`)
61
+
57
62
  - Enforce `import type { User } from './types'` to allow tree-shaking compilers (esbuild/tsdown) to strip type imports cleanly without runtime side effects.
58
63
 
59
64
  ---
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before designing or implementing API endpoints, you MUST inspect:
23
+
23
24
  1. Authorization Header Token Passing (Section 17) → Pass JWTs in `Authorization: Bearer` headers; strictly ban tokens in URL query params
24
25
  2. Cursor-Based Pagination (Section 19) → Use cursor pagination for datasets >10K rows to eliminate `OFFSET N` performance degradation
25
26
  3. Idempotency Header for Mutations (Section 21) → Require `Idempotency-Key` headers for state-changing `POST` or `PATCH` retry operations
@@ -108,7 +109,7 @@ interface ApiError {
108
109
  // GET /api/v1/posts?cursor=eyJpZCI6MTAwfQ&limit=20
109
110
  const posts = await db.post.findMany({
110
111
  where: { id: { lt: decodeCursor(req.query.cursor).id } },
111
- orderBy: { id: "desc" },
112
+ orderBy: { id: 'desc' },
112
113
  take: limit + 1, // fetch one extra to determine hasMore
113
114
  });
114
115
  const hasMore = posts.length > limit;
@@ -126,15 +127,15 @@ return { data: posts, meta: { hasMore, nextCursor: encodeCursor(posts.at(-1)) }
126
127
 
127
128
  ```typescript
128
129
  // POST /api/v1/payments with header: Idempotency-Key: <uuid>
129
- app.post("/api/v1/payments", async (req, res) => {
130
- const key = req.headers["idempotency-key"];
131
- if (!key) return res.status(400).json({ error: "Missing Idempotency-Key" });
130
+ app.post('/api/v1/payments', async (req, res) => {
131
+ const key = req.headers['idempotency-key'];
132
+ if (!key) return res.status(400).json({ error: 'Missing Idempotency-Key' });
132
133
 
133
134
  const cached = await redis.get(`idempotency:${key}`);
134
135
  if (cached) return res.status(200).json(JSON.parse(cached));
135
136
 
136
137
  const result = await processPayment(req.body);
137
- await redis.set(`idempotency:${key}`, JSON.stringify(result), "EX", 86400);
138
+ await redis.set(`idempotency:${key}`, JSON.stringify(result), 'EX', 86400);
138
139
  return res.status(201).json(result);
139
140
  });
140
141
  // GET, PUT, DELETE → naturally idempotent (safe to retry without a key)
@@ -147,15 +148,18 @@ app.post("/api/v1/payments", async (req, res) => {
147
148
 
148
149
  ```typescript
149
150
  // HMAC signature verification (always verify — never trust unsigned webhooks)
150
- import { createHmac, timingSafeEqual } from "node:crypto";
151
+ import { createHmac, timingSafeEqual } from 'node:crypto';
151
152
  function verify(payload: string, signature: string, secret: string): boolean {
152
- const expected = createHmac("sha256", secret).update(payload).digest("hex");
153
+ const expected = createHmac('sha256', secret).update(payload).digest('hex');
153
154
  return timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
154
155
  }
155
156
 
156
- app.post("/webhooks", (req, res) => {
157
- if (!verify(JSON.stringify(req.body), req.headers["x-webhook-signature"] as string, WEBHOOK_SECRET)) return res.status(401).send("Invalid signature");
158
- res.status(200).send("OK"); // respond immediately
157
+ app.post('/webhooks', (req, res) => {
158
+ if (
159
+ !verify(JSON.stringify(req.body), req.headers['x-webhook-signature'] as string, WEBHOOK_SECRET)
160
+ )
161
+ return res.status(401).send('Invalid signature');
162
+ res.status(200).send('OK'); // respond immediately
159
163
  processWebhookAsync(req.body); // process asynchronously
160
164
  });
161
165
  // Retry policy: 3 retries with exponential backoff (1s → 10s → 100s)
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before auditing or hardening API endpoints, you MUST inspect:
23
+
23
24
  1. IDOR Prevention (Section 17) → Perform explicit tenancy checks (`receipt.userId === req.user.id`) and prefer UUIDv4/CUID over sequential integer IDs
24
25
  2. Mass Assignment Mitigations (Section 47) → Enforce strict Zod schemas (`.strict()`) to prevent parameter overposting into DB updates
25
26
  3. Distributed Rate Limiting (Section 80) → Store rate limit state in Redis for multi-pod load balanced environments to prevent limit bypasses
@@ -34,19 +35,19 @@ IDOR occurs when an application provides direct access to objects based on user-
34
35
 
35
36
  ```typescript
36
37
  // ❌ VULNERABLE: Trusting the requested ID blindly
37
- app.get("/api/receipts/:id", async (req, res) => {
38
+ app.get('/api/receipts/:id', async (req, res) => {
38
39
  const receipt = await db.receipts.findById(req.params.id);
39
40
  res.json(receipt); // Attack: Increment ID to view others' receipts
40
41
  });
41
42
 
42
43
  // ✅ SAFE: Verifying ownership
43
- app.get("/api/receipts/:id", async (req, res) => {
44
+ app.get('/api/receipts/:id', async (req, res) => {
44
45
  const receipt = await db.receipts.findById(req.params.id);
45
46
  if (!receipt) return res.status(404).send();
46
47
 
47
48
  // Explicit tenancy check
48
- if (receipt.userId !== req.user.id && req.user.role !== "admin") {
49
- return res.status(403).json({ error: "Access denied" });
49
+ if (receipt.userId !== req.user.id && req.user.role !== 'admin') {
50
+ return res.status(403).json({ error: 'Access denied' });
50
51
  }
51
52
 
52
53
  res.json(receipt);
@@ -64,20 +65,20 @@ Occurs when web frameworks automatically bind HTTP request parameters to applica
64
65
 
65
66
  ```typescript
66
67
  // ❌ VULNERABLE: Direct object binding
67
- app.put("/api/users/:id", async (req, res) => {
68
+ app.put('/api/users/:id', async (req, res) => {
68
69
  // Attack: req.body = { name: "Bob", role: "admin", isPaid: true }
69
70
  await db.users.update({ id: req.params.id }, req.body);
70
- res.send("Updated");
71
+ res.send('Updated');
71
72
  });
72
73
 
73
74
  // ✅ SAFE: Explicit property selection (DTOs)
74
- app.put("/api/users/:id", async (req, res) => {
75
+ app.put('/api/users/:id', async (req, res) => {
75
76
  // Only extract explicitly allowed fields
76
77
  const { name, email, bio } = req.body;
77
78
  const safeData = { name, email, bio };
78
79
 
79
80
  await db.users.update({ id: req.params.id }, safeData);
80
- res.send("Updated");
81
+ res.send('Updated');
81
82
  });
82
83
 
83
84
  // ✅ BEST: Validation libraries (Zod, Joi) handling stripping
@@ -95,8 +96,8 @@ const UpdateUserSchema = z
95
96
 
96
97
  ```typescript
97
98
  // Basic Rate Limiting (Express)
98
- import rateLimit from "express-rate-limit";
99
- import RedisStore from "rate-limit-redis";
99
+ import rateLimit from 'express-rate-limit';
100
+ import RedisStore from 'rate-limit-redis';
100
101
 
101
102
  // Global baseline limit
102
103
  export const globalLimiter = rateLimit({
@@ -111,7 +112,7 @@ export const authLimiter = rateLimit({
111
112
  store: new RedisStore({ client: redisClient }),
112
113
  windowMs: 60 * 60 * 1000, // 1 Hour
113
114
  max: 5, // 5 login attempts per IP per hour
114
- message: "Too many login attempts, please try again later",
115
+ message: 'Too many login attempts, please try again later',
115
116
  });
116
117
 
117
118
  // ❌ HALLUCINATION TRAP: In-memory rate limiting across multiple server pods
@@ -144,8 +145,8 @@ Best Practices for issuance and storage:
144
145
 
145
146
  // 1. Query Depth Limiting (Prevent nested joins crushing the DB)
146
147
  // User -> Posts -> Comments -> Author -> Posts -> Comments...
147
- import depthLimit from "graphql-depth-limit";
148
- app.use("/graphql", graphqlHTTP({ validationRules: [depthLimit(5)] }));
148
+ import depthLimit from 'graphql-depth-limit';
149
+ app.use('/graphql', graphqlHTTP({ validationRules: [depthLimit(5)] }));
149
150
 
150
151
  // 2. Query Cost Analysis
151
152
  // Prevent attackers from requesting 100,000 items in a single query
@@ -155,7 +156,7 @@ app.use("/graphql", graphqlHTTP({ validationRules: [depthLimit(5)] }));
155
156
  // Introspection allows attackers to download your entire schema.
156
157
  const server = new ApolloServer({
157
158
  schema,
158
- introspection: process.env.NODE_ENV !== "production",
159
+ introspection: process.env.NODE_ENV !== 'production',
159
160
  });
160
161
  ```
161
162
 
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before scaffolding or orchestrating application builds, you MUST inspect:
23
+
23
24
  1. Clarification Gate (Section 48) → Ask 4 core purpose/constraint questions before selecting stack or creating files
24
25
  2. Plan Verification (Section 220) → Ensure `{task-slug}.md` is created and verified in project root before invoking specialist agents
25
26
  3. Incremental Build Rule (Section 15) → Never generate entire applications in one shot; build and verify module by module
@@ -93,11 +93,11 @@ project-name/
93
93
  Ensure `src/app/globals.css` uses the new import syntax instead of a config file:
94
94
 
95
95
  ```css
96
- @import "tailwindcss";
96
+ @import 'tailwindcss';
97
97
 
98
98
  @theme {
99
99
  --color-primary: oklch(0.5 0.2 240);
100
- --font-sans: "Inter", sans-serif;
100
+ --font-sans: 'Inter', sans-serif;
101
101
  }
102
102
  ```
103
103
 
@@ -104,7 +104,7 @@ project-name/
104
104
  3. Install Tailwind v4 (Add to globals.css):
105
105
 
106
106
  ```css
107
- @import "tailwindcss";
107
+ @import 'tailwindcss';
108
108
  ```
109
109
 
110
110
  4. Configure environment (.env.local)
@@ -52,10 +52,10 @@ Using `next.config.ts` instead of `.js` for better type safety.
52
52
 
53
53
  ```typescript
54
54
  // next.config.ts
55
- import type { NextConfig } from "next";
55
+ import type { NextConfig } from 'next';
56
56
 
57
57
  const nextConfig: NextConfig = {
58
- output: "export", // Required for Static Hosting (S3, GitHub Pages)
58
+ output: 'export', // Required for Static Hosting (S3, GitHub Pages)
59
59
  images: {
60
60
  unoptimized: true, // Required if not using Node.js server image optimization
61
61
  },
@@ -74,19 +74,19 @@ Deprecated next-seo. Configure directly in layout.tsx or page.tsx.
74
74
 
75
75
  ```typescript
76
76
  // src/app/layout.tsx
77
- import type { Metadata } from "next";
77
+ import type { Metadata } from 'next';
78
78
 
79
79
  export const metadata: Metadata = {
80
80
  title: {
81
- template: "%s | Product Name",
82
- default: "Home - Product Name",
81
+ template: '%s | Product Name',
82
+ default: 'Home - Product Name',
83
83
  },
84
- description: "SEO optimized description for the landing page.",
84
+ description: 'SEO optimized description for the landing page.',
85
85
  openGraph: {
86
- type: "website",
87
- locale: "en_US",
88
- url: "https://mysite.com",
89
- siteName: "My Brand",
86
+ type: 'website',
87
+ locale: 'en_US',
88
+ url: 'https://mysite.com',
89
+ siteName: 'My Brand',
90
90
  },
91
91
  };
92
92
  ```
@@ -138,11 +138,11 @@ export const metadata: Metadata = {
138
138
  3. Configure Tailwind v4 (in `src/app/globals.css`):
139
139
 
140
140
  ```css
141
- @import "tailwindcss";
141
+ @import 'tailwindcss';
142
142
 
143
143
  @theme {
144
144
  --color-primary: #3b82f6;
145
- --font-sans: "Inter", sans-serif;
145
+ --font-sans: 'Inter', sans-serif;
146
146
  }
147
147
  ```
148
148