exonous 0.0.0-stage → 2.10.4
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/README.md +100 -2
- package/assets/THIRD-PARTY-NOTICES.md +29 -0
- package/assets/adapters/opencode/exonous.js +54 -0
- package/assets/agents/exo-backend.md +22 -0
- package/assets/agents/exo-cto.md +22 -0
- package/assets/agents/exo-data-ai.md +22 -0
- package/assets/agents/exo-designer.md +22 -0
- package/assets/agents/exo-devops.md +22 -0
- package/assets/agents/exo-frontend.md +22 -0
- package/assets/agents/exo-infra.md +22 -0
- package/assets/agents/exo-mobile.md +22 -0
- package/assets/agents/exo-pm.md +22 -0
- package/assets/agents/exo-qa.md +22 -0
- package/assets/agents/exo-researcher.md +22 -0
- package/assets/agents/exo-security.md +22 -0
- package/assets/agents/roster.json +209 -0
- package/assets/agents/taxis.js +189 -0
- package/assets/editors/cursor/frontend-skills.mdc +27 -0
- package/assets/editors/hooks/cursor/hooks.json +11 -0
- package/assets/machine/PR-TEMPLATE.md +21 -0
- package/assets/machine/hooks/anamnesis.cjs +61 -0
- package/assets/machine/hooks/ethos.cjs +48 -0
- package/assets/machine/hooks/kairos.cjs +46 -0
- package/assets/machine/hooks/lib/cli-options.cjs +133 -0
- package/assets/machine/hooks/lib/memory.cjs +488 -0
- package/assets/machine/hooks/lib/metron.cjs +52 -0
- package/assets/machine/hooks/lib/paths.cjs +99 -0
- package/assets/machine/hooks/lib/payload.cjs +81 -0
- package/assets/machine/hooks/lib/pr-template-validate.cjs +103 -0
- package/assets/machine/hooks/lib/release.cjs +58 -0
- package/assets/machine/hooks/lib/repo.cjs +138 -0
- package/assets/machine/hooks/lib/sanitize.cjs +37 -0
- package/assets/machine/hooks/lib/selfupdate.cjs +354 -0
- package/assets/machine/hooks/lib/shell.cjs +722 -0
- package/assets/machine/hooks/lib/template.cjs +70 -0
- package/assets/machine/hooks/lib/token.cjs +110 -0
- package/assets/machine/hooks/lib/validate-pr-body.cjs +21 -0
- package/assets/machine/hooks/pyle.cjs +302 -0
- package/assets/rules/nomos.md +59 -0
- package/assets/rules/praxis.md +38 -0
- package/assets/skills/code-review/SKILL.md +124 -0
- package/assets/skills/commit-changes/SKILL.md +49 -0
- package/assets/skills/deliver/SKILL.md +114 -0
- package/assets/skills/deliver/references/parallel.md +37 -0
- package/assets/skills/doc/SKILL.md +140 -0
- package/assets/skills/doc/doc.mjs +277 -0
- package/assets/skills/issue-board/SKILL.md +84 -0
- package/assets/skills/issue-board/board.mjs +389 -0
- package/assets/skills/issue-board/config.example.json +9 -0
- package/assets/skills/issue-board/render.py +189 -0
- package/assets/skills/make-pr/SKILL.md +24 -0
- package/assets/skills/native-ui/SKILL.md +67 -0
- package/assets/skills/native-ui/reference/apple.md +180 -0
- package/assets/skills/native-ui/reference/mobile-feel.md +221 -0
- package/assets/skills/native-ui/reference/swift.md +289 -0
- package/assets/skills/project-memory/SKILL.md +59 -0
- package/assets/skills/project-memory/config.example.json +4 -0
- package/assets/skills/project-memory/project-memory.mjs +478 -0
- package/assets/skills/security-review/SKILL.md +102 -0
- package/assets/skills/session-handoff/SKILL.md +23 -0
- package/assets/skills/session-handoff/config.example.json +3 -0
- package/assets/skills/ui-design/SKILL.md +75 -0
- package/assets/skills/ui-design/reference/adapt.md +151 -0
- package/assets/skills/ui-design/reference/adapt.native.md +35 -0
- package/assets/skills/ui-design/reference/android.md +50 -0
- package/assets/skills/ui-design/reference/animate.md +87 -0
- package/assets/skills/ui-design/reference/audit.md +76 -0
- package/assets/skills/ui-design/reference/audit.native.md +126 -0
- package/assets/skills/ui-design/reference/bolder.md +33 -0
- package/assets/skills/ui-design/reference/clarify.md +84 -0
- package/assets/skills/ui-design/reference/colorize.md +86 -0
- package/assets/skills/ui-design/reference/craft-floor.md +25 -0
- package/assets/skills/ui-design/reference/critique.md +345 -0
- package/assets/skills/ui-design/reference/degraded/asset-producer.md +35 -0
- package/assets/skills/ui-design/reference/degraded/documenter.md +23 -0
- package/assets/skills/ui-design/reference/degraded/finish-reviewer.md +43 -0
- package/assets/skills/ui-design/reference/degraded/manual-edit-applier.md +56 -0
- package/assets/skills/ui-design/reference/delight.md +63 -0
- package/assets/skills/ui-design/reference/distill.md +98 -0
- package/assets/skills/ui-design/reference/doctor.md +49 -0
- package/assets/skills/ui-design/reference/document.md +273 -0
- package/assets/skills/ui-design/reference/extract.md +52 -0
- package/assets/skills/ui-design/reference/harden.md +122 -0
- package/assets/skills/ui-design/reference/hooks.md +114 -0
- package/assets/skills/ui-design/reference/init.md +47 -0
- package/assets/skills/ui-design/reference/ios.md +55 -0
- package/assets/skills/ui-design/reference/layout.md +81 -0
- package/assets/skills/ui-design/reference/live-setup.md +75 -0
- package/assets/skills/ui-design/reference/live.md +326 -0
- package/assets/skills/ui-design/reference/new-work.md +350 -0
- package/assets/skills/ui-design/reference/onboard.md +85 -0
- package/assets/skills/ui-design/reference/operate.md +29 -0
- package/assets/skills/ui-design/reference/optimize.md +101 -0
- package/assets/skills/ui-design/reference/overdrive.md +83 -0
- package/assets/skills/ui-design/reference/polish.md +77 -0
- package/assets/skills/ui-design/reference/quieter.md +95 -0
- package/assets/skills/ui-design/reference/routing.md +37 -0
- package/assets/skills/ui-design/reference/shape.md +43 -0
- package/assets/skills/ui-design/reference/styles/brutalist.md +45 -0
- package/assets/skills/ui-design/reference/styles/design-md.md +70 -0
- package/assets/skills/ui-design/reference/styles/direction.md +95 -0
- package/assets/skills/ui-design/reference/styles/full-output.md +42 -0
- package/assets/skills/ui-design/reference/styles/minimalist.md +64 -0
- package/assets/skills/ui-design/reference/styles/premium.md +65 -0
- package/assets/skills/ui-design/reference/styles/redesign.md +59 -0
- package/assets/skills/ui-design/reference/typeset.md +73 -0
- package/assets/skills/ui-design/reference/visualize.md +156 -0
- package/assets/skills/ui-design/scripts/ENGINE-LICENSE +191 -0
- package/assets/skills/ui-design/scripts/VERSION +1 -0
- package/assets/skills/ui-design/scripts/bin/darwin-arm64/impeccable +0 -0
- package/assets/skills/ui-design/scripts/command-metadata.json +94 -0
- package/assets/skills/ui-design/scripts/data/font-index-failures.json +121 -0
- package/assets/skills/ui-design/scripts/data/font-index.json +1 -0
- package/assets/skills/ui-design/scripts/impeccable +206 -0
- package/assets/skills/ui-design/scripts/impeccable.cmd +214 -0
- package/assets/skills/ui-design/scripts/live-browser-dom.js +167 -0
- package/assets/skills/ui-design/scripts/live-browser-ignores.js +242 -0
- package/assets/skills/ui-design/scripts/live-browser-session.js +144 -0
- package/assets/skills/ui-design/scripts/live-browser.js +12990 -0
- package/assets/skills/ui-design/scripts/modern-screenshot.umd.js +14 -0
- package/assets/skills/ui-design/scripts/ui-design +6 -0
- package/assets/skills/ui-design/scripts/ui-design.cmd +3 -0
- package/assets/skills/ui-design/scripts/ui-design.mjs +124 -0
- package/assets/skills/ui-mockup/SKILL.md +68 -0
- package/assets/skills/ui-mockup/reference/brandkit.md +101 -0
- package/assets/skills/ui-mockup/reference/image-to-code.md +83 -0
- package/assets/skills/ui-mockup/reference/mobile-comps.md +94 -0
- package/assets/skills/ui-mockup/reference/web-comps.md +83 -0
- package/assets/skills/ui-motion/SKILL.md +112 -0
- package/assets/skills/ui-motion/reference/expo.md +224 -0
- package/assets/skills/ui-motion/reference/opportunities.md +81 -0
- package/assets/skills/ui-motion/reference/prototype.md +238 -0
- package/assets/skills/ui-motion/reference/review.md +163 -0
- package/assets/skills/ui-motion/reference/toasts.md +144 -0
- package/assets/skills/ui-motion/reference/ui-libraries.md +71 -0
- package/assets/skills/ui-motion/reference/vocabulary.md +130 -0
- package/assets/skills/ui-motion/reference/web.md +294 -0
- package/assets/skills/ui-patterns/SKILL.md +105 -0
- package/assets/skills/ui-patterns/references/stacks/html-tailwind.md +40 -0
- package/assets/skills/ui-patterns/references/stacks/nextjs.md +52 -0
- package/assets/skills/ui-patterns/references/stacks/nuxt.md +100 -0
- package/assets/skills/ui-patterns/references/stacks/react-native.md +48 -0
- package/assets/skills/ui-patterns/references/stacks/react.md +49 -0
- package/assets/skills/ui-patterns/references/stacks/shadcn.md +57 -0
- package/assets/skills/ui-patterns/references/stacks/vue.md +37 -0
- package/assets/techne/.claude-plugin/marketplace.json +31 -0
- package/assets/techne/.claude-plugin/plugin.json +24 -0
- package/assets/techne/.mcp.json +8 -0
- package/assets/techne/commands/build-fix.md +48 -0
- package/assets/techne/commands/refactor-clean.md +46 -0
- package/assets/techne/commands/test-coverage.md +42 -0
- package/assets/techne/hooks/hooks.json +49 -0
- package/assets/techne/rules/angular/coding-style.md +49 -0
- package/assets/techne/rules/angular/hooks.md +23 -0
- package/assets/techne/rules/angular/patterns.md +48 -0
- package/assets/techne/rules/angular/security.md +26 -0
- package/assets/techne/rules/angular/testing.md +46 -0
- package/assets/techne/rules/arkts/coding-style.md +63 -0
- package/assets/techne/rules/arkts/hooks.md +38 -0
- package/assets/techne/rules/arkts/patterns.md +42 -0
- package/assets/techne/rules/arkts/security.md +35 -0
- package/assets/techne/rules/arkts/testing.md +39 -0
- package/assets/techne/rules/common/agents.md +6 -0
- package/assets/techne/rules/common/code-review.md +15 -0
- package/assets/techne/rules/common/coding-style.md +13 -0
- package/assets/techne/rules/common/development-workflow.md +5 -0
- package/assets/techne/rules/common/git-workflow.md +30 -0
- package/assets/techne/rules/common/hooks.md +7 -0
- package/assets/techne/rules/common/patterns.md +3 -0
- package/assets/techne/rules/common/performance.md +3 -0
- package/assets/techne/rules/common/security.md +5 -0
- package/assets/techne/rules/common/testing.md +3 -0
- package/assets/techne/rules/cpp/coding-style.md +31 -0
- package/assets/techne/rules/cpp/hooks.md +26 -0
- package/assets/techne/rules/cpp/patterns.md +31 -0
- package/assets/techne/rules/cpp/security.md +37 -0
- package/assets/techne/rules/cpp/testing.md +31 -0
- package/assets/techne/rules/csharp/coding-style.md +30 -0
- package/assets/techne/rules/csharp/hooks.md +24 -0
- package/assets/techne/rules/csharp/patterns.md +28 -0
- package/assets/techne/rules/csharp/security.md +32 -0
- package/assets/techne/rules/csharp/testing.md +27 -0
- package/assets/techne/rules/dart/coding-style.md +47 -0
- package/assets/techne/rules/dart/hooks.md +26 -0
- package/assets/techne/rules/dart/patterns.md +38 -0
- package/assets/techne/rules/dart/security.md +44 -0
- package/assets/techne/rules/dart/testing.md +39 -0
- package/assets/techne/rules/fsharp/coding-style.md +34 -0
- package/assets/techne/rules/fsharp/hooks.md +25 -0
- package/assets/techne/rules/fsharp/patterns.md +43 -0
- package/assets/techne/rules/fsharp/security.md +32 -0
- package/assets/techne/rules/fsharp/testing.md +27 -0
- package/assets/techne/rules/golang/coding-style.md +30 -0
- package/assets/techne/rules/golang/hooks.md +17 -0
- package/assets/techne/rules/golang/patterns.md +43 -0
- package/assets/techne/rules/golang/security.md +33 -0
- package/assets/techne/rules/golang/testing.md +20 -0
- package/assets/techne/rules/java/coding-style.md +51 -0
- package/assets/techne/rules/java/hooks.md +18 -0
- package/assets/techne/rules/java/patterns.md +55 -0
- package/assets/techne/rules/java/security.md +33 -0
- package/assets/techne/rules/java/testing.md +33 -0
- package/assets/techne/rules/kotlin/coding-style.md +50 -0
- package/assets/techne/rules/kotlin/hooks.md +17 -0
- package/assets/techne/rules/kotlin/patterns.md +44 -0
- package/assets/techne/rules/kotlin/security.md +34 -0
- package/assets/techne/rules/kotlin/testing.md +38 -0
- package/assets/techne/rules/nuxt/coding-style.md +20 -0
- package/assets/techne/rules/nuxt/hooks.md +16 -0
- package/assets/techne/rules/nuxt/patterns.md +46 -0
- package/assets/techne/rules/nuxt/security.md +19 -0
- package/assets/techne/rules/nuxt/testing.md +15 -0
- package/assets/techne/rules/perl/coding-style.md +33 -0
- package/assets/techne/rules/perl/hooks.md +22 -0
- package/assets/techne/rules/perl/patterns.md +43 -0
- package/assets/techne/rules/perl/security.md +39 -0
- package/assets/techne/rules/perl/testing.md +42 -0
- package/assets/techne/rules/php/coding-style.md +30 -0
- package/assets/techne/rules/php/hooks.md +24 -0
- package/assets/techne/rules/php/patterns.md +26 -0
- package/assets/techne/rules/php/security.md +27 -0
- package/assets/techne/rules/php/testing.md +28 -0
- package/assets/techne/rules/python/coding-style.md +38 -0
- package/assets/techne/rules/python/fastapi.md +57 -0
- package/assets/techne/rules/python/hooks.md +19 -0
- package/assets/techne/rules/python/patterns.md +37 -0
- package/assets/techne/rules/python/security.md +26 -0
- package/assets/techne/rules/python/testing.md +32 -0
- package/assets/techne/rules/react/coding-style.md +24 -0
- package/assets/techne/rules/react/hooks.md +62 -0
- package/assets/techne/rules/react/patterns.md +48 -0
- package/assets/techne/rules/react/security.md +45 -0
- package/assets/techne/rules/react/testing.md +42 -0
- package/assets/techne/rules/react-native/accessibility.md +14 -0
- package/assets/techne/rules/react-native/coding-style.md +16 -0
- package/assets/techne/rules/react-native/hooks.md +16 -0
- package/assets/techne/rules/react-native/patterns.md +18 -0
- package/assets/techne/rules/react-native/performance.md +14 -0
- package/assets/techne/rules/react-native/production-readiness.md +16 -0
- package/assets/techne/rules/react-native/security.md +16 -0
- package/assets/techne/rules/react-native/testing.md +14 -0
- package/assets/techne/rules/ruby/coding-style.md +40 -0
- package/assets/techne/rules/ruby/hooks.md +33 -0
- package/assets/techne/rules/ruby/patterns.md +33 -0
- package/assets/techne/rules/ruby/security.md +39 -0
- package/assets/techne/rules/ruby/testing.md +35 -0
- package/assets/techne/rules/rust/coding-style.md +41 -0
- package/assets/techne/rules/rust/hooks.md +16 -0
- package/assets/techne/rules/rust/patterns.md +42 -0
- package/assets/techne/rules/rust/security.md +33 -0
- package/assets/techne/rules/rust/testing.md +30 -0
- package/assets/techne/rules/swift/coding-style.md +30 -0
- package/assets/techne/rules/swift/hooks.md +20 -0
- package/assets/techne/rules/swift/patterns.md +30 -0
- package/assets/techne/rules/swift/security.md +22 -0
- package/assets/techne/rules/swift/testing.md +28 -0
- package/assets/techne/rules/typescript/coding-style.md +38 -0
- package/assets/techne/rules/typescript/hooks.md +14 -0
- package/assets/techne/rules/typescript/patterns.md +12 -0
- package/assets/techne/rules/typescript/security.md +14 -0
- package/assets/techne/rules/typescript/testing.md +12 -0
- package/assets/techne/rules/vue/coding-style.md +19 -0
- package/assets/techne/rules/vue/hooks.md +13 -0
- package/assets/techne/rules/vue/patterns.md +29 -0
- package/assets/techne/rules/vue/security.md +11 -0
- package/assets/techne/rules/vue/testing.md +11 -0
- package/assets/techne/rules/web/coding-style.md +25 -0
- package/assets/techne/rules/web/design-quality.md +21 -0
- package/assets/techne/rules/web/hooks.md +39 -0
- package/assets/techne/rules/web/patterns.md +23 -0
- package/assets/techne/rules/web/performance.md +25 -0
- package/assets/techne/rules/web/security.md +23 -0
- package/assets/techne/rules/web/testing.md +21 -0
- package/assets/techne/scripts/hooks/config-guard.js +50 -0
- package/assets/techne/scripts/hooks/edit-tracker.js +26 -0
- package/assets/techne/scripts/hooks/lib/shell.js +204 -0
- package/assets/techne/scripts/hooks/no-verify-guard.js +205 -0
- package/assets/techne/scripts/hooks/run.js +92 -0
- package/assets/techne/scripts/hooks/stop-checks.js +136 -0
- package/assets/techne/skills/angular/SKILL.md +34 -0
- package/assets/techne/skills/angular/reference/components-and-templates.md +63 -0
- package/assets/techne/skills/angular/reference/dependency-injection.md +44 -0
- package/assets/techne/skills/angular/reference/forms.md +97 -0
- package/assets/techne/skills/angular/reference/routing.md +50 -0
- package/assets/techne/skills/angular/reference/signals-and-state.md +59 -0
- package/assets/techne/skills/angular/reference/styling-motion-a11y.md +54 -0
- package/assets/techne/skills/angular/reference/testing.md +52 -0
- package/assets/techne/skills/angular/reference/tooling.md +31 -0
- package/assets/techne/skills/cpp/SKILL.md +27 -0
- package/assets/techne/skills/cpp/reference/coding-standards.md +160 -0
- package/assets/techne/skills/databases/SKILL.md +35 -0
- package/assets/techne/skills/databases/reference/clickhouse.md +102 -0
- package/assets/techne/skills/databases/reference/migrations.md +94 -0
- package/assets/techne/skills/databases/reference/mysql.md +101 -0
- package/assets/techne/skills/databases/reference/postgres.md +72 -0
- package/assets/techne/skills/databases/reference/prisma.md +105 -0
- package/assets/techne/skills/databases/reference/redis.md +108 -0
- package/assets/techne/skills/delivery/SKILL.md +35 -0
- package/assets/techne/skills/delivery/reference/deployment-patterns.md +58 -0
- package/assets/techne/skills/delivery/reference/docker-patterns.md +77 -0
- package/assets/techne/skills/delivery/reference/git-workflow.md +64 -0
- package/assets/techne/skills/delivery/reference/github-ops.md +67 -0
- package/assets/techne/skills/delivery/reference/jira-integration.md +53 -0
- package/assets/techne/skills/delivery/reference/kubernetes-patterns.md +67 -0
- package/assets/techne/skills/dotnet/SKILL.md +27 -0
- package/assets/techne/skills/dotnet/reference/dotnet-core.md +131 -0
- package/assets/techne/skills/flutter/SKILL.md +29 -0
- package/assets/techne/skills/flutter/reference/code-review.md +76 -0
- package/assets/techne/skills/flutter/reference/patterns.md +201 -0
- package/assets/techne/skills/go/SKILL.md +28 -0
- package/assets/techne/skills/go/reference/patterns.md +87 -0
- package/assets/techne/skills/go/reference/testing.md +142 -0
- package/assets/techne/skills/java/SKILL.md +29 -0
- package/assets/techne/skills/java/reference/java-standards.md +117 -0
- package/assets/techne/skills/java/reference/springboot.md +108 -0
- package/assets/techne/skills/kotlin/SKILL.md +35 -0
- package/assets/techne/skills/kotlin/reference/android-clean-architecture.md +115 -0
- package/assets/techne/skills/kotlin/reference/compose-multiplatform-patterns.md +113 -0
- package/assets/techne/skills/kotlin/reference/kotlin-coroutines-flows.md +93 -0
- package/assets/techne/skills/kotlin/reference/kotlin-patterns.md +74 -0
- package/assets/techne/skills/kotlin/reference/kotlin-testing.md +115 -0
- package/assets/techne/skills/ml/SKILL.md +34 -0
- package/assets/techne/skills/ml/reference/ai-regression-testing.md +99 -0
- package/assets/techne/skills/ml/reference/cost-aware-llm-pipeline.md +133 -0
- package/assets/techne/skills/ml/reference/eval-harness.md +94 -0
- package/assets/techne/skills/ml/reference/mle-workflow.md +177 -0
- package/assets/techne/skills/ml/reference/prompt-optimizer.md +107 -0
- package/assets/techne/skills/ml/reference/pytorch-patterns.md +164 -0
- package/assets/techne/skills/php/SKILL.md +27 -0
- package/assets/techne/skills/php/reference/laravel.md +142 -0
- package/assets/techne/skills/python/SKILL.md +33 -0
- package/assets/techne/skills/python/reference/django.md +104 -0
- package/assets/techne/skills/python/reference/fastapi.md +118 -0
- package/assets/techne/skills/python/reference/python-core.md +88 -0
- package/assets/techne/skills/python/reference/python-testing.md +105 -0
- package/assets/techne/skills/quality/SKILL.md +34 -0
- package/assets/techne/skills/quality/reference/benchmark.md +55 -0
- package/assets/techne/skills/quality/reference/browser-qa.md +60 -0
- package/assets/techne/skills/quality/reference/coding-standards.md +88 -0
- package/assets/techne/skills/quality/reference/e2e-testing.md +99 -0
- package/assets/techne/skills/quality/reference/tdd-workflow.md +89 -0
- package/assets/techne/skills/quality/reference/verification-loop.md +80 -0
- package/assets/techne/skills/react/SKILL.md +30 -0
- package/assets/techne/skills/react/reference/nextjs-turbopack.md +42 -0
- package/assets/techne/skills/react/reference/react-patterns.md +139 -0
- package/assets/techne/skills/react/reference/react-performance.md +101 -0
- package/assets/techne/skills/react/reference/react-testing.md +139 -0
- package/assets/techne/skills/react-native/SKILL.md +28 -0
- package/assets/techne/skills/react-native/reference/expo-patterns.md +196 -0
- package/assets/techne/skills/research/SKILL.md +35 -0
- package/assets/techne/skills/research/reference/architecture-decision-records.md +65 -0
- package/assets/techne/skills/research/reference/codebase-onboarding.md +44 -0
- package/assets/techne/skills/research/reference/deep-research.md +50 -0
- package/assets/techne/skills/research/reference/iterative-retrieval.md +62 -0
- package/assets/techne/skills/research/reference/product-lens.md +38 -0
- package/assets/techne/skills/research/reference/search-first.md +50 -0
- package/assets/techne/skills/rust/SKILL.md +28 -0
- package/assets/techne/skills/rust/reference/patterns.md +108 -0
- package/assets/techne/skills/rust/reference/testing.md +142 -0
- package/assets/techne/skills/services/SKILL.md +32 -0
- package/assets/techne/skills/services/reference/api-contracts.md +139 -0
- package/assets/techne/skills/services/reference/backend-layers.md +95 -0
- package/assets/techne/skills/services/reference/errors-and-resilience.md +146 -0
- package/assets/techne/skills/services/reference/hexagonal-boundaries.md +93 -0
- package/assets/techne/skills/services/reference/mcp-servers.md +50 -0
- package/assets/techne/skills/services/reference/nestjs.md +96 -0
- package/assets/techne/skills/swift/SKILL.md +29 -0
- package/assets/techne/skills/swift/reference/concurrency.md +83 -0
- package/assets/techne/skills/swift/reference/swiftui.md +139 -0
- package/assets/techne/skills/vue/SKILL.md +29 -0
- package/assets/techne/skills/vue/reference/nuxt4-patterns.md +90 -0
- package/assets/techne/skills/vue/reference/ui-to-vue.md +90 -0
- package/assets/techne/skills/vue/reference/vue-patterns.md +151 -0
- package/assets/techne/skills/web/SKILL.md +30 -0
- package/assets/techne/skills/web/reference/bun-runtime.md +55 -0
- package/assets/techne/skills/web/reference/frontend-patterns.md +54 -0
- package/assets/techne/skills/web/reference/seo.md +77 -0
- package/assets/techne/skills/web/reference/vite-patterns.md +96 -0
- package/bin/native.cjs +30 -0
- package/native/aarch64-apple-darwin/exonous +0 -0
- package/native/aarch64-unknown-linux-gnu/exonous +0 -0
- package/native/x86_64-apple-darwin/exonous +0 -0
- package/native/x86_64-pc-windows-msvc/exonous.exe +0 -0
- package/native/x86_64-unknown-linux-gnu/exonous +0 -0
- package/package.json +1 -6
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.php"
|
|
4
|
+
- "**/composer.json"
|
|
5
|
+
---
|
|
6
|
+
# PHP Patterns
|
|
7
|
+
|
|
8
|
+
> Builds on the shared rules in `../common/patterns.md`.
|
|
9
|
+
|
|
10
|
+
## Controllers
|
|
11
|
+
|
|
12
|
+
HTTP concerns only — auth, validation, status, serialization.
|
|
13
|
+
|
|
14
|
+
## Services
|
|
15
|
+
|
|
16
|
+
Business rules in injectable services testable without bootstrapping the full framework.
|
|
17
|
+
|
|
18
|
+
## DTOs / values
|
|
19
|
+
|
|
20
|
+
Typed request/response objects; value objects for money, ids, ranges.
|
|
21
|
+
|
|
22
|
+
## Boundaries
|
|
23
|
+
|
|
24
|
+
Thin ORM models; adapter wrappers around third-party SDKs.
|
|
25
|
+
|
|
26
|
+
API shape: `techne:services` skill; Laravel architecture: `techne:php` skill.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.php"
|
|
4
|
+
- "**/composer.lock"
|
|
5
|
+
- "**/composer.json"
|
|
6
|
+
---
|
|
7
|
+
# PHP Security
|
|
8
|
+
|
|
9
|
+
> Builds on the shared rules in `../common/security.md`.
|
|
10
|
+
|
|
11
|
+
## I/O
|
|
12
|
+
|
|
13
|
+
Validate at framework boundary; escape template output by default; treat headers/cookies/uploads as untrusted.
|
|
14
|
+
|
|
15
|
+
## Database
|
|
16
|
+
|
|
17
|
+
Prepared statements / query builder; careful mass-assignment allow lists.
|
|
18
|
+
|
|
19
|
+
## Secrets
|
|
20
|
+
|
|
21
|
+
Env or secret manager; `composer audit` in CI; deliberate version pins.
|
|
22
|
+
|
|
23
|
+
## Sessions
|
|
24
|
+
|
|
25
|
+
`password_hash` / `password_verify`; regenerate session id on login/privilege change; CSRF on state-changing web forms.
|
|
26
|
+
|
|
27
|
+
Framework hardening: `techne:php` skill.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.php"
|
|
4
|
+
- "**/phpunit.xml"
|
|
5
|
+
- "**/phpunit.xml.dist"
|
|
6
|
+
- "**/composer.json"
|
|
7
|
+
---
|
|
8
|
+
# PHP Testing
|
|
9
|
+
|
|
10
|
+
> Builds on the shared rules in `../common/testing.md`.
|
|
11
|
+
|
|
12
|
+
## Runner
|
|
13
|
+
|
|
14
|
+
PHPUnit default; Pest only when the repo already standardizes on Pest — do not mix casually.
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
vendor/bin/phpunit --coverage-text
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Organization
|
|
21
|
+
|
|
22
|
+
Fast unit vs integration suites; factories/builders over huge arrays; service tests for rules, controller tests for transport.
|
|
23
|
+
|
|
24
|
+
## Inertia
|
|
25
|
+
|
|
26
|
+
When used, assert Inertia component/props via framework helpers — not raw JSON alone.
|
|
27
|
+
|
|
28
|
+
Loop: `techne:quality` skill; Laravel testing: `techne:php` skill.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.py"
|
|
4
|
+
- "**/*.pyi"
|
|
5
|
+
---
|
|
6
|
+
# Python Coding Style
|
|
7
|
+
|
|
8
|
+
> Builds on the shared rules in `../common/coding-style.md`.
|
|
9
|
+
|
|
10
|
+
## Standards
|
|
11
|
+
|
|
12
|
+
- PEP 8 layout and naming; annotate every public function signature.
|
|
13
|
+
|
|
14
|
+
## Immutability
|
|
15
|
+
|
|
16
|
+
Favor frozen or value-style data for shared state:
|
|
17
|
+
|
|
18
|
+
```python
|
|
19
|
+
from dataclasses import dataclass
|
|
20
|
+
from typing import NamedTuple
|
|
21
|
+
|
|
22
|
+
@dataclass(frozen=True)
|
|
23
|
+
class Account:
|
|
24
|
+
handle: str
|
|
25
|
+
mailbox: str
|
|
26
|
+
|
|
27
|
+
class Coord(NamedTuple):
|
|
28
|
+
x: float
|
|
29
|
+
y: float
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Tooling
|
|
33
|
+
|
|
34
|
+
- **black** — format
|
|
35
|
+
- **isort** — import order
|
|
36
|
+
- **ruff** — lint
|
|
37
|
+
|
|
38
|
+
Depth: `techne:python` skill.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/app/**/*.py"
|
|
4
|
+
- "**/fastapi/**/*.py"
|
|
5
|
+
- "**/*_api.py"
|
|
6
|
+
---
|
|
7
|
+
# FastAPI Rules
|
|
8
|
+
|
|
9
|
+
Apply with general Python rules on FastAPI codebases.
|
|
10
|
+
|
|
11
|
+
## Layout
|
|
12
|
+
|
|
13
|
+
- Factory: `create_app()` owns wiring.
|
|
14
|
+
- Routers: HTTP only; persistence and rules live in services/CRUD helpers.
|
|
15
|
+
- Split create / update / response schemas.
|
|
16
|
+
- DB sessions and auth via `Depends`.
|
|
17
|
+
|
|
18
|
+
## Async boundaries
|
|
19
|
+
|
|
20
|
+
- `async def` routes when work is I/O-bound.
|
|
21
|
+
- Async DB/HTTP clients from async handlers.
|
|
22
|
+
- No blocking `requests`, sync SQLAlchemy sessions, or sync disk/network in async routes.
|
|
23
|
+
|
|
24
|
+
## Injection
|
|
25
|
+
|
|
26
|
+
```python
|
|
27
|
+
@router.get("/accounts/{account_id}")
|
|
28
|
+
async def fetch_account(
|
|
29
|
+
account_id: str,
|
|
30
|
+
session: AsyncSession = Depends(get_session),
|
|
31
|
+
principal: User = Depends(current_user),
|
|
32
|
+
):
|
|
33
|
+
...
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Never open `SessionLocal()` or long-lived clients inside handlers.
|
|
37
|
+
|
|
38
|
+
## Schemas
|
|
39
|
+
|
|
40
|
+
- Omit secrets, hashes, tokens, and internal auth fields from response models.
|
|
41
|
+
- Set `response_model` on data endpoints.
|
|
42
|
+
- Prefer Pydantic constraints over hand-rolled validation.
|
|
43
|
+
|
|
44
|
+
## Security
|
|
45
|
+
|
|
46
|
+
- CORS origins per environment; no wildcard + credentials.
|
|
47
|
+
- Validate JWT exp, iss, aud, alg.
|
|
48
|
+
- Rate-limit auth and heavy writes.
|
|
49
|
+
- Redact credentials and auth headers in logs.
|
|
50
|
+
|
|
51
|
+
## Tests
|
|
52
|
+
|
|
53
|
+
- Override the same callable `Depends` references.
|
|
54
|
+
- Clear `app.dependency_overrides` after each test.
|
|
55
|
+
- Async clients for async apps.
|
|
56
|
+
|
|
57
|
+
Depth: `techne:python` skill (FastAPI reference).
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.py"
|
|
4
|
+
- "**/*.pyi"
|
|
5
|
+
---
|
|
6
|
+
# Python Hooks
|
|
7
|
+
|
|
8
|
+
> Builds on the shared rules in `../common/hooks.md`.
|
|
9
|
+
|
|
10
|
+
Hook intensity: `EXONOUS_HOOK_PROFILE` (`minimal` | `standard` | `strict`). Skip ids via `EXONOUS_DISABLED_HOOKS` (comma-separated).
|
|
11
|
+
|
|
12
|
+
## PostToolUse (when profile allows)
|
|
13
|
+
|
|
14
|
+
- **black** / **ruff** on edited `.py`
|
|
15
|
+
- **mypy** / **pyright** after type-sensitive edits
|
|
16
|
+
|
|
17
|
+
## Warnings
|
|
18
|
+
|
|
19
|
+
- Flag new `print()` in application code — use `logging`.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.py"
|
|
4
|
+
- "**/*.pyi"
|
|
5
|
+
---
|
|
6
|
+
# Python Patterns
|
|
7
|
+
|
|
8
|
+
> Builds on the shared rules in `../common/patterns.md`.
|
|
9
|
+
|
|
10
|
+
## Structural typing
|
|
11
|
+
|
|
12
|
+
```python
|
|
13
|
+
from typing import Protocol
|
|
14
|
+
|
|
15
|
+
class ItemStore(Protocol):
|
|
16
|
+
def load(self, key: str) -> dict | None: ...
|
|
17
|
+
def persist(self, row: dict) -> dict: ...
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Request DTOs
|
|
21
|
+
|
|
22
|
+
```python
|
|
23
|
+
from dataclasses import dataclass
|
|
24
|
+
|
|
25
|
+
@dataclass
|
|
26
|
+
class RegisterPayload:
|
|
27
|
+
display_name: str
|
|
28
|
+
mailbox: str
|
|
29
|
+
years: int | None = None
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Resources
|
|
33
|
+
|
|
34
|
+
- `with` for acquire/release
|
|
35
|
+
- Generators for lazy, memory-bounded iteration
|
|
36
|
+
|
|
37
|
+
Depth: `techne:python` skill.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.py"
|
|
4
|
+
- "**/*.pyi"
|
|
5
|
+
---
|
|
6
|
+
# Python Security
|
|
7
|
+
|
|
8
|
+
> Builds on the shared rules in `../common/security.md`.
|
|
9
|
+
|
|
10
|
+
## Secrets
|
|
11
|
+
|
|
12
|
+
```python
|
|
13
|
+
import os
|
|
14
|
+
from dotenv import load_dotenv
|
|
15
|
+
|
|
16
|
+
load_dotenv()
|
|
17
|
+
token = os.environ["SERVICE_TOKEN"] # KeyError if unset
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Static scan
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
bandit -r src/
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Framework-specific hardening: `techne:python` skill. Broad review: `security-review` skill / `exo-security` agent.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.py"
|
|
4
|
+
- "**/*.pyi"
|
|
5
|
+
---
|
|
6
|
+
# Python Testing
|
|
7
|
+
|
|
8
|
+
> Builds on the shared rules in `../common/testing.md`.
|
|
9
|
+
|
|
10
|
+
## Runner
|
|
11
|
+
|
|
12
|
+
**pytest** default.
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
pytest --cov=src --cov-report=term-missing
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Marks
|
|
19
|
+
|
|
20
|
+
```python
|
|
21
|
+
import pytest
|
|
22
|
+
|
|
23
|
+
@pytest.mark.unit
|
|
24
|
+
def test_subtotal():
|
|
25
|
+
...
|
|
26
|
+
|
|
27
|
+
@pytest.mark.integration
|
|
28
|
+
def test_pool_connect():
|
|
29
|
+
...
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Depth: `techne:python` skill (testing reference).
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.tsx"
|
|
4
|
+
- "**/*.jsx"
|
|
5
|
+
- "**/components/**/*.ts"
|
|
6
|
+
- "**/components/**/*.js"
|
|
7
|
+
- "**/hooks/**/*.ts"
|
|
8
|
+
- "**/hooks/**/*.js"
|
|
9
|
+
---
|
|
10
|
+
> Extends [typescript/coding-style.md](../typescript/coding-style.md).
|
|
11
|
+
|
|
12
|
+
# React coding style
|
|
13
|
+
|
|
14
|
+
`.tsx` for JSX; `.ts` for logic/hooks/types. PascalCase components/files; `use*` hooks; `handle*` handlers vs `on*` props; boolean props prefixed (`isLoading`).
|
|
15
|
+
|
|
16
|
+
Destructure props in signature. Minimal JSX logic — precompute above `return`. Fragments over wrapper divs.
|
|
17
|
+
|
|
18
|
+
Next App Router: Server Components default; `"use client"` only when needed on line 1; never pull server-only modules into client graphs.
|
|
19
|
+
|
|
20
|
+
Imports: React → vendors → aliases → relatives; `import type` when split.
|
|
21
|
+
|
|
22
|
+
State: local first; context for low-churn globals; external store for high-frequency shared state; derive don't duplicate.
|
|
23
|
+
|
|
24
|
+
No new class components. Colocate tests; **techne:react** for depth.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.tsx"
|
|
4
|
+
- "**/*.jsx"
|
|
5
|
+
- "**/hooks/**/*.ts"
|
|
6
|
+
- "**/hooks/**/*.js"
|
|
7
|
+
- "**/use-*.ts"
|
|
8
|
+
- "**/use-*.tsx"
|
|
9
|
+
---
|
|
10
|
+
> React hook APIs (not harness hooks). Extends [typescript/patterns.md](../typescript/patterns.md).
|
|
11
|
+
|
|
12
|
+
# React hooks rules
|
|
13
|
+
|
|
14
|
+
Enable `eslint-plugin-react-hooks` (`rules-of-hooks`: error).
|
|
15
|
+
|
|
16
|
+
## Placement
|
|
17
|
+
|
|
18
|
+
Hooks only at component/hook top level — never inside conditions, loops, nested functions, or after early returns.
|
|
19
|
+
|
|
20
|
+
## Effects
|
|
21
|
+
|
|
22
|
+
Use `useEffect` to sync with externals (subscriptions, DOM APIs, non-React libraries). Do **not** use effects to:
|
|
23
|
+
|
|
24
|
+
- mirror props/state into other state (derive in render)
|
|
25
|
+
- run transformations already needed for render
|
|
26
|
+
- reset child state when props change (use `key` on child)
|
|
27
|
+
- fire parent notifications (call in the event handler)
|
|
28
|
+
|
|
29
|
+
Every effect that registers listeners, intervals, or fetches must return cleanup (abort controllers, `clearInterval`, unsubscribe).
|
|
30
|
+
|
|
31
|
+
## Dependencies
|
|
32
|
+
|
|
33
|
+
List every reactive value read inside the effect/callback. Do not blanket-disable `exhaustive-deps`; comment rare exceptions. Split oversized effects.
|
|
34
|
+
|
|
35
|
+
## Memoization
|
|
36
|
+
|
|
37
|
+
Default: no `useMemo`/`useCallback`. Add when profiling shows cost, when passing to `memo` children, or when stable identity is a hook dependency.
|
|
38
|
+
|
|
39
|
+
## Custom hooks
|
|
40
|
+
|
|
41
|
+
Extract when the same state+effect bundle appears in 2+ components with a nameable purpose (`useDebouncedValue`, `useMediaQuery`). Skip wrappers that only rename `useState`.
|
|
42
|
+
|
|
43
|
+
## State primitives
|
|
44
|
+
|
|
45
|
+
- Expensive initial state: `useState(() => compute())`
|
|
46
|
+
- Updates from prior state in async/batched code: functional updater `set(n => n + 1)`
|
|
47
|
+
- Related fields that always change together: single object state; otherwise split
|
|
48
|
+
- Many conditional transitions: `useReducer`
|
|
49
|
+
|
|
50
|
+
## Refs
|
|
51
|
+
|
|
52
|
+
DOM/imperative only; mutate `.current` in effects/handlers, not during render. `useImperativeHandle` sparingly.
|
|
53
|
+
|
|
54
|
+
## External stores
|
|
55
|
+
|
|
56
|
+
Subscribe with `useSyncExternalStore` for browser APIs or non-React stores under concurrent rendering.
|
|
57
|
+
|
|
58
|
+
## React 19+
|
|
59
|
+
|
|
60
|
+
Prefer built-ins over custom: `use()` for promises/context, `useActionState`/`useFormStatus`, `useOptimistic`, `useTransition`.
|
|
61
|
+
|
|
62
|
+
CI: treat `exhaustive-deps` warnings as errors on new code.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.tsx"
|
|
4
|
+
- "**/*.jsx"
|
|
5
|
+
- "**/components/**/*.ts"
|
|
6
|
+
- "**/components/**/*.js"
|
|
7
|
+
- "**/app/**/*.tsx"
|
|
8
|
+
- "**/pages/**/*.tsx"
|
|
9
|
+
---
|
|
10
|
+
> Extends [typescript/patterns.md](../typescript/patterns.md).
|
|
11
|
+
|
|
12
|
+
# React patterns
|
|
13
|
+
|
|
14
|
+
## Smart vs presentational
|
|
15
|
+
|
|
16
|
+
Containers fetch and orchestrate; leaf components render from props without service calls.
|
|
17
|
+
|
|
18
|
+
## Where state lives
|
|
19
|
+
|
|
20
|
+
1. Single component → local `useState`
|
|
21
|
+
2. Parent + nearby children → lift + props
|
|
22
|
+
3. Rare, low-churn cross-tree reads → Context (theme, locale)
|
|
23
|
+
4. Frequent shared updates → Zustand/Jotai/RTK
|
|
24
|
+
5. Remote data → TanStack Query/SWR/RSC fetch — avoid naked `fetch` in `useEffect`
|
|
25
|
+
|
|
26
|
+
## RSC (App Router)
|
|
27
|
+
|
|
28
|
+
Server Components default; add `"use client"` only for state/effects/events/browser APIs. Pass serializable props down; slot Server output through `children`. Mark secret modules with `server-only`.
|
|
29
|
+
|
|
30
|
+
Pair `<Suspense fallback=…>` with an Error Boundary near the async subtree — not only at the route root.
|
|
31
|
+
|
|
32
|
+
## Forms
|
|
33
|
+
|
|
34
|
+
Submit-driven flows: uncontrolled fields + server action reading `FormData`. Live validation or cross-field rules: controlled fields or React Hook Form / TanStack Form.
|
|
35
|
+
|
|
36
|
+
## Lists
|
|
37
|
+
|
|
38
|
+
Stable `key` from entity id — not array index when rows reorder. Composition: `children`, render props, compound components with shared context (tabs/menus).
|
|
39
|
+
|
|
40
|
+
## Portals
|
|
41
|
+
|
|
42
|
+
Modals/toasts via portal to escape overflow/z-index traps.
|
|
43
|
+
|
|
44
|
+
## Refs
|
|
45
|
+
|
|
46
|
+
React 19: `ref` prop on function components; React 18: `forwardRef`.
|
|
47
|
+
|
|
48
|
+
Load **techne:react** for Next.js/Turbopack specifics.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.tsx"
|
|
4
|
+
- "**/*.jsx"
|
|
5
|
+
- "**/components/**/*.ts"
|
|
6
|
+
- "**/app/**/*.ts"
|
|
7
|
+
- "**/pages/**/*.ts"
|
|
8
|
+
---
|
|
9
|
+
> Extends [typescript/security.md](../typescript/security.md).
|
|
10
|
+
|
|
11
|
+
# React security
|
|
12
|
+
|
|
13
|
+
## HTML injection
|
|
14
|
+
|
|
15
|
+
Audit every `dangerouslySetInnerHTML` — prefer text nodes or sanitizing markdown renderers. If HTML is required, sanitize at the call site (allowlist tags).
|
|
16
|
+
|
|
17
|
+
## URLs
|
|
18
|
+
|
|
19
|
+
Block `javascript:` and suspicious `data:` in dynamic `href`/`src`. Add `rel="noopener noreferrer"` with `target="_blank"`.
|
|
20
|
+
|
|
21
|
+
## Server actions & APIs
|
|
22
|
+
|
|
23
|
+
Treat `"use server"` handlers like public endpoints: schema-validate input, authenticate, authorize per record, rate-limit destructive work.
|
|
24
|
+
|
|
25
|
+
## Client bundle exposure
|
|
26
|
+
|
|
27
|
+
Framework public env prefixes ship to browsers (`NEXT_PUBLIC_*`, `VITE_*`, etc.). Never place signing secrets there.
|
|
28
|
+
|
|
29
|
+
## Session storage
|
|
30
|
+
|
|
31
|
+
Prefer httpOnly secure cookies over `localStorage` session tokens (XSS exfiltration risk).
|
|
32
|
+
|
|
33
|
+
## CSP & SSR
|
|
34
|
+
|
|
35
|
+
Set CSP at the edge; use per-request nonces for inline scripts in SSR frameworks. Do not concatenate user input into HTML shells outside JSX.
|
|
36
|
+
|
|
37
|
+
## State merge attacks
|
|
38
|
+
|
|
39
|
+
Do not spread unvalidated JSON into React state — validate with Zod first.
|
|
40
|
+
|
|
41
|
+
## Maps in production
|
|
42
|
+
|
|
43
|
+
Do not publish full source maps to CDN; upload to error tracker if needed.
|
|
44
|
+
|
|
45
|
+
Escalate to **exo-security** / `security-review` before merge on auth/payment changes.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.test.tsx"
|
|
4
|
+
- "**/*.test.jsx"
|
|
5
|
+
- "**/*.spec.tsx"
|
|
6
|
+
- "**/*.spec.jsx"
|
|
7
|
+
- "**/__tests__/**/*.ts"
|
|
8
|
+
- "**/__tests__/**/*.tsx"
|
|
9
|
+
---
|
|
10
|
+
> Extends [typescript/testing.md](../typescript/testing.md).
|
|
11
|
+
|
|
12
|
+
# React testing
|
|
13
|
+
|
|
14
|
+
## Stack
|
|
15
|
+
|
|
16
|
+
React Testing Library + Vitest (Vite) or Jest (Next legacy). One component runner per repo.
|
|
17
|
+
|
|
18
|
+
## Queries
|
|
19
|
+
|
|
20
|
+
Prefer `getByRole` with accessible name, then label, placeholder, text. `getByTestId` last.resort. Use `findBy*` / `waitFor` for async — never fixed `setTimeout`.
|
|
21
|
+
|
|
22
|
+
## Interactions
|
|
23
|
+
|
|
24
|
+
`@testing-library/user-event` with `await`; setup once per test.
|
|
25
|
+
|
|
26
|
+
## Network
|
|
27
|
+
|
|
28
|
+
MSW at the fetch boundary; override handlers per test for error paths.
|
|
29
|
+
|
|
30
|
+
## Hooks
|
|
31
|
+
|
|
32
|
+
`renderHook` + `act` for custom hooks; test public API only.
|
|
33
|
+
|
|
34
|
+
## Anti-patterns
|
|
35
|
+
|
|
36
|
+
No snapshotting large trees; no asserting render counts; do not mock React itself.
|
|
37
|
+
|
|
38
|
+
## Coverage (typical)
|
|
39
|
+
|
|
40
|
+
Utilities ≥90%; hooks ≥85%; presentational components ≥80% behavior; containers cover happy + error paths.
|
|
41
|
+
|
|
42
|
+
See **techne:react** and **techne:quality** for E2E and a11y automation (`ui-design` audit for manual a11y pass).
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.ts"
|
|
4
|
+
- "**/*.tsx"
|
|
5
|
+
---
|
|
6
|
+
# React Native accessibility
|
|
7
|
+
|
|
8
|
+
Label interactive controls (`accessibilityRole`, `accessibilityLabel`); icon-only buttons need labels. Use `accessibilityState` for disabled/selected/expanded.
|
|
9
|
+
|
|
10
|
+
Announce async errors/toasts; don't rely on color alone; WCAG AA contrast both themes.
|
|
11
|
+
|
|
12
|
+
Touch targets ~44pt iOS / 48dp Android; support dynamic type; respect reduced motion.
|
|
13
|
+
|
|
14
|
+
Test VoiceOver and TalkBack on devices; align tests with role/label queries.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.ts"
|
|
4
|
+
- "**/*.tsx"
|
|
5
|
+
---
|
|
6
|
+
> Builds on the shared rules in `../common/coding-style.md`.
|
|
7
|
+
|
|
8
|
+
# React Native style
|
|
9
|
+
|
|
10
|
+
Function components; typed props; thin screens composing hooks + presentational pieces.
|
|
11
|
+
|
|
12
|
+
One styling approach per app (`StyleSheet.create` at module scope or utility classes — no inline style objects on hot paths). Centralize tokens.
|
|
13
|
+
|
|
14
|
+
Platform files (`.ios.tsx`/`.android.tsx`) for large diffs; `Platform.select` for tiny tweaks. Safe areas via `react-native-safe-area-context`.
|
|
15
|
+
|
|
16
|
+
Path aliases; feature folders; no `console.log` in release. TypeScript rules from [typescript/](../typescript/).
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.ts"
|
|
4
|
+
- "**/*.tsx"
|
|
5
|
+
---
|
|
6
|
+
> Builds on the shared rules in `../common/hooks.md`.
|
|
7
|
+
|
|
8
|
+
# React Native harness hooks
|
|
9
|
+
|
|
10
|
+
PostToolUse on TS/TSX: `tsc --noEmit`, `expo lint`, Prettier on touched files.
|
|
11
|
+
|
|
12
|
+
Periodic: `expo-doctor`, `expo install --check`, dependency audit.
|
|
13
|
+
|
|
14
|
+
No full native builds per edit — reserve EAS/E2E for CI/commands.
|
|
15
|
+
|
|
16
|
+
`EXONOUS_HOOK_PROFILE`, `EXONOUS_DISABLED_HOOKS`.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.ts"
|
|
4
|
+
- "**/*.tsx"
|
|
5
|
+
---
|
|
6
|
+
> Builds on the shared rules in `../common/patterns.md`.
|
|
7
|
+
|
|
8
|
+
# React Native patterns
|
|
9
|
+
|
|
10
|
+
Do not install web DOM rules in RN projects.
|
|
11
|
+
|
|
12
|
+
Expo Router: thin route files; Zod-validate deep link params with `safeParse` + redirect.
|
|
13
|
+
|
|
14
|
+
Separate server cache, UI state, route params, forms; secure tokens in `expo-secure-store`.
|
|
15
|
+
|
|
16
|
+
Lists: `FlatList`/`FlashList` — not huge `.map` in `ScrollView`. Custom hooks for device APIs.
|
|
17
|
+
|
|
18
|
+
Cleanup effects; ignore stale async on unmount. **techne:react-native** skill.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.ts"
|
|
4
|
+
- "**/*.tsx"
|
|
5
|
+
---
|
|
6
|
+
> Builds on the shared rules in `../common/performance.md`.
|
|
7
|
+
|
|
8
|
+
# React Native performance
|
|
9
|
+
|
|
10
|
+
Memoize where it stops real re-renders; narrow state. Virtualized lists with stable `keyExtractor` and memoized `renderItem`.
|
|
11
|
+
|
|
12
|
+
`expo-image` with sized assets. Prefer Reanimated over JS-driven `Animated`.
|
|
13
|
+
|
|
14
|
+
Target New Architecture + Hermes; defer heavy work (`InteractionManager`). Profile with RN/React profilers — avoid deprecated debug tooling on New Arch.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.ts"
|
|
4
|
+
- "**/*.tsx"
|
|
5
|
+
---
|
|
6
|
+
# React Native production readiness
|
|
7
|
+
|
|
8
|
+
Pin Expo SDK; EAS Build/Submit; separate profiles; credentials in EAS — not repo.
|
|
9
|
+
|
|
10
|
+
OTA via `expo-updates` for JS-only; native changes need store builds.
|
|
11
|
+
|
|
12
|
+
Crash reporting (e.g. Sentry) in release; structured logging; surface network failures.
|
|
13
|
+
|
|
14
|
+
Bump version/build numbers; `EXPO_PUBLIC_*` only for public config.
|
|
15
|
+
|
|
16
|
+
Pre-release: typecheck, lint, tests (≥80%), expo-doctor, E2E on real builds, secrets scan, physical device smoke.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.ts"
|
|
4
|
+
- "**/*.tsx"
|
|
5
|
+
---
|
|
6
|
+
> Builds on the shared rules in `../common/security.md`.
|
|
7
|
+
|
|
8
|
+
# React Native security
|
|
9
|
+
|
|
10
|
+
Assume JS bundle is public — no privileged keys in app binary. Anon keys OK only with server-enforced rules.
|
|
11
|
+
|
|
12
|
+
Tokens in Secure Store; not AsyncStorage/MMKV for secrets. HTTPS; validate API + deep link + push payloads with Zod.
|
|
13
|
+
|
|
14
|
+
Minimal permissions with rationale; accurate store privacy labels.
|
|
15
|
+
|
|
16
|
+
**exo-security** for review — not third-party agent-config scanners.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.ts"
|
|
4
|
+
- "**/*.tsx"
|
|
5
|
+
---
|
|
6
|
+
> Builds on the shared rules in `../common/testing.md`.
|
|
7
|
+
|
|
8
|
+
# React Native testing
|
|
9
|
+
|
|
10
|
+
Jest + `@testing-library/react-native` (`jest-expo`); Maestro or Detox for E2E on CI builds.
|
|
11
|
+
|
|
12
|
+
Query by role/label; mock Expo modules and router; fresh QueryClient per test.
|
|
13
|
+
|
|
14
|
+
Cover auth/navigation/core flows before release. TDD via **exo-qa** guidance.
|