tribunal-kit 9.2.4 → 9.2.6
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 -78
- package/.agent/.shared/ui-ux-pro-max/README.md +4 -4
- package/.agent/.tribunal/session.jsonl +15 -15
- package/.agent/ADRs/ADR-001-system-architecture-intelligence.md +49 -0
- package/.agent/ARCHITECTURE.md +63 -63
- package/.agent/agents/accessibility-reviewer.md +109 -109
- package/.agent/agents/agent-shield-auditor.md +21 -18
- package/.agent/agents/ai-code-reviewer.md +223 -223
- package/.agent/agents/anti-pattern-reviewer.md +104 -104
- package/.agent/agents/anti-slop-auditor.md +79 -0
- package/.agent/agents/api-architect.md +94 -89
- package/.agent/agents/architecture-auditor.md +196 -0
- package/.agent/agents/backend-security-architect.md +115 -0
- package/.agent/agents/backend-specialist.md +242 -242
- package/.agent/agents/cloud-engineer.md +120 -120
- package/.agent/agents/code-archaeologist.md +186 -186
- package/.agent/agents/complexity-reviewer.md +76 -76
- package/.agent/agents/database-architect.md +206 -206
- package/.agent/agents/db-latency-auditor.md +237 -237
- package/.agent/agents/debugger.md +215 -215
- package/.agent/agents/dependency-reviewer.md +124 -124
- package/.agent/agents/devops-engineer.md +240 -240
- package/.agent/agents/documentation-writer.md +228 -228
- package/.agent/agents/explorer-agent.md +186 -186
- package/.agent/agents/frontend-reviewer.md +197 -195
- package/.agent/agents/frontend-specialist.md +123 -122
- package/.agent/agents/game-developer.md +68 -68
- package/.agent/agents/harness-manager.md +57 -49
- package/.agent/agents/human-gate-negotiator.md +26 -22
- package/.agent/agents/interaction-reviewer.md +123 -123
- package/.agent/agents/kernel-scheduler.md +60 -56
- package/.agent/agents/logic-reviewer.md +147 -147
- package/.agent/agents/memory-archivist.md +42 -37
- package/.agent/agents/minimalist-reviewer.md +104 -104
- package/.agent/agents/mobile-developer.md +216 -216
- package/.agent/agents/mobile-reviewer.md +180 -180
- package/.agent/agents/orchestrator.md +267 -268
- package/.agent/agents/penetration-tester.md +180 -180
- package/.agent/agents/performance-optimizer.md +202 -202
- package/.agent/agents/performance-reviewer.md +180 -180
- package/.agent/agents/pipeline-reviewer.md +144 -144
- package/.agent/agents/precedence-reviewer.md +266 -266
- package/.agent/agents/product-manager.md +167 -167
- package/.agent/agents/product-owner.md +103 -103
- package/.agent/agents/product-reviewer.md +103 -103
- package/.agent/agents/project-planner.md +180 -181
- package/.agent/agents/qa-automation-engineer.md +244 -244
- package/.agent/agents/resilience-reviewer.md +108 -108
- package/.agent/agents/schema-reviewer.md +87 -87
- package/.agent/agents/security-auditor.md +203 -204
- package/.agent/agents/seo-specialist.md +213 -213
- package/.agent/agents/sql-reviewer.md +180 -180
- package/.agent/agents/supervisor-agent.md +202 -202
- package/.agent/agents/swarm-worker-contracts.md +170 -170
- package/.agent/agents/swarm-worker-registry.md +99 -99
- package/.agent/agents/system-architect.md +274 -105
- package/.agent/agents/test-coverage-reviewer.md +181 -181
- package/.agent/agents/test-engineer.md +138 -138
- package/.agent/agents/throughput-optimizer.md +316 -316
- package/.agent/agents/type-safety-reviewer.md +202 -202
- package/.agent/agents/ui-ux-auditor.md +85 -80
- package/.agent/agents/ui-visual-auditor.md +107 -102
- package/.agent/agents/ux-reviewer.md +109 -109
- package/.agent/agents/visual-reviewer.md +103 -103
- package/.agent/agents/vitals-reviewer.md +245 -245
- package/.agent/config/claude.json +18 -18
- package/.agent/config/plugin.json +102 -102
- package/.agent/config/slash-commands.json +115 -115
- package/.agent/config/specialist-registry.json +415 -415
- package/.agent/config/system-prompt.md +258 -258
- package/.agent/history/arch-mapper-cache.json +6712 -0
- package/.agent/history/architecture-intelligence.html +794 -0
- package/.agent/history/architecture-model.json +16096 -0
- package/.agent/history/architecture-verification.json +22 -0
- package/.agent/history/architecture.idx.json +5746 -0
- package/.agent/history/integrity_manifest.json +369 -3158
- package/.agent/mcp_config.json +32 -32
- package/.agent/patterns/generator.md +11 -11
- package/.agent/patterns/inversion.md +14 -14
- package/.agent/patterns/pipeline.md +11 -11
- package/.agent/patterns/reviewer.md +15 -15
- package/.agent/patterns/tool-wrapper.md +11 -11
- package/.agent/plans/implementation_plan.md +55 -0
- package/.agent/plans/task.md +41 -0
- package/.agent/routing_index.json +1566 -286
- package/.agent/rules/GEMINI.md +437 -437
- package/.agent/rules/GEMINI_PLANNER.md +82 -82
- package/.agent/rules/kernel.md +89 -86
- package/.agent/scripts/_colors.js +210 -210
- package/.agent/scripts/_utils.js +378 -377
- package/.agent/scripts/ab_json_experiment.js +129 -0
- package/.agent/scripts/architecture_diff.js +260 -0
- package/.agent/scripts/architecture_extractor.js +753 -0
- package/.agent/scripts/architecture_health.js +256 -0
- package/.agent/scripts/architecture_mapper.js +691 -0
- package/.agent/scripts/architecture_verifier.js +270 -0
- package/.agent/scripts/architecture_visualizer.js +873 -0
- package/.agent/scripts/ast_context_loader.js +137 -137
- package/.agent/scripts/auto_preview.js +203 -203
- package/.agent/scripts/backend_audit.js +238 -0
- package/.agent/scripts/backend_report_generator.js +161 -0
- package/.agent/scripts/benchmark_suite.js +493 -0
- package/.agent/scripts/blast_radius_engine.js +234 -0
- package/.agent/scripts/browser_audit.js +102 -102
- package/.agent/scripts/bundle_analyzer.js +287 -287
- package/.agent/scripts/case_law_manager.js +887 -887
- package/.agent/scripts/checklist.js +304 -300
- package/.agent/scripts/cicd_validator.js +305 -305
- package/.agent/scripts/consolidation_experiment.js +543 -0
- package/.agent/scripts/context_broker.js +962 -962
- package/.agent/scripts/context_compiler.js +1174 -1112
- package/.agent/scripts/contract_engine.js +402 -402
- package/.agent/scripts/cross_agent_correlator.js +223 -0
- package/.agent/scripts/dependency_analyzer.js +335 -313
- package/.agent/scripts/evidence_verifier.js +171 -0
- package/.agent/scripts/finding_schema.js +104 -0
- package/.agent/scripts/findings_validator.js +147 -0
- package/.agent/scripts/graph_builder.js +384 -384
- package/.agent/scripts/graph_visualizer.js +390 -390
- package/.agent/scripts/graph_zoom.js +181 -181
- package/.agent/scripts/guardrail_engine.js +804 -785
- package/.agent/scripts/harness_manager.js +72 -60
- package/.agent/scripts/impact_classifier.js +193 -192
- package/.agent/scripts/inner_loop_validator.js +472 -472
- package/.agent/scripts/integrity_manifest.js +524 -484
- package/.agent/scripts/lint_runner.js +220 -218
- package/.agent/scripts/live_abc_benchmark.js +452 -0
- package/.agent/scripts/marathon_harness.js +986 -986
- package/.agent/scripts/mcp_server.js +203 -181
- package/.agent/scripts/memory_archivist.js +103 -97
- package/.agent/scripts/memory_consolidator.js +37 -37
- package/.agent/scripts/memory_engine.js +798 -782
- package/.agent/scripts/minify_context.js +111 -111
- package/.agent/scripts/minimal_change_engine.js +445 -445
- package/.agent/scripts/mutation_runner.js +307 -305
- package/.agent/scripts/payload_schemas.js +164 -164
- package/.agent/scripts/pipeline_engine.js +921 -906
- package/.agent/scripts/prompt_compiler.js +272 -272
- package/.agent/scripts/schema_validator.js +326 -326
- package/.agent/scripts/secret_redactor.js +119 -0
- package/.agent/scripts/security_scan.js +390 -390
- package/.agent/scripts/session_logger.js +115 -115
- package/.agent/scripts/session_manager.js +304 -299
- package/.agent/scripts/signal_detector.js +175 -175
- package/.agent/scripts/skill_evolution.js +997 -997
- package/.agent/scripts/skill_integrator.js +304 -304
- package/.agent/scripts/socratic_gate_policy.js +63 -63
- package/.agent/scripts/strengthen_skills.js +199 -199
- package/.agent/scripts/swarm_dispatcher.js +992 -979
- package/.agent/scripts/syscall_registry.js +110 -105
- package/.agent/scripts/test_runner.js +209 -209
- package/.agent/scripts/tier3_audit.js +195 -0
- package/.agent/scripts/token_budget_broker.js +165 -165
- package/.agent/scripts/trace_engine.js +126 -126
- package/.agent/scripts/validation_engine.js +236 -0
- package/.agent/scripts/verify_all.js +278 -276
- package/.agent/scripts/visual_audit.js +87 -87
- package/.agent/skill_topic_map.json +123 -96
- package/.agent/skills/12-principles-of-animation/SKILL.md +91 -21
- package/.agent/skills/60fps-animation/SKILL.md +118 -61
- package/.agent/skills/accessible-animation/SKILL.md +214 -152
- package/.agent/skills/adapt/SKILL.md +98 -28
- package/.agent/skills/adr-generation/SKILL.md +133 -0
- package/.agent/skills/advanced-rag-pipelines/SKILL.md +125 -64
- package/.agent/skills/agent-organizer/SKILL.md +142 -84
- package/.agent/skills/agent-syscall-guidelines/SKILL.md +88 -13
- package/.agent/skills/agentic-patterns/SKILL.md +314 -244
- package/.agent/skills/agentic-workflows-2026/SKILL.md +137 -65
- package/.agent/skills/agentshield-security/SKILL.md +74 -15
- package/.agent/skills/ai-app-hardening/SKILL.md +99 -27
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +191 -130
- package/.agent/skills/animation-on-scroll/SKILL.md +225 -163
- package/.agent/skills/animation-systems/SKILL.md +227 -165
- package/.agent/skills/antfu-conventions/SKILL.md +96 -26
- package/.agent/skills/anti-slop-enforcement/SKILL.md +118 -0
- package/.agent/skills/api-patterns/SKILL.md +247 -186
- package/.agent/skills/api-security-auditor/SKILL.md +204 -126
- package/.agent/skills/app-builder/SKILL.md +556 -501
- package/.agent/skills/app-builder/templates/SKILL.md +108 -108
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -76
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -92
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -88
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -88
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -83
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -90
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -90
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +126 -126
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +127 -127
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +172 -172
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +139 -139
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -83
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +122 -122
- package/.agent/skills/appflow-wireframe/SKILL.md +129 -69
- package/.agent/skills/apple-design/SKILL.md +130 -60
- package/.agent/skills/architecture/SKILL.md +216 -155
- package/.agent/skills/architecture-drift/SKILL.md +121 -0
- package/.agent/skills/architecture-intelligence/SKILL.md +53 -0
- package/.agent/skills/audit-and-fix/SKILL.md +133 -63
- package/.agent/skills/authentication-best-practices/SKILL.md +191 -121
- package/.agent/skills/autonomous-execution/SKILL.md +154 -0
- package/.agent/skills/backend-alembic/SKILL.md +91 -0
- package/.agent/skills/backend-architecture-auditor/SKILL.md +101 -0
- package/.agent/skills/backend-mongodb/SKILL.md +133 -0
- package/.agent/skills/backend-mysql/SKILL.md +84 -0
- package/.agent/skills/backend-performance-auditor/SKILL.md +100 -0
- package/.agent/skills/backend-postgresql/SKILL.md +117 -0
- package/.agent/skills/backend-redis/SKILL.md +122 -0
- package/.agent/skills/backend-security-expert/SKILL.md +111 -50
- package/.agent/skills/backend-sqlalchemy/SKILL.md +107 -0
- package/.agent/skills/backend-sqlite/SKILL.md +93 -0
- package/.agent/skills/backend-testing-auditor/SKILL.md +113 -0
- package/.agent/skills/baseline-ui/SKILL.md +99 -29
- package/.agent/skills/bash-linux/SKILL.md +164 -106
- package/.agent/skills/behavioral-modes/SKILL.md +235 -165
- package/.agent/skills/better-colors/SKILL.md +153 -83
- package/.agent/skills/better-typography/SKILL.md +137 -67
- package/.agent/skills/better-ui/SKILL.md +160 -99
- package/.agent/skills/bolder/SKILL.md +91 -21
- package/.agent/skills/brainstorming/SKILL.md +494 -434
- package/.agent/skills/browser-audit/SKILL.md +134 -64
- package/.agent/skills/browser-native-ai/SKILL.md +111 -41
- package/.agent/skills/build-primitive/SKILL.md +93 -23
- package/.agent/skills/building-native-ui/SKILL.md +191 -130
- package/.agent/skills/cicd-pro/SKILL.md +440 -379
- package/.agent/skills/clarify/SKILL.md +98 -28
- package/.agent/skills/clean-code/SKILL.md +395 -334
- package/.agent/skills/cloud-architect/SKILL.md +437 -376
- package/.agent/skills/cobejs/SKILL.md +120 -50
- package/.agent/skills/code-review-checklist/SKILL.md +198 -128
- package/.agent/skills/codebase-design/SKILL.md +109 -48
- package/.agent/skills/colorize/SKILL.md +100 -30
- package/.agent/skills/compact-landing/SKILL.md +93 -23
- package/.agent/skills/company-logos/SKILL.md +96 -26
- package/.agent/skills/config-validator/SKILL.md +151 -93
- package/.agent/skills/containerization-pro/SKILL.md +450 -389
- package/.agent/skills/context-engineering-pro/SKILL.md +113 -41
- package/.agent/skills/create-design-md/SKILL.md +128 -58
- package/.agent/skills/critique/SKILL.md +115 -45
- package/.agent/skills/csharp-developer/SKILL.md +512 -442
- package/.agent/skills/data-validation-schemas/SKILL.md +321 -263
- package/.agent/skills/database-design/SKILL.md +247 -186
- package/.agent/skills/delight/SKILL.md +88 -18
- package/.agent/skills/deployment-procedures/SKILL.md +159 -101
- package/.agent/skills/design-lab/SKILL.md +85 -15
- package/.agent/skills/devops-engineer/SKILL.md +339 -269
- package/.agent/skills/devops-incident-responder/SKILL.md +130 -72
- package/.agent/skills/diagnosing-bugs/SKILL.md +208 -138
- package/.agent/skills/distill/SKILL.md +88 -18
- package/.agent/skills/documentation-templates/SKILL.md +275 -217
- package/.agent/skills/domain-modeling/SKILL.md +101 -31
- package/.agent/skills/duckdb-analytical-sql/SKILL.md +100 -28
- package/.agent/skills/edge-ai-mobile/SKILL.md +92 -20
- package/.agent/skills/edge-computing/SKILL.md +168 -110
- package/.agent/skills/emil-design-eng/SKILL.md +170 -100
- package/.agent/skills/error-resilience/SKILL.md +431 -370
- package/.agent/skills/expo-router-v4/SKILL.md +126 -54
- package/.agent/skills/extract-design-system/SKILL.md +146 -88
- package/.agent/skills/fabel-protocol/SKILL.md +316 -246
- package/.agent/skills/failure-mode-analysis/SKILL.md +124 -0
- package/.agent/skills/fastapi-pro/SKILL.md +123 -0
- package/.agent/skills/fixing-accessibility/SKILL.md +129 -59
- package/.agent/skills/fixing-metadata/SKILL.md +130 -60
- package/.agent/skills/fixing-motion-performance/SKILL.md +115 -45
- package/.agent/skills/framer-motion-expert/SKILL.md +259 -204
- package/.agent/skills/frontend-design/SKILL.md +139 -69
- package/.agent/skills/frontend-security-expert/SKILL.md +94 -33
- package/.agent/skills/game-design-expert/SKILL.md +126 -68
- package/.agent/skills/game-engineering-expert/SKILL.md +135 -77
- package/.agent/skills/generative-ui-expert/SKILL.md +142 -72
- package/.agent/skills/geo-fundamentals/SKILL.md +134 -76
- package/.agent/skills/git-pro/SKILL.md +429 -368
- package/.agent/skills/github-operations/SKILL.md +329 -259
- package/.agent/skills/gpt-taste/SKILL.md +92 -22
- package/.agent/skills/graph-engineering/SKILL.md +104 -16
- package/.agent/skills/gsap-core/SKILL.md +312 -242
- package/.agent/skills/gsap-frameworks/SKILL.md +204 -134
- package/.agent/skills/gsap-performance/SKILL.md +130 -60
- package/.agent/skills/gsap-plugins/SKILL.md +476 -406
- package/.agent/skills/gsap-react/SKILL.md +248 -178
- package/.agent/skills/gsap-scrolltrigger/SKILL.md +347 -277
- package/.agent/skills/gsap-timeline/SKILL.md +157 -87
- package/.agent/skills/gsap-utils/SKILL.md +334 -264
- package/.agent/skills/harden/SKILL.md +97 -27
- package/.agent/skills/harness-protocol/SKILL.md +91 -21
- package/.agent/skills/hf-cli/SKILL.md +86 -6
- package/.agent/skills/hf-cloud-aws-context-discovery/SKILL.md +86 -8
- package/.agent/skills/hf-cloud-python-env-setup/SKILL.md +86 -8
- package/.agent/skills/hf-cloud-sagemaker-deployment-planner/SKILL.md +86 -8
- package/.agent/skills/hf-cloud-sagemaker-iam-preflight/SKILL.md +86 -8
- package/.agent/skills/hf-cloud-sagemaker-production-defaults/SKILL.md +86 -8
- package/.agent/skills/hf-cloud-serving-image-selection/SKILL.md +86 -8
- package/.agent/skills/hf-mem/SKILL.md +86 -6
- package/.agent/skills/huggingface-best/SKILL.md +86 -16
- package/.agent/skills/huggingface-community-evals/SKILL.md +86 -8
- package/.agent/skills/huggingface-datasets/SKILL.md +86 -8
- package/.agent/skills/huggingface-gradio/SKILL.md +86 -8
- package/.agent/skills/huggingface-llm-trainer/SKILL.md +86 -9
- package/.agent/skills/huggingface-local-models/SKILL.md +86 -8
- package/.agent/skills/huggingface-lora-space-builder/SKILL.md +86 -8
- package/.agent/skills/huggingface-paper-publisher/SKILL.md +86 -7
- package/.agent/skills/huggingface-papers/SKILL.md +86 -8
- package/.agent/skills/huggingface-spaces/SKILL.md +87 -9
- package/.agent/skills/huggingface-tool-builder/SKILL.md +86 -8
- package/.agent/skills/huggingface-trackio/SKILL.md +77 -8
- package/.agent/skills/huggingface-vision-trainer/SKILL.md +86 -8
- package/.agent/skills/huggingface-zerogpu/SKILL.md +86 -8
- package/.agent/skills/human-gate-negotiation/SKILL.md +83 -17
- package/.agent/skills/i18n-localization/SKILL.md +160 -102
- package/.agent/skills/impeccable/SKILL.md +95 -25
- package/.agent/skills/improve-codebase-architecture/SKILL.md +90 -20
- package/.agent/skills/improve-ui/SKILL.md +107 -37
- package/.agent/skills/intelligent-routing/SKILL.md +243 -180
- package/.agent/skills/knowledge-graph/SKILL.md +109 -39
- package/.agent/skills/landing-page/SKILL.md +106 -36
- package/.agent/skills/lint-and-validate/SKILL.md +249 -191
- package/.agent/skills/llm-engineering/SKILL.md +394 -324
- package/.agent/skills/local-first/SKILL.md +163 -105
- package/.agent/skills/local-first-architecture/SKILL.md +100 -39
- package/.agent/skills/lottie-animation/SKILL.md +109 -39
- package/.agent/skills/marquee-loop/SKILL.md +121 -51
- package/.agent/skills/masked-reveal/SKILL.md +267 -198
- package/.agent/skills/mcp-builder/SKILL.md +131 -73
- package/.agent/skills/micro-interaction/SKILL.md +281 -219
- package/.agent/skills/mobile-design/SKILL.md +274 -213
- package/.agent/skills/monorepo-management/SKILL.md +319 -261
- package/.agent/skills/morphing-icons/SKILL.md +379 -310
- package/.agent/skills/motion-engineering/SKILL.md +225 -164
- package/.agent/skills/nextjs-react-expert/SKILL.md +247 -186
- package/.agent/skills/nodejs-best-practices/SKILL.md +570 -509
- package/.agent/skills/observability/SKILL.md +337 -267
- package/.agent/skills/opentelemetry-observability/SKILL.md +106 -34
- package/.agent/skills/page-transition-animation/SKILL.md +130 -60
- package/.agent/skills/parallel-agents/SKILL.md +136 -78
- package/.agent/skills/performance-profiling/SKILL.md +263 -193
- package/.agent/skills/plan-writing/SKILL.md +156 -95
- package/.agent/skills/platform-engineer/SKILL.md +134 -76
- package/.agent/skills/platform-engineering-opentofu/SKILL.md +114 -42
- package/.agent/skills/playwright-ai-e2e/SKILL.md +100 -28
- package/.agent/skills/playwright-best-practices/SKILL.md +174 -116
- package/.agent/skills/polish/SKILL.md +90 -20
- package/.agent/skills/powershell-windows/SKILL.md +156 -86
- package/.agent/skills/pricing-page/SKILL.md +91 -21
- package/.agent/skills/product-aware-heuristics/SKILL.md +424 -354
- package/.agent/skills/progressive-blur/SKILL.md +122 -52
- package/.agent/skills/project-idioms/SKILL.md +125 -55
- package/.agent/skills/property-based-testing/SKILL.md +104 -32
- package/.agent/skills/python-patterns/SKILL.md +245 -187
- package/.agent/skills/python-pro/SKILL.md +333 -272
- package/.agent/skills/quieter/SKILL.md +91 -21
- package/.agent/skills/react-doctor/SKILL.md +93 -23
- package/.agent/skills/react-specialist/SKILL.md +309 -248
- package/.agent/skills/readme-builder/SKILL.md +294 -236
- package/.agent/skills/realtime-patterns/SKILL.md +317 -247
- package/.agent/skills/red-team-tactics/SKILL.md +220 -159
- package/.agent/skills/redesign-skill/SKILL.md +88 -18
- package/.agent/skills/review-animations/SKILL.md +91 -21
- package/.agent/skills/review-animations/STANDARDS.md +87 -87
- package/.agent/skills/rust-pro/SKILL.md +680 -619
- package/.agent/skills/semantic-filesystem-navigation/SKILL.md +69 -14
- package/.agent/skills/seo-fundamentals/SKILL.md +165 -107
- package/.agent/skills/server-management/SKILL.md +203 -145
- package/.agent/skills/session-log-interrogation/SKILL.md +70 -18
- package/.agent/skills/shadcn-ui-expert/SKILL.md +221 -163
- package/.agent/skills/shape/SKILL.md +96 -26
- package/.agent/skills/skill-creator/SKILL.md +213 -145
- package/.agent/skills/soft-skill/SKILL.md +95 -25
- package/.agent/skills/sounds-on-the-web/SKILL.md +115 -45
- package/.agent/skills/sql-pro/SKILL.md +653 -592
- package/.agent/skills/subagent-driven-development/SKILL.md +78 -18
- package/.agent/skills/supabase-postgres-best-practices/SKILL.md +93 -32
- package/.agent/skills/svg-animation/SKILL.md +388 -319
- package/.agent/skills/swiftui-expert/SKILL.md +190 -132
- package/.agent/skills/swiss-design/SKILL.md +87 -17
- package/.agent/skills/system-design-pro/SKILL.md +238 -294
- package/.agent/skills/systematic-debugging/SKILL.md +154 -96
- package/.agent/skills/systematic-debugging/condition-based-waiting.md +120 -120
- package/.agent/skills/systematic-debugging/defense-in-depth.md +128 -128
- package/.agent/skills/systematic-debugging/root-cause-tracing.md +183 -183
- package/.agent/skills/tailwind-patterns/SKILL.md +617 -547
- package/.agent/skills/taste-skill/SKILL.md +94 -24
- package/.agent/skills/tdd-workflow/SKILL.md +133 -72
- package/.agent/skills/test-result-analyzer/SKILL.md +304 -234
- package/.agent/skills/testing-patterns/SKILL.md +567 -497
- package/.agent/skills/thermo-nuclear-code-quality-review/SKILL.md +104 -34
- package/.agent/skills/thinking-protocol/SKILL.md +65 -7
- package/.agent/skills/to-spring-or-not-to-spring/SKILL.md +90 -20
- package/.agent/skills/train-sentence-transformers/SKILL.md +86 -8
- package/.agent/skills/transformers-js/SKILL.md +86 -15
- package/.agent/skills/transformers-js/references/CONFIGURATION.md +1 -1
- package/.agent/skills/transitions-dev/SKILL.md +136 -66
- package/.agent/skills/trend-researcher/SKILL.md +232 -162
- package/.agent/skills/tribunal-instincts-memory/SKILL.md +74 -19
- package/.agent/skills/trl-training/SKILL.md +86 -16
- package/.agent/skills/typescript-advanced/SKILL.md +334 -273
- package/.agent/skills/typeset/SKILL.md +101 -31
- package/.agent/skills/ui-reasoning-engine/SKILL.md +191 -121
- package/.agent/skills/ui-skill-packs/SKILL.md +95 -25
- package/.agent/skills/ui-skills-root/SKILL.md +118 -48
- package/.agent/skills/ui-ux-pro-max/SKILL.md +145 -75
- package/.agent/skills/ui-ux-researcher/SKILL.md +235 -165
- package/.agent/skills/vector-search-pgvector/SKILL.md +118 -46
- package/.agent/skills/verification-before-completion/SKILL.md +151 -79
- package/.agent/skills/vue-expert/SKILL.md +288 -227
- package/.agent/skills/vulnerability-scanner/SKILL.md +409 -342
- package/.agent/skills/web-accessibility-auditor/SKILL.md +204 -146
- package/.agent/skills/web-design-guidelines/SKILL.md +92 -22
- package/.agent/skills/web-quality-audit/SKILL.md +90 -20
- package/.agent/skills/webapp-testing/SKILL.md +152 -94
- package/.agent/skills/webgpu-performance/SKILL.md +126 -56
- package/.agent/skills/whimsy-injector/SKILL.md +339 -269
- package/.agent/skills/workflow-optimizer/SKILL.md +222 -152
- package/.agent/skills/zero-trust-passkeys/SKILL.md +135 -63
- package/.agent/skills_inventory.json +6922 -0
- package/.agent/templates/DESIGN.md +843 -843
- package/.agent/templates/design-tokens.json +140 -140
- package/.agent/templates/sdd/implementer-prompt.md +62 -62
- package/.agent/templates/sdd/re-review-prompt.md +36 -36
- package/.agent/templates/sdd/task-reviewer-prompt.md +78 -78
- package/.agent/workflows/acf.md +153 -153
- package/.agent/workflows/api-tester.md +189 -189
- package/.agent/workflows/arch.md +80 -0
- package/.agent/workflows/assimilate.md +24 -21
- package/.agent/workflows/audit-live.md +53 -53
- package/.agent/workflows/audit.md +171 -172
- package/.agent/workflows/brainstorm.md +157 -157
- package/.agent/workflows/changelog.md +152 -152
- package/.agent/workflows/compare-web.md +35 -35
- package/.agent/workflows/context.md +102 -102
- package/.agent/workflows/contract.md +79 -79
- package/.agent/workflows/create.md +182 -182
- package/.agent/workflows/debug.md +201 -201
- package/.agent/workflows/deploy.md +215 -215
- package/.agent/workflows/enhance.md +165 -165
- package/.agent/workflows/fix-ci.md +94 -94
- package/.agent/workflows/fix.md +149 -149
- package/.agent/workflows/generate.md +221 -216
- package/.agent/workflows/htop.md +26 -22
- package/.agent/workflows/marathon.md +290 -291
- package/.agent/workflows/migrate.md +198 -198
- package/.agent/workflows/minimal.md +101 -101
- package/.agent/workflows/orchestrate.md +205 -205
- package/.agent/workflows/performance-benchmarker.md +148 -148
- package/.agent/workflows/pipeline.md +165 -165
- package/.agent/workflows/plan.md +206 -206
- package/.agent/workflows/preview.md +116 -116
- package/.agent/workflows/refactor.md +207 -207
- package/.agent/workflows/resume.md +23 -20
- package/.agent/workflows/review-ai.md +139 -139
- package/.agent/workflows/review.md +155 -155
- package/.agent/workflows/sdd.md +137 -137
- package/.agent/workflows/session.md +135 -135
- package/.agent/workflows/skill-enhancement-engine.md +84 -84
- package/.agent/workflows/status.md +112 -112
- package/.agent/workflows/strengthen-skills.md +174 -174
- package/.agent/workflows/super-prompt.md +146 -146
- package/.agent/workflows/swarm.md +218 -218
- package/.agent/workflows/team-mode.md +25 -22
- package/.agent/workflows/test.md +224 -224
- package/.agent/workflows/tribunal-backend.md +161 -149
- package/.agent/workflows/tribunal-cicd.md +109 -109
- package/.agent/workflows/tribunal-database.md +142 -142
- package/.agent/workflows/tribunal-frontend.md +163 -157
- package/.agent/workflows/tribunal-full.md +156 -156
- package/.agent/workflows/tribunal-mobile.md +142 -142
- package/.agent/workflows/tribunal-performance.md +149 -149
- package/.agent/workflows/tribunal-speed.md +222 -222
- package/.agent/workflows/tribunal-ui.md +102 -97
- package/.agent/workflows/ui-ux-pro-max.md +103 -103
- package/.agents/skills/12-principles-of-animation/SKILL.md +91 -21
- package/.agents/skills/60fps-animation/SKILL.md +118 -61
- package/.agents/skills/accessible-animation/SKILL.md +214 -152
- package/.agents/skills/adapt/SKILL.md +98 -28
- package/.agents/skills/adr-generation/SKILL.md +133 -0
- package/.agents/skills/advanced-rag-pipelines/SKILL.md +125 -64
- package/.agents/skills/agent-organizer/SKILL.md +142 -84
- package/.agents/skills/agent-syscall-guidelines/SKILL.md +88 -13
- package/.agents/skills/agentic-patterns/SKILL.md +314 -244
- package/.agents/skills/agentic-workflows-2026/SKILL.md +137 -65
- package/.agents/skills/agentshield-security/SKILL.md +74 -15
- package/.agents/skills/ai-app-hardening/SKILL.md +99 -27
- package/.agents/skills/ai-prompt-injection-defense/SKILL.md +191 -130
- package/.agents/skills/animation-on-scroll/SKILL.md +225 -163
- package/.agents/skills/animation-systems/SKILL.md +227 -165
- package/.agents/skills/antfu-conventions/SKILL.md +96 -26
- package/.agents/skills/anti-slop-enforcement/SKILL.md +118 -0
- package/.agents/skills/api-patterns/SKILL.md +247 -186
- package/.agents/skills/api-security-auditor/SKILL.md +204 -126
- package/.agents/skills/app-builder/SKILL.md +556 -501
- package/.agents/skills/app-builder/templates/SKILL.md +108 -108
- package/.agents/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -76
- package/.agents/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -92
- package/.agents/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -88
- package/.agents/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -88
- package/.agents/skills/app-builder/templates/express-api/TEMPLATE.md +83 -83
- package/.agents/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -90
- package/.agents/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -90
- package/.agents/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +126 -126
- package/.agents/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +127 -127
- package/.agents/skills/app-builder/templates/nextjs-static/TEMPLATE.md +172 -172
- package/.agents/skills/app-builder/templates/nuxt-app/TEMPLATE.md +139 -139
- package/.agents/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -83
- package/.agents/skills/app-builder/templates/react-native-app/TEMPLATE.md +122 -122
- package/.agents/skills/appflow-wireframe/SKILL.md +129 -69
- package/.agents/skills/apple-design/SKILL.md +130 -60
- package/.agents/skills/architecture/SKILL.md +216 -155
- package/.agents/skills/architecture-drift/SKILL.md +121 -0
- package/.agents/skills/architecture-intelligence/SKILL.md +53 -0
- package/.agents/skills/audit-and-fix/SKILL.md +133 -63
- package/.agents/skills/authentication-best-practices/SKILL.md +191 -121
- package/.agents/skills/autonomous-execution/SKILL.md +154 -0
- package/.agents/skills/backend-alembic/SKILL.md +91 -0
- package/.agents/skills/backend-architecture-auditor/SKILL.md +101 -0
- package/.agents/skills/backend-mongodb/SKILL.md +133 -0
- package/.agents/skills/backend-mysql/SKILL.md +84 -0
- package/.agents/skills/backend-performance-auditor/SKILL.md +100 -0
- package/.agents/skills/backend-postgresql/SKILL.md +117 -0
- package/.agents/skills/backend-redis/SKILL.md +122 -0
- package/.agents/skills/backend-security-expert/SKILL.md +111 -50
- package/.agents/skills/backend-sqlalchemy/SKILL.md +107 -0
- package/.agents/skills/backend-sqlite/SKILL.md +93 -0
- package/.agents/skills/backend-testing-auditor/SKILL.md +113 -0
- package/.agents/skills/baseline-ui/SKILL.md +99 -29
- package/.agents/skills/bash-linux/SKILL.md +164 -106
- package/.agents/skills/behavioral-modes/SKILL.md +235 -165
- package/.agents/skills/better-colors/SKILL.md +153 -83
- package/.agents/skills/better-typography/SKILL.md +137 -67
- package/.agents/skills/better-ui/SKILL.md +160 -99
- package/.agents/skills/bolder/SKILL.md +91 -21
- package/.agents/skills/brainstorming/SKILL.md +494 -434
- package/.agents/skills/browser-audit/SKILL.md +134 -64
- package/.agents/skills/browser-native-ai/SKILL.md +111 -41
- package/.agents/skills/build-primitive/SKILL.md +93 -23
- package/.agents/skills/building-native-ui/SKILL.md +191 -130
- package/.agents/skills/cicd-pro/SKILL.md +440 -379
- package/.agents/skills/clarify/SKILL.md +98 -28
- package/.agents/skills/clean-code/SKILL.md +395 -334
- package/.agents/skills/cloud-architect/SKILL.md +437 -376
- package/.agents/skills/cobejs/SKILL.md +120 -50
- package/.agents/skills/code-review-checklist/SKILL.md +198 -128
- package/.agents/skills/codebase-design/SKILL.md +109 -48
- package/.agents/skills/colorize/SKILL.md +100 -30
- package/.agents/skills/compact-landing/SKILL.md +93 -23
- package/.agents/skills/company-logos/SKILL.md +96 -26
- package/.agents/skills/config-validator/SKILL.md +151 -93
- package/.agents/skills/containerization-pro/SKILL.md +450 -389
- package/.agents/skills/context-engineering-pro/SKILL.md +113 -41
- package/.agents/skills/create-design-md/SKILL.md +128 -58
- package/.agents/skills/critique/SKILL.md +115 -45
- package/.agents/skills/csharp-developer/SKILL.md +512 -442
- package/.agents/skills/data-validation-schemas/SKILL.md +321 -263
- package/.agents/skills/database-design/SKILL.md +247 -186
- package/.agents/skills/delight/SKILL.md +88 -18
- package/.agents/skills/deployment-procedures/SKILL.md +159 -101
- package/.agents/skills/design-lab/SKILL.md +85 -15
- package/.agents/skills/devops-engineer/SKILL.md +339 -269
- package/.agents/skills/devops-incident-responder/SKILL.md +130 -72
- package/.agents/skills/diagnosing-bugs/SKILL.md +208 -138
- package/.agents/skills/distill/SKILL.md +88 -18
- package/.agents/skills/documentation-templates/SKILL.md +275 -217
- package/.agents/skills/domain-modeling/SKILL.md +101 -31
- package/.agents/skills/duckdb-analytical-sql/SKILL.md +100 -28
- package/.agents/skills/edge-ai-mobile/SKILL.md +92 -20
- package/.agents/skills/edge-computing/SKILL.md +168 -110
- package/.agents/skills/emil-design-eng/SKILL.md +170 -100
- package/.agents/skills/error-resilience/SKILL.md +431 -370
- package/.agents/skills/expo-router-v4/SKILL.md +126 -54
- package/.agents/skills/extract-design-system/SKILL.md +146 -88
- package/.agents/skills/fabel-protocol/SKILL.md +316 -246
- package/.agents/skills/failure-mode-analysis/SKILL.md +124 -0
- package/.agents/skills/fastapi-pro/SKILL.md +123 -0
- package/.agents/skills/fixing-accessibility/SKILL.md +129 -59
- package/.agents/skills/fixing-metadata/SKILL.md +130 -60
- package/.agents/skills/fixing-motion-performance/SKILL.md +115 -45
- package/.agents/skills/framer-motion-expert/SKILL.md +259 -204
- package/.agents/skills/frontend-design/SKILL.md +139 -69
- package/.agents/skills/frontend-security-expert/SKILL.md +94 -33
- package/.agents/skills/game-design-expert/SKILL.md +126 -68
- package/.agents/skills/game-engineering-expert/SKILL.md +135 -77
- package/.agents/skills/generative-ui-expert/SKILL.md +142 -72
- package/.agents/skills/geo-fundamentals/SKILL.md +134 -76
- package/.agents/skills/git-pro/SKILL.md +429 -368
- package/.agents/skills/github-operations/SKILL.md +329 -259
- package/.agents/skills/gpt-taste/SKILL.md +92 -22
- package/.agents/skills/graph-engineering/SKILL.md +104 -16
- package/.agents/skills/gsap-core/SKILL.md +312 -242
- package/.agents/skills/gsap-frameworks/SKILL.md +204 -134
- package/.agents/skills/gsap-performance/SKILL.md +130 -60
- package/.agents/skills/gsap-plugins/SKILL.md +476 -406
- package/.agents/skills/gsap-react/SKILL.md +248 -178
- package/.agents/skills/gsap-scrolltrigger/SKILL.md +347 -277
- package/.agents/skills/gsap-timeline/SKILL.md +157 -87
- package/.agents/skills/gsap-utils/SKILL.md +334 -264
- package/.agents/skills/harden/SKILL.md +97 -27
- package/.agents/skills/harness-protocol/SKILL.md +91 -21
- package/.agents/skills/hf-cli/SKILL.md +86 -6
- package/.agents/skills/hf-cloud-aws-context-discovery/SKILL.md +86 -8
- package/.agents/skills/hf-cloud-python-env-setup/SKILL.md +86 -8
- package/.agents/skills/hf-cloud-sagemaker-deployment-planner/SKILL.md +86 -8
- package/.agents/skills/hf-cloud-sagemaker-iam-preflight/SKILL.md +86 -8
- package/.agents/skills/hf-cloud-sagemaker-production-defaults/SKILL.md +86 -8
- package/.agents/skills/hf-cloud-serving-image-selection/SKILL.md +86 -8
- package/.agents/skills/hf-mem/SKILL.md +86 -6
- package/.agents/skills/huggingface-best/SKILL.md +86 -16
- package/.agents/skills/huggingface-community-evals/SKILL.md +86 -8
- package/.agents/skills/huggingface-datasets/SKILL.md +86 -8
- package/.agents/skills/huggingface-gradio/SKILL.md +86 -8
- package/.agents/skills/huggingface-llm-trainer/SKILL.md +86 -9
- package/.agents/skills/huggingface-local-models/SKILL.md +86 -8
- package/.agents/skills/huggingface-lora-space-builder/SKILL.md +86 -8
- package/.agents/skills/huggingface-paper-publisher/SKILL.md +86 -7
- package/.agents/skills/huggingface-papers/SKILL.md +86 -8
- package/.agents/skills/huggingface-spaces/SKILL.md +87 -9
- package/.agents/skills/huggingface-tool-builder/SKILL.md +86 -8
- package/.agents/skills/huggingface-trackio/SKILL.md +77 -8
- package/.agents/skills/huggingface-vision-trainer/SKILL.md +86 -8
- package/.agents/skills/huggingface-zerogpu/SKILL.md +86 -8
- package/.agents/skills/human-gate-negotiation/SKILL.md +83 -17
- package/.agents/skills/i18n-localization/SKILL.md +160 -102
- package/.agents/skills/impeccable/SKILL.md +95 -25
- package/.agents/skills/improve-codebase-architecture/SKILL.md +90 -20
- package/.agents/skills/improve-ui/SKILL.md +107 -37
- package/.agents/skills/intelligent-routing/SKILL.md +243 -180
- package/.agents/skills/knowledge-graph/SKILL.md +109 -39
- package/.agents/skills/landing-page/SKILL.md +106 -36
- package/.agents/skills/lint-and-validate/SKILL.md +249 -191
- package/.agents/skills/llm-engineering/SKILL.md +394 -324
- package/.agents/skills/local-first/SKILL.md +163 -105
- package/.agents/skills/local-first-architecture/SKILL.md +100 -39
- package/.agents/skills/lottie-animation/SKILL.md +109 -39
- package/.agents/skills/marquee-loop/SKILL.md +121 -51
- package/.agents/skills/masked-reveal/SKILL.md +267 -198
- package/.agents/skills/mcp-builder/SKILL.md +131 -73
- package/.agents/skills/micro-interaction/SKILL.md +281 -219
- package/.agents/skills/mobile-design/SKILL.md +274 -213
- package/.agents/skills/monorepo-management/SKILL.md +319 -261
- package/.agents/skills/morphing-icons/SKILL.md +379 -310
- package/.agents/skills/motion-engineering/SKILL.md +225 -164
- package/.agents/skills/nextjs-react-expert/SKILL.md +247 -186
- package/.agents/skills/nodejs-best-practices/SKILL.md +570 -509
- package/.agents/skills/observability/SKILL.md +337 -267
- package/.agents/skills/opentelemetry-observability/SKILL.md +106 -34
- package/.agents/skills/page-transition-animation/SKILL.md +130 -60
- package/.agents/skills/parallel-agents/SKILL.md +136 -78
- package/.agents/skills/performance-profiling/SKILL.md +263 -193
- package/.agents/skills/plan-writing/SKILL.md +156 -95
- package/.agents/skills/platform-engineer/SKILL.md +134 -76
- package/.agents/skills/platform-engineering-opentofu/SKILL.md +114 -42
- package/.agents/skills/playwright-ai-e2e/SKILL.md +100 -28
- package/.agents/skills/playwright-best-practices/SKILL.md +174 -116
- package/.agents/skills/polish/SKILL.md +90 -20
- package/.agents/skills/powershell-windows/SKILL.md +156 -86
- package/.agents/skills/pricing-page/SKILL.md +91 -21
- package/.agents/skills/product-aware-heuristics/SKILL.md +424 -354
- package/.agents/skills/progressive-blur/SKILL.md +122 -52
- package/.agents/skills/project-idioms/SKILL.md +125 -55
- package/.agents/skills/property-based-testing/SKILL.md +104 -32
- package/.agents/skills/python-patterns/SKILL.md +245 -187
- package/.agents/skills/python-pro/SKILL.md +333 -272
- package/.agents/skills/quieter/SKILL.md +91 -21
- package/.agents/skills/react-doctor/SKILL.md +93 -23
- package/.agents/skills/react-specialist/SKILL.md +309 -248
- package/.agents/skills/readme-builder/SKILL.md +294 -236
- package/.agents/skills/realtime-patterns/SKILL.md +317 -247
- package/.agents/skills/red-team-tactics/SKILL.md +220 -159
- package/.agents/skills/redesign-skill/SKILL.md +88 -18
- package/.agents/skills/review-animations/SKILL.md +91 -21
- package/.agents/skills/review-animations/STANDARDS.md +87 -87
- package/.agents/skills/rust-pro/SKILL.md +680 -619
- package/.agents/skills/semantic-filesystem-navigation/SKILL.md +69 -14
- package/.agents/skills/seo-fundamentals/SKILL.md +165 -107
- package/.agents/skills/server-management/SKILL.md +203 -145
- package/.agents/skills/session-log-interrogation/SKILL.md +70 -18
- package/.agents/skills/shadcn-ui-expert/SKILL.md +221 -163
- package/.agents/skills/shape/SKILL.md +96 -26
- package/.agents/skills/skill-creator/SKILL.md +213 -145
- package/.agents/skills/soft-skill/SKILL.md +95 -25
- package/.agents/skills/sounds-on-the-web/SKILL.md +115 -45
- package/.agents/skills/sql-pro/SKILL.md +653 -592
- package/.agents/skills/subagent-driven-development/SKILL.md +78 -18
- package/.agents/skills/supabase-postgres-best-practices/SKILL.md +93 -32
- package/.agents/skills/svg-animation/SKILL.md +388 -319
- package/.agents/skills/swiftui-expert/SKILL.md +190 -132
- package/.agents/skills/swiss-design/SKILL.md +87 -17
- package/.agents/skills/system-design-pro/SKILL.md +238 -294
- package/.agents/skills/systematic-debugging/SKILL.md +154 -96
- package/.agents/skills/systematic-debugging/condition-based-waiting.md +120 -120
- package/.agents/skills/systematic-debugging/defense-in-depth.md +128 -128
- package/.agents/skills/systematic-debugging/root-cause-tracing.md +183 -183
- package/.agents/skills/tailwind-patterns/SKILL.md +617 -547
- package/.agents/skills/taste-skill/SKILL.md +94 -24
- package/.agents/skills/tdd-workflow/SKILL.md +133 -72
- package/.agents/skills/test-result-analyzer/SKILL.md +304 -234
- package/.agents/skills/testing-patterns/SKILL.md +567 -497
- package/.agents/skills/thermo-nuclear-code-quality-review/SKILL.md +104 -34
- package/.agents/skills/thinking-protocol/SKILL.md +65 -7
- package/.agents/skills/to-spring-or-not-to-spring/SKILL.md +90 -20
- package/.agents/skills/train-sentence-transformers/SKILL.md +86 -8
- package/.agents/skills/transformers-js/SKILL.md +86 -15
- package/.agents/skills/transformers-js/references/CONFIGURATION.md +1 -1
- package/.agents/skills/transitions-dev/SKILL.md +136 -66
- package/.agents/skills/trend-researcher/SKILL.md +232 -162
- package/.agents/skills/tribunal-instincts-memory/SKILL.md +74 -19
- package/.agents/skills/trl-training/SKILL.md +86 -16
- package/.agents/skills/typescript-advanced/SKILL.md +334 -273
- package/.agents/skills/typeset/SKILL.md +101 -31
- package/.agents/skills/ui-reasoning-engine/SKILL.md +191 -121
- package/.agents/skills/ui-skill-packs/SKILL.md +95 -25
- package/.agents/skills/ui-skills-root/SKILL.md +118 -48
- package/.agents/skills/ui-ux-pro-max/SKILL.md +145 -75
- package/.agents/skills/ui-ux-researcher/SKILL.md +235 -165
- package/.agents/skills/vector-search-pgvector/SKILL.md +118 -46
- package/.agents/skills/verification-before-completion/SKILL.md +151 -79
- package/.agents/skills/vue-expert/SKILL.md +288 -227
- package/.agents/skills/vulnerability-scanner/SKILL.md +409 -342
- package/.agents/skills/web-accessibility-auditor/SKILL.md +204 -146
- package/.agents/skills/web-design-guidelines/SKILL.md +92 -22
- package/.agents/skills/web-quality-audit/SKILL.md +90 -20
- package/.agents/skills/webapp-testing/SKILL.md +152 -94
- package/.agents/skills/webgpu-performance/SKILL.md +126 -56
- package/.agents/skills/whimsy-injector/SKILL.md +339 -269
- package/.agents/skills/workflow-optimizer/SKILL.md +222 -152
- package/.agents/skills/zero-trust-passkeys/SKILL.md +135 -63
- package/AGENTS.md +93 -93
- package/CLAUDE.md +444 -444
- package/CONTRIBUTING.md +134 -134
- package/README.md +264 -242
- package/SECURITY.md +58 -52
- package/bin/adapter-install.js +264 -264
- package/bin/global-store.js +48 -48
- package/bin/mcp-server.js +1662 -1653
- package/bin/proxy-server.js +122 -122
- package/bin/spawn-agent.js +45 -45
- package/bin/tk-proxy.js +34 -34
- package/bin/tribunal-kit.js +113 -113
- package/bin/wrapper.js +225 -211
- package/hooks/hooks-cursor.json +10 -10
- package/hooks/hooks.json +10 -10
- package/hooks/session-start.js +77 -77
- package/mcp_config.json +18 -18
- package/package.json +20 -31
- package/{.claude-plugin → plugins/claude}/marketplace.json +14 -14
- package/{.claude-plugin → plugins/claude}/plugin.json +26 -26
- package/{.codex-plugin → plugins/codex}/plugin.json +41 -41
- package/{plugin.json → plugins/core-plugin.json} +1 -1
- package/{.cursor-plugin → plugins/cursor}/plugin.json +26 -26
- package/{.devin-plugin → plugins/devin}/plugin.json +14 -14
- package/{gemini-extension.json → plugins/gemini/extension.json} +1 -1
- package/{.hermes-plugin → plugins/hermes}/__init__.py +102 -102
- package/{.hermes-plugin → plugins/hermes}/plugin.yaml +6 -6
- package/{.kimi-plugin → plugins/kimi}/plugin.json +34 -34
- package/{marketplace.json → plugins/marketplace.json} +14 -14
- package/{.opencode → plugins/opencode}/INSTALL.md +42 -42
- package/{.opencode → plugins/opencode}/plugins/tribunal.js +110 -110
- package/{.opencode → plugins/opencode}/rules.md +258 -258
- package/{.pi → plugins/pi}/extensions/tribunal.ts +130 -130
- package/skills/12-principles-of-animation/SKILL.md +91 -21
- package/skills/60fps-animation/SKILL.md +118 -61
- package/skills/accessible-animation/SKILL.md +214 -152
- package/skills/adapt/SKILL.md +98 -28
- package/skills/adr-generation/SKILL.md +133 -0
- package/skills/advanced-rag-pipelines/SKILL.md +125 -64
- package/skills/agent-organizer/SKILL.md +142 -84
- package/skills/agent-syscall-guidelines/SKILL.md +88 -13
- package/skills/agentic-patterns/SKILL.md +314 -244
- package/skills/agentic-workflows-2026/SKILL.md +137 -65
- package/skills/agentshield-security/SKILL.md +74 -15
- package/skills/ai-app-hardening/SKILL.md +99 -27
- package/skills/ai-prompt-injection-defense/SKILL.md +191 -130
- package/skills/animation-on-scroll/SKILL.md +225 -163
- package/skills/animation-systems/SKILL.md +227 -165
- package/skills/antfu-conventions/SKILL.md +96 -26
- package/skills/anti-slop-enforcement/SKILL.md +118 -0
- package/skills/api-patterns/SKILL.md +247 -186
- package/skills/api-security-auditor/SKILL.md +204 -126
- package/skills/app-builder/SKILL.md +556 -501
- package/skills/app-builder/templates/SKILL.md +108 -108
- package/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -76
- package/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -92
- package/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -88
- package/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -88
- package/skills/app-builder/templates/express-api/TEMPLATE.md +83 -83
- package/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -90
- package/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -90
- package/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +126 -126
- package/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +127 -127
- package/skills/app-builder/templates/nextjs-static/TEMPLATE.md +172 -172
- package/skills/app-builder/templates/nuxt-app/TEMPLATE.md +139 -139
- package/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -83
- package/skills/app-builder/templates/react-native-app/TEMPLATE.md +122 -122
- package/skills/appflow-wireframe/SKILL.md +129 -69
- package/skills/apple-design/SKILL.md +130 -60
- package/skills/architecture/SKILL.md +216 -155
- package/skills/architecture-drift/SKILL.md +121 -0
- package/skills/architecture-intelligence/SKILL.md +53 -0
- package/skills/audit-and-fix/SKILL.md +133 -63
- package/skills/authentication-best-practices/SKILL.md +191 -121
- package/skills/autonomous-execution/SKILL.md +154 -0
- package/skills/backend-alembic/SKILL.md +91 -0
- package/skills/backend-architecture-auditor/SKILL.md +101 -0
- package/skills/backend-mongodb/SKILL.md +133 -0
- package/skills/backend-mysql/SKILL.md +84 -0
- package/skills/backend-performance-auditor/SKILL.md +100 -0
- package/skills/backend-postgresql/SKILL.md +117 -0
- package/skills/backend-redis/SKILL.md +122 -0
- package/skills/backend-security-expert/SKILL.md +111 -50
- package/skills/backend-sqlalchemy/SKILL.md +107 -0
- package/skills/backend-sqlite/SKILL.md +93 -0
- package/skills/backend-testing-auditor/SKILL.md +113 -0
- package/skills/baseline-ui/SKILL.md +99 -29
- package/skills/bash-linux/SKILL.md +164 -106
- package/skills/behavioral-modes/SKILL.md +235 -165
- package/skills/better-colors/SKILL.md +153 -83
- package/skills/better-typography/SKILL.md +137 -67
- package/skills/better-ui/SKILL.md +160 -99
- package/skills/bolder/SKILL.md +91 -21
- package/skills/brainstorming/SKILL.md +494 -434
- package/skills/browser-audit/SKILL.md +134 -64
- package/skills/browser-native-ai/SKILL.md +111 -41
- package/skills/build-primitive/SKILL.md +93 -23
- package/skills/building-native-ui/SKILL.md +191 -130
- package/skills/cicd-pro/SKILL.md +440 -379
- package/skills/clarify/SKILL.md +98 -28
- package/skills/clean-code/SKILL.md +395 -334
- package/skills/cloud-architect/SKILL.md +437 -376
- package/skills/cobejs/SKILL.md +120 -50
- package/skills/code-review-checklist/SKILL.md +198 -128
- package/skills/codebase-design/SKILL.md +109 -48
- package/skills/colorize/SKILL.md +100 -30
- package/skills/compact-landing/SKILL.md +93 -23
- package/skills/company-logos/SKILL.md +96 -26
- package/skills/config-validator/SKILL.md +151 -93
- package/skills/containerization-pro/SKILL.md +450 -389
- package/skills/context-engineering-pro/SKILL.md +113 -41
- package/skills/create-design-md/SKILL.md +128 -58
- package/skills/critique/SKILL.md +115 -45
- package/skills/csharp-developer/SKILL.md +512 -442
- package/skills/data-validation-schemas/SKILL.md +321 -263
- package/skills/database-design/SKILL.md +247 -186
- package/skills/delight/SKILL.md +88 -18
- package/skills/deployment-procedures/SKILL.md +159 -101
- package/skills/design-lab/SKILL.md +85 -15
- package/skills/devops-engineer/SKILL.md +339 -269
- package/skills/devops-incident-responder/SKILL.md +130 -72
- package/skills/diagnosing-bugs/SKILL.md +208 -138
- package/skills/distill/SKILL.md +88 -18
- package/skills/documentation-templates/SKILL.md +275 -217
- package/skills/domain-modeling/SKILL.md +101 -31
- package/skills/duckdb-analytical-sql/SKILL.md +100 -28
- package/skills/edge-ai-mobile/SKILL.md +92 -20
- package/skills/edge-computing/SKILL.md +168 -110
- package/skills/emil-design-eng/SKILL.md +170 -100
- package/skills/error-resilience/SKILL.md +431 -370
- package/skills/expo-router-v4/SKILL.md +126 -54
- package/skills/extract-design-system/SKILL.md +146 -88
- package/skills/fabel-protocol/SKILL.md +316 -246
- package/skills/failure-mode-analysis/SKILL.md +124 -0
- package/skills/fastapi-pro/SKILL.md +123 -0
- package/skills/fixing-accessibility/SKILL.md +129 -59
- package/skills/fixing-metadata/SKILL.md +130 -60
- package/skills/fixing-motion-performance/SKILL.md +115 -45
- package/skills/framer-motion-expert/SKILL.md +259 -204
- package/skills/frontend-design/SKILL.md +139 -69
- package/skills/frontend-security-expert/SKILL.md +94 -33
- package/skills/game-design-expert/SKILL.md +126 -68
- package/skills/game-engineering-expert/SKILL.md +135 -77
- package/skills/generative-ui-expert/SKILL.md +142 -72
- package/skills/geo-fundamentals/SKILL.md +134 -76
- package/skills/git-pro/SKILL.md +429 -368
- package/skills/github-operations/SKILL.md +329 -259
- package/skills/gpt-taste/SKILL.md +92 -22
- package/skills/graph-engineering/SKILL.md +104 -16
- package/skills/gsap-core/SKILL.md +312 -242
- package/skills/gsap-frameworks/SKILL.md +204 -134
- package/skills/gsap-performance/SKILL.md +130 -60
- package/skills/gsap-plugins/SKILL.md +476 -406
- package/skills/gsap-react/SKILL.md +248 -178
- package/skills/gsap-scrolltrigger/SKILL.md +347 -277
- package/skills/gsap-timeline/SKILL.md +157 -87
- package/skills/gsap-utils/SKILL.md +334 -264
- package/skills/harden/SKILL.md +97 -27
- package/skills/harness-protocol/SKILL.md +91 -21
- package/skills/hf-cli/SKILL.md +86 -6
- package/skills/hf-cloud-aws-context-discovery/SKILL.md +86 -8
- package/skills/hf-cloud-python-env-setup/SKILL.md +86 -8
- package/skills/hf-cloud-sagemaker-deployment-planner/SKILL.md +86 -8
- package/skills/hf-cloud-sagemaker-iam-preflight/SKILL.md +86 -8
- package/skills/hf-cloud-sagemaker-production-defaults/SKILL.md +86 -8
- package/skills/hf-cloud-serving-image-selection/SKILL.md +86 -8
- package/skills/hf-mem/SKILL.md +86 -6
- package/skills/huggingface-best/SKILL.md +86 -16
- package/skills/huggingface-community-evals/SKILL.md +86 -8
- package/skills/huggingface-datasets/SKILL.md +86 -8
- package/skills/huggingface-gradio/SKILL.md +86 -8
- package/skills/huggingface-llm-trainer/SKILL.md +86 -9
- package/skills/huggingface-local-models/SKILL.md +86 -8
- package/skills/huggingface-lora-space-builder/SKILL.md +86 -8
- package/skills/huggingface-paper-publisher/SKILL.md +86 -7
- package/skills/huggingface-papers/SKILL.md +86 -8
- package/skills/huggingface-spaces/SKILL.md +87 -9
- package/skills/huggingface-tool-builder/SKILL.md +86 -8
- package/skills/huggingface-trackio/SKILL.md +77 -8
- package/skills/huggingface-vision-trainer/SKILL.md +86 -8
- package/skills/huggingface-zerogpu/SKILL.md +86 -8
- package/skills/human-gate-negotiation/SKILL.md +83 -17
- package/skills/i18n-localization/SKILL.md +160 -102
- package/skills/impeccable/SKILL.md +95 -25
- package/skills/improve-codebase-architecture/SKILL.md +90 -20
- package/skills/improve-ui/SKILL.md +107 -37
- package/skills/intelligent-routing/SKILL.md +243 -180
- package/skills/knowledge-graph/SKILL.md +109 -39
- package/skills/landing-page/SKILL.md +106 -36
- package/skills/lint-and-validate/SKILL.md +249 -191
- package/skills/llm-engineering/SKILL.md +394 -324
- package/skills/local-first/SKILL.md +163 -105
- package/skills/local-first-architecture/SKILL.md +100 -39
- package/skills/lottie-animation/SKILL.md +109 -39
- package/skills/marquee-loop/SKILL.md +121 -51
- package/skills/masked-reveal/SKILL.md +267 -198
- package/skills/mcp-builder/SKILL.md +131 -73
- package/skills/micro-interaction/SKILL.md +281 -219
- package/skills/mobile-design/SKILL.md +274 -213
- package/skills/monorepo-management/SKILL.md +319 -261
- package/skills/morphing-icons/SKILL.md +379 -310
- package/skills/motion-engineering/SKILL.md +225 -164
- package/skills/nextjs-react-expert/SKILL.md +247 -186
- package/skills/nodejs-best-practices/SKILL.md +570 -509
- package/skills/observability/SKILL.md +337 -267
- package/skills/opentelemetry-observability/SKILL.md +106 -34
- package/skills/page-transition-animation/SKILL.md +130 -60
- package/skills/parallel-agents/SKILL.md +136 -78
- package/skills/performance-profiling/SKILL.md +263 -193
- package/skills/plan-writing/SKILL.md +156 -95
- package/skills/platform-engineer/SKILL.md +134 -76
- package/skills/platform-engineering-opentofu/SKILL.md +114 -42
- package/skills/playwright-ai-e2e/SKILL.md +100 -28
- package/skills/playwright-best-practices/SKILL.md +174 -116
- package/skills/polish/SKILL.md +90 -20
- package/skills/powershell-windows/SKILL.md +156 -86
- package/skills/pricing-page/SKILL.md +91 -21
- package/skills/product-aware-heuristics/SKILL.md +424 -354
- package/skills/progressive-blur/SKILL.md +122 -52
- package/skills/project-idioms/SKILL.md +125 -55
- package/skills/property-based-testing/SKILL.md +104 -32
- package/skills/python-patterns/SKILL.md +245 -187
- package/skills/python-pro/SKILL.md +333 -272
- package/skills/quieter/SKILL.md +91 -21
- package/skills/react-doctor/SKILL.md +93 -23
- package/skills/react-specialist/SKILL.md +309 -248
- package/skills/readme-builder/SKILL.md +294 -236
- package/skills/realtime-patterns/SKILL.md +317 -247
- package/skills/red-team-tactics/SKILL.md +220 -159
- package/skills/redesign-skill/SKILL.md +88 -18
- package/skills/review-animations/SKILL.md +91 -21
- package/skills/review-animations/STANDARDS.md +87 -87
- package/skills/rust-pro/SKILL.md +680 -619
- package/skills/semantic-filesystem-navigation/SKILL.md +69 -14
- package/skills/seo-fundamentals/SKILL.md +165 -107
- package/skills/server-management/SKILL.md +203 -145
- package/skills/session-log-interrogation/SKILL.md +70 -18
- package/skills/shadcn-ui-expert/SKILL.md +221 -163
- package/skills/shape/SKILL.md +96 -26
- package/skills/skill-creator/SKILL.md +213 -145
- package/skills/soft-skill/SKILL.md +95 -25
- package/skills/sounds-on-the-web/SKILL.md +115 -45
- package/skills/sql-pro/SKILL.md +653 -592
- package/skills/subagent-driven-development/SKILL.md +78 -18
- package/skills/supabase-postgres-best-practices/SKILL.md +93 -32
- package/skills/svg-animation/SKILL.md +388 -319
- package/skills/swiftui-expert/SKILL.md +190 -132
- package/skills/swiss-design/SKILL.md +87 -17
- package/skills/system-design-pro/SKILL.md +238 -294
- package/skills/systematic-debugging/SKILL.md +154 -96
- package/skills/systematic-debugging/condition-based-waiting.md +120 -120
- package/skills/systematic-debugging/defense-in-depth.md +128 -128
- package/skills/systematic-debugging/root-cause-tracing.md +183 -183
- package/skills/tailwind-patterns/SKILL.md +617 -547
- package/skills/taste-skill/SKILL.md +94 -24
- package/skills/tdd-workflow/SKILL.md +133 -72
- package/skills/test-result-analyzer/SKILL.md +304 -234
- package/skills/testing-patterns/SKILL.md +567 -497
- package/skills/thermo-nuclear-code-quality-review/SKILL.md +104 -34
- package/skills/thinking-protocol/SKILL.md +65 -7
- package/skills/to-spring-or-not-to-spring/SKILL.md +90 -20
- package/skills/train-sentence-transformers/SKILL.md +86 -8
- package/skills/transformers-js/SKILL.md +86 -15
- package/skills/transformers-js/references/CONFIGURATION.md +1 -1
- package/skills/transitions-dev/SKILL.md +136 -66
- package/skills/trend-researcher/SKILL.md +232 -162
- package/skills/tribunal-instincts-memory/SKILL.md +74 -19
- package/skills/trl-training/SKILL.md +86 -16
- package/skills/typescript-advanced/SKILL.md +334 -273
- package/skills/typeset/SKILL.md +101 -31
- package/skills/ui-reasoning-engine/SKILL.md +191 -121
- package/skills/ui-skill-packs/SKILL.md +95 -25
- package/skills/ui-skills-root/SKILL.md +118 -48
- package/skills/ui-ux-pro-max/SKILL.md +145 -75
- package/skills/ui-ux-researcher/SKILL.md +235 -165
- package/skills/vector-search-pgvector/SKILL.md +118 -46
- package/skills/verification-before-completion/SKILL.md +151 -79
- package/skills/vue-expert/SKILL.md +288 -227
- package/skills/vulnerability-scanner/SKILL.md +409 -342
- package/skills/web-accessibility-auditor/SKILL.md +204 -146
- package/skills/web-design-guidelines/SKILL.md +92 -22
- package/skills/web-quality-audit/SKILL.md +90 -20
- package/skills/webapp-testing/SKILL.md +152 -94
- package/skills/webgpu-performance/SKILL.md +126 -56
- package/skills/whimsy-injector/SKILL.md +339 -269
- package/skills/workflow-optimizer/SKILL.md +222 -152
- package/skills/zero-trust-passkeys/SKILL.md +135 -63
- package/{dist → src}/browser/audit.js +233 -229
- package/{dist → src}/browser/case_bridge.js +190 -189
- package/{dist → src}/browser/cdp.js +526 -513
- package/{dist → src}/browser/compare.js +110 -110
- package/{dist → src}/browser/discovery.js +150 -140
- package/{dist → src}/browser/idpi.js +145 -142
- package/{dist → src}/browser/index.js +89 -89
- package/{dist → src}/browser/launcher.js +160 -154
- package/{dist → src}/browser/sentinel.js +208 -202
- package/{dist → src}/browser/synapse.js +251 -251
- package/{dist → src}/browser/trimmer.js +219 -210
- package/src/cli.js +430 -0
- package/src/commands/align.js +208 -0
- package/src/commands/arch.js +172 -0
- package/{dist → src}/commands/audit-web.js +126 -112
- package/{dist → src}/commands/browse.js +62 -56
- package/src/commands/case.js +98 -0
- package/{dist → src}/commands/compare-web.js +69 -61
- package/src/commands/compile.js +97 -0
- package/src/commands/context.js +156 -0
- package/{dist → src}/commands/contract.js +423 -440
- package/{dist → src}/commands/deconstruct.js +70 -58
- package/src/commands/graph.js +52 -0
- package/{dist → src}/commands/guardrail.js +247 -275
- package/{dist → src}/commands/heal.js +109 -99
- package/src/commands/hook.js +32 -0
- package/src/commands/init.js +462 -0
- package/src/commands/learn.js +195 -0
- package/src/commands/marathon.js +68 -0
- package/src/commands/memory.js +609 -0
- package/src/commands/minimal.js +85 -0
- package/src/commands/mutate.js +34 -0
- package/src/commands/native.js +409 -0
- package/src/commands/optimize.js +365 -0
- package/src/commands/review.js +971 -0
- package/src/commands/sdd.js +275 -0
- package/{dist → src}/commands/status.js +76 -66
- package/src/commands/sync.js +27 -0
- package/src/commands/system1.js +312 -0
- package/src/commands/uninstall.js +63 -0
- package/src/commands/update.js +44 -0
- package/{dist → src}/commands/validate.js +66 -58
- package/src/context/ranker.js +339 -0
- package/{dist → src}/esm/index.mjs +4 -2
- package/src/evolution/engine.js +295 -0
- package/src/mcp/server.js +8 -0
- package/src/synthesis/claim_check_separator.js +271 -0
- package/src/system1/laya-package-lock.json +303 -0
- package/src/system1/laya-package.json +16 -0
- package/src/system1/provider.js +127 -0
- package/{dist → src}/tui/banner.js +1 -1
- package/{dist → src}/tui/index.js +21 -21
- package/{dist → src}/tui/reviewer-grid.js +86 -90
- package/{dist → src}/tui/shimmer.js +89 -91
- package/{dist → src}/tui/theme.js +130 -130
- package/{dist → src}/tui/tree.js +93 -93
- package/{dist → src}/tui/wizard.js +144 -148
- package/{dist → src}/types.js +8 -8
- package/src/utils/fs.js +103 -0
- package/src/utils/hasher.js +144 -0
- package/src/utils/helpers.js +52 -0
- package/src/utils/logger.js +61 -0
- package/src/utils/version.js +176 -0
- package/.agent/history/README.md +0 -53
- package/.agent/history/architecture-explorer.html +0 -352
- package/.agent/history/architecture-graph.yaml +0 -619
- package/.agent/history/case-law/cases/template-case.json +0 -19
- package/.agent/history/graph-cache.json +0 -1042
- package/.agent/history/memory/.memory.idx +0 -7596
- package/.agent/history/memory/MEMORY.md +0 -512
- package/.agent/history/memory.db +0 -0
- package/.agent/history/snapshots/.opencode__plugins__tribunal.js.json +0 -12
- package/.agent/history/snapshots/.pi__extensions__tribunal.ts.json +0 -12
- package/.agent/history/snapshots/bin__adapter-install.js.json +0 -13
- package/.agent/history/snapshots/bin__global-store.js.json +0 -15
- package/.agent/history/snapshots/bin__mcp-server.js.json +0 -21
- package/.agent/history/snapshots/bin__proxy-server.js.json +0 -20
- package/.agent/history/snapshots/bin__spawn-agent.js.json +0 -12
- package/.agent/history/snapshots/bin__tk-proxy.js.json +0 -21
- package/.agent/history/snapshots/bin__tribunal-kit.js.json +0 -21
- package/.agent/history/snapshots/bin__wrapper.js.json +0 -14
- package/.agent/history/snapshots/eslint.config.js.json +0 -8
- package/.agent/history/snapshots/hooks__session-start.js.json +0 -11
- package/.agent/history/snapshots/scripts__apply-version.js.json +0 -11
- package/.agent/history/snapshots/scripts__audit_skill_sdo.js.json +0 -11
- package/.agent/history/snapshots/scripts__benchmark.js.json +0 -14
- package/.agent/history/snapshots/scripts__changelog.js.json +0 -12
- package/.agent/history/snapshots/scripts__clean-pycache.js.json +0 -11
- package/.agent/history/snapshots/scripts__context_compiler.js.json +0 -17
- package/.agent/history/snapshots/scripts__fix-vbc.js.json +0 -11
- package/.agent/history/snapshots/scripts__modernize_skills.js.json +0 -11
- package/.agent/history/snapshots/scripts__package-cores.js.json +0 -12
- package/.agent/history/snapshots/scripts__skill_enhancement_engine.js.json +0 -11
- package/.agent/history/snapshots/scripts__stress_benchmark.js.json +0 -15
- package/.agent/history/snapshots/scripts__sync-skills.js.json +0 -11
- package/.agent/history/snapshots/scripts__sync-version.js.json +0 -11
- package/.agent/history/snapshots/scripts__telemetry_gc.js.json +0 -11
- package/.agent/history/snapshots/scripts__validate-payload.js.json +0 -11
- package/.agent/history/snapshots/scripts__visual_audit.js.json +0 -11
- package/.agent/history/snapshots/test__integration__bridges.test.js.json +0 -13
- package/.agent/history/snapshots/test__integration__browser_cli.test.js.json +0 -12
- package/.agent/history/snapshots/test__integration__graceful_degradation.test.js.json +0 -12
- package/.agent/history/snapshots/test__integration__init.test.js.json +0 -13
- package/.agent/history/snapshots/test__integration__minimal_change_pipeline.test.js.json +0 -13
- package/.agent/history/snapshots/test__integration__parallel_tribunal.test.js.json +0 -12
- package/.agent/history/snapshots/test__integration__routing.test.js.json +0 -11
- package/.agent/history/snapshots/test__integration__swarm_dispatcher.test.js.json +0 -13
- package/.agent/history/snapshots/test__integration__sync_status.test.js.json +0 -13
- package/.agent/history/snapshots/test__integration__wave2.test.js.json +0 -13
- package/.agent/history/snapshots/test__integration__wrapper.test.js.json +0 -13
- package/.agent/history/snapshots/test__unit__align.test.js.json +0 -10
- package/.agent/history/snapshots/test__unit__args.test.js.json +0 -20
- package/.agent/history/snapshots/test__unit__ast_context_loader.test.js.json +0 -12
- package/.agent/history/snapshots/test__unit__audit_release.test.js.json +0 -16
- package/.agent/history/snapshots/test__unit__browser_case_bridge.test.js.json +0 -11
- package/.agent/history/snapshots/test__unit__browser_discovery.test.js.json +0 -10
- package/.agent/history/snapshots/test__unit__browser_idpi.test.js.json +0 -10
- package/.agent/history/snapshots/test__unit__browser_sentinel.test.js.json +0 -11
- package/.agent/history/snapshots/test__unit__browser_synapse.test.js.json +0 -10
- package/.agent/history/snapshots/test__unit__browser_trimmer.test.js.json +0 -10
- package/.agent/history/snapshots/test__unit__case_law_manager.test.js.json +0 -10
- package/.agent/history/snapshots/test__unit__cicd_validator.test.js.json +0 -12
- package/.agent/history/snapshots/test__unit__compile.test.js.json +0 -10
- package/.agent/history/snapshots/test__unit__context_broker.test.js.json +0 -10
- package/.agent/history/snapshots/test__unit__context_compiler.test.js.json +0 -26
- package/.agent/history/snapshots/test__unit__contract_engine.test.js.json +0 -13
- package/.agent/history/snapshots/test__unit__copyDir.test.js.json +0 -23
- package/.agent/history/snapshots/test__unit__graph_tools.test.js.json +0 -11
- package/.agent/history/snapshots/test__unit__guardrail_engine.test.js.json +0 -10
- package/.agent/history/snapshots/test__unit__impact_classifier.test.js.json +0 -12
- package/.agent/history/snapshots/test__unit__init.test.js.json +0 -14
- package/.agent/history/snapshots/test__unit__inner_loop_validator.test.js.json +0 -10
- package/.agent/history/snapshots/test__unit__integrity_manifest.test.js.json +0 -13
- package/.agent/history/snapshots/test__unit__learn.test.js.json +0 -11
- package/.agent/history/snapshots/test__unit__marathon.test.js.json +0 -22
- package/.agent/history/snapshots/test__unit__mcp_server.test.js.json +0 -16
- package/.agent/history/snapshots/test__unit__memory.test.js.json +0 -13
- package/.agent/history/snapshots/test__unit__minimal_change.test.js.json +0 -10
- package/.agent/history/snapshots/test__unit__native.test.js.json +0 -10
- package/.agent/history/snapshots/test__unit__optimize.test.js.json +0 -13
- package/.agent/history/snapshots/test__unit__path_resolution.test.js.json +0 -14
- package/.agent/history/snapshots/test__unit__platform_download_audit.test.js.json +0 -11
- package/.agent/history/snapshots/test__unit__production_readiness_evidence.test.js.json +0 -21
- package/.agent/history/snapshots/test__unit__prompt_compiler.test.js.json +0 -10
- package/.agent/history/snapshots/test__unit__sdd_integration.test.js.json +0 -12
- package/.agent/history/snapshots/test__unit__selfInstall.test.js.json +0 -23
- package/.agent/history/snapshots/test__unit__semver.test.js.json +0 -20
- package/.agent/history/snapshots/test__unit__skill_evolution.test.js.json +0 -11
- package/.agent/history/snapshots/test__unit__stress.test.js.json +0 -15
- package/.agent/history/snapshots/test__unit__swarm_dispatcher.test.js.json +0 -12
- package/.agent/history/snapshots/test__unit__token_budget_broker.test.js.json +0 -10
- package/.agent/history/snapshots/test__unit__tui.test.js.json +0 -10
- package/.agent/history/snapshots/test__unit__utils.test.js.json +0 -10
- package/.agents/plugins/marketplace.json +0 -20
- package/.claude/CLAUDE.md +0 -442
- package/dist/cli.js +0 -377
- package/dist/commands/align.js +0 -201
- package/dist/commands/case.js +0 -73
- package/dist/commands/compile.js +0 -91
- package/dist/commands/context.js +0 -71
- package/dist/commands/graph.js +0 -44
- package/dist/commands/hook.js +0 -28
- package/dist/commands/init.js +0 -393
- package/dist/commands/learn.js +0 -117
- package/dist/commands/marathon.js +0 -45
- package/dist/commands/memory.js +0 -508
- package/dist/commands/minimal.js +0 -71
- package/dist/commands/mutate.js +0 -30
- package/dist/commands/native.js +0 -264
- package/dist/commands/optimize.js +0 -328
- package/dist/commands/sdd.js +0 -229
- package/dist/commands/sync.js +0 -25
- package/dist/commands/uninstall.js +0 -54
- package/dist/commands/update.js +0 -37
- package/dist/mcp/server.js +0 -8
- package/dist/utils/fs.js +0 -102
- package/dist/utils/hasher.js +0 -142
- package/dist/utils/helpers.js +0 -53
- package/dist/utils/logger.js +0 -54
- package/dist/utils/version.js +0 -157
- package/scripts/apply-version.js +0 -57
- package/scripts/audit_skill_sdo.js +0 -89
- package/scripts/benchmark.js +0 -231
- package/scripts/build-graph.js +0 -71
- package/scripts/changelog.js +0 -190
- package/scripts/clean-pycache.js +0 -42
- package/scripts/context_compiler.js +0 -1117
- package/scripts/fix-vbc.js +0 -96
- package/scripts/fix-vbc.ps1 +0 -3
- package/scripts/modernize_skills.js +0 -268
- package/scripts/package-cores.js +0 -116
- package/scripts/skill_enhancement_engine.js +0 -608
- package/scripts/stress_benchmark.js +0 -358
- package/scripts/sync-skills.js +0 -61
- package/scripts/sync-version.js +0 -177
- package/scripts/telemetry_gc.js +0 -156
- package/scripts/validate-payload.js +0 -73
- package/scripts/visual_audit.js +0 -136
- /package/{dist → src}/index.d.ts +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rust-pro
|
|
3
|
-
description: "Use when
|
|
4
|
-
version:
|
|
5
|
-
last-updated: 2026-09-
|
|
3
|
+
description: "Use when designing, implementing, auditing, and hardening rust pro server logic, APIs, background jobs, and error boundaries."
|
|
4
|
+
version: 6.0.0
|
|
5
|
+
last-updated: 2026-09-29
|
|
6
6
|
skills:
|
|
7
7
|
- clean-code
|
|
8
8
|
- api-patterns
|
|
@@ -15,638 +15,699 @@ scripts-binding:
|
|
|
15
15
|
|
|
16
16
|
# Rust Pro — Rust 1.75+ Systems Mastery
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
1. **Native `std::sync::LazyLock`**:
|
|
27
|
-
```rust
|
|
28
|
-
use std::sync::LazyLock;
|
|
29
|
-
static REGEX: LazyLock<regex::Regex> = LazyLock::new(|| regex::Regex::new(r"^\d+$").unwrap());
|
|
30
|
-
```
|
|
31
|
-
2. **Async fn in Traits**: Use native `async fn` inside traits directly (Rust 1.75+ / 2024 edition) without the legacy `#[async_trait]` macro attribute.
|
|
32
|
-
3. **Zero-Copy Borrowing**: Accept `&str` or `&[T]` instead of taking owned `String` or `Vec<T>` in function signatures unless ownership transfer is strictly required.
|
|
33
|
-
4. **Tokio Task Spawning Budget**: Never spawn unbounded Tokio tasks inside request loops without a semaphore limit to prevent memory exhaustion.
|
|
34
|
-
|
|
35
|
-
## Hallucination Traps (Read First)
|
|
36
|
-
|
|
37
|
-
- ❌ Using `lazy_static!` or `once_cell::sync::Lazy` → ✅ Use `std::sync::LazyLock`
|
|
38
|
-
- ❌ Using `#[async_trait]` macro for basic traits → ✅ Native `async fn` in traits (Rust 1.75+)
|
|
39
|
-
- ❌ `.unwrap()` in production handlers → ✅ `?` operator with `thiserror` / `anyhow`
|
|
40
|
-
- ❌ Axum `:id` path parameter syntax → ✅ Axum 0.7+: `{id}` bracket syntax
|
|
41
|
-
- ❌ Allocating `String` just to pass to a reader → ✅ Pass `&str`
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
## Ownership & Borrowing
|
|
46
|
-
|
|
47
|
-
### The Three Rules
|
|
48
|
-
|
|
49
|
-
```rust
|
|
50
|
-
// Rule 1: Each value has exactly ONE owner
|
|
51
|
-
let s1 = String::from("hello");
|
|
52
|
-
let s2 = s1; // s1 is MOVED to s2 — s1 is no longer valid
|
|
53
|
-
// println!("{s1}"); // ❌ compile error: value borrowed after move
|
|
54
|
-
|
|
55
|
-
// Rule 2: You can have EITHER one mutable reference OR any number of immutable references
|
|
56
|
-
let mut data = vec![1, 2, 3];
|
|
57
|
-
let r1 = &data; // ✅ immutable borrow
|
|
58
|
-
let r2 = &data; // ✅ second immutable borrow — fine
|
|
59
|
-
// let r3 = &mut data; // ❌ compile error: cannot borrow as mutable while immutable borrows exist
|
|
60
|
-
println!("{r1:?} {r2:?}");
|
|
61
|
-
// r1 and r2 go out of scope here (NLL — Non-Lexical Lifetimes)
|
|
62
|
-
let r3 = &mut data; // ✅ now fine — no immutable borrows active
|
|
63
|
-
r3.push(4);
|
|
64
|
-
|
|
65
|
-
// Rule 3: References must always be valid (no dangling pointers)
|
|
66
|
-
// fn dangling() -> &String { // ❌ compile error
|
|
67
|
-
// let s = String::from("hello");
|
|
68
|
-
// &s // s is dropped at end of function — reference would dangle
|
|
69
|
-
// }
|
|
70
|
-
fn not_dangling() -> String {
|
|
71
|
-
String::from("hello") // ✅ return owned value
|
|
72
|
-
}
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### Common Ownership Patterns
|
|
76
|
-
|
|
77
|
-
```rust
|
|
78
|
-
// Clone when you need independent copies (has a cost — measure)
|
|
79
|
-
let original = vec![1, 2, 3];
|
|
80
|
-
let copy = original.clone(); // deep copy — both are independent
|
|
81
|
-
|
|
82
|
-
// Rc<T> — shared ownership (single-threaded)
|
|
83
|
-
use std::rc::Rc;
|
|
84
|
-
let shared = Rc::new(vec![1, 2, 3]);
|
|
85
|
-
let also_shared = Rc::clone(&shared); // cheap reference count increment
|
|
86
|
-
// Both shared and also_shared point to the same data
|
|
87
|
-
|
|
88
|
-
// Arc<T> — shared ownership (thread-safe)
|
|
89
|
-
use std::sync::Arc;
|
|
90
|
-
let thread_safe = Arc::new(vec![1, 2, 3]);
|
|
91
|
-
let for_thread = Arc::clone(&thread_safe);
|
|
92
|
-
std::thread::spawn(move || {
|
|
93
|
-
println!("{for_thread:?}");
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
// Cow<T> — Clone on Write (zero-copy when not modified)
|
|
97
|
-
use std::borrow::Cow;
|
|
98
|
-
fn process(input: &str) -> Cow<'_, str> {
|
|
99
|
-
if input.contains("bad") {
|
|
100
|
-
Cow::Owned(input.replace("bad", "good")) // allocated only if needed
|
|
101
|
-
} else {
|
|
102
|
-
Cow::Borrowed(input) // zero-copy
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
---
|
|
108
|
-
|
|
109
|
-
## Lifetimes
|
|
110
|
-
|
|
111
|
-
```rust
|
|
112
|
-
// Lifetime annotations tell the compiler how long references are valid
|
|
113
|
-
// They DON'T change how long values live — they DESCRIBE existing relationships
|
|
114
|
-
|
|
115
|
-
// ✅ Explicit lifetime: return value lives as long as the input
|
|
116
|
-
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
|
|
117
|
-
if x.len() > y.len() { x } else { y }
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// Struct with references (requires lifetime annotation)
|
|
121
|
-
struct Config<'a> {
|
|
122
|
-
name: &'a str,
|
|
123
|
-
version: &'a str,
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
impl<'a> Config<'a> {
|
|
127
|
-
fn display(&self) -> String {
|
|
128
|
-
format!("{} v{}", self.name, self.version)
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
// 'static lifetime — lives for the entire program
|
|
133
|
-
let s: &'static str = "I live forever"; // string literals are 'static
|
|
134
|
-
// Owned types satisfy 'static (they own their data)
|
|
135
|
-
fn takes_static(s: String) { /* String is 'static because it owns its data */ }
|
|
136
|
-
|
|
137
|
-
// ❌ HALLUCINATION TRAP: Lifetime elision rules handle most cases
|
|
138
|
-
// Don't add lifetimes unless the compiler asks for them
|
|
139
|
-
// The compiler tells you exactly which annotations are needed
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
---
|
|
18
|
+
## Mandatory Pre-Flight Context Inspection
|
|
19
|
+
Before reading, generating, or refactoring code in the `rust-pro` domain, inspect these 5 critical parameters:
|
|
20
|
+
1. **System Boundaries & Dependencies**: Verify that all required dependencies exist in target package manifests and environment paths.
|
|
21
|
+
2. **Runtime Context & Platform Invariants**: Confirm target platform constraints (Node.js, Browser, Mobile OS, Edge runtime) before applying APIs.
|
|
22
|
+
3. **Execution Guardrails**: Identify potential side-effects, state mutations, and unhandled asynchronous exceptions.
|
|
23
|
+
4. **Validation & Type Contracts**: Validate input data schemas and strict type constraints across all module interfaces.
|
|
24
|
+
5. **Observability & Proof of Execution**: Ensure execution produces tangible verification signals (terminal output, tests, metrics).
|
|
143
25
|
|
|
144
|
-
## Error Handling
|
|
145
26
|
|
|
146
|
-
|
|
27
|
+
## Activation Boundaries
|
|
28
|
+
- **Activate when:** Use when designing, implementing, auditing, and hardening rust pro server logic, APIs, background jobs, and error boundaries.
|
|
29
|
+
- **DO NOT activate when:** The task falls outside the `rust-pro` domain or is managed by a different dedicated specialist agent.
|
|
147
30
|
|
|
148
|
-
```rust
|
|
149
|
-
use std::fs;
|
|
150
|
-
use std::io;
|
|
151
|
-
|
|
152
|
-
// ✅ Propagate errors with ?
|
|
153
|
-
fn read_config(path: &str) -> Result<Config, io::Error> {
|
|
154
|
-
let content = fs::read_to_string(path)?; // returns early on error
|
|
155
|
-
let config: Config = serde_json::from_str(&content)?;
|
|
156
|
-
Ok(config)
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// ❌ HALLUCINATION TRAP: NEVER use .unwrap() in production code
|
|
160
|
-
// .unwrap() panics on error — crashes the entire program
|
|
161
|
-
// ❌ let file = File::open("config.json").unwrap();
|
|
162
|
-
// ✅ let file = File::open("config.json")?;
|
|
163
|
-
// ✅ let file = File::open("config.json").unwrap_or_default();
|
|
164
|
-
// ✅ let file = File::open("config.json").map_err(|e| AppError::Io(e))?;
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### thiserror (Library Errors)
|
|
168
|
-
|
|
169
|
-
```rust
|
|
170
|
-
// thiserror — for library code (structured error types)
|
|
171
|
-
use thiserror::Error;
|
|
172
|
-
|
|
173
|
-
#[derive(Debug, Error)]
|
|
174
|
-
pub enum AppError {
|
|
175
|
-
#[error("Database error: {0}")]
|
|
176
|
-
Database(#[from] sqlx::Error),
|
|
177
|
-
|
|
178
|
-
#[error("Validation error: {field} — {message}")]
|
|
179
|
-
Validation { field: String, message: String },
|
|
180
|
-
|
|
181
|
-
#[error("Not found: {0}")]
|
|
182
|
-
NotFound(String),
|
|
183
|
-
|
|
184
|
-
#[error("Unauthorized")]
|
|
185
|
-
Unauthorized,
|
|
186
|
-
|
|
187
|
-
#[error("IO error: {0}")]
|
|
188
|
-
Io(#[from] std::io::Error),
|
|
189
|
-
|
|
190
|
-
#[error("JSON error: {0}")]
|
|
191
|
-
Json(#[from] serde_json::Error),
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
// #[from] auto-implements From<sqlx::Error> for AppError
|
|
195
|
-
// So sqlx errors can be propagated with ? automatically
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
### anyhow (Application Errors)
|
|
199
|
-
|
|
200
|
-
```rust
|
|
201
|
-
// anyhow — for application code (quick error propagation)
|
|
202
|
-
use anyhow::{Context, Result, bail, ensure};
|
|
203
|
-
|
|
204
|
-
fn load_config(path: &str) -> Result<Config> {
|
|
205
|
-
let content = fs::read_to_string(path)
|
|
206
|
-
.context(format!("Failed to read config from {path}"))?;
|
|
207
|
-
|
|
208
|
-
let config: Config = serde_json::from_str(&content)
|
|
209
|
-
.context("Invalid JSON in config file")?;
|
|
210
|
-
|
|
211
|
-
ensure!(config.port > 0, "Port must be positive, got {}", config.port);
|
|
212
|
-
|
|
213
|
-
if config.name.is_empty() {
|
|
214
|
-
bail!("Config name cannot be empty");
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
Ok(config)
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
// Use thiserror for libraries, anyhow for applications
|
|
221
|
-
// ❌ HALLUCINATION TRAP: Don't use anyhow in library crates
|
|
222
|
-
// Libraries should expose structured error types (thiserror)
|
|
223
|
-
// anyhow erases type information — callers can't match on specific errors
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
---
|
|
227
|
-
|
|
228
|
-
## Traits
|
|
229
|
-
|
|
230
|
-
### Defining & Implementing
|
|
231
|
-
|
|
232
|
-
```rust
|
|
233
|
-
trait Summarizable {
|
|
234
|
-
fn summary(&self) -> String;
|
|
235
|
-
|
|
236
|
-
// Default implementation
|
|
237
|
-
fn preview(&self) -> String {
|
|
238
|
-
let s = self.summary();
|
|
239
|
-
if s.len() > 50 {
|
|
240
|
-
format!("{}...", &s[..50])
|
|
241
|
-
} else {
|
|
242
|
-
s
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
struct Article {
|
|
248
|
-
title: String,
|
|
249
|
-
body: String,
|
|
250
|
-
author: String,
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
impl Summarizable for Article {
|
|
254
|
-
fn summary(&self) -> String {
|
|
255
|
-
format!("{} by {} — {}", self.title, self.author, &self.body[..100.min(self.body.len())])
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
// Trait bounds
|
|
260
|
-
fn notify(item: &impl Summarizable) {
|
|
261
|
-
println!("Breaking: {}", item.summary());
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// Equivalent with generics (more flexible)
|
|
265
|
-
fn notify_generic<T: Summarizable + std::fmt::Display>(item: &T) {
|
|
266
|
-
println!("Breaking: {}", item.summary());
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
// where clause (cleaner for complex bounds)
|
|
270
|
-
fn process<T, U>(t: &T, u: &U) -> String
|
|
271
|
-
where
|
|
272
|
-
T: Summarizable + Clone,
|
|
273
|
-
U: std::fmt::Debug + Send,
|
|
274
|
-
{
|
|
275
|
-
format!("{} — {:?}", t.summary(), u)
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
// Return impl Trait (hide concrete type)
|
|
279
|
-
fn make_summarizer() -> impl Summarizable {
|
|
280
|
-
Article { title: "News".into(), body: "Content".into(), author: "Author".into() }
|
|
281
|
-
}
|
|
282
|
-
```
|
|
283
31
|
|
|
284
|
-
|
|
32
|
+
## 🔁 Multi-Pass Execution Protocol
|
|
285
33
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
34
|
+
| Pass | Phase | Core Action | Adaptive Depth |
|
|
35
|
+
|:---|:---|:---|:---|
|
|
36
|
+
| **Pass 1** | **Understand** | Deconstruct the user's explicit objective, implicit requirements, and platform constraints. | Fast / Standard / Deep |
|
|
37
|
+
| **Pass 2** | **Plan** | Decompose task into smallest logical steps; map dependencies, affected files, and tool calls. | Standard / Deep |
|
|
38
|
+
| **Pass 3** | **Execute** | Implement solution with production-grade craft, zero placeholders, and strict typing. | All Modes |
|
|
39
|
+
| **Pass 4** | **Verify** | Run linters, unit tests, or compiler checks to validate structural correctness. | All Modes |
|
|
40
|
+
| **Pass 5** | **Attack & Falsify** | Perform adversarial search for edge-case failures, counterexamples, race conditions, and traps. | Standard / Deep |
|
|
41
|
+
| **Pass 6** | **Harden** | Eliminate discovered friction, optimize performance, and harden error boundaries. | Standard / Deep |
|
|
42
|
+
| **Pass 7** | **Quality Gate** | Enforce Verification-Before-Completion (VBC) with concrete terminal proof before finalizing. | All Modes |
|
|
293
43
|
|
|
294
|
-
// Display — for user-facing output
|
|
295
|
-
use std::fmt;
|
|
296
|
-
impl fmt::Display for Point {
|
|
297
|
-
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
298
|
-
write!(f, "({}, {})", self.x, self.y)
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
44
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
Point { x, y }
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
let p: Point = (10, 20).into(); // uses From automatically
|
|
309
|
-
|
|
310
|
-
// Iterator
|
|
311
|
-
struct Counter { count: u32, max: u32 }
|
|
312
|
-
impl Iterator for Counter {
|
|
313
|
-
type Item = u32;
|
|
314
|
-
fn next(&mut self) -> Option<Self::Item> {
|
|
315
|
-
if self.count < self.max {
|
|
316
|
-
self.count += 1;
|
|
317
|
-
Some(self.count)
|
|
318
|
-
} else {
|
|
319
|
-
None
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
```
|
|
324
|
-
|
|
325
|
-
---
|
|
326
|
-
|
|
327
|
-
## Async with Tokio
|
|
328
|
-
|
|
329
|
-
### Runtime Setup
|
|
330
|
-
|
|
331
|
-
```rust
|
|
332
|
-
// Cargo.toml
|
|
333
|
-
// [dependencies]
|
|
334
|
-
// tokio = { version = "1", features = ["full"] }
|
|
335
|
-
|
|
336
|
-
#[tokio::main]
|
|
337
|
-
async fn main() {
|
|
338
|
-
let result = fetch_data("https://api.example.com/data").await;
|
|
339
|
-
println!("{result:?}");
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
// For library code — don't use #[tokio::main], let the caller choose the runtime
|
|
343
|
-
pub async fn fetch_data(url: &str) -> Result<String> {
|
|
344
|
-
let response = reqwest::get(url).await?;
|
|
345
|
-
let body = response.text().await?;
|
|
346
|
-
Ok(body)
|
|
347
|
-
}
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
### Concurrent Tasks
|
|
351
|
-
|
|
352
|
-
```rust
|
|
353
|
-
use tokio::task;
|
|
354
|
-
|
|
355
|
-
// Spawn concurrent tasks
|
|
356
|
-
async fn parallel_fetch() -> Result<(Users, Posts)> {
|
|
357
|
-
let users_handle = task::spawn(async { fetch_users().await });
|
|
358
|
-
let posts_handle = task::spawn(async { fetch_posts().await });
|
|
359
|
-
|
|
360
|
-
let users = users_handle.await??; // first ? for JoinError, second for app error
|
|
361
|
-
let posts = posts_handle.await??;
|
|
362
|
-
|
|
363
|
-
Ok((users, posts))
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
// tokio::join! — run concurrently, wait for all
|
|
367
|
-
async fn fetch_all() -> Result<(Users, Posts, Analytics)> {
|
|
368
|
-
let (users, posts, analytics) = tokio::join!(
|
|
369
|
-
fetch_users(),
|
|
370
|
-
fetch_posts(),
|
|
371
|
-
fetch_analytics(),
|
|
372
|
-
);
|
|
373
|
-
Ok((users?, posts?, analytics?))
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
// tokio::select! — race multiple futures, take first to complete
|
|
377
|
-
async fn fetch_with_timeout(url: &str) -> Result<String> {
|
|
378
|
-
tokio::select! {
|
|
379
|
-
result = fetch_data(url) => result,
|
|
380
|
-
_ = tokio::time::sleep(Duration::from_secs(5)) => {
|
|
381
|
-
Err(anyhow!("Request timed out after 5s"))
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
// ❌ HALLUCINATION TRAP: tokio::spawn requires 'static + Send
|
|
387
|
-
// You cannot spawn a task referencing local variables without Arc/clone
|
|
388
|
-
// ❌ let data = &local_data;
|
|
389
|
-
// tokio::spawn(async { process(data) }); // ❌ data doesn't live long enough
|
|
390
|
-
// ✅ let data = Arc::new(local_data);
|
|
391
|
-
// let data_clone = Arc::clone(&data);
|
|
392
|
-
// tokio::spawn(async move { process(&data_clone) });
|
|
393
|
-
```
|
|
394
|
-
|
|
395
|
-
### Channels
|
|
396
|
-
|
|
397
|
-
```rust
|
|
398
|
-
use tokio::sync::{mpsc, oneshot, broadcast};
|
|
399
|
-
|
|
400
|
-
// mpsc — Multiple Producer, Single Consumer
|
|
401
|
-
async fn worker_pattern() {
|
|
402
|
-
let (tx, mut rx) = mpsc::channel::<String>(32); // buffer size
|
|
403
|
-
|
|
404
|
-
tokio::spawn(async move {
|
|
405
|
-
tx.send("hello".to_string()).await.unwrap();
|
|
406
|
-
tx.send("world".to_string()).await.unwrap();
|
|
407
|
-
});
|
|
408
|
-
|
|
409
|
-
while let Some(msg) = rx.recv().await {
|
|
410
|
-
println!("Got: {msg}");
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
// oneshot — single response (request/response pattern)
|
|
415
|
-
async fn request_response() {
|
|
416
|
-
let (tx, rx) = oneshot::channel::<String>();
|
|
417
|
-
|
|
418
|
-
tokio::spawn(async move {
|
|
419
|
-
let result = expensive_computation().await;
|
|
420
|
-
tx.send(result).unwrap();
|
|
421
|
-
});
|
|
422
|
-
|
|
423
|
-
let response = rx.await.unwrap();
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
// Mutex (async-safe)
|
|
427
|
-
use tokio::sync::Mutex;
|
|
428
|
-
let shared_state = Arc::new(Mutex::new(Vec::new()));
|
|
429
|
-
|
|
430
|
-
let state = Arc::clone(&shared_state);
|
|
431
|
-
tokio::spawn(async move {
|
|
432
|
-
let mut guard = state.lock().await;
|
|
433
|
-
guard.push("item");
|
|
434
|
-
}); // lock released when guard is dropped
|
|
435
|
-
```
|
|
436
|
-
|
|
437
|
-
---
|
|
438
|
-
|
|
439
|
-
## Axum Web Framework
|
|
440
|
-
|
|
441
|
-
### Basic Server
|
|
442
|
-
|
|
443
|
-
```rust
|
|
444
|
-
use axum::{
|
|
445
|
-
extract::{Path, Query, State, Json},
|
|
446
|
-
http::StatusCode,
|
|
447
|
-
response::IntoResponse,
|
|
448
|
-
routing::{get, post, delete},
|
|
449
|
-
Router,
|
|
450
|
-
};
|
|
451
|
-
use serde::{Deserialize, Serialize};
|
|
452
|
-
|
|
453
|
-
#[derive(Clone)]
|
|
454
|
-
struct AppState {
|
|
455
|
-
db: sqlx::PgPool,
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
#[tokio::main]
|
|
459
|
-
async fn main() {
|
|
460
|
-
let pool = sqlx::PgPool::connect("postgres://localhost/mydb").await.unwrap();
|
|
461
|
-
let state = AppState { db: pool };
|
|
462
|
-
|
|
463
|
-
let app = Router::new()
|
|
464
|
-
.route("/users", get(list_users).post(create_user))
|
|
465
|
-
.route("/users/{id}", get(get_user).delete(delete_user))
|
|
466
|
-
.with_state(state);
|
|
467
|
-
|
|
468
|
-
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
|
469
|
-
axum::serve(listener, app).await.unwrap();
|
|
470
|
-
}
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 🛠️ Technical Architecture & Reference Recipes
|
|
471
48
|
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
49
|
+
## 2026 Rust Performance & Memory Invariants
|
|
50
|
+
|
|
51
|
+
1. **Native `std::sync::LazyLock`**:
|
|
52
|
+
```rust
|
|
53
|
+
use std::sync::LazyLock;
|
|
54
|
+
static REGEX: LazyLock<regex::Regex> = LazyLock::new(|| regex::Regex::new(r"^\d+$").unwrap());
|
|
55
|
+
```
|
|
56
|
+
2. **Async fn in Traits**: Use native `async fn` inside traits directly (Rust 1.75+ / 2024 edition) without the legacy `#[async_trait]` macro attribute.
|
|
57
|
+
3. **Zero-Copy Borrowing**: Accept `&str` or `&[T]` instead of taking owned `String` or `Vec<T>` in function signatures unless ownership transfer is strictly required.
|
|
58
|
+
4. **Tokio Task Spawning Budget**: Never spawn unbounded Tokio tasks inside request loops without a semaphore limit to prevent memory exhaustion.
|
|
59
|
+
|
|
60
|
+
## Hallucination Traps (Read First)
|
|
61
|
+
|
|
62
|
+
- ❌ Using `lazy_static!` or `once_cell::sync::Lazy` → ✅ Use `std::sync::LazyLock`
|
|
63
|
+
- ❌ Using `#[async_trait]` macro for basic traits → ✅ Native `async fn` in traits (Rust 1.75+)
|
|
64
|
+
- ❌ `.unwrap()` in production handlers → ✅ `?` operator with `thiserror` / `anyhow`
|
|
65
|
+
- ❌ Axum `:id` path parameter syntax → ✅ Axum 0.7+: `{id}` bracket syntax
|
|
66
|
+
- ❌ Allocating `String` just to pass to a reader → ✅ Pass `&str`
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Ownership & Borrowing
|
|
71
|
+
|
|
72
|
+
### The Three Rules
|
|
73
|
+
|
|
74
|
+
```rust
|
|
75
|
+
// Rule 1: Each value has exactly ONE owner
|
|
76
|
+
let s1 = String::from("hello");
|
|
77
|
+
let s2 = s1; // s1 is MOVED to s2 — s1 is no longer valid
|
|
78
|
+
// println!("{s1}"); // ❌ compile error: value borrowed after move
|
|
79
|
+
|
|
80
|
+
// Rule 2: You can have EITHER one mutable reference OR any number of immutable references
|
|
81
|
+
let mut data = vec![1, 2, 3];
|
|
82
|
+
let r1 = &data; // ✅ immutable borrow
|
|
83
|
+
let r2 = &data; // ✅ second immutable borrow — fine
|
|
84
|
+
// let r3 = &mut data; // ❌ compile error: cannot borrow as mutable while immutable borrows exist
|
|
85
|
+
println!("{r1:?} {r2:?}");
|
|
86
|
+
// r1 and r2 go out of scope here (NLL — Non-Lexical Lifetimes)
|
|
87
|
+
let r3 = &mut data; // ✅ now fine — no immutable borrows active
|
|
88
|
+
r3.push(4);
|
|
89
|
+
|
|
90
|
+
// Rule 3: References must always be valid (no dangling pointers)
|
|
91
|
+
// fn dangling() -> &String { // ❌ compile error
|
|
92
|
+
// let s = String::from("hello");
|
|
93
|
+
// &s // s is dropped at end of function — reference would dangle
|
|
94
|
+
// }
|
|
95
|
+
fn not_dangling() -> String {
|
|
96
|
+
String::from("hello") // ✅ return owned value
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Common Ownership Patterns
|
|
101
|
+
|
|
102
|
+
```rust
|
|
103
|
+
// Clone when you need independent copies (has a cost — measure)
|
|
104
|
+
let original = vec![1, 2, 3];
|
|
105
|
+
let copy = original.clone(); // deep copy — both are independent
|
|
106
|
+
|
|
107
|
+
// Rc<T> — shared ownership (single-threaded)
|
|
108
|
+
use std::rc::Rc;
|
|
109
|
+
let shared = Rc::new(vec![1, 2, 3]);
|
|
110
|
+
let also_shared = Rc::clone(&shared); // cheap reference count increment
|
|
111
|
+
// Both shared and also_shared point to the same data
|
|
112
|
+
|
|
113
|
+
// Arc<T> — shared ownership (thread-safe)
|
|
114
|
+
use std::sync::Arc;
|
|
115
|
+
let thread_safe = Arc::new(vec![1, 2, 3]);
|
|
116
|
+
let for_thread = Arc::clone(&thread_safe);
|
|
117
|
+
std::thread::spawn(move || {
|
|
118
|
+
println!("{for_thread:?}");
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
// Cow<T> — Clone on Write (zero-copy when not modified)
|
|
122
|
+
use std::borrow::Cow;
|
|
123
|
+
fn process(input: &str) -> Cow<'_, str> {
|
|
124
|
+
if input.contains("bad") {
|
|
125
|
+
Cow::Owned(input.replace("bad", "good")) // allocated only if needed
|
|
126
|
+
} else {
|
|
127
|
+
Cow::Borrowed(input) // zero-copy
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Lifetimes
|
|
135
|
+
|
|
136
|
+
```rust
|
|
137
|
+
// Lifetime annotations tell the compiler how long references are valid
|
|
138
|
+
// They DON'T change how long values live — they DESCRIBE existing relationships
|
|
139
|
+
|
|
140
|
+
// ✅ Explicit lifetime: return value lives as long as the input
|
|
141
|
+
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
|
|
142
|
+
if x.len() > y.len() { x } else { y }
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Struct with references (requires lifetime annotation)
|
|
146
|
+
struct Config<'a> {
|
|
147
|
+
name: &'a str,
|
|
148
|
+
version: &'a str,
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
impl<'a> Config<'a> {
|
|
152
|
+
fn display(&self) -> String {
|
|
153
|
+
format!("{} v{}", self.name, self.version)
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// 'static lifetime — lives for the entire program
|
|
158
|
+
let s: &'static str = "I live forever"; // string literals are 'static
|
|
159
|
+
// Owned types satisfy 'static (they own their data)
|
|
160
|
+
fn takes_static(s: String) { /* String is 'static because it owns its data */ }
|
|
161
|
+
|
|
162
|
+
// ❌ HALLUCINATION TRAP: Lifetime elision rules handle most cases
|
|
163
|
+
// Don't add lifetimes unless the compiler asks for them
|
|
164
|
+
// The compiler tells you exactly which annotations are needed
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Error Handling
|
|
170
|
+
|
|
171
|
+
### The `?` Operator & Result
|
|
172
|
+
|
|
173
|
+
```rust
|
|
174
|
+
use std::fs;
|
|
175
|
+
use std::io;
|
|
176
|
+
|
|
177
|
+
// ✅ Propagate errors with ?
|
|
178
|
+
fn read_config(path: &str) -> Result<Config, io::Error> {
|
|
179
|
+
let content = fs::read_to_string(path)?; // returns early on error
|
|
180
|
+
let config: Config = serde_json::from_str(&content)?;
|
|
181
|
+
Ok(config)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// ❌ HALLUCINATION TRAP: NEVER use .unwrap() in production code
|
|
185
|
+
// .unwrap() panics on error — crashes the entire program
|
|
186
|
+
// ❌ let file = File::open("config.json").unwrap();
|
|
187
|
+
// ✅ let file = File::open("config.json")?;
|
|
188
|
+
// ✅ let file = File::open("config.json").unwrap_or_default();
|
|
189
|
+
// ✅ let file = File::open("config.json").map_err(|e| AppError::Io(e))?;
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### thiserror (Library Errors)
|
|
193
|
+
|
|
194
|
+
```rust
|
|
195
|
+
// thiserror — for library code (structured error types)
|
|
196
|
+
use thiserror::Error;
|
|
197
|
+
|
|
198
|
+
#[derive(Debug, Error)]
|
|
199
|
+
pub enum AppError {
|
|
200
|
+
#[error("Database error: {0}")]
|
|
201
|
+
Database(#[from] sqlx::Error),
|
|
202
|
+
|
|
203
|
+
#[error("Validation error: {field} — {message}")]
|
|
204
|
+
Validation { field: String, message: String },
|
|
205
|
+
|
|
206
|
+
#[error("Not found: {0}")]
|
|
207
|
+
NotFound(String),
|
|
208
|
+
|
|
209
|
+
#[error("Unauthorized")]
|
|
210
|
+
Unauthorized,
|
|
211
|
+
|
|
212
|
+
#[error("IO error: {0}")]
|
|
213
|
+
Io(#[from] std::io::Error),
|
|
214
|
+
|
|
215
|
+
#[error("JSON error: {0}")]
|
|
216
|
+
Json(#[from] serde_json::Error),
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// #[from] auto-implements From<sqlx::Error> for AppError
|
|
220
|
+
// So sqlx errors can be propagated with ? automatically
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### anyhow (Application Errors)
|
|
224
|
+
|
|
225
|
+
```rust
|
|
226
|
+
// anyhow — for application code (quick error propagation)
|
|
227
|
+
use anyhow::{Context, Result, bail, ensure};
|
|
228
|
+
|
|
229
|
+
fn load_config(path: &str) -> Result<Config> {
|
|
230
|
+
let content = fs::read_to_string(path)
|
|
231
|
+
.context(format!("Failed to read config from {path}"))?;
|
|
232
|
+
|
|
233
|
+
let config: Config = serde_json::from_str(&content)
|
|
234
|
+
.context("Invalid JSON in config file")?;
|
|
235
|
+
|
|
236
|
+
ensure!(config.port > 0, "Port must be positive, got {}", config.port);
|
|
237
|
+
|
|
238
|
+
if config.name.is_empty() {
|
|
239
|
+
bail!("Config name cannot be empty");
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
Ok(config)
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Use thiserror for libraries, anyhow for applications
|
|
246
|
+
// ❌ HALLUCINATION TRAP: Don't use anyhow in library crates
|
|
247
|
+
// Libraries should expose structured error types (thiserror)
|
|
248
|
+
// anyhow erases type information — callers can't match on specific errors
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Traits
|
|
254
|
+
|
|
255
|
+
### Defining & Implementing
|
|
256
|
+
|
|
257
|
+
```rust
|
|
258
|
+
trait Summarizable {
|
|
259
|
+
fn summary(&self) -> String;
|
|
260
|
+
|
|
261
|
+
// Default implementation
|
|
262
|
+
fn preview(&self) -> String {
|
|
263
|
+
let s = self.summary();
|
|
264
|
+
if s.len() > 50 {
|
|
265
|
+
format!("{}...", &s[..50])
|
|
266
|
+
} else {
|
|
267
|
+
s
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
struct Article {
|
|
273
|
+
title: String,
|
|
274
|
+
body: String,
|
|
275
|
+
author: String,
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
impl Summarizable for Article {
|
|
279
|
+
fn summary(&self) -> String {
|
|
280
|
+
format!("{} by {} — {}", self.title, self.author, &self.body[..100.min(self.body.len())])
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// Trait bounds
|
|
285
|
+
fn notify(item: &impl Summarizable) {
|
|
286
|
+
println!("Breaking: {}", item.summary());
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
// Equivalent with generics (more flexible)
|
|
290
|
+
fn notify_generic<T: Summarizable + std::fmt::Display>(item: &T) {
|
|
291
|
+
println!("Breaking: {}", item.summary());
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// where clause (cleaner for complex bounds)
|
|
295
|
+
fn process<T, U>(t: &T, u: &U) -> String
|
|
296
|
+
where
|
|
297
|
+
T: Summarizable + Clone,
|
|
298
|
+
U: std::fmt::Debug + Send,
|
|
299
|
+
{
|
|
300
|
+
format!("{} — {:?}", t.summary(), u)
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
// Return impl Trait (hide concrete type)
|
|
304
|
+
fn make_summarizer() -> impl Summarizable {
|
|
305
|
+
Article { title: "News".into(), body: "Content".into(), author: "Author".into() }
|
|
306
|
+
}
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### Common Standard Traits
|
|
310
|
+
|
|
311
|
+
```rust
|
|
312
|
+
// Derive common traits
|
|
313
|
+
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
|
314
|
+
struct Point {
|
|
315
|
+
x: i32,
|
|
316
|
+
y: i32,
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
// Display — for user-facing output
|
|
320
|
+
use std::fmt;
|
|
321
|
+
impl fmt::Display for Point {
|
|
322
|
+
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
323
|
+
write!(f, "({}, {})", self.x, self.y)
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// From/Into — type conversion
|
|
328
|
+
impl From<(i32, i32)> for Point {
|
|
329
|
+
fn from((x, y): (i32, i32)) -> Self {
|
|
330
|
+
Point { x, y }
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
let p: Point = (10, 20).into(); // uses From automatically
|
|
334
|
+
|
|
335
|
+
// Iterator
|
|
336
|
+
struct Counter { count: u32, max: u32 }
|
|
337
|
+
impl Iterator for Counter {
|
|
338
|
+
type Item = u32;
|
|
339
|
+
fn next(&mut self) -> Option<Self::Item> {
|
|
340
|
+
if self.count < self.max {
|
|
341
|
+
self.count += 1;
|
|
342
|
+
Some(self.count)
|
|
343
|
+
} else {
|
|
344
|
+
None
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
|
|
352
|
+
## Async with Tokio
|
|
353
|
+
|
|
354
|
+
### Runtime Setup
|
|
355
|
+
|
|
356
|
+
```rust
|
|
357
|
+
// Cargo.toml
|
|
358
|
+
// [dependencies]
|
|
359
|
+
// tokio = { version = "1", features = ["full"] }
|
|
360
|
+
|
|
361
|
+
#[tokio::main]
|
|
362
|
+
async fn main() {
|
|
363
|
+
let result = fetch_data("https://api.example.com/data").await;
|
|
364
|
+
println!("{result:?}");
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
// For library code — don't use #[tokio::main], let the caller choose the runtime
|
|
368
|
+
pub async fn fetch_data(url: &str) -> Result<String> {
|
|
369
|
+
let response = reqwest::get(url).await?;
|
|
370
|
+
let body = response.text().await?;
|
|
371
|
+
Ok(body)
|
|
372
|
+
}
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
### Concurrent Tasks
|
|
376
|
+
|
|
377
|
+
```rust
|
|
378
|
+
use tokio::task;
|
|
379
|
+
|
|
380
|
+
// Spawn concurrent tasks
|
|
381
|
+
async fn parallel_fetch() -> Result<(Users, Posts)> {
|
|
382
|
+
let users_handle = task::spawn(async { fetch_users().await });
|
|
383
|
+
let posts_handle = task::spawn(async { fetch_posts().await });
|
|
384
|
+
|
|
385
|
+
let users = users_handle.await??; // first ? for JoinError, second for app error
|
|
386
|
+
let posts = posts_handle.await??;
|
|
387
|
+
|
|
388
|
+
Ok((users, posts))
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
// tokio::join! — run concurrently, wait for all
|
|
392
|
+
async fn fetch_all() -> Result<(Users, Posts, Analytics)> {
|
|
393
|
+
let (users, posts, analytics) = tokio::join!(
|
|
394
|
+
fetch_users(),
|
|
395
|
+
fetch_posts(),
|
|
396
|
+
fetch_analytics(),
|
|
397
|
+
);
|
|
398
|
+
Ok((users?, posts?, analytics?))
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
// tokio::select! — race multiple futures, take first to complete
|
|
402
|
+
async fn fetch_with_timeout(url: &str) -> Result<String> {
|
|
403
|
+
tokio::select! {
|
|
404
|
+
result = fetch_data(url) => result,
|
|
405
|
+
_ = tokio::time::sleep(Duration::from_secs(5)) => {
|
|
406
|
+
Err(anyhow!("Request timed out after 5s"))
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
// ❌ HALLUCINATION TRAP: tokio::spawn requires 'static + Send
|
|
412
|
+
// You cannot spawn a task referencing local variables without Arc/clone
|
|
413
|
+
// ❌ let data = &local_data;
|
|
414
|
+
// tokio::spawn(async { process(data) }); // ❌ data doesn't live long enough
|
|
415
|
+
// ✅ let data = Arc::new(local_data);
|
|
416
|
+
// let data_clone = Arc::clone(&data);
|
|
417
|
+
// tokio::spawn(async move { process(&data_clone) });
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
### Channels
|
|
421
|
+
|
|
422
|
+
```rust
|
|
423
|
+
use tokio::sync::{mpsc, oneshot, broadcast};
|
|
424
|
+
|
|
425
|
+
// mpsc — Multiple Producer, Single Consumer
|
|
426
|
+
async fn worker_pattern() {
|
|
427
|
+
let (tx, mut rx) = mpsc::channel::<String>(32); // buffer size
|
|
428
|
+
|
|
429
|
+
tokio::spawn(async move {
|
|
430
|
+
tx.send("hello".to_string()).await.unwrap();
|
|
431
|
+
tx.send("world".to_string()).await.unwrap();
|
|
432
|
+
});
|
|
433
|
+
|
|
434
|
+
while let Some(msg) = rx.recv().await {
|
|
435
|
+
println!("Got: {msg}");
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
// oneshot — single response (request/response pattern)
|
|
440
|
+
async fn request_response() {
|
|
441
|
+
let (tx, rx) = oneshot::channel::<String>();
|
|
442
|
+
|
|
443
|
+
tokio::spawn(async move {
|
|
444
|
+
let result = expensive_computation().await;
|
|
445
|
+
tx.send(result).unwrap();
|
|
446
|
+
});
|
|
447
|
+
|
|
448
|
+
let response = rx.await.unwrap();
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
// Mutex (async-safe)
|
|
452
|
+
use tokio::sync::Mutex;
|
|
453
|
+
let shared_state = Arc::new(Mutex::new(Vec::new()));
|
|
454
|
+
|
|
455
|
+
let state = Arc::clone(&shared_state);
|
|
456
|
+
tokio::spawn(async move {
|
|
457
|
+
let mut guard = state.lock().await;
|
|
458
|
+
guard.push("item");
|
|
459
|
+
}); // lock released when guard is dropped
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
---
|
|
463
|
+
|
|
464
|
+
## Axum Web Framework
|
|
465
|
+
|
|
466
|
+
### Basic Server
|
|
467
|
+
|
|
468
|
+
```rust
|
|
469
|
+
use axum::{
|
|
470
|
+
extract::{Path, Query, State, Json},
|
|
471
|
+
http::StatusCode,
|
|
472
|
+
response::IntoResponse,
|
|
473
|
+
routing::{get, post, delete},
|
|
474
|
+
Router,
|
|
475
|
+
};
|
|
476
|
+
use serde::{Deserialize, Serialize};
|
|
477
|
+
|
|
478
|
+
#[derive(Clone)]
|
|
479
|
+
struct AppState {
|
|
480
|
+
db: sqlx::PgPool,
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
#[tokio::main]
|
|
484
|
+
async fn main() {
|
|
485
|
+
let pool = sqlx::PgPool::connect("postgres://localhost/mydb").await.unwrap();
|
|
486
|
+
let state = AppState { db: pool };
|
|
487
|
+
|
|
488
|
+
let app = Router::new()
|
|
489
|
+
.route("/users", get(list_users).post(create_user))
|
|
490
|
+
.route("/users/{id}", get(get_user).delete(delete_user))
|
|
491
|
+
.with_state(state);
|
|
492
|
+
|
|
493
|
+
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
|
494
|
+
axum::serve(listener, app).await.unwrap();
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
// ❌ HALLUCINATION TRAP: axum 0.7+ uses {id} not :id for path params
|
|
498
|
+
// ❌ .route("/users/:id", ...) ← old syntax
|
|
499
|
+
// ✅ .route("/users/{id}", ...) ← axum 0.7+
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
### Handlers
|
|
503
|
+
|
|
504
|
+
```rust
|
|
505
|
+
#[derive(Deserialize)]
|
|
506
|
+
struct ListParams {
|
|
507
|
+
page: Option<u32>,
|
|
508
|
+
limit: Option<u32>,
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
async fn list_users(
|
|
512
|
+
State(state): State<AppState>,
|
|
513
|
+
Query(params): Query<ListParams>,
|
|
514
|
+
) -> Result<Json<Vec<User>>, AppError> {
|
|
515
|
+
let page = params.page.unwrap_or(1);
|
|
516
|
+
let limit = params.limit.unwrap_or(20).min(100);
|
|
517
|
+
let offset = (page - 1) * limit;
|
|
518
|
+
|
|
519
|
+
let users = sqlx::query_as!(
|
|
520
|
+
User,
|
|
521
|
+
"SELECT id, name, email FROM users ORDER BY id LIMIT $1 OFFSET $2",
|
|
522
|
+
limit as i64,
|
|
523
|
+
offset as i64,
|
|
524
|
+
)
|
|
525
|
+
.fetch_all(&state.db)
|
|
526
|
+
.await?;
|
|
527
|
+
|
|
528
|
+
Ok(Json(users))
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
#[derive(Deserialize)]
|
|
532
|
+
struct CreateUserPayload {
|
|
533
|
+
name: String,
|
|
534
|
+
email: String,
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
async fn create_user(
|
|
538
|
+
State(state): State<AppState>,
|
|
539
|
+
Json(payload): Json<CreateUserPayload>,
|
|
540
|
+
) -> Result<(StatusCode, Json<User>), AppError> {
|
|
541
|
+
let user = sqlx::query_as!(
|
|
542
|
+
User,
|
|
543
|
+
"INSERT INTO users (name, email) VALUES ($1, $2) RETURNING id, name, email",
|
|
544
|
+
payload.name,
|
|
545
|
+
payload.email,
|
|
546
|
+
)
|
|
547
|
+
.fetch_one(&state.db)
|
|
548
|
+
.await?;
|
|
549
|
+
|
|
550
|
+
Ok((StatusCode::CREATED, Json(user)))
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
async fn get_user(
|
|
554
|
+
State(state): State<AppState>,
|
|
555
|
+
Path(id): Path<i32>,
|
|
556
|
+
) -> Result<Json<User>, AppError> {
|
|
557
|
+
let user = sqlx::query_as!(User, "SELECT id, name, email FROM users WHERE id = $1", id)
|
|
558
|
+
.fetch_optional(&state.db)
|
|
559
|
+
.await?
|
|
560
|
+
.ok_or(AppError::NotFound(format!("User {id}")))?;
|
|
561
|
+
|
|
562
|
+
Ok(Json(user))
|
|
563
|
+
}
|
|
564
|
+
```
|
|
565
|
+
|
|
566
|
+
### Error Handling in Axum
|
|
567
|
+
|
|
568
|
+
```rust
|
|
569
|
+
use axum::response::{IntoResponse, Response};
|
|
570
|
+
|
|
571
|
+
#[derive(Debug, thiserror::Error)]
|
|
572
|
+
pub enum AppError {
|
|
573
|
+
#[error("Not found: {0}")]
|
|
574
|
+
NotFound(String),
|
|
575
|
+
#[error("Validation: {0}")]
|
|
576
|
+
Validation(String),
|
|
577
|
+
#[error("Database: {0}")]
|
|
578
|
+
Database(#[from] sqlx::Error),
|
|
579
|
+
#[error("Internal: {0}")]
|
|
580
|
+
Internal(#[from] anyhow::Error),
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
impl IntoResponse for AppError {
|
|
584
|
+
fn into_response(self) -> Response {
|
|
585
|
+
let (status, message) = match &self {
|
|
586
|
+
AppError::NotFound(msg) => (StatusCode::NOT_FOUND, msg.clone()),
|
|
587
|
+
AppError::Validation(msg) => (StatusCode::BAD_REQUEST, msg.clone()),
|
|
588
|
+
AppError::Database(e) => {
|
|
589
|
+
tracing::error!("DB error: {e}"); // log internal details
|
|
590
|
+
(StatusCode::INTERNAL_SERVER_ERROR, "Database error".to_string())
|
|
591
|
+
}
|
|
592
|
+
AppError::Internal(e) => {
|
|
593
|
+
tracing::error!("Internal error: {e}");
|
|
594
|
+
(StatusCode::INTERNAL_SERVER_ERROR, "Internal error".to_string())
|
|
595
|
+
}
|
|
596
|
+
};
|
|
597
|
+
|
|
598
|
+
(status, Json(serde_json::json!({ "error": message }))).into_response()
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
---
|
|
604
|
+
|
|
605
|
+
## Serde (Serialization)
|
|
606
|
+
|
|
607
|
+
```rust
|
|
608
|
+
use serde::{Deserialize, Serialize};
|
|
609
|
+
|
|
610
|
+
#[derive(Debug, Serialize, Deserialize)]
|
|
611
|
+
#[serde(rename_all = "camelCase")] // JSON uses camelCase
|
|
612
|
+
struct UserResponse {
|
|
613
|
+
user_id: i32, // serialized as "userId"
|
|
614
|
+
full_name: String, // serialized as "fullName"
|
|
615
|
+
email: String,
|
|
616
|
+
|
|
617
|
+
#[serde(skip_serializing_if = "Option::is_none")]
|
|
618
|
+
phone: Option<String>, // omitted from JSON if None
|
|
619
|
+
|
|
620
|
+
#[serde(default)] // defaults to 0 if missing in input
|
|
621
|
+
login_count: u32,
|
|
622
|
+
|
|
623
|
+
#[serde(rename = "type")] // rename for reserved keywords
|
|
624
|
+
user_type: String,
|
|
625
|
+
|
|
626
|
+
#[serde(skip)] // never serialized/deserialized
|
|
627
|
+
internal_token: String,
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
// Enum serialization
|
|
631
|
+
#[derive(Serialize, Deserialize)]
|
|
632
|
+
#[serde(tag = "type", content = "data")] // adjacently tagged
|
|
633
|
+
enum Event {
|
|
634
|
+
#[serde(rename = "user_created")]
|
|
635
|
+
UserCreated { id: i32, name: String },
|
|
636
|
+
#[serde(rename = "user_deleted")]
|
|
637
|
+
UserDeleted { id: i32 },
|
|
638
|
+
}
|
|
639
|
+
// Serializes as: {"type": "user_created", "data": {"id": 1, "name": "Alice"}}
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
---
|
|
643
|
+
|
|
644
|
+
## Iterator Patterns
|
|
645
|
+
|
|
646
|
+
```rust
|
|
647
|
+
let numbers = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
|
648
|
+
|
|
649
|
+
// Chain operations (lazy — no allocation until collect)
|
|
650
|
+
let result: Vec<i32> = numbers.iter()
|
|
651
|
+
.filter(|&&n| n % 2 == 0) // keep even
|
|
652
|
+
.map(|&n| n * n) // square
|
|
653
|
+
.take(3) // first 3
|
|
654
|
+
.collect(); // [4, 16, 36]
|
|
655
|
+
|
|
656
|
+
// fold (reduce)
|
|
657
|
+
let sum: i32 = numbers.iter().fold(0, |acc, &n| acc + n);
|
|
658
|
+
|
|
659
|
+
// find / position
|
|
660
|
+
let first_even = numbers.iter().find(|&&n| n % 2 == 0); // Some(&2)
|
|
661
|
+
let pos = numbers.iter().position(|&n| n > 5); // Some(5)
|
|
662
|
+
|
|
663
|
+
// chunk / window
|
|
664
|
+
let chunks: Vec<&[i32]> = numbers.chunks(3).collect();
|
|
665
|
+
// [[1,2,3], [4,5,6], [7,8,9], [10]]
|
|
666
|
+
|
|
667
|
+
let windows: Vec<&[i32]> = numbers.windows(3).collect();
|
|
668
|
+
// [[1,2,3], [2,3,4], [3,4,5], ...]
|
|
669
|
+
|
|
670
|
+
// Collecting into HashMap
|
|
671
|
+
use std::collections::HashMap;
|
|
672
|
+
let word_counts: HashMap<&str, usize> = words.iter()
|
|
673
|
+
.fold(HashMap::new(), |mut map, word| {
|
|
674
|
+
*map.entry(word.as_str()).or_insert(0) += 1;
|
|
675
|
+
map
|
|
676
|
+
});
|
|
475
677
|
```
|
|
476
678
|
|
|
477
|
-
|
|
679
|
+
## 🚨 Edge-Case & Failure Mode Matrix
|
|
478
680
|
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
681
|
+
| Scenario | Risk | Production Mitigation |
|
|
682
|
+
|:---|:---|:---|
|
|
683
|
+
| **Empty or Null Inputs** | Unhandled exception or unexpected rendering collapse | Enforce fallback guards, optional chaining, and explicit empty state handlers |
|
|
684
|
+
| **Network Timeout / Latency** | Hanging operations or duplicate side-effects | Implement bounded abort controllers, exponential backoff, and idempotency keys |
|
|
685
|
+
| **Concurrency / Race Conditions** | Stale state overwrite or inconsistent data mutations | Use atomic transactions, mutex locking, or cancel-on-resubmit controls |
|
|
686
|
+
| **Invalid Schema / Malformed Payload** | Downstream runtime errors or security injection | Validate boundary payloads with Zod/Pydantic schemas prior to execution |
|
|
687
|
+
| **Resource / Memory Saturation** | OOM errors, frame drops, or memory leaks | Clean up listeners, cancel active timers, and enforce pagination/virtualization |
|
|
485
688
|
|
|
486
|
-
async fn list_users(
|
|
487
|
-
State(state): State<AppState>,
|
|
488
|
-
Query(params): Query<ListParams>,
|
|
489
|
-
) -> Result<Json<Vec<User>>, AppError> {
|
|
490
|
-
let page = params.page.unwrap_or(1);
|
|
491
|
-
let limit = params.limit.unwrap_or(20).min(100);
|
|
492
|
-
let offset = (page - 1) * limit;
|
|
493
689
|
|
|
494
|
-
|
|
495
|
-
User,
|
|
496
|
-
"SELECT id, name, email FROM users ORDER BY id LIMIT $1 OFFSET $2",
|
|
497
|
-
limit as i64,
|
|
498
|
-
offset as i64,
|
|
499
|
-
)
|
|
500
|
-
.fetch_all(&state.db)
|
|
501
|
-
.await?;
|
|
690
|
+
## 🏛️ Tribunal Verification & Guardrails
|
|
502
691
|
|
|
503
|
-
|
|
504
|
-
|
|
692
|
+
**Active Reviewers:** `logic-reviewer` · `security-auditor` · `api-architect` · `resilience-reviewer`
|
|
693
|
+
**Slash Command:** `/review` or `/tribunal-full`
|
|
505
694
|
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
695
|
+
### 🔬 Evidence Standard (Tri-State Verification)
|
|
696
|
+
Every finding, audit statement, or completion claim must classify its factual certainty:
|
|
697
|
+
- **`[OBSERVED]`**: Directly confirmed in the codebase or verified via executed terminal command.
|
|
698
|
+
- **`[INFERRED]`**: Logically deduced from code patterns, architectural data flow, or schema relations.
|
|
699
|
+
- **`[UNVERIFIED]`**: Speculative hypothesis or runtime possibility requiring active testing or measurement.
|
|
511
700
|
|
|
512
|
-
|
|
513
|
-
State(state): State<AppState>,
|
|
514
|
-
Json(payload): Json<CreateUserPayload>,
|
|
515
|
-
) -> Result<(StatusCode, Json<User>), AppError> {
|
|
516
|
-
let user = sqlx::query_as!(
|
|
517
|
-
User,
|
|
518
|
-
"INSERT INTO users (name, email) VALUES ($1, $2) RETURNING id, name, email",
|
|
519
|
-
payload.name,
|
|
520
|
-
payload.email,
|
|
521
|
-
)
|
|
522
|
-
.fetch_one(&state.db)
|
|
523
|
-
.await?;
|
|
524
|
-
|
|
525
|
-
Ok((StatusCode::CREATED, Json(user)))
|
|
526
|
-
}
|
|
527
|
-
|
|
528
|
-
async fn get_user(
|
|
529
|
-
State(state): State<AppState>,
|
|
530
|
-
Path(id): Path<i32>,
|
|
531
|
-
) -> Result<Json<User>, AppError> {
|
|
532
|
-
let user = sqlx::query_as!(User, "SELECT id, name, email FROM users WHERE id = $1", id)
|
|
533
|
-
.fetch_optional(&state.db)
|
|
534
|
-
.await?
|
|
535
|
-
.ok_or(AppError::NotFound(format!("User {id}")))?;
|
|
536
|
-
|
|
537
|
-
Ok(Json(user))
|
|
538
|
-
}
|
|
701
|
+
### ✅ Pre-Flight Self-Audit Checklist
|
|
539
702
|
```
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
#[derive(Debug, thiserror::Error)]
|
|
547
|
-
pub enum AppError {
|
|
548
|
-
#[error("Not found: {0}")]
|
|
549
|
-
NotFound(String),
|
|
550
|
-
#[error("Validation: {0}")]
|
|
551
|
-
Validation(String),
|
|
552
|
-
#[error("Database: {0}")]
|
|
553
|
-
Database(#[from] sqlx::Error),
|
|
554
|
-
#[error("Internal: {0}")]
|
|
555
|
-
Internal(#[from] anyhow::Error),
|
|
556
|
-
}
|
|
557
|
-
|
|
558
|
-
impl IntoResponse for AppError {
|
|
559
|
-
fn into_response(self) -> Response {
|
|
560
|
-
let (status, message) = match &self {
|
|
561
|
-
AppError::NotFound(msg) => (StatusCode::NOT_FOUND, msg.clone()),
|
|
562
|
-
AppError::Validation(msg) => (StatusCode::BAD_REQUEST, msg.clone()),
|
|
563
|
-
AppError::Database(e) => {
|
|
564
|
-
tracing::error!("DB error: {e}"); // log internal details
|
|
565
|
-
(StatusCode::INTERNAL_SERVER_ERROR, "Database error".to_string())
|
|
566
|
-
}
|
|
567
|
-
AppError::Internal(e) => {
|
|
568
|
-
tracing::error!("Internal error: {e}");
|
|
569
|
-
(StatusCode::INTERNAL_SERVER_ERROR, "Internal error".to_string())
|
|
570
|
-
}
|
|
571
|
-
};
|
|
572
|
-
|
|
573
|
-
(status, Json(serde_json::json!({ "error": message }))).into_response()
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
```
|
|
577
|
-
|
|
578
|
-
---
|
|
579
|
-
|
|
580
|
-
## Serde (Serialization)
|
|
581
|
-
|
|
582
|
-
```rust
|
|
583
|
-
use serde::{Deserialize, Serialize};
|
|
584
|
-
|
|
585
|
-
#[derive(Debug, Serialize, Deserialize)]
|
|
586
|
-
#[serde(rename_all = "camelCase")] // JSON uses camelCase
|
|
587
|
-
struct UserResponse {
|
|
588
|
-
user_id: i32, // serialized as "userId"
|
|
589
|
-
full_name: String, // serialized as "fullName"
|
|
590
|
-
email: String,
|
|
591
|
-
|
|
592
|
-
#[serde(skip_serializing_if = "Option::is_none")]
|
|
593
|
-
phone: Option<String>, // omitted from JSON if None
|
|
594
|
-
|
|
595
|
-
#[serde(default)] // defaults to 0 if missing in input
|
|
596
|
-
login_count: u32,
|
|
597
|
-
|
|
598
|
-
#[serde(rename = "type")] // rename for reserved keywords
|
|
599
|
-
user_type: String,
|
|
600
|
-
|
|
601
|
-
#[serde(skip)] // never serialized/deserialized
|
|
602
|
-
internal_token: String,
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
// Enum serialization
|
|
606
|
-
#[derive(Serialize, Deserialize)]
|
|
607
|
-
#[serde(tag = "type", content = "data")] // adjacently tagged
|
|
608
|
-
enum Event {
|
|
609
|
-
#[serde(rename = "user_created")]
|
|
610
|
-
UserCreated { id: i32, name: String },
|
|
611
|
-
#[serde(rename = "user_deleted")]
|
|
612
|
-
UserDeleted { id: i32 },
|
|
613
|
-
}
|
|
614
|
-
// Serializes as: {"type": "user_created", "data": {"id": 1, "name": "Alice"}}
|
|
703
|
+
✅ Are all inputs and boundary payloads validated against schemas (Zod/Pydantic)?
|
|
704
|
+
✅ Are SQL and database queries parameterized with zero string concatenation?
|
|
705
|
+
✅ Are error boundaries and timeout/retry policies explicitly declared?
|
|
706
|
+
✅ Are authentication and object-level authorization (IDOR/BOLA) checked before business logic?
|
|
707
|
+
✅ Did I verify that imported dependencies exist in package manifests?
|
|
615
708
|
```
|
|
616
709
|
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
```rust
|
|
622
|
-
let numbers = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
|
623
|
-
|
|
624
|
-
// Chain operations (lazy — no allocation until collect)
|
|
625
|
-
let result: Vec<i32> = numbers.iter()
|
|
626
|
-
.filter(|&&n| n % 2 == 0) // keep even
|
|
627
|
-
.map(|&n| n * n) // square
|
|
628
|
-
.take(3) // first 3
|
|
629
|
-
.collect(); // [4, 16, 36]
|
|
630
|
-
|
|
631
|
-
// fold (reduce)
|
|
632
|
-
let sum: i32 = numbers.iter().fold(0, |acc, &n| acc + n);
|
|
633
|
-
|
|
634
|
-
// find / position
|
|
635
|
-
let first_even = numbers.iter().find(|&&n| n % 2 == 0); // Some(&2)
|
|
636
|
-
let pos = numbers.iter().position(|&n| n > 5); // Some(5)
|
|
637
|
-
|
|
638
|
-
// chunk / window
|
|
639
|
-
let chunks: Vec<&[i32]> = numbers.chunks(3).collect();
|
|
640
|
-
// [[1,2,3], [4,5,6], [7,8,9], [10]]
|
|
641
|
-
|
|
642
|
-
let windows: Vec<&[i32]> = numbers.windows(3).collect();
|
|
643
|
-
// [[1,2,3], [2,3,4], [3,4,5], ...]
|
|
644
|
-
|
|
645
|
-
// Collecting into HashMap
|
|
646
|
-
use std::collections::HashMap;
|
|
647
|
-
let word_counts: HashMap<&str, usize> = words.iter()
|
|
648
|
-
.fold(HashMap::new(), |mut map, word| {
|
|
649
|
-
*map.entry(word.as_str()).or_insert(0) += 1;
|
|
650
|
-
map
|
|
651
|
-
});
|
|
652
|
-
```
|
|
710
|
+
### 🛑 Verification-Before-Completion (VBC) Protocol
|
|
711
|
+
**CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
|
|
712
|
+
- ❌ **Forbidden:** Declaring a task complete because the output "looks correct."
|
|
713
|
+
- ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing test suites, compiler success, or equivalent operational proof) that your output works as intended.
|