tribunal-kit 6.0.1 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/ARCHITECTURE.md +9 -6
- package/.agent/agents/accessibility-reviewer.md +23 -16
- package/.agent/agents/ai-code-reviewer.md +25 -21
- package/.agent/agents/anti-pattern-reviewer.md +12 -7
- package/.agent/agents/api-architect.md +1 -0
- package/.agent/agents/backend-specialist.md +23 -22
- package/.agent/agents/cloud-engineer.md +1 -0
- package/.agent/agents/code-archaeologist.md +1 -0
- package/.agent/agents/complexity-reviewer.md +10 -7
- package/.agent/agents/database-architect.md +3 -2
- package/.agent/agents/db-latency-auditor.md +6 -2
- package/.agent/agents/debugger.md +3 -2
- package/.agent/agents/dependency-reviewer.md +1 -0
- package/.agent/agents/devops-engineer.md +9 -8
- package/.agent/agents/documentation-writer.md +6 -5
- package/.agent/agents/explorer-agent.md +1 -0
- package/.agent/agents/frontend-reviewer.md +21 -17
- package/.agent/agents/frontend-specialist.md +23 -20
- package/.agent/agents/game-developer.md +1 -0
- package/.agent/agents/interaction-reviewer.md +10 -5
- package/.agent/agents/logic-reviewer.md +3 -0
- package/.agent/agents/minimalist-reviewer.md +6 -0
- package/.agent/agents/mobile-developer.md +7 -6
- package/.agent/agents/mobile-reviewer.md +14 -13
- package/.agent/agents/orchestrator.md +3 -0
- package/.agent/agents/penetration-tester.md +1 -0
- package/.agent/agents/performance-optimizer.md +6 -5
- package/.agent/agents/performance-reviewer.md +6 -6
- package/.agent/agents/pipeline-reviewer.md +144 -0
- package/.agent/agents/precedence-reviewer.md +1 -0
- package/.agent/agents/product-manager.md +1 -0
- package/.agent/agents/product-owner.md +1 -0
- package/.agent/agents/product-reviewer.md +12 -7
- package/.agent/agents/project-planner.md +3 -0
- package/.agent/agents/qa-automation-engineer.md +50 -43
- package/.agent/agents/resilience-reviewer.md +1 -0
- package/.agent/agents/schema-reviewer.md +1 -0
- package/.agent/agents/security-auditor.md +24 -24
- package/.agent/agents/seo-specialist.md +33 -23
- package/.agent/agents/sql-reviewer.md +5 -4
- package/.agent/agents/supervisor-agent.md +12 -2
- package/.agent/agents/swarm-worker-contracts.md +13 -13
- package/.agent/agents/swarm-worker-registry.md +51 -51
- package/.agent/agents/system-architect.md +1 -0
- package/.agent/agents/test-coverage-reviewer.md +25 -22
- package/.agent/agents/test-engineer.md +12 -11
- package/.agent/agents/throughput-optimizer.md +45 -40
- package/.agent/agents/type-safety-reviewer.md +5 -4
- package/.agent/agents/ui-ux-auditor.md +6 -4
- package/.agent/agents/ui-visual-auditor.md +3 -0
- package/.agent/agents/ux-reviewer.md +11 -6
- package/.agent/agents/visual-reviewer.md +11 -6
- package/.agent/agents/vitals-reviewer.md +5 -4
- package/.agent/config/claude.json +18 -0
- package/.agent/config/plugin.json +102 -0
- package/.agent/config/slash-commands.json +103 -0
- package/.agent/config/specialist-registry.json +415 -0
- package/.agent/config/system-prompt.md +191 -0
- package/.agent/history/architecture-graph.yaml +302 -3
- package/.agent/history/graph-cache.json +515 -45
- package/.agent/history/memory/.memory.idx +1532 -1
- package/.agent/history/memory/MEMORY.md +102 -1
- package/.agent/history/memory.db +0 -0
- package/.agent/history/snapshots/bin__adapter-install.js.json +13 -0
- package/.agent/history/snapshots/bin__global-store.js.json +15 -0
- package/.agent/history/snapshots/bin__mcp-server.js.json +19 -0
- package/.agent/history/snapshots/bin__proxy-server.js.json +20 -0
- package/.agent/history/snapshots/bin__spawn-agent.js.json +12 -0
- package/.agent/history/snapshots/bin__tk-proxy.js.json +21 -0
- package/.agent/history/snapshots/bin__tribunal-kit.js.json +9 -7
- package/.agent/history/snapshots/bin__wrapper.js.json +14 -0
- package/.agent/history/snapshots/eslint.config.js.json +1 -2
- package/.agent/history/snapshots/scripts__benchmark.js.json +14 -0
- package/.agent/history/snapshots/scripts__changelog.js.json +1 -2
- package/.agent/history/snapshots/scripts__fix-vbc.js.json +11 -0
- package/.agent/history/snapshots/scripts__stress_benchmark.js.json +15 -0
- package/.agent/history/snapshots/scripts__sync-version.js.json +1 -2
- package/.agent/history/snapshots/scripts__validate-payload.js.json +1 -2
- package/.agent/history/snapshots/scripts__visual_audit.js.json +11 -0
- package/.agent/history/snapshots/test__integration__bridges.test.js.json +1 -2
- package/.agent/history/snapshots/test__integration__graceful_degradation.test.js.json +12 -0
- package/.agent/history/snapshots/test__integration__init.test.js.json +1 -2
- package/.agent/history/snapshots/test__integration__minimal_change_pipeline.test.js.json +13 -0
- package/.agent/history/snapshots/test__integration__parallel_tribunal.test.js.json +12 -0
- package/.agent/history/snapshots/test__integration__routing.test.js.json +1 -2
- package/.agent/history/snapshots/test__integration__swarm_dispatcher.test.js.json +1 -2
- package/.agent/history/snapshots/test__integration__sync_status.test.js.json +13 -0
- package/.agent/history/snapshots/test__integration__wave2.test.js.json +1 -2
- package/.agent/history/snapshots/test__integration__wrapper.test.js.json +13 -0
- package/.agent/history/snapshots/test__unit__align.test.js.json +10 -0
- package/.agent/history/snapshots/test__unit__args.test.js.json +3 -3
- package/.agent/history/snapshots/test__unit__audit_release.test.js.json +16 -0
- package/.agent/history/snapshots/test__unit__case_law_manager.test.js.json +1 -2
- package/.agent/history/snapshots/test__unit__cicd_validator.test.js.json +12 -0
- package/.agent/history/snapshots/test__unit__compile.test.js.json +10 -0
- package/.agent/history/snapshots/test__unit__context_broker.test.js.json +1 -2
- package/.agent/history/snapshots/test__unit__contract_engine.test.js.json +13 -0
- package/.agent/history/snapshots/test__unit__copyDir.test.js.json +3 -3
- package/.agent/history/snapshots/test__unit__graph_tools.test.js.json +1 -2
- package/.agent/history/snapshots/test__unit__guardrail_engine.test.js.json +10 -0
- package/.agent/history/snapshots/test__unit__impact_classifier.test.js.json +12 -0
- package/.agent/history/snapshots/test__unit__init.test.js.json +14 -0
- package/.agent/history/snapshots/test__unit__inner_loop_validator.test.js.json +1 -2
- package/.agent/history/snapshots/test__unit__integrity_manifest.test.js.json +13 -0
- package/.agent/history/snapshots/test__unit__learn.test.js.json +11 -0
- package/.agent/history/snapshots/test__unit__marathon.test.js.json +22 -0
- package/.agent/history/snapshots/test__unit__mcp_server.test.js.json +16 -0
- package/.agent/history/snapshots/test__unit__memory.test.js.json +13 -0
- package/.agent/history/snapshots/test__unit__minimal_change.test.js.json +10 -0
- package/.agent/history/snapshots/test__unit__native.test.js.json +10 -0
- package/.agent/history/snapshots/test__unit__optimize.test.js.json +13 -0
- package/.agent/history/snapshots/test__unit__path_resolution.test.js.json +14 -0
- package/.agent/history/snapshots/test__unit__production_readiness_evidence.test.js.json +21 -0
- package/.agent/history/snapshots/test__unit__selfInstall.test.js.json +3 -3
- package/.agent/history/snapshots/test__unit__semver.test.js.json +3 -3
- package/.agent/history/snapshots/test__unit__skill_evolution.test.js.json +11 -0
- package/.agent/history/snapshots/test__unit__stress.test.js.json +15 -0
- package/.agent/history/snapshots/test__unit__swarm_dispatcher.test.js.json +3 -3
- package/.agent/history/snapshots/test__unit__utils.test.js.json +10 -0
- package/.agent/mcp_config.json +1 -6
- package/.agent/routing_index.json +2033 -263
- package/.agent/rules/GEMINI.md +11 -9
- package/.agent/rules/GEMINI_PLANNER.md +19 -21
- package/.agent/scripts/_colors.js +52 -54
- package/.agent/scripts/_utils.js +52 -53
- package/.agent/scripts/ast_context_loader.js +137 -0
- package/.agent/scripts/auto_preview.js +39 -43
- package/.agent/scripts/bundle_analyzer.js +47 -60
- package/.agent/scripts/case_law_manager.js +200 -294
- package/.agent/scripts/checklist.js +73 -94
- package/.agent/scripts/cicd_validator.js +305 -0
- package/.agent/scripts/context_broker.js +317 -412
- package/.agent/scripts/contract_engine.js +402 -0
- package/.agent/scripts/dependency_analyzer.js +112 -124
- package/.agent/scripts/graph_builder.js +75 -103
- package/.agent/scripts/graph_visualizer.js +10 -12
- package/.agent/scripts/graph_zoom.js +38 -55
- package/.agent/scripts/guardrail_engine.js +195 -145
- package/.agent/scripts/impact_classifier.js +55 -30
- package/.agent/scripts/inner_loop_validator.js +108 -159
- package/.agent/scripts/integrity_manifest.js +59 -67
- package/.agent/scripts/lint_runner.js +65 -75
- package/.agent/scripts/marathon_harness.js +131 -208
- package/.agent/scripts/memory_engine.js +581 -0
- package/.agent/scripts/minify_context.js +29 -33
- package/.agent/scripts/minimal_change_engine.js +95 -87
- package/.agent/scripts/mutation_runner.js +46 -62
- package/.agent/scripts/payload_schemas.js +146 -0
- package/.agent/scripts/pipeline_engine.js +320 -209
- package/.agent/scripts/prompt_compiler.js +166 -93
- package/.agent/scripts/schema_validator.js +73 -121
- package/.agent/scripts/security_scan.js +88 -117
- package/.agent/scripts/session_manager.js +52 -69
- package/.agent/scripts/signal_detector.js +24 -22
- package/.agent/scripts/skill_evolution.js +184 -245
- package/.agent/scripts/skill_integrator.js +35 -48
- package/.agent/scripts/socratic_gate_policy.js +15 -12
- package/.agent/scripts/strengthen_skills.js +29 -33
- package/.agent/scripts/swarm_dispatcher.js +397 -200
- package/.agent/scripts/test_runner.js +54 -56
- package/.agent/scripts/token_budget_broker.js +126 -13
- package/.agent/scripts/trace_engine.js +126 -0
- package/.agent/scripts/verify_all.js +76 -93
- package/.agent/scripts/visual_audit.js +16 -21
- package/.agent/skill_topic_map.json +22 -3
- package/.agent/skills/12-principles-of-animation/SKILL.md +7 -0
- package/.agent/skills/60fps-animation/SKILL.md +7 -0
- package/.agent/skills/accessible-animation/SKILL.md +5 -1
- package/.agent/skills/adapt/SKILL.md +7 -1
- package/.agent/skills/advanced-rag-pipelines/SKILL.md +1 -0
- package/.agent/skills/agent-organizer/SKILL.md +1 -0
- package/.agent/skills/agentic-patterns/SKILL.md +33 -25
- package/.agent/skills/agentic-workflows-2026/SKILL.md +6 -2
- package/.agent/skills/ai-app-hardening/SKILL.md +9 -8
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +7 -6
- package/.agent/skills/animation-on-scroll/SKILL.md +24 -15
- package/.agent/skills/animation-systems/SKILL.md +11 -10
- package/.agent/skills/antfu-conventions/SKILL.md +7 -2
- package/.agent/skills/api-patterns/SKILL.md +14 -10
- package/.agent/skills/api-security-auditor/SKILL.md +15 -14
- package/.agent/skills/app-builder/SKILL.md +1 -0
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +2 -2
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +12 -12
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +3 -3
- package/.agent/skills/apple-design/SKILL.md +8 -7
- package/.agent/skills/architecture/SKILL.md +3 -2
- package/.agent/skills/audit-and-fix/SKILL.md +8 -5
- package/.agent/skills/authentication-best-practices/SKILL.md +9 -8
- package/.agent/skills/backend-security-expert/SKILL.md +1 -0
- package/.agent/skills/baseline-ui/SKILL.md +8 -7
- package/.agent/skills/bash-linux/SKILL.md +1 -0
- package/.agent/skills/behavioral-modes/SKILL.md +1 -0
- package/.agent/skills/better-colors/SKILL.md +11 -7
- package/.agent/skills/better-typography/SKILL.md +30 -16
- package/.agent/skills/better-ui/SKILL.md +17 -10
- package/.agent/skills/bolder/SKILL.md +6 -0
- package/.agent/skills/brainstorming/SKILL.md +6 -4
- package/.agent/skills/browser-native-ai/SKILL.md +5 -4
- package/.agent/skills/build-primitive/SKILL.md +5 -0
- package/.agent/skills/building-native-ui/SKILL.md +1 -0
- package/.agent/skills/cicd-pro/SKILL.md +2 -1
- package/.agent/skills/clarify/SKILL.md +19 -14
- package/.agent/skills/clean-code/SKILL.md +16 -15
- package/.agent/skills/cloud-architect/SKILL.md +1 -0
- package/.agent/skills/cobejs/SKILL.md +7 -9
- package/.agent/skills/code-review-checklist/SKILL.md +1 -0
- package/.agent/skills/codebase-design/SKILL.md +7 -2
- package/.agent/skills/colorize/SKILL.md +8 -3
- package/.agent/skills/compact-landing/SKILL.md +8 -3
- package/.agent/skills/company-logos/SKILL.md +6 -0
- package/.agent/skills/config-validator/SKILL.md +10 -9
- package/.agent/skills/containerization-pro/SKILL.md +6 -5
- package/.agent/skills/context-engineering-pro/SKILL.md +5 -4
- package/.agent/skills/create-design-md/SKILL.md +13 -5
- package/.agent/skills/critique/SKILL.md +10 -8
- package/.agent/skills/csharp-developer/SKILL.md +1 -0
- package/.agent/skills/data-validation-schemas/SKILL.md +28 -23
- package/.agent/skills/database-design/SKILL.md +2 -1
- package/.agent/skills/delight/SKILL.md +6 -0
- package/.agent/skills/deployment-procedures/SKILL.md +2 -1
- package/.agent/skills/design-lab/SKILL.md +5 -0
- package/.agent/skills/devops-engineer/SKILL.md +3 -2
- package/.agent/skills/devops-incident-responder/SKILL.md +2 -1
- package/.agent/skills/diagnosing-bugs/SKILL.md +12 -2
- package/.agent/skills/distill/SKILL.md +7 -2
- package/.agent/skills/documentation-templates/SKILL.md +3 -2
- package/.agent/skills/domain-modeling/SKILL.md +12 -4
- package/.agent/skills/duckdb-analytical-sql/SKILL.md +7 -3
- package/.agent/skills/edge-ai-mobile/SKILL.md +5 -1
- package/.agent/skills/edge-computing/SKILL.md +9 -8
- package/.agent/skills/emil-design-eng/SKILL.md +43 -27
- package/.agent/skills/error-resilience/SKILL.md +34 -16
- package/.agent/skills/expo-router-v4/SKILL.md +2 -1
- package/.agent/skills/extract-design-system/SKILL.md +12 -11
- package/.agent/skills/fabel-protocol/SKILL.md +24 -17
- package/.agent/skills/fixing-accessibility/SKILL.md +23 -16
- package/.agent/skills/fixing-metadata/SKILL.md +24 -13
- package/.agent/skills/fixing-motion-performance/SKILL.md +7 -5
- package/.agent/skills/framer-motion-expert/SKILL.md +29 -15
- package/.agent/skills/frontend-design/SKILL.md +21 -13
- package/.agent/skills/frontend-security-expert/SKILL.md +1 -0
- package/.agent/skills/game-design-expert/SKILL.md +1 -0
- package/.agent/skills/game-engineering-expert/SKILL.md +1 -0
- package/.agent/skills/generative-ui-expert/SKILL.md +3 -2
- package/.agent/skills/geo-fundamentals/SKILL.md +2 -1
- package/.agent/skills/git-pro/SKILL.md +10 -9
- package/.agent/skills/github-operations/SKILL.md +2 -1
- package/.agent/skills/gpt-taste/SKILL.md +7 -0
- package/.agent/skills/gsap-core/SKILL.md +26 -22
- package/.agent/skills/gsap-frameworks/SKILL.md +6 -5
- package/.agent/skills/gsap-performance/SKILL.md +4 -3
- package/.agent/skills/gsap-plugins/SKILL.md +34 -33
- package/.agent/skills/gsap-react/SKILL.md +9 -8
- package/.agent/skills/gsap-scrolltrigger/SKILL.md +34 -33
- package/.agent/skills/gsap-timeline/SKILL.md +18 -15
- package/.agent/skills/gsap-utils/SKILL.md +25 -24
- package/.agent/skills/harden/SKILL.md +9 -3
- package/.agent/skills/harness-protocol/SKILL.md +1 -0
- package/.agent/skills/i18n-localization/SKILL.md +10 -9
- package/.agent/skills/impeccable/SKILL.md +5 -0
- package/.agent/skills/improve-codebase-architecture/SKILL.md +10 -5
- package/.agent/skills/improve-ui/SKILL.md +12 -5
- package/.agent/skills/intelligent-routing/SKILL.md +7 -6
- package/.agent/skills/knowledge-graph/SKILL.md +1 -0
- package/.agent/skills/landing-page/SKILL.md +1 -0
- package/.agent/skills/lint-and-validate/SKILL.md +9 -4
- package/.agent/skills/llm-engineering/SKILL.md +55 -54
- package/.agent/skills/local-first/SKILL.md +20 -19
- package/.agent/skills/local-first-architecture/SKILL.md +6 -1
- package/.agent/skills/lottie-animation/SKILL.md +7 -3
- package/.agent/skills/marquee-loop/SKILL.md +1 -0
- package/.agent/skills/masked-reveal/SKILL.md +17 -4
- package/.agent/skills/mcp-builder/SKILL.md +13 -10
- package/.agent/skills/micro-interaction/SKILL.md +20 -5
- package/.agent/skills/mobile-design/SKILL.md +26 -15
- package/.agent/skills/monorepo-management/SKILL.md +3 -2
- package/.agent/skills/morphing-icons/SKILL.md +16 -6
- package/.agent/skills/motion-engineering/SKILL.md +19 -15
- package/.agent/skills/nextjs-react-expert/SKILL.md +26 -21
- package/.agent/skills/nodejs-best-practices/SKILL.md +89 -76
- package/.agent/skills/observability/SKILL.md +45 -44
- package/.agent/skills/opentelemetry-observability/SKILL.md +2 -1
- package/.agent/skills/page-transition-animation/SKILL.md +6 -3
- package/.agent/skills/parallel-agents/SKILL.md +7 -2
- package/.agent/skills/performance-profiling/SKILL.md +24 -13
- package/.agent/skills/plan-writing/SKILL.md +1 -0
- package/.agent/skills/platform-engineer/SKILL.md +3 -2
- package/.agent/skills/platform-engineering-opentofu/SKILL.md +1 -0
- package/.agent/skills/playwright-ai-e2e/SKILL.md +3 -2
- package/.agent/skills/playwright-best-practices/SKILL.md +29 -28
- package/.agent/skills/polish/SKILL.md +13 -12
- package/.agent/skills/powershell-windows/SKILL.md +1 -0
- package/.agent/skills/pricing-page/SKILL.md +8 -3
- package/.agent/skills/product-aware-heuristics/SKILL.md +122 -72
- package/.agent/skills/progressive-blur/SKILL.md +9 -4
- package/.agent/skills/project-idioms/SKILL.md +1 -0
- package/.agent/skills/property-based-testing/SKILL.md +10 -12
- package/.agent/skills/python-patterns/SKILL.md +1 -0
- package/.agent/skills/python-pro/SKILL.md +1 -0
- package/.agent/skills/quieter/SKILL.md +6 -0
- package/.agent/skills/react-doctor/SKILL.md +6 -0
- package/.agent/skills/react-specialist/SKILL.md +32 -28
- package/.agent/skills/readme-builder/SKILL.md +1 -0
- package/.agent/skills/realtime-patterns/SKILL.md +34 -33
- package/.agent/skills/red-team-tactics/SKILL.md +1 -0
- package/.agent/skills/redesign-skill/SKILL.md +6 -0
- package/.agent/skills/review-animations/SKILL.md +5 -2
- package/.agent/skills/review-animations/STANDARDS.md +37 -23
- package/.agent/skills/rust-pro/SKILL.md +1 -0
- package/.agent/skills/seo-fundamentals/SKILL.md +4 -3
- package/.agent/skills/server-management/SKILL.md +1 -0
- package/.agent/skills/shadcn-ui-expert/SKILL.md +28 -22
- package/.agent/skills/shape/SKILL.md +9 -2
- package/.agent/skills/skill-creator/SKILL.md +1 -0
- package/.agent/skills/soft-skill/SKILL.md +6 -0
- package/.agent/skills/sounds-on-the-web/SKILL.md +1 -0
- package/.agent/skills/sql-pro/SKILL.md +1 -0
- package/.agent/skills/supabase-postgres-best-practices/SKILL.md +1 -0
- package/.agent/skills/svg-animation/SKILL.md +16 -7
- package/.agent/skills/swiftui-expert/SKILL.md +1 -0
- package/.agent/skills/swiss-design/SKILL.md +5 -0
- package/.agent/skills/system-design-pro/SKILL.md +1 -0
- package/.agent/skills/systematic-debugging/SKILL.md +1 -0
- package/.agent/skills/tailwind-patterns/SKILL.md +25 -11
- package/.agent/skills/taste-skill/SKILL.md +6 -0
- package/.agent/skills/tdd-workflow/SKILL.md +5 -0
- package/.agent/skills/test-result-analyzer/SKILL.md +1 -0
- package/.agent/skills/testing-patterns/SKILL.md +123 -115
- package/.agent/skills/thermo-nuclear-code-quality-review/SKILL.md +5 -0
- package/.agent/skills/thinking-protocol/SKILL.md +3 -0
- package/.agent/skills/to-spring-or-not-to-spring/SKILL.md +9 -8
- package/.agent/skills/transitions-dev/SKILL.md +19 -6
- package/.agent/skills/trend-researcher/SKILL.md +1 -0
- package/.agent/skills/typescript-advanced/SKILL.md +23 -18
- package/.agent/skills/typeset/SKILL.md +10 -1
- package/.agent/skills/ui-reasoning-engine/SKILL.md +67 -48
- package/.agent/skills/ui-skill-packs/SKILL.md +6 -1
- package/.agent/skills/ui-skills-root/SKILL.md +39 -38
- package/.agent/skills/ui-ux-pro-max/SKILL.md +34 -26
- package/.agent/skills/ui-ux-researcher/SKILL.md +1 -0
- package/.agent/skills/vector-search-pgvector/SKILL.md +3 -2
- package/.agent/skills/vue-expert/SKILL.md +22 -19
- package/.agent/skills/vulnerability-scanner/SKILL.md +22 -21
- package/.agent/skills/web-accessibility-auditor/SKILL.md +2 -1
- package/.agent/skills/web-design-guidelines/SKILL.md +16 -10
- package/.agent/skills/web-quality-audit/SKILL.md +5 -0
- package/.agent/skills/webapp-testing/SKILL.md +14 -13
- package/.agent/skills/webgpu-performance/SKILL.md +1 -0
- package/.agent/skills/whimsy-injector/SKILL.md +9 -5
- package/.agent/skills/workflow-optimizer/SKILL.md +1 -0
- package/.agent/skills/zero-trust-passkeys/SKILL.md +11 -6
- package/.agent/templates/DESIGN.md +119 -110
- package/.agent/templates/design-tokens.json +9 -6
- package/.agent/workflows/acf.md +1 -0
- package/.agent/workflows/api-tester.md +1 -0
- package/.agent/workflows/audit.md +1 -0
- package/.agent/workflows/brainstorm.md +1 -0
- package/.agent/workflows/changelog.md +1 -0
- package/.agent/workflows/contract.md +60 -0
- package/.agent/workflows/create.md +1 -0
- package/.agent/workflows/debug.md +1 -0
- package/.agent/workflows/deploy.md +1 -0
- package/.agent/workflows/enhance.md +1 -0
- package/.agent/workflows/fix-ci.md +89 -0
- package/.agent/workflows/fix.md +1 -0
- package/.agent/workflows/generate.md +1 -0
- package/.agent/workflows/marathon.md +1 -0
- package/.agent/workflows/migrate.md +1 -0
- package/.agent/workflows/minimal.md +9 -7
- package/.agent/workflows/orchestrate.md +1 -0
- package/.agent/workflows/performance-benchmarker.md +1 -0
- package/.agent/workflows/pipeline.md +26 -21
- package/.agent/workflows/plan.md +1 -0
- package/.agent/workflows/preview.md +1 -0
- package/.agent/workflows/refactor.md +3 -2
- package/.agent/workflows/review-ai.md +4 -3
- package/.agent/workflows/review.md +1 -0
- package/.agent/workflows/session.md +1 -0
- package/.agent/workflows/status.md +1 -0
- package/.agent/workflows/strengthen-skills.md +1 -0
- package/.agent/workflows/super-prompt.md +1 -0
- package/.agent/workflows/swarm.md +15 -3
- package/.agent/workflows/test.md +8 -7
- package/.agent/workflows/tribunal-backend.md +3 -2
- package/.agent/workflows/tribunal-cicd.md +104 -0
- package/.agent/workflows/tribunal-database.md +1 -0
- package/.agent/workflows/tribunal-frontend.md +8 -6
- package/.agent/workflows/tribunal-full.md +2 -1
- package/.agent/workflows/tribunal-mobile.md +6 -5
- package/.agent/workflows/tribunal-performance.md +1 -0
- package/.agent/workflows/tribunal-speed.md +1 -0
- package/.agent/workflows/tribunal-ui.md +29 -21
- package/.agent/workflows/ui-ux-pro-max.md +19 -15
- package/.claude/CLAUDE.md +442 -0
- package/CONTRIBUTING.md +3 -3
- package/README.md +105 -45
- package/SECURITY.md +11 -11
- package/bin/adapter-install.js +240 -0
- package/bin/global-store.js +48 -0
- package/bin/mcp-server.js +781 -332
- package/bin/proxy-server.js +113 -0
- package/bin/spawn-agent.js +39 -0
- package/bin/tk-proxy.js +34 -0
- package/bin/tribunal-kit.js +29 -30
- package/bin/wrapper.js +40 -46
- package/dist/cli.js +6 -0
- package/dist/commands/case.js +2 -0
- package/dist/commands/contract.js +440 -0
- package/dist/commands/init.js +8 -51
- package/dist/commands/status.js +61 -30
- package/dist/commands/validate.js +22 -31
- package/dist/index.d.ts +8 -1
- package/dist/tui/banner.js +77 -0
- package/dist/tui/index.js +21 -0
- package/dist/tui/reviewer-grid.js +90 -0
- package/dist/tui/shimmer.js +91 -0
- package/dist/tui/theme.js +130 -0
- package/dist/tui/tree.js +93 -0
- package/dist/tui/wizard.js +148 -0
- package/dist/utils/helpers.js +5 -41
- package/package.json +33 -15
- package/scripts/benchmark.js +62 -86
- package/scripts/build-graph.js +71 -0
- package/scripts/changelog.js +67 -73
- package/scripts/fix-vbc.js +13 -15
- package/scripts/fix-vbc.ps1 +2 -118
- package/scripts/stress_benchmark.js +358 -0
- package/scripts/sync-version.js +71 -41
- package/scripts/validate-payload.js +23 -30
- package/scripts/visual_audit.js +23 -13
- package/.agent/history/snapshots/migrate_refs.js.json +0 -11
- package/.agent/scripts/compile_router.py +0 -112
- package/.agent/scripts/migrate_skills_frontmatter.py +0 -64
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before implementing local-first storage or CRDT synchronization, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Conflict Resolution Strategy (Section 15) → Define explicit conflict resolution (LWW timestamps or Yjs CRDTs) before writing local sync logic
|
|
24
25
|
2. Persistent Storage (Section 16) → Use IndexedDB (via Dexie/idb) or SQLite WASM for local persistence; ban localStorage for >5MB data
|
|
25
26
|
3. Incremental Watermark Sync (Section 17) → Perform delta syncs using timestamps/watermarks rather than re-fetching full datasets
|
|
@@ -55,20 +56,20 @@ Do not use React Query / SWR to build local-first. They are HTTP caching mechani
|
|
|
55
56
|
// ❌ CLOUD-FIRST (React Query / Fetch)
|
|
56
57
|
// Fails when offline. Subject to UI latency.
|
|
57
58
|
const { data, isLoading } = useQuery({
|
|
58
|
-
queryKey: [
|
|
59
|
-
queryFn: () => fetch(
|
|
59
|
+
queryKey: ['todos'],
|
|
60
|
+
queryFn: () => fetch('/api/todos').then(res => res.json()),
|
|
60
61
|
});
|
|
61
62
|
|
|
62
63
|
// ✅ LOCAL-FIRST (e.g. PowerSync / ElectricSQL / WatermelonDB)
|
|
63
64
|
// Resolves instantly. Data lives locally. Syncs silently in background.
|
|
64
|
-
import { useQuery } from
|
|
65
|
+
import { useQuery } from '@powersync/react';
|
|
65
66
|
|
|
66
|
-
const { data, isLoading } = useQuery(
|
|
67
|
+
const { data, isLoading } = useQuery('SELECT * FROM todos ORDER BY created_at DESC');
|
|
67
68
|
|
|
68
69
|
// Writes are also local First
|
|
69
70
|
const addTodo = async (text: string) => {
|
|
70
71
|
// Written to the local SQLite WASM database instantly.
|
|
71
|
-
await localDb.execute(
|
|
72
|
+
await localDb.execute('INSERT INTO todos (id, text) VALUES (uuid(), ?)', [text]);
|
|
72
73
|
// Background worker syncs to Postgres later.
|
|
73
74
|
};
|
|
74
75
|
```
|
|
@@ -83,22 +84,22 @@ When two users edit the exact same document offline and then reconnect, how is i
|
|
|
83
84
|
|
|
84
85
|
```typescript
|
|
85
86
|
// Yjs - The leading CRDT library for collaborative text/state
|
|
86
|
-
import * as Y from
|
|
87
|
-
import { WebsocketProvider } from
|
|
87
|
+
import * as Y from 'yjs';
|
|
88
|
+
import { WebsocketProvider } from 'y-websocket';
|
|
88
89
|
|
|
89
90
|
const ydoc = new Y.Doc();
|
|
90
|
-
const provider = new WebsocketProvider(
|
|
91
|
+
const provider = new WebsocketProvider('wss://sync.example.com', 'room-1', ydoc);
|
|
91
92
|
|
|
92
93
|
// Shared state array
|
|
93
|
-
const yarray = ydoc.getArray(
|
|
94
|
+
const yarray = ydoc.getArray('todos');
|
|
94
95
|
|
|
95
96
|
// Observe changes (Fires locally and when peers sync)
|
|
96
|
-
yarray.observe(
|
|
97
|
-
console.log(
|
|
97
|
+
yarray.observe(event => {
|
|
98
|
+
console.log('State updated natively without conflict:', yarray.toArray());
|
|
98
99
|
});
|
|
99
100
|
|
|
100
101
|
// Insert data (Instantly merges cleanly with remote peers)
|
|
101
|
-
yarray.insert(0, [
|
|
102
|
+
yarray.insert(0, ['Buy milk']);
|
|
102
103
|
```
|
|
103
104
|
|
|
104
105
|
---
|
|
@@ -117,7 +118,7 @@ Storing megabytes of relational data in `localStorage` will crash the browser.
|
|
|
117
118
|
|
|
118
119
|
```typescript
|
|
119
120
|
// Clean IndexedDB Wrapper Example (Dexie)
|
|
120
|
-
import Dexie, { type EntityTable } from
|
|
121
|
+
import Dexie, { type EntityTable } from 'dexie';
|
|
121
122
|
|
|
122
123
|
interface Friend {
|
|
123
124
|
id: number;
|
|
@@ -125,21 +126,21 @@ interface Friend {
|
|
|
125
126
|
age: number;
|
|
126
127
|
}
|
|
127
128
|
|
|
128
|
-
const db = new Dexie(
|
|
129
|
-
friends: EntityTable<Friend,
|
|
129
|
+
const db = new Dexie('FriendsDatabase') as Dexie & {
|
|
130
|
+
friends: EntityTable<Friend, 'id'>;
|
|
130
131
|
};
|
|
131
132
|
|
|
132
133
|
// Schema configuration
|
|
133
134
|
db.version(1).stores({
|
|
134
|
-
friends:
|
|
135
|
+
friends: '++id, name, age', // Primary key and indexed props
|
|
135
136
|
});
|
|
136
137
|
|
|
137
138
|
// Write to DB instantly
|
|
138
|
-
await db.friends.add({ name:
|
|
139
|
+
await db.friends.add({ name: 'Alice', age: 25 });
|
|
139
140
|
|
|
140
141
|
// Live query natively drives React state without network calls
|
|
141
|
-
import { useLiveQuery } from
|
|
142
|
-
const friends = useLiveQuery(() => db.friends.where(
|
|
142
|
+
import { useLiveQuery } from 'dexie-react-hooks';
|
|
143
|
+
const friends = useLiveQuery(() => db.friends.where('age').above(21).toArray());
|
|
143
144
|
```
|
|
144
145
|
|
|
145
146
|
---
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before implementing local-first architecture or offline sync engines, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Zero Network Latency Rule (Section 24) → Execute reads and writes against local storage (IndexedDB/SQLite) first before queueing outbound sync
|
|
24
25
|
2. Outbound Mutation Queue (Section 28) → Persist mutation logs in IndexedDB with client-generated UUID `idempotencyKey` fields
|
|
25
26
|
3. Conflict Resolution Strategy (Section 33) → Use Last-Write-Wins (LWW) for simple fields or CRDTs (Yjs/Automerge) for collaborative state
|
|
@@ -31,19 +32,23 @@ Architect software that reads and writes to local storage (SQLite/IndexedDB) fir
|
|
|
31
32
|
## 4 Pillars of Local-First Architecture
|
|
32
33
|
|
|
33
34
|
### 1. Read & Write Local First
|
|
35
|
+
|
|
34
36
|
- **Zero Network Latency**: UI queries (`select * from tasks`) run synchronously or near-instantaneously against in-memory or IndexedDB caches.
|
|
35
|
-
- Mutations update the local cache immediately (
|
|
37
|
+
- Mutations update the local cache immediately (_optimistic write_), appending a mutation log item to an outbound sync queue.
|
|
36
38
|
|
|
37
39
|
### 2. Outbound Mutation Queue & Idempotency
|
|
40
|
+
|
|
38
41
|
- Store mutation logs in a persistent local queue (`IndexedDB` / `SQLite`).
|
|
39
42
|
- Assign every client mutation a unique UUID (`idempotencyKey`).
|
|
40
43
|
- When network connection is restored, flush queue items sequentially with automatic retry on 5xx failures.
|
|
41
44
|
|
|
42
45
|
### 3. Conflict Resolution (CRDTs & LWW)
|
|
46
|
+
|
|
43
47
|
- **Last-Write-Wins (LWW)**: Timestamp + Client ID ordering for simple fields.
|
|
44
48
|
- **CRDTs (Yjs / Automerge)**: Conflict-free Replicated Data Types for collaborative text editing and array state.
|
|
45
49
|
|
|
46
50
|
### 4. Background Delta Streaming
|
|
51
|
+
|
|
47
52
|
- Receive database updates via WebSockets or Server-Sent Events (SSE) as thin binary deltas (`sync_version > client_version`), applying changes to local storage without re-fetching full datasets.
|
|
48
53
|
|
|
49
54
|
---
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before integrating Lottie animations, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Asset Format (.lottie vs .json) → Prefer compressed `.lottie` (dotLottie) assets for 80% smaller bundle file sizes
|
|
24
25
|
2. Playback Triggers (Section 34) → Bind playback to user hover/click or viewport intersection instead of aggressive continuous looping
|
|
25
26
|
3. Package Manifest (`package.json`) → Verify `@dotlottie/react-player` or `lottie-web` library dependencies
|
|
@@ -31,10 +32,11 @@ Integrate lightweight, vector-based Lottie animations with interactive trigger c
|
|
|
31
32
|
## 3 Lottie Integration Recipes
|
|
32
33
|
|
|
33
34
|
### 1. React dotLottie Interactive Player (`@dotlottie/react-player`)
|
|
35
|
+
|
|
34
36
|
```tsx
|
|
35
|
-
import React, { useRef } from
|
|
36
|
-
import { DotLottiePlayer, Controls } from
|
|
37
|
-
import
|
|
37
|
+
import React, { useRef } from 'react';
|
|
38
|
+
import { DotLottiePlayer, Controls } from '@dotlottie/react-player';
|
|
39
|
+
import '@dotlottie/react-player/dist/index.css';
|
|
38
40
|
|
|
39
41
|
export function InteractiveLottieIcon() {
|
|
40
42
|
const lottieRef = useRef<any>(null);
|
|
@@ -57,9 +59,11 @@ export function InteractiveLottieIcon() {
|
|
|
57
59
|
```
|
|
58
60
|
|
|
59
61
|
### 2. Runtime Color Injection / Theming
|
|
62
|
+
|
|
60
63
|
Pass custom CSS variable overrides to dotLottie players to dynamically recolor vector paths at runtime without re-downloading JSON assets.
|
|
61
64
|
|
|
62
65
|
### 3. Performance & Lazy Loading
|
|
66
|
+
|
|
63
67
|
- Use `.lottie` (dotLottie format) instead of uncompressed `.json` Lottie files to achieve **80% smaller bundle file sizes**.
|
|
64
68
|
- Lazy-load offscreen Lottie animations using `IntersectionObserver`.
|
|
65
69
|
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before implementing marquee loop tracks, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. DOM Structure (Section 24) → Duplicate item tracks MUST be rendered with `aria-hidden="true"` to prevent screen reader redundancy
|
|
24
25
|
2. Hover Accessibility (Section 50) → Enforce `animation-play-state: paused` on `:hover` and `:focus-within`
|
|
25
26
|
3. Reduced Motion Fallback (Section 61) → Collapse marquee into static wrapped flex grid when `prefers-reduced-motion: reduce` is active
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before implementing clip-path or SVG mask reveals, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Target DOM elements → Enforce `overflow: hidden` on text line wrappers to prevent unmasked overflow artifacts
|
|
24
25
|
2. `clip-path: inset()` syntax (Section 26) → Prefer CSS `clip-path` over heavy SVG masks for linear curtain wipes
|
|
25
26
|
3. Transition Easing → Use custom ease-out curves (`cubic-bezier(0.16, 1, 0.3, 1)`) for smooth deceleration
|
|
@@ -31,10 +32,15 @@ Create editorial, high-end visual reveals using CSS `clip-path` and SVG masks.
|
|
|
31
32
|
## 3 Masked Reveal Patterns
|
|
32
33
|
|
|
33
34
|
### 1. CSS `clip-path` Curtain Reveal
|
|
35
|
+
|
|
34
36
|
```css
|
|
35
37
|
@keyframes curtain-reveal {
|
|
36
|
-
from {
|
|
37
|
-
|
|
38
|
+
from {
|
|
39
|
+
clip-path: inset(0 100% 0 0);
|
|
40
|
+
}
|
|
41
|
+
to {
|
|
42
|
+
clip-path: inset(0 0 0 0);
|
|
43
|
+
}
|
|
38
44
|
}
|
|
39
45
|
|
|
40
46
|
.reveal-image-curtain {
|
|
@@ -43,10 +49,15 @@ Create editorial, high-end visual reveals using CSS `clip-path` and SVG masks.
|
|
|
43
49
|
```
|
|
44
50
|
|
|
45
51
|
### 2. Radial Spotlight Clip Reveal
|
|
52
|
+
|
|
46
53
|
```css
|
|
47
54
|
@keyframes circle-expand {
|
|
48
|
-
from {
|
|
49
|
-
|
|
55
|
+
from {
|
|
56
|
+
clip-path: circle(0% at 50% 50%);
|
|
57
|
+
}
|
|
58
|
+
to {
|
|
59
|
+
clip-path: circle(150% at 50% 50%);
|
|
60
|
+
}
|
|
50
61
|
}
|
|
51
62
|
|
|
52
63
|
.spotlight-reveal {
|
|
@@ -55,7 +66,9 @@ Create editorial, high-end visual reveals using CSS `clip-path` and SVG masks.
|
|
|
55
66
|
```
|
|
56
67
|
|
|
57
68
|
### 3. Masked Text Line Wipe (Editorial Typography)
|
|
69
|
+
|
|
58
70
|
Wrap text lines inside overflow-hidden wrappers and animate inner text lines upward:
|
|
71
|
+
|
|
59
72
|
```css
|
|
60
73
|
.text-line-wrapper {
|
|
61
74
|
overflow: hidden;
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before architecting MCP tools or resource handlers, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Strict Zod Input Validation (Section 45) → Enforce explicit JSON Schema parameter validation (Zod) for every tool exposed to the LLM
|
|
24
25
|
2. Resource vs Tool Distinction (Section 68) → Use Resources for static read-only data (`file:///`, `db://schema`), Tools strictly for dynamic parameterized actions
|
|
25
26
|
3. Output Payload Truncation Safeguard (Section 94) → Forcibly truncate large tool response outputs before returning payload to protect LLM context windows
|
|
@@ -47,27 +48,29 @@ A robust MCP server exposes exactly 3 primary concepts:
|
|
|
47
48
|
|
|
48
49
|
```typescript
|
|
49
50
|
// Standardize exposing a Tool securely via an MCP Server Wrapper
|
|
50
|
-
import { McpServer } from
|
|
51
|
-
import { z } from
|
|
51
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
52
|
+
import { z } from 'zod';
|
|
52
53
|
|
|
53
54
|
const server = new McpServer({
|
|
54
|
-
name:
|
|
55
|
-
version:
|
|
55
|
+
name: 'internal-database-auditor',
|
|
56
|
+
version: '1.0.0',
|
|
56
57
|
});
|
|
57
58
|
|
|
58
59
|
// Defining a rigorous tool parameter boundary
|
|
59
60
|
server.tool(
|
|
60
|
-
|
|
61
|
-
|
|
61
|
+
'query_production_database',
|
|
62
|
+
'Executes a read-only sanitized query against the production analytical replica.',
|
|
62
63
|
{
|
|
63
|
-
table: z
|
|
64
|
-
|
|
64
|
+
table: z
|
|
65
|
+
.enum(['users', 'transactions', 'audit_logs'])
|
|
66
|
+
.describe('The specific table to analyze'),
|
|
67
|
+
limit: z.number().max(100).default(10).describe('Maximum row returns to prevent context bloat'),
|
|
65
68
|
},
|
|
66
69
|
async ({ table, limit }) => {
|
|
67
70
|
// Execution logic
|
|
68
71
|
const data = await secureDatabaseClient.query(`SELECT * FROM ${table} LIMIT ${limit}`);
|
|
69
72
|
return {
|
|
70
|
-
content: [{ type:
|
|
73
|
+
content: [{ type: 'text', text: JSON.stringify(data) }],
|
|
71
74
|
};
|
|
72
75
|
},
|
|
73
76
|
);
|
|
@@ -91,7 +94,7 @@ If your description is vague, the LLM will hallucinate executions unpredictably.
|
|
|
91
94
|
|
|
92
95
|
```typescript
|
|
93
96
|
// ❌ VAGUE (The LLM will guess when to use this, often incorrectly)
|
|
94
|
-
description:
|
|
97
|
+
description: 'Changes the system status.';
|
|
95
98
|
|
|
96
99
|
// ✅ DETERMINISTIC (The LLM knows the exact boundaries and consequences)
|
|
97
100
|
description: "Transitions the payment processing gateway between 'ACTIVE' and 'MAINTENANCE' modes. Use this ONLY after verifying traffic logs to halt impending queue flooding. Requires Admin clearance.";
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before engineering component micro-interactions, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Duration Caps → Keep interactive component feedback (press/hover/toggle) under 180ms
|
|
24
25
|
2. Popover Origin Rules (Section 60) → Set `transform-origin` dynamically to match trigger button position
|
|
25
26
|
3. SVG Path Draw-on (Section 48) → Use `stroke-dashoffset` transitions for checkboxes and toggle icons
|
|
@@ -31,9 +32,12 @@ Craft responsive, physically grounded micro-interactions for everyday UI control
|
|
|
31
32
|
## 4 Micro-Interaction Recipes
|
|
32
33
|
|
|
33
34
|
### 1. Tactile Button Press
|
|
35
|
+
|
|
34
36
|
```css
|
|
35
37
|
.btn-tactile {
|
|
36
|
-
transition:
|
|
38
|
+
transition:
|
|
39
|
+
transform 120ms cubic-bezier(0.2, 0, 0, 1),
|
|
40
|
+
box-shadow 120ms ease;
|
|
37
41
|
}
|
|
38
42
|
.btn-tactile:hover {
|
|
39
43
|
transform: translateY(-1px);
|
|
@@ -44,30 +48,35 @@ Craft responsive, physically grounded micro-interactions for everyday UI control
|
|
|
44
48
|
```
|
|
45
49
|
|
|
46
50
|
### 2. Animated Toggle Switch
|
|
51
|
+
|
|
47
52
|
```css
|
|
48
53
|
.toggle-thumb {
|
|
49
54
|
transition: transform 200ms cubic-bezier(0.34, 1.56, 0.64, 1); /* Subtle spring overshoot */
|
|
50
55
|
}
|
|
51
|
-
[data-state=
|
|
56
|
+
[data-state='checked'] .toggle-thumb {
|
|
52
57
|
transform: translateX(20px);
|
|
53
58
|
}
|
|
54
59
|
```
|
|
55
60
|
|
|
56
61
|
### 3. Animated Checkbox Morph
|
|
62
|
+
|
|
57
63
|
Use an SVG path draw-on keyframe when checked:
|
|
64
|
+
|
|
58
65
|
```css
|
|
59
66
|
.checkbox-svg-path {
|
|
60
67
|
stroke-dasharray: 24;
|
|
61
68
|
stroke-dashoffset: 24;
|
|
62
69
|
transition: stroke-dashoffset 180ms ease-out;
|
|
63
70
|
}
|
|
64
|
-
[data-state=
|
|
71
|
+
[data-state='checked'] .checkbox-svg-path {
|
|
65
72
|
stroke-dashoffset: 0;
|
|
66
73
|
}
|
|
67
74
|
```
|
|
68
75
|
|
|
69
76
|
### 4. Origin-Aware Popover / Dropdown
|
|
77
|
+
|
|
70
78
|
Popovers scale out from their trigger source using CSS variables:
|
|
79
|
+
|
|
71
80
|
```css
|
|
72
81
|
.popover-content {
|
|
73
82
|
transform-origin: var(--radix-popover-content-transform-origin, center top);
|
|
@@ -75,8 +84,14 @@ Popovers scale out from their trigger source using CSS variables:
|
|
|
75
84
|
}
|
|
76
85
|
|
|
77
86
|
@keyframes popover-enter {
|
|
78
|
-
from {
|
|
79
|
-
|
|
87
|
+
from {
|
|
88
|
+
opacity: 0;
|
|
89
|
+
transform: scale(0.95);
|
|
90
|
+
}
|
|
91
|
+
to {
|
|
92
|
+
opacity: 1;
|
|
93
|
+
transform: scale(1);
|
|
94
|
+
}
|
|
80
95
|
}
|
|
81
96
|
```
|
|
82
97
|
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before designing mobile interfaces or writing React Native code, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Reanimated 3 & Worklet Rules (Section 47) → Execute animations on the UI thread using Reanimated 3 worklets; ban legacy `Animated.View`
|
|
24
25
|
2. List Optimization (Section 32) → Use `@shopify/flash-list` with required `estimatedItemSize` instead of `ScrollView` or `FlatList`
|
|
25
26
|
3. Safe Area Insets (Section 100) → Always wrap content with `useSafeAreaInsets()` to accommodate notch, dynamic island, and home indicators
|
|
@@ -47,13 +48,13 @@ Before designing mobile interfaces or writing React Native code, you MUST inspec
|
|
|
47
48
|
### FlashList (Required for Lists)
|
|
48
49
|
|
|
49
50
|
```tsx
|
|
50
|
-
import { FlashList } from
|
|
51
|
+
import { FlashList } from '@shopify/flash-list';
|
|
51
52
|
<FlashList
|
|
52
53
|
data={items}
|
|
53
54
|
renderItem={({ item }) => <ItemCard item={item} />}
|
|
54
55
|
estimatedItemSize={100} // REQUIRED — measure actual item height first
|
|
55
|
-
keyExtractor={
|
|
56
|
-
getItemType={
|
|
56
|
+
keyExtractor={item => item.id}
|
|
57
|
+
getItemType={item => item.type} // multi-type optimization
|
|
57
58
|
/>;
|
|
58
59
|
// ❌ NEVER: <ScrollView>{items.map(...)}</ScrollView> for lists
|
|
59
60
|
// ❌ NEVER: <FlatList> for perf-critical lists — FlashList is 5-10x faster
|
|
@@ -62,7 +63,13 @@ import { FlashList } from "@shopify/flash-list";
|
|
|
62
63
|
### Reanimated 3 — Worklet Animations (Required for 120Hz)
|
|
63
64
|
|
|
64
65
|
```tsx
|
|
65
|
-
import {
|
|
66
|
+
import {
|
|
67
|
+
useSharedValue,
|
|
68
|
+
useAnimatedStyle,
|
|
69
|
+
withSpring,
|
|
70
|
+
withTiming,
|
|
71
|
+
runOnJS,
|
|
72
|
+
} from 'react-native-reanimated';
|
|
66
73
|
|
|
67
74
|
// Shared values run on the UI thread — never on JS thread
|
|
68
75
|
const scale = useSharedValue(1);
|
|
@@ -99,7 +106,7 @@ scale.value = withSpring(1, {}, onComplete);
|
|
|
99
106
|
## Haptics
|
|
100
107
|
|
|
101
108
|
```tsx
|
|
102
|
-
import * as Haptics from
|
|
109
|
+
import * as Haptics from 'expo-haptics';
|
|
103
110
|
// light → switch toggle, tap feedback
|
|
104
111
|
// medium → selection change, confirm
|
|
105
112
|
// heavy → destructive action, strong confirm
|
|
@@ -115,18 +122,22 @@ Haptics.notificationAsync(Haptics.NotificationFeedbackType.Success); // save com
|
|
|
115
122
|
## Safe Areas & Platform Layout
|
|
116
123
|
|
|
117
124
|
```tsx
|
|
118
|
-
import { useSafeAreaInsets } from
|
|
119
|
-
import { Platform, StatusBar } from
|
|
125
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
126
|
+
import { Platform, StatusBar } from 'react-native';
|
|
120
127
|
|
|
121
128
|
function Screen() {
|
|
122
129
|
const insets = useSafeAreaInsets();
|
|
123
|
-
return
|
|
130
|
+
return (
|
|
131
|
+
<View style={{ paddingTop: insets.top, paddingBottom: insets.bottom }}>
|
|
132
|
+
{/* Content safe from Dynamic Island, home indicator, status bar */}
|
|
133
|
+
</View>
|
|
134
|
+
);
|
|
124
135
|
}
|
|
125
136
|
// Android status bar
|
|
126
|
-
const STATUS_BAR_HEIGHT = Platform.OS ===
|
|
137
|
+
const STATUS_BAR_HEIGHT = Platform.OS === 'android' ? (StatusBar.currentHeight ?? 24) : 0;
|
|
127
138
|
|
|
128
139
|
// Foldable/tablet — dual pane
|
|
129
|
-
import { useWindowDimensions } from
|
|
140
|
+
import { useWindowDimensions } from 'react-native';
|
|
130
141
|
function AdaptiveLayout() {
|
|
131
142
|
const { width } = useWindowDimensions();
|
|
132
143
|
const isTablet = width >= 600;
|
|
@@ -160,17 +171,17 @@ function AdaptiveLayout() {
|
|
|
160
171
|
// app/(modal)/settings.tsx — modal group
|
|
161
172
|
|
|
162
173
|
// Stack navigation with gesture
|
|
163
|
-
import { Stack } from
|
|
164
|
-
<Stack screenOptions={{ headerShown: false, animation:
|
|
174
|
+
import { Stack } from 'expo-router';
|
|
175
|
+
<Stack screenOptions={{ headerShown: false, animation: 'slide_from_right' }}>
|
|
165
176
|
<Stack.Screen name="(tabs)" />
|
|
166
|
-
<Stack.Screen name="[id]" options={{ presentation:
|
|
177
|
+
<Stack.Screen name="[id]" options={{ presentation: 'modal' }} />
|
|
167
178
|
</Stack>;
|
|
168
179
|
|
|
169
180
|
// Deep linking (Expo Router handles automatically via app.json scheme)
|
|
170
181
|
// ❌ TRAP: Don't use react-navigation Link for deep links in Expo Router — use expo-router Link
|
|
171
|
-
import { Link, useRouter } from
|
|
182
|
+
import { Link, useRouter } from 'expo-router';
|
|
172
183
|
const router = useRouter();
|
|
173
|
-
router.push(
|
|
184
|
+
router.push('/user/42');
|
|
174
185
|
```
|
|
175
186
|
|
|
176
187
|
---
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before organizing workspace packages or writing Turborepo/pnpm configs, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Internal Package Protocol (Section 128) → Reference internal monorepo dependencies via `"workspace:*"` protocol and mark them `"private": true`
|
|
24
25
|
2. Topological Task Dependencies (Section 146) → Define topological ordering (`"^build"`) in `turbo.json` to ensure dependencies build before consumers
|
|
25
26
|
3. Domain-Focused Package Partitioning (Section 261) → Divide shared code into domain packages (`packages/ui`, `packages/db`, `packages/utils`); ban single monolithic `packages/shared` dumpsters
|
|
@@ -93,8 +94,8 @@ my-monorepo/
|
|
|
93
94
|
```yaml
|
|
94
95
|
# pnpm-workspace.yaml
|
|
95
96
|
packages:
|
|
96
|
-
-
|
|
97
|
-
-
|
|
97
|
+
- 'apps/*'
|
|
98
|
+
- 'packages/*'
|
|
98
99
|
```
|
|
99
100
|
|
|
100
101
|
```json
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before implementing morphing icon components, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Target states (e.g. Hamburger Menu <-> Close X, Play <-> Pause) → Verify matching SVG path point count and coordinate bounds
|
|
24
25
|
2. Accessibility (Section 65) → Ensure `aria-label` updates dynamically alongside state changes
|
|
25
26
|
3. Interpolation Curves → Use snappy ease-out curves (`cubic-bezier(0.16, 1, 0.3, 1)`) with duration $\le 200\text{ms}$
|
|
@@ -31,32 +32,41 @@ Architect crisp, interactive SVG icon components that morph seamlessly between o
|
|
|
31
32
|
## The Hamburger Menu <-> Close X Morph Recipe
|
|
32
33
|
|
|
33
34
|
```tsx
|
|
34
|
-
import React from
|
|
35
|
-
import { motion } from
|
|
35
|
+
import React from 'react';
|
|
36
|
+
import { motion } from 'framer-motion';
|
|
36
37
|
|
|
37
38
|
export function MenuToCloseIcon({ isOpen, onClick }: { isOpen: boolean; onClick: () => void }) {
|
|
38
39
|
return (
|
|
39
40
|
<button
|
|
40
41
|
onClick={onClick}
|
|
41
42
|
className="p-2 rounded-lg hover:bg-neutral-100 dark:hover:bg-neutral-800 transition-colors"
|
|
42
|
-
aria-label={isOpen ?
|
|
43
|
+
aria-label={isOpen ? 'Close menu' : 'Open menu'}
|
|
43
44
|
>
|
|
44
45
|
<svg className="w-6 h-6 stroke-current stroke-2 fill-none" viewBox="0 0 24 24">
|
|
45
46
|
{/* Top Line -> Top diagonal of X */}
|
|
46
47
|
<motion.line
|
|
47
|
-
x1="4"
|
|
48
|
+
x1="4"
|
|
49
|
+
y1="6"
|
|
50
|
+
x2="20"
|
|
51
|
+
y2="6"
|
|
48
52
|
animate={isOpen ? { x1: 6, y1: 6, x2: 18, y2: 18 } : { x1: 4, y1: 6, x2: 20, y2: 6 }}
|
|
49
53
|
transition={{ duration: 0.2, ease: [0.16, 1, 0.3, 1] }}
|
|
50
54
|
/>
|
|
51
55
|
{/* Middle Line -> Fade out */}
|
|
52
56
|
<motion.line
|
|
53
|
-
x1="4"
|
|
57
|
+
x1="4"
|
|
58
|
+
y1="12"
|
|
59
|
+
x2="20"
|
|
60
|
+
y2="12"
|
|
54
61
|
animate={isOpen ? { opacity: 0, x: -4 } : { opacity: 1, x: 0 }}
|
|
55
62
|
transition={{ duration: 0.15 }}
|
|
56
63
|
/>
|
|
57
64
|
{/* Bottom Line -> Bottom diagonal of X */}
|
|
58
65
|
<motion.line
|
|
59
|
-
x1="4"
|
|
66
|
+
x1="4"
|
|
67
|
+
y1="18"
|
|
68
|
+
x2="20"
|
|
69
|
+
y2="18"
|
|
60
70
|
animate={isOpen ? { x1: 6, y1: 18, x2: 18, y2: 6 } : { x1: 4, y1: 18, x2: 20, y2: 18 }}
|
|
61
71
|
transition={{ duration: 0.2, ease: [0.16, 1, 0.3, 1] }}
|
|
62
72
|
/>
|
|
@@ -21,6 +21,7 @@ scripts-binding:
|
|
|
21
21
|
## Mandatory Pre-Flight Context Inspection
|
|
22
22
|
|
|
23
23
|
Before engineering web animations or selecting motion libraries, you MUST inspect:
|
|
24
|
+
|
|
24
25
|
1. Master Library Decision Matrix (Section 29) → Select appropriate library (Framer Motion, GSAP, View Transitions API, Lottie) based on interaction category
|
|
25
26
|
2. 120fps GPU Compositing Rule (Section 181) → Restrict animations strictly to `transform` and `opacity` to avoid layout thrashing
|
|
26
27
|
3. Accessibility & `prefers-reduced-motion` (Section 158) → Ensure fallback to instant opacity or no-op motion for reduced-motion preference
|
|
@@ -80,7 +81,11 @@ Used for immediate feedback, clarifying actions, and improving perceived respons
|
|
|
80
81
|
|
|
81
82
|
```tsx
|
|
82
83
|
// Framer Motion — button with spring micro-interaction
|
|
83
|
-
<motion.button
|
|
84
|
+
<motion.button
|
|
85
|
+
whileHover={{ scale: 1.02, filter: 'brightness(1.08)' }}
|
|
86
|
+
whileTap={{ scale: 0.97 }}
|
|
87
|
+
transition={{ type: 'spring', stiffness: 400, damping: 17 }}
|
|
88
|
+
>
|
|
84
89
|
Submit
|
|
85
90
|
</motion.button>
|
|
86
91
|
```
|
|
@@ -91,18 +96,18 @@ Triggers narrative flow and depth based on user scrolling.
|
|
|
91
96
|
|
|
92
97
|
```javascript
|
|
93
98
|
// GSAP ScrollTrigger — industry standard
|
|
94
|
-
gsap.from(
|
|
95
|
-
scrollTrigger: { trigger:
|
|
99
|
+
gsap.from('.reveal-section', {
|
|
100
|
+
scrollTrigger: { trigger: '.reveal-section', start: 'top 80%', scrub: 1 },
|
|
96
101
|
y: 60,
|
|
97
102
|
opacity: 0,
|
|
98
103
|
stagger: 0.1,
|
|
99
104
|
});
|
|
100
105
|
|
|
101
106
|
// Lenis — smooth scroll compatible with GSAP
|
|
102
|
-
import Lenis from
|
|
107
|
+
import Lenis from 'lenis';
|
|
103
108
|
const lenis = new Lenis({ lerp: 0.1, wheelMultiplier: 0.8 });
|
|
104
|
-
lenis.on(
|
|
105
|
-
gsap.ticker.add(
|
|
109
|
+
lenis.on('scroll', ScrollTrigger.update);
|
|
110
|
+
gsap.ticker.add(time => lenis.raf(time * 1000));
|
|
106
111
|
gsap.ticker.lagSmoothing(0);
|
|
107
112
|
```
|
|
108
113
|
|
|
@@ -146,9 +151,9 @@ function navigateWithTransition(url: string, navigate: (path: string) => void) {
|
|
|
146
151
|
display: none;
|
|
147
152
|
opacity: 0;
|
|
148
153
|
transform: scale(0.95);
|
|
149
|
-
transition:
|
|
150
|
-
opacity 0.2s ease,
|
|
151
|
-
transform 0.2s cubic-bezier(0.2, 0.8, 0.4, 1),
|
|
154
|
+
transition:
|
|
155
|
+
opacity 0.2s ease,
|
|
156
|
+
transform 0.2s cubic-bezier(0.2, 0.8, 0.4, 1),
|
|
152
157
|
display 0.2s allow-discrete;
|
|
153
158
|
}
|
|
154
159
|
|
|
@@ -174,16 +179,16 @@ function navigateWithTransition(url: string, navigate: (path: string) => void) {
|
|
|
174
179
|
Always respect `prefers-reduced-motion`. Fall back to instant opacity or no-op motion.
|
|
175
180
|
|
|
176
181
|
```tsx
|
|
177
|
-
import { useReducedMotion } from
|
|
182
|
+
import { useReducedMotion } from 'motion/react';
|
|
178
183
|
|
|
179
184
|
function AccessibleComponent() {
|
|
180
185
|
const shouldReduceMotion = useReducedMotion();
|
|
181
|
-
|
|
186
|
+
|
|
182
187
|
return (
|
|
183
188
|
<motion.div
|
|
184
|
-
animate={{
|
|
185
|
-
x: shouldReduceMotion ? 0 : 100,
|
|
186
|
-
opacity: 1
|
|
189
|
+
animate={{
|
|
190
|
+
x: shouldReduceMotion ? 0 : 100,
|
|
191
|
+
opacity: 1,
|
|
187
192
|
}}
|
|
188
193
|
transition={{ duration: shouldReduceMotion ? 0 : 0.3 }}
|
|
189
194
|
/>
|
|
@@ -220,4 +225,3 @@ function AccessibleComponent() {
|
|
|
220
225
|
### 🛑 Verification-Before-Completion (VBC) Protocol
|
|
221
226
|
|
|
222
227
|
Inspect motion frame performance in DevTools Rendering tab to verify 60/120fps compositor execution without layout thrashing.
|
|
223
|
-
|