tribunal-kit 6.0.0 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/.manifest.json +78 -0
- package/.agent/ARCHITECTURE.md +19 -241
- package/.agent/agents/accessibility-reviewer.md +23 -16
- package/.agent/agents/ai-code-reviewer.md +25 -21
- package/.agent/agents/anti-pattern-reviewer.md +12 -7
- package/.agent/agents/api-architect.md +1 -0
- package/.agent/agents/backend-specialist.md +23 -22
- package/.agent/agents/cloud-engineer.md +1 -0
- package/.agent/agents/code-archaeologist.md +1 -0
- package/.agent/agents/complexity-reviewer.md +10 -7
- package/.agent/agents/database-architect.md +3 -2
- package/.agent/agents/db-latency-auditor.md +6 -2
- package/.agent/agents/debugger.md +3 -2
- package/.agent/agents/dependency-reviewer.md +1 -0
- package/.agent/agents/devops-engineer.md +9 -8
- package/.agent/agents/documentation-writer.md +6 -5
- package/.agent/agents/explorer-agent.md +1 -0
- package/.agent/agents/frontend-reviewer.md +21 -17
- package/.agent/agents/frontend-specialist.md +23 -20
- package/.agent/agents/game-developer.md +1 -0
- package/.agent/agents/interaction-reviewer.md +10 -5
- package/.agent/agents/logic-reviewer.md +3 -0
- package/.agent/agents/minimalist-reviewer.md +6 -0
- package/.agent/agents/mobile-developer.md +7 -6
- package/.agent/agents/mobile-reviewer.md +14 -13
- package/.agent/agents/orchestrator.md +3 -0
- package/.agent/agents/penetration-tester.md +1 -0
- package/.agent/agents/performance-optimizer.md +6 -5
- package/.agent/agents/performance-reviewer.md +6 -6
- package/.agent/agents/pipeline-reviewer.md +144 -0
- package/.agent/agents/precedence-reviewer.md +1 -0
- package/.agent/agents/product-manager.md +1 -0
- package/.agent/agents/product-owner.md +1 -0
- package/.agent/agents/product-reviewer.md +12 -7
- package/.agent/agents/project-planner.md +3 -0
- package/.agent/agents/qa-automation-engineer.md +50 -43
- package/.agent/agents/resilience-reviewer.md +1 -0
- package/.agent/agents/schema-reviewer.md +1 -0
- package/.agent/agents/security-auditor.md +24 -24
- package/.agent/agents/seo-specialist.md +33 -23
- package/.agent/agents/sql-reviewer.md +5 -4
- package/.agent/agents/supervisor-agent.md +12 -2
- package/.agent/agents/swarm-worker-contracts.md +13 -13
- package/.agent/agents/swarm-worker-registry.md +51 -51
- package/.agent/agents/system-architect.md +1 -0
- package/.agent/agents/test-coverage-reviewer.md +25 -22
- package/.agent/agents/test-engineer.md +12 -11
- package/.agent/agents/throughput-optimizer.md +45 -40
- package/.agent/agents/type-safety-reviewer.md +5 -4
- package/.agent/agents/ui-ux-auditor.md +6 -4
- package/.agent/agents/ui-visual-auditor.md +3 -0
- package/.agent/agents/ux-reviewer.md +11 -6
- package/.agent/agents/visual-reviewer.md +11 -6
- package/.agent/agents/vitals-reviewer.md +5 -4
- package/.agent/history/memory/.memory.idx +3716 -1
- package/.agent/history/memory/MEMORY.md +246 -1
- package/.agent/mcp_config.json +1 -6
- package/.agent/routing_index.json +2034 -263
- package/.agent/rules/GEMINI.md +12 -10
- package/.agent/rules/GEMINI_PLANNER.md +19 -21
- package/.agent/scripts/_colors.js +52 -54
- package/.agent/scripts/_utils.js +52 -53
- package/.agent/scripts/auto_preview.js +39 -43
- package/.agent/scripts/bundle_analyzer.js +47 -60
- package/.agent/scripts/case_law_manager.js +200 -294
- package/.agent/scripts/checklist.js +73 -94
- package/.agent/scripts/cicd_validator.js +305 -0
- package/.agent/scripts/compile_router.py +4 -111
- package/.agent/scripts/context_broker.js +317 -412
- package/.agent/scripts/contract_engine.js +402 -0
- package/.agent/scripts/dependency_analyzer.js +112 -124
- package/.agent/scripts/graph_builder.js +75 -103
- package/.agent/scripts/graph_visualizer.js +10 -12
- package/.agent/scripts/graph_zoom.js +38 -55
- package/.agent/scripts/guardrail_engine.js +195 -145
- package/.agent/scripts/impact_classifier.js +55 -30
- package/.agent/scripts/inner_loop_validator.js +108 -159
- package/.agent/scripts/integrity_manifest.js +59 -67
- package/.agent/scripts/lint_runner.js +65 -75
- package/.agent/scripts/marathon_harness.js +131 -208
- package/.agent/scripts/migrate_skills_frontmatter.py +4 -63
- package/.agent/scripts/minify_context.js +29 -33
- package/.agent/scripts/minimal_change_engine.js +95 -87
- package/.agent/scripts/mutation_runner.js +46 -62
- package/.agent/scripts/pipeline_engine.js +320 -209
- package/.agent/scripts/prompt_compiler.js +118 -93
- package/.agent/scripts/schema_validator.js +73 -121
- package/.agent/scripts/security_scan.js +88 -117
- package/.agent/scripts/session_manager.js +52 -69
- package/.agent/scripts/signal_detector.js +24 -22
- package/.agent/scripts/skill_evolution.js +184 -245
- package/.agent/scripts/skill_integrator.js +35 -48
- package/.agent/scripts/socratic_gate_policy.js +15 -12
- package/.agent/scripts/strengthen_skills.js +29 -33
- package/.agent/scripts/swarm_dispatcher.js +120 -151
- package/.agent/scripts/test_runner.js +54 -56
- package/.agent/scripts/token_budget_broker.js +9 -7
- package/.agent/scripts/trace_engine.js +126 -0
- package/.agent/scripts/verify_all.js +76 -93
- package/.agent/scripts/visual_audit.js +16 -21
- package/.agent/skill_topic_map.json +237 -0
- package/.agent/skills/12-principles-of-animation/SKILL.md +7 -0
- package/.agent/skills/60fps-animation/SKILL.md +7 -0
- package/.agent/skills/accessible-animation/SKILL.md +5 -1
- package/.agent/skills/adapt/SKILL.md +7 -1
- package/.agent/skills/advanced-rag-pipelines/SKILL.md +1 -0
- package/.agent/skills/agent-organizer/SKILL.md +1 -0
- package/.agent/skills/agentic-patterns/SKILL.md +33 -25
- package/.agent/skills/agentic-workflows-2026/SKILL.md +80 -0
- package/.agent/skills/ai-app-hardening/SKILL.md +59 -0
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +7 -6
- package/.agent/skills/animation-on-scroll/SKILL.md +24 -15
- package/.agent/skills/animation-systems/SKILL.md +11 -10
- package/.agent/skills/antfu-conventions/SKILL.md +7 -2
- package/.agent/skills/api-patterns/SKILL.md +14 -10
- package/.agent/skills/api-security-auditor/SKILL.md +15 -14
- package/.agent/skills/app-builder/SKILL.md +1 -0
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +2 -2
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +12 -12
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +3 -3
- package/.agent/skills/apple-design/SKILL.md +8 -7
- package/.agent/skills/architecture/SKILL.md +3 -2
- package/.agent/skills/audit-and-fix/SKILL.md +8 -5
- package/.agent/skills/authentication-best-practices/SKILL.md +9 -8
- package/.agent/skills/backend-security-expert/SKILL.md +1 -0
- package/.agent/skills/baseline-ui/SKILL.md +8 -7
- package/.agent/skills/bash-linux/SKILL.md +1 -0
- package/.agent/skills/behavioral-modes/SKILL.md +1 -0
- package/.agent/skills/better-colors/SKILL.md +11 -7
- package/.agent/skills/better-typography/SKILL.md +30 -16
- package/.agent/skills/better-ui/SKILL.md +17 -10
- package/.agent/skills/bolder/SKILL.md +6 -0
- package/.agent/skills/brainstorming/SKILL.md +6 -4
- package/.agent/skills/browser-native-ai/SKILL.md +5 -4
- package/.agent/skills/build-primitive/SKILL.md +5 -0
- package/.agent/skills/building-native-ui/SKILL.md +1 -0
- package/.agent/skills/cicd-pro/SKILL.md +2 -1
- package/.agent/skills/clarify/SKILL.md +19 -14
- package/.agent/skills/clean-code/SKILL.md +16 -15
- package/.agent/skills/cloud-architect/SKILL.md +1 -0
- package/.agent/skills/cobejs/SKILL.md +7 -9
- package/.agent/skills/code-review-checklist/SKILL.md +1 -0
- package/.agent/skills/codebase-design/SKILL.md +7 -2
- package/.agent/skills/colorize/SKILL.md +8 -3
- package/.agent/skills/compact-landing/SKILL.md +8 -3
- package/.agent/skills/company-logos/SKILL.md +6 -0
- package/.agent/skills/config-validator/SKILL.md +10 -9
- package/.agent/skills/containerization-pro/SKILL.md +6 -5
- package/.agent/skills/context-engineering-pro/SKILL.md +70 -0
- package/.agent/skills/create-design-md/SKILL.md +13 -5
- package/.agent/skills/critique/SKILL.md +10 -8
- package/.agent/skills/csharp-developer/SKILL.md +1 -0
- package/.agent/skills/data-validation-schemas/SKILL.md +28 -23
- package/.agent/skills/database-design/SKILL.md +2 -1
- package/.agent/skills/delight/SKILL.md +6 -0
- package/.agent/skills/deployment-procedures/SKILL.md +2 -1
- package/.agent/skills/design-lab/SKILL.md +5 -0
- package/.agent/skills/devops-engineer/SKILL.md +3 -2
- package/.agent/skills/devops-incident-responder/SKILL.md +2 -1
- package/.agent/skills/diagnosing-bugs/SKILL.md +12 -2
- package/.agent/skills/distill/SKILL.md +7 -2
- package/.agent/skills/documentation-templates/SKILL.md +3 -2
- package/.agent/skills/domain-modeling/SKILL.md +12 -4
- package/.agent/skills/duckdb-analytical-sql/SKILL.md +59 -0
- package/.agent/skills/edge-ai-mobile/SKILL.md +50 -0
- package/.agent/skills/edge-computing/SKILL.md +9 -8
- package/.agent/skills/emil-design-eng/SKILL.md +43 -27
- package/.agent/skills/error-resilience/SKILL.md +34 -16
- package/.agent/skills/expo-router-v4/SKILL.md +81 -0
- package/.agent/skills/extract-design-system/SKILL.md +12 -11
- package/.agent/skills/fabel-protocol/SKILL.md +24 -17
- package/.agent/skills/fixing-accessibility/SKILL.md +23 -16
- package/.agent/skills/fixing-metadata/SKILL.md +24 -13
- package/.agent/skills/fixing-motion-performance/SKILL.md +7 -5
- package/.agent/skills/framer-motion-expert/SKILL.md +29 -15
- package/.agent/skills/frontend-design/SKILL.md +21 -13
- package/.agent/skills/frontend-security-expert/SKILL.md +1 -0
- package/.agent/skills/game-design-expert/SKILL.md +1 -0
- package/.agent/skills/game-engineering-expert/SKILL.md +1 -0
- package/.agent/skills/generative-ui-expert/SKILL.md +3 -2
- package/.agent/skills/geo-fundamentals/SKILL.md +2 -1
- package/.agent/skills/git-pro/SKILL.md +10 -9
- package/.agent/skills/github-operations/SKILL.md +2 -1
- package/.agent/skills/gpt-taste/SKILL.md +7 -0
- package/.agent/skills/gsap-core/SKILL.md +26 -22
- package/.agent/skills/gsap-frameworks/SKILL.md +6 -5
- package/.agent/skills/gsap-performance/SKILL.md +4 -3
- package/.agent/skills/gsap-plugins/SKILL.md +34 -33
- package/.agent/skills/gsap-react/SKILL.md +9 -8
- package/.agent/skills/gsap-scrolltrigger/SKILL.md +34 -33
- package/.agent/skills/gsap-timeline/SKILL.md +18 -15
- package/.agent/skills/gsap-utils/SKILL.md +25 -24
- package/.agent/skills/harden/SKILL.md +9 -3
- package/.agent/skills/harness-protocol/SKILL.md +1 -0
- package/.agent/skills/i18n-localization/SKILL.md +10 -9
- package/.agent/skills/impeccable/SKILL.md +5 -0
- package/.agent/skills/improve-codebase-architecture/SKILL.md +10 -5
- package/.agent/skills/improve-ui/SKILL.md +12 -5
- package/.agent/skills/intelligent-routing/SKILL.md +7 -6
- package/.agent/skills/knowledge-graph/SKILL.md +1 -0
- package/.agent/skills/landing-page/SKILL.md +1 -0
- package/.agent/skills/lint-and-validate/SKILL.md +9 -4
- package/.agent/skills/llm-engineering/SKILL.md +55 -54
- package/.agent/skills/local-first/SKILL.md +20 -19
- package/.agent/skills/local-first-architecture/SKILL.md +6 -1
- package/.agent/skills/lottie-animation/SKILL.md +7 -3
- package/.agent/skills/marquee-loop/SKILL.md +1 -0
- package/.agent/skills/masked-reveal/SKILL.md +17 -4
- package/.agent/skills/mcp-builder/SKILL.md +13 -10
- package/.agent/skills/micro-interaction/SKILL.md +20 -5
- package/.agent/skills/mobile-design/SKILL.md +26 -15
- package/.agent/skills/monorepo-management/SKILL.md +3 -2
- package/.agent/skills/morphing-icons/SKILL.md +16 -6
- package/.agent/skills/motion-engineering/SKILL.md +19 -15
- package/.agent/skills/nextjs-react-expert/SKILL.md +26 -21
- package/.agent/skills/nodejs-best-practices/SKILL.md +89 -76
- package/.agent/skills/observability/SKILL.md +45 -44
- package/.agent/skills/opentelemetry-observability/SKILL.md +59 -0
- package/.agent/skills/page-transition-animation/SKILL.md +6 -3
- package/.agent/skills/parallel-agents/SKILL.md +7 -2
- package/.agent/skills/performance-profiling/SKILL.md +24 -13
- package/.agent/skills/plan-writing/SKILL.md +1 -0
- package/.agent/skills/platform-engineer/SKILL.md +3 -2
- package/.agent/skills/platform-engineering-opentofu/SKILL.md +68 -0
- package/.agent/skills/playwright-ai-e2e/SKILL.md +60 -0
- package/.agent/skills/playwright-best-practices/SKILL.md +29 -28
- package/.agent/skills/polish/SKILL.md +13 -12
- package/.agent/skills/powershell-windows/SKILL.md +1 -0
- package/.agent/skills/pricing-page/SKILL.md +8 -3
- package/.agent/skills/product-aware-heuristics/SKILL.md +122 -72
- package/.agent/skills/progressive-blur/SKILL.md +9 -4
- package/.agent/skills/project-idioms/SKILL.md +1 -0
- package/.agent/skills/property-based-testing/SKILL.md +58 -0
- package/.agent/skills/python-patterns/SKILL.md +1 -0
- package/.agent/skills/python-pro/SKILL.md +1 -0
- package/.agent/skills/quieter/SKILL.md +6 -0
- package/.agent/skills/react-doctor/SKILL.md +6 -0
- package/.agent/skills/react-specialist/SKILL.md +32 -28
- package/.agent/skills/readme-builder/SKILL.md +1 -0
- package/.agent/skills/realtime-patterns/SKILL.md +34 -33
- package/.agent/skills/red-team-tactics/SKILL.md +1 -0
- package/.agent/skills/redesign-skill/SKILL.md +6 -0
- package/.agent/skills/review-animations/SKILL.md +5 -2
- package/.agent/skills/review-animations/STANDARDS.md +37 -23
- package/.agent/skills/rust-pro/SKILL.md +1 -0
- package/.agent/skills/seo-fundamentals/SKILL.md +4 -3
- package/.agent/skills/server-management/SKILL.md +1 -0
- package/.agent/skills/shadcn-ui-expert/SKILL.md +28 -22
- package/.agent/skills/shape/SKILL.md +9 -2
- package/.agent/skills/skill-creator/SKILL.md +1 -0
- package/.agent/skills/soft-skill/SKILL.md +6 -0
- package/.agent/skills/sounds-on-the-web/SKILL.md +1 -0
- package/.agent/skills/sql-pro/SKILL.md +1 -0
- package/.agent/skills/supabase-postgres-best-practices/SKILL.md +1 -0
- package/.agent/skills/svg-animation/SKILL.md +16 -7
- package/.agent/skills/swiftui-expert/SKILL.md +1 -0
- package/.agent/skills/swiss-design/SKILL.md +5 -0
- package/.agent/skills/system-design-pro/SKILL.md +1 -0
- package/.agent/skills/systematic-debugging/SKILL.md +1 -0
- package/.agent/skills/tailwind-patterns/SKILL.md +25 -11
- package/.agent/skills/taste-skill/SKILL.md +6 -0
- package/.agent/skills/tdd-workflow/SKILL.md +5 -0
- package/.agent/skills/test-result-analyzer/SKILL.md +1 -0
- package/.agent/skills/testing-patterns/SKILL.md +123 -115
- package/.agent/skills/thermo-nuclear-code-quality-review/SKILL.md +5 -0
- package/.agent/skills/thinking-protocol/SKILL.md +3 -0
- package/.agent/skills/to-spring-or-not-to-spring/SKILL.md +9 -8
- package/.agent/skills/transitions-dev/SKILL.md +19 -6
- package/.agent/skills/trend-researcher/SKILL.md +1 -0
- package/.agent/skills/typescript-advanced/SKILL.md +23 -18
- package/.agent/skills/typeset/SKILL.md +10 -1
- package/.agent/skills/ui-reasoning-engine/SKILL.md +67 -48
- package/.agent/skills/ui-skill-packs/SKILL.md +6 -1
- package/.agent/skills/ui-skills-root/SKILL.md +39 -38
- package/.agent/skills/ui-ux-pro-max/SKILL.md +34 -26
- package/.agent/skills/ui-ux-researcher/SKILL.md +1 -0
- package/.agent/skills/vector-search-pgvector/SKILL.md +78 -0
- package/.agent/skills/vue-expert/SKILL.md +22 -19
- package/.agent/skills/vulnerability-scanner/SKILL.md +22 -21
- package/.agent/skills/web-accessibility-auditor/SKILL.md +2 -1
- package/.agent/skills/web-design-guidelines/SKILL.md +16 -10
- package/.agent/skills/web-quality-audit/SKILL.md +5 -0
- package/.agent/skills/webapp-testing/SKILL.md +14 -13
- package/.agent/skills/webgpu-performance/SKILL.md +1 -0
- package/.agent/skills/whimsy-injector/SKILL.md +9 -5
- package/.agent/skills/workflow-optimizer/SKILL.md +1 -0
- package/.agent/skills/zero-trust-passkeys/SKILL.md +90 -0
- package/.agent/templates/DESIGN.md +119 -110
- package/.agent/templates/design-tokens.json +9 -6
- package/.agent/workflows/acf.md +1 -0
- package/.agent/workflows/api-tester.md +1 -0
- package/.agent/workflows/audit.md +1 -0
- package/.agent/workflows/brainstorm.md +1 -0
- package/.agent/workflows/changelog.md +1 -0
- package/.agent/workflows/contract.md +60 -0
- package/.agent/workflows/create.md +1 -0
- package/.agent/workflows/debug.md +1 -0
- package/.agent/workflows/deploy.md +1 -0
- package/.agent/workflows/enhance.md +1 -0
- package/.agent/workflows/fix-ci.md +89 -0
- package/.agent/workflows/fix.md +1 -0
- package/.agent/workflows/generate.md +1 -0
- package/.agent/workflows/marathon.md +1 -0
- package/.agent/workflows/migrate.md +1 -0
- package/.agent/workflows/minimal.md +9 -7
- package/.agent/workflows/orchestrate.md +1 -0
- package/.agent/workflows/performance-benchmarker.md +1 -0
- package/.agent/workflows/pipeline.md +26 -21
- package/.agent/workflows/plan.md +1 -0
- package/.agent/workflows/preview.md +1 -0
- package/.agent/workflows/refactor.md +3 -2
- package/.agent/workflows/review-ai.md +4 -3
- package/.agent/workflows/review.md +1 -0
- package/.agent/workflows/session.md +1 -0
- package/.agent/workflows/status.md +1 -0
- package/.agent/workflows/strengthen-skills.md +1 -0
- package/.agent/workflows/super-prompt.md +1 -0
- package/.agent/workflows/swarm.md +15 -3
- package/.agent/workflows/test.md +8 -7
- package/.agent/workflows/tribunal-backend.md +3 -2
- package/.agent/workflows/tribunal-cicd.md +104 -0
- package/.agent/workflows/tribunal-database.md +1 -0
- package/.agent/workflows/tribunal-frontend.md +8 -6
- package/.agent/workflows/tribunal-full.md +15 -14
- package/.agent/workflows/tribunal-mobile.md +6 -5
- package/.agent/workflows/tribunal-performance.md +1 -0
- package/.agent/workflows/tribunal-speed.md +1 -0
- package/.agent/workflows/tribunal-ui.md +29 -21
- package/.agent/workflows/ui-ux-pro-max.md +19 -15
- package/CONTRIBUTING.md +3 -3
- package/README.md +160 -88
- package/SECURITY.md +11 -11
- package/bin/mcp-server.js +512 -233
- package/bin/tribunal-kit.js +29 -30
- package/bin/wrapper.js +45 -48
- package/dist/cli.js +26 -0
- package/dist/commands/case.js +2 -0
- package/dist/commands/contract.js +440 -0
- package/dist/commands/memory.js +3 -2
- package/dist/commands/native.js +36 -0
- package/dist/commands/status.js +6 -0
- package/dist/esm/index.mjs +32 -0
- package/dist/index.d.ts +58 -3
- package/package.json +20 -16
- package/scripts/benchmark.js +62 -86
- package/scripts/changelog.js +67 -73
- package/scripts/fix-vbc.js +13 -15
- package/scripts/fix-vbc.ps1 +2 -118
- package/scripts/stress_benchmark.js +358 -0
- package/scripts/sync-version.js +71 -41
- package/scripts/validate-payload.js +23 -30
- package/scripts/visual_audit.js +23 -13
|
@@ -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
|
|
12
|
-
| ---------------- |
|
|
13
|
-
| `research` | any
|
|
14
|
-
| `research` | security, vulnerability, owasp
|
|
15
|
-
| `research` | database, schema, sql, orm
|
|
16
|
-
| `research` | performance, profiling, optimization
|
|
17
|
-
| `generate_code` | api, route, endpoint, server, express, auth, jwt
|
|
18
|
-
| `generate_code` | python, fastapi, django, flask
|
|
19
|
-
| `generate_code` | c#, .net, blazor, aspnet
|
|
20
|
-
| `generate_code` | component, hook, react, next, ui, css
|
|
21
|
-
| `generate_code` | mobile, react native, flutter, ios, android
|
|
22
|
-
| `generate_code` | docker, ci, cd, deploy, github actions, cloud
|
|
23
|
-
| `generate_code` | sql, query, migration, prisma, drizzle
|
|
24
|
-
| `generate_code` | vue, nuxt
|
|
25
|
-
| `review_code` | api, backend, auth
|
|
26
|
-
| `review_code` | react, component, hook
|
|
27
|
-
| `review_code` | sql, query
|
|
28
|
-
| `review_code` | security (any domain)
|
|
29
|
-
| `debug` | any
|
|
30
|
-
| `plan` | any
|
|
31
|
-
| `design_schema` | any
|
|
32
|
-
| `write_docs` | any
|
|
33
|
-
| `security_audit` | any
|
|
34
|
-
| `optimize` | any
|
|
35
|
-
| `test` | any
|
|
36
|
-
| `visual_audit` | ui, component, visual, screenshot, layout, render| `ui-visual-auditor`
|
|
37
|
-
| `generate_code` | aws, terraform, ecs, fargate, lambda, iac, vpc
|
|
38
|
-
| `plan` | system design, scale, capacity, architecture
|
|
39
|
-
| `test` | e2e, playwright, automation, cypress
|
|
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
|
|
58
|
-
|
|
|
59
|
-
| `backend-specialist.md`
|
|
60
|
-
| `python-pro.md`
|
|
61
|
-
| `csharp-developer`
|
|
62
|
-
| `frontend-specialist.md`
|
|
63
|
-
| `react-specialist.md`
|
|
64
|
-
| `vue-expert.md`
|
|
65
|
-
| `mobile-developer.md`
|
|
66
|
-
| `database-architect.md`
|
|
67
|
-
| `sql-pro.md`
|
|
68
|
-
| `devops-engineer.md`
|
|
69
|
-
| `security-auditor.md`
|
|
70
|
-
| `performance-optimizer.md`
|
|
71
|
-
| `debugger.md`
|
|
72
|
-
| `project-planner.md`
|
|
73
|
-
| `documentation-writer.md`
|
|
74
|
-
| `test-engineer.md`
|
|
75
|
-
| `explorer-agent.md`
|
|
76
|
-
| `cloud-engineer.md`
|
|
77
|
-
| `system-architect.md`
|
|
78
|
-
| `qa-automation-engineer.md
|
|
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(
|
|
37
|
-
it(
|
|
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(
|
|
44
|
-
it(
|
|
44
|
+
describe('calculateDiscount()', () => {
|
|
45
|
+
it('applies 10% to orders over $100', () => {
|
|
45
46
|
expect(calculateDiscount(150)).toBe(135);
|
|
46
47
|
});
|
|
47
|
-
it(
|
|
48
|
+
it('applies no discount to orders at exactly $100', () => {
|
|
48
49
|
expect(calculateDiscount(100)).toBe(100); // Boundary edge case
|
|
49
50
|
});
|
|
50
|
-
it(
|
|
51
|
+
it('applies no discount to orders under $100', () => {
|
|
51
52
|
expect(calculateDiscount(50)).toBe(50);
|
|
52
53
|
});
|
|
53
|
-
it(
|
|
54
|
+
it('throws on negative input', () => {
|
|
54
55
|
expect(() => calculateDiscount(-50)).toThrow(/negative/i);
|
|
55
56
|
});
|
|
56
|
-
it(
|
|
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(
|
|
85
|
+
const button = container.querySelector('.btn-primary > span');
|
|
85
86
|
|
|
86
87
|
// ❌ BRITTLE: Index-based selection — breaks when order changes
|
|
87
|
-
const firstItem = getAllByRole(
|
|
88
|
+
const firstItem = getAllByRole('listitem')[0];
|
|
88
89
|
|
|
89
90
|
// ❌ BRITTLE: Text content in another language context (i18n risk)
|
|
90
|
-
const btn = getByText(
|
|
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(
|
|
94
|
+
const submitBtn = getByRole('button', { name: /submit/i });
|
|
94
95
|
|
|
95
96
|
// ✅ RESILIENT: data-testid for non-semantic elements
|
|
96
|
-
const card = getByTestId(
|
|
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(
|
|
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
|
-
|
|
110
|
-
|
|
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
|
|
118
|
-
const server = setupServer(
|
|
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
|
-
|
|
123
|
-
expect.stringContaining(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
67
|
+
it('adds VAT to the price', () => {
|
|
67
68
|
expect(addVat(100, 0.2)).toBe(120);
|
|
68
69
|
});
|
|
69
70
|
|
|
70
|
-
it(
|
|
71
|
-
expect(() => addVat(100, -0.2)).toThrow(
|
|
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(
|
|
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(
|
|
90
|
-
insert: vi.fn().mockResolvedValue({ id:
|
|
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(
|
|
95
|
-
vi.mock(
|
|
96
|
-
vi.mock(
|
|
97
|
-
vi.mock(
|
|
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
|
|
|
@@ -21,6 +21,7 @@ You audit **server-side files only** — `.ts` and `.js` in `/api`, `/server`, `
|
|
|
21
21
|
## Mandatory Pre-Flight Context Inspection
|
|
22
22
|
|
|
23
23
|
Before auditing server throughput, you MUST inspect:
|
|
24
|
+
|
|
24
25
|
1. `package.json` → Check Node.js version, HTTP client (`undici`, `axios`, native `fetch`), and caching engines (`lru-cache`, `redis`)
|
|
25
26
|
2. Server entry points (`server.ts`, `app/api/`) → Identify event-loop blocking operations (`readFileSync`, `JSON.parse` on large payloads)
|
|
26
27
|
3. Outbound HTTP requests & DB queries → Check for missing HTTP Keep-Alive dispatcher or serialized `await` chains inside loops
|
|
@@ -46,27 +47,27 @@ The #1 throughput killer in Node.js. A single 50ms sync call blocks ALL concurre
|
|
|
46
47
|
|
|
47
48
|
```typescript
|
|
48
49
|
// ❌ BLOCKS EVENT LOOP: Synchronous file read in async handler
|
|
49
|
-
app.get(
|
|
50
|
-
const data = fs.readFileSync(
|
|
50
|
+
app.get('/config', async (req, res) => {
|
|
51
|
+
const data = fs.readFileSync('/etc/config.json', 'utf8'); // BLOCKS all requests
|
|
51
52
|
res.json(JSON.parse(data));
|
|
52
53
|
});
|
|
53
54
|
|
|
54
55
|
// ✅ APPROVED: Async file read — yields to event loop
|
|
55
|
-
app.get(
|
|
56
|
-
const data = await fs.promises.readFile(
|
|
56
|
+
app.get('/config', async (req, res) => {
|
|
57
|
+
const data = await fs.promises.readFile('/etc/config.json', 'utf8');
|
|
57
58
|
res.json(JSON.parse(data));
|
|
58
59
|
});
|
|
59
60
|
|
|
60
61
|
// ❌ BLOCKS EVENT LOOP: JSON.parse on large payload (> 1MB) on main thread
|
|
61
|
-
app.post(
|
|
62
|
+
app.post('/import', async (req, res) => {
|
|
62
63
|
const data = JSON.parse(largeBuffer.toString()); // 50-200ms blocking
|
|
63
64
|
});
|
|
64
65
|
|
|
65
66
|
// ✅ APPROVED: Stream-parse large JSON
|
|
66
|
-
import { parser } from
|
|
67
|
-
import { streamArray } from
|
|
67
|
+
import { parser } from 'stream-json';
|
|
68
|
+
import { streamArray } from 'stream-json/streamers/StreamArray';
|
|
68
69
|
|
|
69
|
-
app.post(
|
|
70
|
+
app.post('/import', async (req, res) => {
|
|
70
71
|
const pipeline = req.pipe(parser()).pipe(streamArray());
|
|
71
72
|
for await (const { value } of pipeline) {
|
|
72
73
|
await processItem(value); // Non-blocking, item-by-item
|
|
@@ -74,11 +75,11 @@ app.post("/import", async (req, res) => {
|
|
|
74
75
|
});
|
|
75
76
|
|
|
76
77
|
// ❌ BLOCKS EVENT LOOP: Synchronous crypto operations
|
|
77
|
-
const hash = crypto.pbkdf2Sync(password, salt, 100000, 64,
|
|
78
|
+
const hash = crypto.pbkdf2Sync(password, salt, 100000, 64, 'sha512');
|
|
78
79
|
|
|
79
80
|
// ✅ APPROVED: Async crypto
|
|
80
81
|
const hash = await new Promise((resolve, reject) => {
|
|
81
|
-
crypto.pbkdf2(password, salt, 100000, 64,
|
|
82
|
+
crypto.pbkdf2(password, salt, 100000, 64, 'sha512', (err, key) => {
|
|
82
83
|
err ? reject(err) : resolve(key);
|
|
83
84
|
});
|
|
84
85
|
});
|
|
@@ -101,7 +102,11 @@ async function getDashboard(userId: string) {
|
|
|
101
102
|
|
|
102
103
|
// ✅ APPROVED: Parallel execution (300ms total — 3x faster)
|
|
103
104
|
async function getDashboard(userId: string) {
|
|
104
|
-
const [user, orders, notifications] = await Promise.all([
|
|
105
|
+
const [user, orders, notifications] = await Promise.all([
|
|
106
|
+
getUser(userId),
|
|
107
|
+
getOrders(userId),
|
|
108
|
+
getNotifications(userId),
|
|
109
|
+
]);
|
|
105
110
|
return { user, orders, notifications };
|
|
106
111
|
}
|
|
107
112
|
|
|
@@ -112,12 +117,12 @@ for (const id of userIds) {
|
|
|
112
117
|
}
|
|
113
118
|
|
|
114
119
|
// ✅ APPROVED: Parallel with controlled concurrency
|
|
115
|
-
const results = await Promise.all(userIds.map(
|
|
120
|
+
const results = await Promise.all(userIds.map(id => fetchUser(id)));
|
|
116
121
|
|
|
117
122
|
// ✅ APPROVED: Batched concurrency for large arrays (avoid overwhelming DB)
|
|
118
|
-
import pLimit from
|
|
123
|
+
import pLimit from 'p-limit';
|
|
119
124
|
const limit = pLimit(10); // Max 10 concurrent
|
|
120
|
-
const results = await Promise.all(userIds.map(
|
|
125
|
+
const results = await Promise.all(userIds.map(id => limit(() => fetchUser(id))));
|
|
121
126
|
```
|
|
122
127
|
|
|
123
128
|
---
|
|
@@ -128,7 +133,7 @@ const results = await Promise.all(userIds.map((id) => limit(() => fetchUser(id))
|
|
|
128
133
|
// ❌ MEMORY LEAK: Global cache with no eviction — grows unbounded
|
|
129
134
|
const cache = new Map<string, any>(); // Lives forever, entries never removed
|
|
130
135
|
|
|
131
|
-
app.get(
|
|
136
|
+
app.get('/data/:id', async (req, res) => {
|
|
132
137
|
if (!cache.has(req.params.id)) {
|
|
133
138
|
cache.set(req.params.id, await fetchData(req.params.id));
|
|
134
139
|
}
|
|
@@ -137,7 +142,7 @@ app.get("/data/:id", async (req, res) => {
|
|
|
137
142
|
// After 100K unique IDs → hundreds of MB consumed → OOM crash
|
|
138
143
|
|
|
139
144
|
// ✅ APPROVED: LRU cache with max size and TTL
|
|
140
|
-
import { LRUCache } from
|
|
145
|
+
import { LRUCache } from 'lru-cache';
|
|
141
146
|
const cache = new LRUCache<string, any>({
|
|
142
147
|
max: 1000, // Maximum 1000 entries
|
|
143
148
|
ttl: 1000 * 60 * 5, // 5-minute TTL
|
|
@@ -149,17 +154,17 @@ const id = setInterval(() => syncMetrics(), 30000);
|
|
|
149
154
|
|
|
150
155
|
// ✅ APPROVED: Graceful shutdown clears interval
|
|
151
156
|
const id = setInterval(() => syncMetrics(), 30000);
|
|
152
|
-
process.on(
|
|
153
|
-
process.on(
|
|
157
|
+
process.on('SIGTERM', () => clearInterval(id));
|
|
158
|
+
process.on('SIGINT', () => clearInterval(id));
|
|
154
159
|
|
|
155
160
|
// ❌ MEMORY LEAK: Event emitter listeners accumulate
|
|
156
|
-
server.on(
|
|
161
|
+
server.on('request', handler);
|
|
157
162
|
// If called repeatedly (hot reload) → MaxListenersExceededWarning
|
|
158
163
|
|
|
159
164
|
// ✅ APPROVED: Remove listener on cleanup
|
|
160
|
-
server.on(
|
|
165
|
+
server.on('request', handler);
|
|
161
166
|
// On shutdown/reload:
|
|
162
|
-
server.removeListener(
|
|
167
|
+
server.removeListener('request', handler);
|
|
163
168
|
```
|
|
164
169
|
|
|
165
170
|
---
|
|
@@ -168,20 +173,20 @@ server.removeListener("request", handler);
|
|
|
168
173
|
|
|
169
174
|
```typescript
|
|
170
175
|
// ❌ MAIN THREAD: CPU-heavy operation blocks ALL requests
|
|
171
|
-
app.post(
|
|
176
|
+
app.post('/resize', async (req, res) => {
|
|
172
177
|
const resized = sharp(buffer).resize(800, 600).toBuffer(); // 200-500ms blocking
|
|
173
178
|
res.send(resized);
|
|
174
179
|
});
|
|
175
180
|
|
|
176
181
|
// ✅ APPROVED: Offload to Worker Thread
|
|
177
|
-
import { Worker } from
|
|
182
|
+
import { Worker } from 'worker_threads';
|
|
178
183
|
|
|
179
|
-
app.post(
|
|
180
|
-
const worker = new Worker(
|
|
184
|
+
app.post('/resize', async (req, res) => {
|
|
185
|
+
const worker = new Worker('./workers/resize.js', {
|
|
181
186
|
workerData: { buffer: req.body, width: 800, height: 600 },
|
|
182
187
|
});
|
|
183
|
-
worker.on(
|
|
184
|
-
worker.on(
|
|
188
|
+
worker.on('message', result => res.send(result));
|
|
189
|
+
worker.on('error', err => res.status(500).json({ error: err.message }));
|
|
185
190
|
});
|
|
186
191
|
|
|
187
192
|
// Flag these operations as Worker Thread candidates:
|
|
@@ -198,16 +203,16 @@ app.post("/resize", async (req, res) => {
|
|
|
198
203
|
|
|
199
204
|
```typescript
|
|
200
205
|
// ❌ BUFFER BLOAT: Entire file loaded into memory before sending
|
|
201
|
-
app.get(
|
|
206
|
+
app.get('/export', async (req, res) => {
|
|
202
207
|
const data = await db.orders.findMany(); // 50MB result set
|
|
203
208
|
const csv = convertToCSV(data); // Another 50MB in memory
|
|
204
209
|
res.send(csv); // Total: 100MB per request
|
|
205
210
|
});
|
|
206
211
|
|
|
207
212
|
// ✅ APPROVED: Stream directly to response
|
|
208
|
-
app.get(
|
|
209
|
-
res.setHeader(
|
|
210
|
-
res.setHeader(
|
|
213
|
+
app.get('/export', async (req, res) => {
|
|
214
|
+
res.setHeader('Content-Type', 'text/csv');
|
|
215
|
+
res.setHeader('Transfer-Encoding', 'chunked');
|
|
211
216
|
|
|
212
217
|
const cursor = db.orders.findMany({ cursor: true });
|
|
213
218
|
for await (const batch of cursor) {
|
|
@@ -217,16 +222,16 @@ app.get("/export", async (req, res) => {
|
|
|
217
222
|
});
|
|
218
223
|
|
|
219
224
|
// ❌ BUFFER BLOAT: Reading entire upload before processing
|
|
220
|
-
app.post(
|
|
225
|
+
app.post('/upload', async (req, res) => {
|
|
221
226
|
const body = await req.arrayBuffer(); // Entire file in memory
|
|
222
227
|
await processFile(Buffer.from(body));
|
|
223
228
|
});
|
|
224
229
|
|
|
225
230
|
// ✅ APPROVED: Pipe stream directly
|
|
226
|
-
app.post(
|
|
231
|
+
app.post('/upload', async (req, res) => {
|
|
227
232
|
const writeStream = fs.createWriteStream(`/uploads/${filename}`);
|
|
228
233
|
req.pipe(writeStream);
|
|
229
|
-
writeStream.on(
|
|
234
|
+
writeStream.on('finish', () => res.json({ status: 'uploaded' }));
|
|
230
235
|
});
|
|
231
236
|
```
|
|
232
237
|
|
|
@@ -237,15 +242,15 @@ app.post("/upload", async (req, res) => {
|
|
|
237
242
|
```typescript
|
|
238
243
|
// ❌ NO KEEP-ALIVE: New TCP connection per outbound fetch
|
|
239
244
|
async function callExternalAPI(data: any) {
|
|
240
|
-
const res = await fetch(
|
|
241
|
-
method:
|
|
245
|
+
const res = await fetch('https://api.external.com/v1/data', {
|
|
246
|
+
method: 'POST',
|
|
242
247
|
body: JSON.stringify(data),
|
|
243
248
|
});
|
|
244
249
|
// Each call = DNS lookup + TCP handshake + TLS negotiation (100-300ms overhead)
|
|
245
250
|
}
|
|
246
251
|
|
|
247
252
|
// ✅ APPROVED: Reuse connections with http.Agent
|
|
248
|
-
import { Agent } from
|
|
253
|
+
import { Agent } from 'undici';
|
|
249
254
|
|
|
250
255
|
const agent = new Agent({
|
|
251
256
|
keepAliveTimeout: 30_000,
|
|
@@ -254,8 +259,8 @@ const agent = new Agent({
|
|
|
254
259
|
});
|
|
255
260
|
|
|
256
261
|
async function callExternalAPI(data: any) {
|
|
257
|
-
const res = await fetch(
|
|
258
|
-
method:
|
|
262
|
+
const res = await fetch('https://api.external.com/v1/data', {
|
|
263
|
+
method: 'POST',
|
|
259
264
|
body: JSON.stringify(data),
|
|
260
265
|
dispatcher: agent,
|
|
261
266
|
});
|
|
@@ -279,7 +284,7 @@ do {
|
|
|
279
284
|
const batch = await prisma.user.findMany({
|
|
280
285
|
take: 100,
|
|
281
286
|
...(cursor ? { skip: 1, cursor: { id: cursor } } : {}),
|
|
282
|
-
orderBy: { id:
|
|
287
|
+
orderBy: { id: 'asc' },
|
|
283
288
|
});
|
|
284
289
|
for (const user of batch) {
|
|
285
290
|
await sendEmail(user.email);
|
|
@@ -20,6 +20,7 @@ TypeScript is a contract system. Your job is to ensure every contract is honored
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before auditing TypeScript safety, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. `tsconfig.json` → Check `strict`, `noImplicitAny`, `strictNullChecks`, `noUncheckedIndexedAccess` settings
|
|
24
25
|
2. `package.json` → Check `@types/*` dependencies and TypeScript compiler version
|
|
25
26
|
3. Imported module declarations (`.d.ts` files or exported types) → Ensure interfaces exist and match contract usage
|
|
@@ -37,7 +38,7 @@ function process(data: any) {
|
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
// ❌ REJECTED: Cast from unknown response — no runtime validation
|
|
40
|
-
const result: any = await fetch(
|
|
41
|
+
const result: any = await fetch('/api').then(r => r.json());
|
|
41
42
|
|
|
42
43
|
// ✅ APPROVED: Narrow interface defined
|
|
43
44
|
function process(data: { name: string; id: number }) {
|
|
@@ -45,7 +46,7 @@ function process(data: { name: string; id: number }) {
|
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
// ✅ APPROVED: Zod validates at runtime boundary
|
|
48
|
-
const result = UserSchema.parse(await fetch(
|
|
49
|
+
const result = UserSchema.parse(await fetch('/api').then(r => r.json()));
|
|
49
50
|
|
|
50
51
|
// ✅ APPROVED with documented justification
|
|
51
52
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -70,7 +71,7 @@ const user = UserSchema.parse(response);
|
|
|
70
71
|
|
|
71
72
|
// ✅ APPROVED: Type guard with actual check
|
|
72
73
|
function isUser(data: unknown): data is User {
|
|
73
|
-
return typeof data ===
|
|
74
|
+
return typeof data === 'object' && data !== null && 'id' in data;
|
|
74
75
|
}
|
|
75
76
|
```
|
|
76
77
|
|
|
@@ -111,7 +112,7 @@ const city = user.address.city;
|
|
|
111
112
|
const first = arr[0].name; // arr could be empty
|
|
112
113
|
|
|
113
114
|
// ✅ APPROVED: Optional chaining with fallback
|
|
114
|
-
const city = user.address?.city ??
|
|
115
|
+
const city = user.address?.city ?? 'Unknown';
|
|
115
116
|
|
|
116
117
|
// ✅ APPROVED: Guard before access
|
|
117
118
|
if (arr.length > 0) {
|
|
@@ -22,6 +22,7 @@ skills:
|
|
|
22
22
|
## Mandatory Pre-Flight Context Inspection
|
|
23
23
|
|
|
24
24
|
Before auditing UI/UX governance, you MUST inspect:
|
|
25
|
+
|
|
25
26
|
1. `DESIGN.md` / `theme.css` → Check active visual direction, color system, and spatial tokens
|
|
26
27
|
2. Component hierarchy → Check if the `🧠 UI Reasoning Engine Trace` block was produced before component code
|
|
27
28
|
3. Accessibility & Layout → Check touch targets (min 44x44px), ARIA roles, and responsive breakpoint rules
|
|
@@ -31,6 +32,7 @@ Before auditing UI/UX governance, you MUST inspect:
|
|
|
31
32
|
## The UI Multi-Agent Orchestration Loop
|
|
32
33
|
|
|
33
34
|
When reviewing code, you must synthesize findings from the 6 specialized reviewers:
|
|
35
|
+
|
|
34
36
|
1. **ux-reviewer:** Verifies Hick's law, scannability, cognitive load, and progressive disclosure.
|
|
35
37
|
2. **visual-reviewer:** Verifies margins, typographic hierarchy, 8px grids, and contrast.
|
|
36
38
|
3. **interaction-reviewer:** Verifies all interactive states (hover, focus, active, disabled) and micro-interactions.
|
|
@@ -42,10 +44,10 @@ When reviewing code, you must synthesize findings from the 6 specialized reviewe
|
|
|
42
44
|
|
|
43
45
|
## Strict Rejection Gates (Blocking)
|
|
44
46
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
- **Missing Reasoning Trace:** If the Maker agent fails to output the `🧠 UI Reasoning Engine Trace` block before the code, output is immediately REJECTED.
|
|
48
|
+
- **The Purple brand color (#7C3AED):** Immediately REJECTED.
|
|
49
|
+
- **Lack of Hover/Active states:** Rejects any clickable button or card that does not explicitly implement hover scales or `active:scale-[0.97]` click indicators.
|
|
50
|
+
- **Layout Shift (CLS):** Rejects images or media content containers that do not declare explicit aspect ratios or spacing dimensions.
|
|
49
51
|
|
|
50
52
|
---
|
|
51
53
|
|
|
@@ -18,6 +18,7 @@ skills:
|
|
|
18
18
|
## Mandatory Pre-Flight Context Inspection
|
|
19
19
|
|
|
20
20
|
Before auditing rendered visuals and DOM layouts, you MUST inspect:
|
|
21
|
+
|
|
21
22
|
1. Breakpoint configs (`tailwind.config.js`, `media.css`) → Verify 375px (mobile), 768px (tablet), and 1440px (desktop) breakpoint bounds
|
|
22
23
|
2. Image & Video assets → Confirm presence of `aspect-ratio` or explicit width/height dimensions to eliminate layout shifts
|
|
23
24
|
3. Typography wrap rules → Verify `text-wrap: balance` / `pretty` usage on headings and body text
|
|
@@ -39,6 +40,7 @@ You inspect rendered HTML, DOM elements, or captured screenshots at multiple vie
|
|
|
39
40
|
## Code Comparison Examples
|
|
40
41
|
|
|
41
42
|
### Layout Shift (CLS) Violation
|
|
43
|
+
|
|
42
44
|
```tsx
|
|
43
45
|
// ❌ REJECTED: Missing width/height or aspect-ratio on image. Causes layout jump on load.
|
|
44
46
|
<img src="/hero-illustration.webp" className="w-full h-auto" />
|
|
@@ -50,6 +52,7 @@ You inspect rendered HTML, DOM elements, or captured screenshots at multiple vie
|
|
|
50
52
|
```
|
|
51
53
|
|
|
52
54
|
### Responsive Container Overflow
|
|
55
|
+
|
|
53
56
|
```tsx
|
|
54
57
|
// ❌ REJECTED: Hardcoded width on container causing horizontal overflow on mobile viewports
|
|
55
58
|
<div className="w-[600px] p-4">
|