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,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.cs"
|
|
4
|
+
- "**/*.csx"
|
|
5
|
+
- "**/*.csproj"
|
|
6
|
+
- "**/appsettings*.json"
|
|
7
|
+
---
|
|
8
|
+
# C# Security
|
|
9
|
+
|
|
10
|
+
> Builds on the shared rules in `../common/security.md`.
|
|
11
|
+
|
|
12
|
+
## Secrets
|
|
13
|
+
|
|
14
|
+
Configuration, user secrets locally, vault in prod — no literals; real credentials never in committed appsettings.
|
|
15
|
+
|
|
16
|
+
## SQL
|
|
17
|
+
|
|
18
|
+
Parameterized ADO/Dapper/EF only; whitelist dynamic sort/filter fields.
|
|
19
|
+
|
|
20
|
+
## Validation
|
|
21
|
+
|
|
22
|
+
Validate DTOs at the edge (annotations, FluentValidation, guards).
|
|
23
|
+
|
|
24
|
+
## Auth
|
|
25
|
+
|
|
26
|
+
Framework handlers and policies; never log tokens/passwords.
|
|
27
|
+
|
|
28
|
+
## Errors
|
|
29
|
+
|
|
30
|
+
Safe outward messages; structured server logs without stack/SQL/path leakage.
|
|
31
|
+
|
|
32
|
+
Review: `security-review` skill / `exo-security` agent.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.cs"
|
|
4
|
+
- "**/*.csx"
|
|
5
|
+
- "**/*.csproj"
|
|
6
|
+
---
|
|
7
|
+
# C# Testing
|
|
8
|
+
|
|
9
|
+
> Builds on the shared rules in `../common/testing.md`.
|
|
10
|
+
|
|
11
|
+
## Stack
|
|
12
|
+
|
|
13
|
+
xUnit, FluentAssertions, Moq/NSubstitute, Testcontainers when needed.
|
|
14
|
+
|
|
15
|
+
## Layout
|
|
16
|
+
|
|
17
|
+
Mirror `src/` under `tests/`; behavior-named tests.
|
|
18
|
+
|
|
19
|
+
## Web
|
|
20
|
+
|
|
21
|
+
`WebApplicationFactory` integration tests through HTTP middleware — do not bypass auth/pipeline.
|
|
22
|
+
|
|
23
|
+
## Coverage
|
|
24
|
+
|
|
25
|
+
~80% on domain, validation, auth, failure paths; CI `dotnet test` with coverage when enabled.
|
|
26
|
+
|
|
27
|
+
Depth: `techne:quality` skill; `techne:dotnet` for stack patterns.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.dart"
|
|
4
|
+
- "**/pubspec.yaml"
|
|
5
|
+
- "**/analysis_options.yaml"
|
|
6
|
+
---
|
|
7
|
+
# Dart/Flutter Coding Style
|
|
8
|
+
|
|
9
|
+
> Builds on the shared rules in `../common/coding-style.md`.
|
|
10
|
+
|
|
11
|
+
## Format
|
|
12
|
+
|
|
13
|
+
`dart format` in CI (`--set-exit-if-changed`); 80 columns; trailing commas on multiline lists.
|
|
14
|
+
|
|
15
|
+
## Immutability
|
|
16
|
+
|
|
17
|
+
`final` locals; `const` when compile-time; unmodifiable collections from public APIs; `copyWith` on state classes.
|
|
18
|
+
|
|
19
|
+
## Naming
|
|
20
|
+
|
|
21
|
+
Dart style: camelCase members, PascalCase types, snake_case files, `_` private, descriptive extension names.
|
|
22
|
+
|
|
23
|
+
## Null safety
|
|
24
|
+
|
|
25
|
+
Avoid `!` and careless `late`; use `?.`, `??`, guards, or Dart 3 patterns; `required` ctor params.
|
|
26
|
+
|
|
27
|
+
## Sealed state (Dart 3+)
|
|
28
|
+
|
|
29
|
+
Closed hierarchies with exhaustive `switch` — no default branch on sealed roots.
|
|
30
|
+
|
|
31
|
+
## Errors
|
|
32
|
+
|
|
33
|
+
Typed `on` clauses; never catch bare `Error`; sealed/`Result` for recoverable failures.
|
|
34
|
+
|
|
35
|
+
## Async
|
|
36
|
+
|
|
37
|
+
Await or `unawaited()`; no fake `async`; `context.mounted` after awaits in widgets.
|
|
38
|
+
|
|
39
|
+
## Imports
|
|
40
|
+
|
|
41
|
+
`package:` imports across layers; order dart → external → own package.
|
|
42
|
+
|
|
43
|
+
## Codegen
|
|
44
|
+
|
|
45
|
+
Commit or ignore `.g.dart`/`.freezed.dart` consistently; never hand-edit generated files.
|
|
46
|
+
|
|
47
|
+
Depth: `techne:flutter` skill.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.dart"
|
|
4
|
+
- "**/pubspec.yaml"
|
|
5
|
+
- "**/analysis_options.yaml"
|
|
6
|
+
---
|
|
7
|
+
# Dart/Flutter Hooks
|
|
8
|
+
|
|
9
|
+
> Builds on the shared rules in `../common/hooks.md`.
|
|
10
|
+
|
|
11
|
+
`EXONOUS_HOOK_PROFILE` / `EXONOUS_DISABLED_HOOKS`.
|
|
12
|
+
|
|
13
|
+
## PostToolUse
|
|
14
|
+
|
|
15
|
+
- **dart format** on edited `.dart`
|
|
16
|
+
- **dart analyze** (fatal infos when strict)
|
|
17
|
+
- **flutter test** for risky UI/state edits (strict)
|
|
18
|
+
|
|
19
|
+
## Pre-commit (standard/strict)
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
dart format --set-exit-if-changed .
|
|
23
|
+
dart analyze --fatal-infos
|
|
24
|
+
flutter test
|
|
25
|
+
dart run build_runner build --delete-conflicting-outputs # when generators touched
|
|
26
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.dart"
|
|
4
|
+
- "**/pubspec.yaml"
|
|
5
|
+
---
|
|
6
|
+
# Dart/Flutter Patterns
|
|
7
|
+
|
|
8
|
+
> Builds on the shared rules in `../common/patterns.md`.
|
|
9
|
+
|
|
10
|
+
## Repository
|
|
11
|
+
|
|
12
|
+
Abstract interface + impl coordinating remote/local sources; `Future` for fetches, `Stream` for watch APIs.
|
|
13
|
+
|
|
14
|
+
## State
|
|
15
|
+
|
|
16
|
+
Pick one primary approach per feature: **Cubit/BLoC** (events → emit), **Riverpod** (`@riverpod`, notifiers, `ConsumerWidget`), or **ChangeNotifier** view models with sealed/async state.
|
|
17
|
+
|
|
18
|
+
## DI
|
|
19
|
+
|
|
20
|
+
Constructor injection; register at composition root (`get_it` or Riverpod providers).
|
|
21
|
+
|
|
22
|
+
## Use cases
|
|
23
|
+
|
|
24
|
+
Single-purpose classes with `call()` forwarding to repositories.
|
|
25
|
+
|
|
26
|
+
## Layers
|
|
27
|
+
|
|
28
|
+
`domain/` (pure Dart) → `data/` (DTOs, sources) → `presentation/` (widgets + state). Presentation calls use cases, not stores directly.
|
|
29
|
+
|
|
30
|
+
## Navigation
|
|
31
|
+
|
|
32
|
+
GoRouter with validated params; auth redirects via `refreshListenable` + redirect callback.
|
|
33
|
+
|
|
34
|
+
## Immutability
|
|
35
|
+
|
|
36
|
+
`freezed` or manual immutable state classes for complex UI state.
|
|
37
|
+
|
|
38
|
+
Depth: `techne:flutter` skill; shared mobile patterns also in `techne:kotlin` for KMP overlap.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.dart"
|
|
4
|
+
- "**/pubspec.yaml"
|
|
5
|
+
- "**/AndroidManifest.xml"
|
|
6
|
+
- "**/Info.plist"
|
|
7
|
+
---
|
|
8
|
+
# Dart/Flutter Security
|
|
9
|
+
|
|
10
|
+
> Builds on the shared rules in `../common/security.md`.
|
|
11
|
+
|
|
12
|
+
## Secrets
|
|
13
|
+
|
|
14
|
+
No literals; `--dart-define` for non-secret config; runtime secrets in **flutter_secure_storage**; server holds true secrets.
|
|
15
|
+
|
|
16
|
+
## Network
|
|
17
|
+
|
|
18
|
+
HTTPS only; platform cleartext blocked; client timeouts; optional pinning for sensitive APIs.
|
|
19
|
+
|
|
20
|
+
## Input
|
|
21
|
+
|
|
22
|
+
Parameterized SQL (sqflite/drift); validate deep links (`Uri.tryParse`, allowlisted hosts/paths) before `go`.
|
|
23
|
+
|
|
24
|
+
## Storage
|
|
25
|
+
|
|
26
|
+
No tokens in SharedPreferences plaintext; wipe auth on logout; `local_auth` for sensitive actions; never log secrets.
|
|
27
|
+
|
|
28
|
+
## Android
|
|
29
|
+
|
|
30
|
+
Minimal permissions; `exported=false` where possible; `FLAG_SECURE` on sensitive screens.
|
|
31
|
+
|
|
32
|
+
## iOS
|
|
33
|
+
|
|
34
|
+
Usage strings only for used capabilities; Keychain via secure storage; ATS enforced.
|
|
35
|
+
|
|
36
|
+
## WebView
|
|
37
|
+
|
|
38
|
+
Prefer current `webview_flutter` controller API; disable JS unless required; intercept navigation.
|
|
39
|
+
|
|
40
|
+
## Release
|
|
41
|
+
|
|
42
|
+
`flutter build --obfuscate --split-debug-info=...`; analyze clean before ship.
|
|
43
|
+
|
|
44
|
+
Review: `security-review` skill / `exo-security` agent.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.dart"
|
|
4
|
+
- "**/pubspec.yaml"
|
|
5
|
+
- "**/analysis_options.yaml"
|
|
6
|
+
---
|
|
7
|
+
# Dart/Flutter Testing
|
|
8
|
+
|
|
9
|
+
> Builds on the shared rules in `../common/testing.md`.
|
|
10
|
+
|
|
11
|
+
## Stack
|
|
12
|
+
|
|
13
|
+
`flutter_test` / `test`; **mocktail** or mockito; **bloc_test**; **fake_async**; **integration_test** for device flows.
|
|
14
|
+
|
|
15
|
+
## Layout
|
|
16
|
+
|
|
17
|
+
`test/unit`, `test/widget`, `test/golden`, `integration_test/flows`.
|
|
18
|
+
|
|
19
|
+
## State tests
|
|
20
|
+
|
|
21
|
+
`blocTest` for BLoC; `ProviderContainer` + overrides for Riverpod.
|
|
22
|
+
|
|
23
|
+
## Widget tests
|
|
24
|
+
|
|
25
|
+
Pump with scoped providers; assert semantics and key widgets.
|
|
26
|
+
|
|
27
|
+
## Fakes
|
|
28
|
+
|
|
29
|
+
Hand-written repository fakes over deep mocks.
|
|
30
|
+
|
|
31
|
+
## Goldens
|
|
32
|
+
|
|
33
|
+
`matchesGoldenFile`; update with `flutter test --update-goldens` intentionally.
|
|
34
|
+
|
|
35
|
+
## Coverage
|
|
36
|
+
|
|
37
|
+
~80% on domain + state machines; every loading/success/error path; CI threshold on `lcov.info`.
|
|
38
|
+
|
|
39
|
+
Depth: `techne:flutter` skill; workflow: `techne:quality` skill.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.fs"
|
|
4
|
+
- "**/*.fsx"
|
|
5
|
+
---
|
|
6
|
+
# F# Coding Style
|
|
7
|
+
|
|
8
|
+
> Builds on the shared rules in `../common/coding-style.md`.
|
|
9
|
+
|
|
10
|
+
## Baseline
|
|
11
|
+
|
|
12
|
+
Idiomatic F#; immutability default; small focused modules.
|
|
13
|
+
|
|
14
|
+
## Domain types
|
|
15
|
+
|
|
16
|
+
Discriminated unions over deep class trees; records for labeled data; single-case unions for validated primitives.
|
|
17
|
+
|
|
18
|
+
## Updates
|
|
19
|
+
|
|
20
|
+
`with` expressions; persistent `list`/`map`/`set`; no mutable domain fields.
|
|
21
|
+
|
|
22
|
+
## Functions
|
|
23
|
+
|
|
24
|
+
Small composable functions; pipe `|>` for pipelines; pattern match over nested if/else; `Option` not null; `Result` for expected failures.
|
|
25
|
+
|
|
26
|
+
## Async
|
|
27
|
+
|
|
28
|
+
`task { }` for .NET interop; `async { }` for F# workflows; pass `CancellationToken` on public async APIs.
|
|
29
|
+
|
|
30
|
+
## Format
|
|
31
|
+
|
|
32
|
+
**fantomas**; trim unused `open`; group opens: System → Microsoft → third-party → project (blank line between groups, sorted within).
|
|
33
|
+
|
|
34
|
+
Depth: `techne:dotnet` skill.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.fs"
|
|
4
|
+
- "**/*.fsx"
|
|
5
|
+
- "**/*.fsproj"
|
|
6
|
+
- "**/*.sln"
|
|
7
|
+
- "**/*.slnx"
|
|
8
|
+
- "**/Directory.Build.props"
|
|
9
|
+
- "**/Directory.Build.targets"
|
|
10
|
+
---
|
|
11
|
+
# F# Hooks
|
|
12
|
+
|
|
13
|
+
> Builds on the shared rules in `../common/hooks.md`.
|
|
14
|
+
|
|
15
|
+
`EXONOUS_HOOK_PROFILE` / `EXONOUS_DISABLED_HOOKS`.
|
|
16
|
+
|
|
17
|
+
## PostToolUse
|
|
18
|
+
|
|
19
|
+
- **fantomas**
|
|
20
|
+
- **dotnet build**
|
|
21
|
+
- **dotnet test --no-build** on behavior edits (standard/strict)
|
|
22
|
+
|
|
23
|
+
## Stop
|
|
24
|
+
|
|
25
|
+
Strict: final build; warn on `appsettings*.json` changes.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.fs"
|
|
4
|
+
- "**/*.fsx"
|
|
5
|
+
---
|
|
6
|
+
# F# Patterns
|
|
7
|
+
|
|
8
|
+
> Builds on the shared rules in `../common/patterns.md`.
|
|
9
|
+
|
|
10
|
+
## Result railway
|
|
11
|
+
|
|
12
|
+
```fsharp
|
|
13
|
+
type OrderProblem =
|
|
14
|
+
| BadCustomer of string
|
|
15
|
+
| NoLines
|
|
16
|
+
|
|
17
|
+
let validateDraft (req: DraftOrder) : Result<ValidOrder, OrderProblem> =
|
|
18
|
+
if String.IsNullOrWhiteSpace req.CustomerId then Error(BadCustomer "CustomerId required")
|
|
19
|
+
elif List.isEmpty req.Lines then Error NoLines
|
|
20
|
+
else Ok { CustomerId = req.CustomerId; Lines = req.Lines }
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Option
|
|
24
|
+
|
|
25
|
+
`Option.map` / `bind` / `defaultValue` instead of null checks.
|
|
26
|
+
|
|
27
|
+
## Unions
|
|
28
|
+
|
|
29
|
+
Exhaustive `match` on business states (payment, fulfillment, etc.).
|
|
30
|
+
|
|
31
|
+
## Computation expressions
|
|
32
|
+
|
|
33
|
+
`result { }` / custom CEs for sequential validation.
|
|
34
|
+
|
|
35
|
+
## Modules
|
|
36
|
+
|
|
37
|
+
`[<RequireQualifiedAccess>]` on domain modules; functions over classes.
|
|
38
|
+
|
|
39
|
+
## DI
|
|
40
|
+
|
|
41
|
+
Record-of-functions or explicit parameters; partial application for pipelines.
|
|
42
|
+
|
|
43
|
+
Depth: `techne:dotnet` skill.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.fs"
|
|
4
|
+
- "**/*.fsx"
|
|
5
|
+
- "**/*.fsproj"
|
|
6
|
+
- "**/appsettings*.json"
|
|
7
|
+
---
|
|
8
|
+
# F# Security
|
|
9
|
+
|
|
10
|
+
> Builds on the shared rules in `../common/security.md`.
|
|
11
|
+
|
|
12
|
+
## Secrets
|
|
13
|
+
|
|
14
|
+
Configuration keys or env — fail if missing; no committed credentials.
|
|
15
|
+
|
|
16
|
+
## SQL
|
|
17
|
+
|
|
18
|
+
Parameterized queries only (ADO/Dapper/EF).
|
|
19
|
+
|
|
20
|
+
## Validation
|
|
21
|
+
|
|
22
|
+
Single-case DU wrappers (`ValidatedEmail`) created at boundaries.
|
|
23
|
+
|
|
24
|
+
## Auth
|
|
25
|
+
|
|
26
|
+
Use ASP.NET auth middleware/policies; no token logging.
|
|
27
|
+
|
|
28
|
+
## Errors
|
|
29
|
+
|
|
30
|
+
Generic client messages; detailed structured logs server-side.
|
|
31
|
+
|
|
32
|
+
Review: `security-review` skill / `exo-security` agent.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.fs"
|
|
4
|
+
- "**/*.fsx"
|
|
5
|
+
- "**/*.fsproj"
|
|
6
|
+
---
|
|
7
|
+
# F# Testing
|
|
8
|
+
|
|
9
|
+
> Builds on the shared rules in `../common/testing.md`.
|
|
10
|
+
|
|
11
|
+
## Stack
|
|
12
|
+
|
|
13
|
+
xUnit + FsUnit; **Unquote** for expressive asserts; **FsCheck** for properties; NSubstitute or function stubs; Testcontainers when needed.
|
|
14
|
+
|
|
15
|
+
## Names
|
|
16
|
+
|
|
17
|
+
Backtick behavior descriptions; mirror `src/` under `tests/`.
|
|
18
|
+
|
|
19
|
+
## Web
|
|
20
|
+
|
|
21
|
+
`WebApplicationFactory` through full HTTP pipeline.
|
|
22
|
+
|
|
23
|
+
## Coverage
|
|
24
|
+
|
|
25
|
+
~80% on domain/validation/auth failures; CI `dotnet test` with coverage when enabled.
|
|
26
|
+
|
|
27
|
+
Depth: `techne:quality` skill.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.go"
|
|
4
|
+
- "**/go.mod"
|
|
5
|
+
- "**/go.sum"
|
|
6
|
+
---
|
|
7
|
+
# Go Coding Style
|
|
8
|
+
|
|
9
|
+
> Builds on the shared rules in `../common/coding-style.md`.
|
|
10
|
+
|
|
11
|
+
## Format
|
|
12
|
+
|
|
13
|
+
**gofmt** and **goimports** — non-negotiable.
|
|
14
|
+
|
|
15
|
+
## APIs
|
|
16
|
+
|
|
17
|
+
- Parameters: interfaces; returns: concrete structs.
|
|
18
|
+
- Keep interfaces tiny (often 1–3 methods).
|
|
19
|
+
|
|
20
|
+
## Errors
|
|
21
|
+
|
|
22
|
+
Wrap with context:
|
|
23
|
+
|
|
24
|
+
```go
|
|
25
|
+
if err != nil {
|
|
26
|
+
return fmt.Errorf("persist profile: %w", err)
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Depth: `techne:go` skill.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.go"
|
|
4
|
+
- "**/go.mod"
|
|
5
|
+
- "**/go.sum"
|
|
6
|
+
---
|
|
7
|
+
# Go Hooks
|
|
8
|
+
|
|
9
|
+
> Builds on the shared rules in `../common/hooks.md`.
|
|
10
|
+
|
|
11
|
+
`EXONOUS_HOOK_PROFILE` (`minimal` | `standard` | `strict`); disable ids with `EXONOUS_DISABLED_HOOKS`.
|
|
12
|
+
|
|
13
|
+
## PostToolUse
|
|
14
|
+
|
|
15
|
+
- **gofmt** / **goimports** on touched `.go`
|
|
16
|
+
- **go vet** after edits
|
|
17
|
+
- **staticcheck** on changed packages when profile is `standard` or `strict`
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.go"
|
|
4
|
+
- "**/go.mod"
|
|
5
|
+
- "**/go.sum"
|
|
6
|
+
---
|
|
7
|
+
# Go Patterns
|
|
8
|
+
|
|
9
|
+
> Builds on the shared rules in `../common/patterns.md`.
|
|
10
|
+
|
|
11
|
+
## Functional options
|
|
12
|
+
|
|
13
|
+
```go
|
|
14
|
+
type Tune func(*Server)
|
|
15
|
+
|
|
16
|
+
func WithListenPort(p int) Tune {
|
|
17
|
+
return func(s *Server) { s.port = p }
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
func NewServer(tunes ...Tune) *Server {
|
|
21
|
+
s := &Server{port: 8080}
|
|
22
|
+
for _, t := range tunes {
|
|
23
|
+
t(s)
|
|
24
|
+
}
|
|
25
|
+
return s
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Interfaces
|
|
30
|
+
|
|
31
|
+
Declare small interfaces at the call site, not on the implementer.
|
|
32
|
+
|
|
33
|
+
## Wiring
|
|
34
|
+
|
|
35
|
+
Constructor injection:
|
|
36
|
+
|
|
37
|
+
```go
|
|
38
|
+
func NewBillingSvc(store LedgerStore, log Logger) *BillingSvc {
|
|
39
|
+
return &BillingSvc{store: store, log: log}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Depth: `techne:go` skill.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.go"
|
|
4
|
+
- "**/go.mod"
|
|
5
|
+
- "**/go.sum"
|
|
6
|
+
---
|
|
7
|
+
# Go Security
|
|
8
|
+
|
|
9
|
+
> Builds on the shared rules in `../common/security.md`.
|
|
10
|
+
|
|
11
|
+
## Secrets
|
|
12
|
+
|
|
13
|
+
```go
|
|
14
|
+
key := os.Getenv("BILLING_KEY")
|
|
15
|
+
if key == "" {
|
|
16
|
+
log.Fatal("BILLING_KEY not configured")
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Scan
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
gosec ./...
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Timeouts
|
|
27
|
+
|
|
28
|
+
Always bound I/O with context:
|
|
29
|
+
|
|
30
|
+
```go
|
|
31
|
+
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
|
|
32
|
+
defer cancel()
|
|
33
|
+
```
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.go"
|
|
4
|
+
- "**/go.mod"
|
|
5
|
+
- "**/go.sum"
|
|
6
|
+
---
|
|
7
|
+
# Go Testing
|
|
8
|
+
|
|
9
|
+
> Builds on the shared rules in `../common/testing.md`.
|
|
10
|
+
|
|
11
|
+
## Style
|
|
12
|
+
|
|
13
|
+
Table-driven tests with `go test`.
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
go test -race ./...
|
|
17
|
+
go test -cover ./...
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Depth: `techne:go` skill (testing reference).
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.java"
|
|
4
|
+
---
|
|
5
|
+
# Java Coding Style
|
|
6
|
+
|
|
7
|
+
> Builds on the shared rules in `../common/coding-style.md`.
|
|
8
|
+
|
|
9
|
+
## Format
|
|
10
|
+
|
|
11
|
+
- **google-java-format** or **Checkstyle** (Google/Sun) — match the repo.
|
|
12
|
+
- One public top-level type per file; stable member order (constants → fields → ctors → public → protected → private).
|
|
13
|
+
|
|
14
|
+
## Immutability
|
|
15
|
+
|
|
16
|
+
- `record` for values (16+); `final` fields by default.
|
|
17
|
+
- Expose copies: `List.copyOf`, `Map.copyOf`, `Set.copyOf`.
|
|
18
|
+
- Prefer new instances over in-place mutation.
|
|
19
|
+
|
|
20
|
+
```java
|
|
21
|
+
public record InvoiceLine(long sku, BigDecimal qty) {}
|
|
22
|
+
|
|
23
|
+
public class Cart {
|
|
24
|
+
private final long id;
|
|
25
|
+
private final List<InvoiceLine> lines;
|
|
26
|
+
public List<InvoiceLine> lines() { return List.copyOf(lines); }
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Naming
|
|
31
|
+
|
|
32
|
+
PascalCase types; camelCase members; `SCREAMING_SNAKE_CASE` constants; lowercase reverse-DNS packages.
|
|
33
|
+
|
|
34
|
+
## Modern syntax
|
|
35
|
+
|
|
36
|
+
Records, sealed hierarchies, pattern `instanceof`, text blocks, switch expressions, switch patterns (21+) where they clarify intent.
|
|
37
|
+
|
|
38
|
+
## Optional
|
|
39
|
+
|
|
40
|
+
- Return `Optional` from finders; chain `map` / `flatMap` / `orElseThrow`.
|
|
41
|
+
- Never `Optional` fields or parameters.
|
|
42
|
+
|
|
43
|
+
## Errors
|
|
44
|
+
|
|
45
|
+
Domain unchecked exceptions; narrow catches; messages include ids/context.
|
|
46
|
+
|
|
47
|
+
## Streams
|
|
48
|
+
|
|
49
|
+
Short pipelines (≤4 ops); method refs when clear; prefer loops for gnarly logic.
|
|
50
|
+
|
|
51
|
+
Depth: `techne:java` skill.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.java"
|
|
4
|
+
- "**/pom.xml"
|
|
5
|
+
- "**/build.gradle"
|
|
6
|
+
- "**/build.gradle.kts"
|
|
7
|
+
---
|
|
8
|
+
# Java Hooks
|
|
9
|
+
|
|
10
|
+
> Builds on the shared rules in `../common/hooks.md`.
|
|
11
|
+
|
|
12
|
+
`EXONOUS_HOOK_PROFILE` (`minimal` | `standard` | `strict`); `EXONOUS_DISABLED_HOOKS` for opt-out ids.
|
|
13
|
+
|
|
14
|
+
## PostToolUse
|
|
15
|
+
|
|
16
|
+
- **google-java-format** on edited `.java`
|
|
17
|
+
- **checkstyle** when the project enables it
|
|
18
|
+
- **`./mvnw compile`** or **`./gradlew compileJava`** after structural edits (strict profile)
|