@wazir-dev/cli 1.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/AGENTS.md +111 -0
- package/CHANGELOG.md +14 -0
- package/CONTRIBUTING.md +101 -0
- package/LICENSE +21 -0
- package/README.md +314 -0
- package/assets/composition-engine.mmd +34 -0
- package/assets/demo-script.sh +17 -0
- package/assets/logo-dark.svg +14 -0
- package/assets/logo.svg +14 -0
- package/assets/pipeline.mmd +39 -0
- package/assets/record-demo.sh +51 -0
- package/docs/README.md +51 -0
- package/docs/adapters/context-mode.md +60 -0
- package/docs/concepts/architecture.md +87 -0
- package/docs/concepts/artifact-model.md +60 -0
- package/docs/concepts/composition-engine.md +36 -0
- package/docs/concepts/indexing-and-recall.md +160 -0
- package/docs/concepts/observability.md +41 -0
- package/docs/concepts/roles-and-workflows.md +59 -0
- package/docs/concepts/terminology-policy.md +27 -0
- package/docs/getting-started/01-installation.md +78 -0
- package/docs/getting-started/02-first-run.md +102 -0
- package/docs/getting-started/03-adding-to-project.md +15 -0
- package/docs/getting-started/04-host-setup.md +15 -0
- package/docs/guides/ci-integration.md +15 -0
- package/docs/guides/creating-skills.md +15 -0
- package/docs/guides/expertise-module-authoring.md +15 -0
- package/docs/guides/hook-development.md +15 -0
- package/docs/guides/memory-and-learnings.md +34 -0
- package/docs/guides/multi-host-export.md +15 -0
- package/docs/guides/troubleshooting.md +101 -0
- package/docs/guides/writing-custom-roles.md +15 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
- package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
- package/docs/readmes/INDEX.md +99 -0
- package/docs/readmes/features/expertise/README.md +171 -0
- package/docs/readmes/features/exports/README.md +222 -0
- package/docs/readmes/features/hooks/README.md +103 -0
- package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
- package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
- package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
- package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
- package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
- package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
- package/docs/readmes/features/hooks/session-start.md +119 -0
- package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
- package/docs/readmes/features/roles/README.md +157 -0
- package/docs/readmes/features/roles/clarifier.md +152 -0
- package/docs/readmes/features/roles/content-author.md +190 -0
- package/docs/readmes/features/roles/designer.md +193 -0
- package/docs/readmes/features/roles/executor.md +184 -0
- package/docs/readmes/features/roles/learner.md +210 -0
- package/docs/readmes/features/roles/planner.md +182 -0
- package/docs/readmes/features/roles/researcher.md +164 -0
- package/docs/readmes/features/roles/reviewer.md +184 -0
- package/docs/readmes/features/roles/specifier.md +162 -0
- package/docs/readmes/features/roles/verifier.md +215 -0
- package/docs/readmes/features/schemas/README.md +178 -0
- package/docs/readmes/features/skills/README.md +63 -0
- package/docs/readmes/features/skills/brainstorming.md +96 -0
- package/docs/readmes/features/skills/debugging.md +148 -0
- package/docs/readmes/features/skills/design.md +120 -0
- package/docs/readmes/features/skills/prepare-next.md +109 -0
- package/docs/readmes/features/skills/run-audit.md +159 -0
- package/docs/readmes/features/skills/scan-project.md +109 -0
- package/docs/readmes/features/skills/self-audit.md +176 -0
- package/docs/readmes/features/skills/tdd.md +137 -0
- package/docs/readmes/features/skills/using-skills.md +92 -0
- package/docs/readmes/features/skills/verification.md +120 -0
- package/docs/readmes/features/skills/writing-plans.md +104 -0
- package/docs/readmes/features/tooling/README.md +320 -0
- package/docs/readmes/features/workflows/README.md +186 -0
- package/docs/readmes/features/workflows/author.md +181 -0
- package/docs/readmes/features/workflows/clarify.md +154 -0
- package/docs/readmes/features/workflows/design-review.md +171 -0
- package/docs/readmes/features/workflows/design.md +169 -0
- package/docs/readmes/features/workflows/discover.md +162 -0
- package/docs/readmes/features/workflows/execute.md +173 -0
- package/docs/readmes/features/workflows/learn.md +167 -0
- package/docs/readmes/features/workflows/plan-review.md +165 -0
- package/docs/readmes/features/workflows/plan.md +170 -0
- package/docs/readmes/features/workflows/prepare-next.md +167 -0
- package/docs/readmes/features/workflows/review.md +169 -0
- package/docs/readmes/features/workflows/run-audit.md +191 -0
- package/docs/readmes/features/workflows/spec-challenge.md +159 -0
- package/docs/readmes/features/workflows/specify.md +160 -0
- package/docs/readmes/features/workflows/verify.md +177 -0
- package/docs/readmes/packages/README.md +50 -0
- package/docs/readmes/packages/ajv.md +117 -0
- package/docs/readmes/packages/context-mode.md +118 -0
- package/docs/readmes/packages/gray-matter.md +116 -0
- package/docs/readmes/packages/node-test.md +137 -0
- package/docs/readmes/packages/yaml.md +112 -0
- package/docs/reference/configuration-reference.md +159 -0
- package/docs/reference/expertise-index.md +52 -0
- package/docs/reference/git-flow.md +43 -0
- package/docs/reference/hooks.md +87 -0
- package/docs/reference/host-exports.md +50 -0
- package/docs/reference/launch-checklist.md +172 -0
- package/docs/reference/marketplace-listings.md +76 -0
- package/docs/reference/release-process.md +34 -0
- package/docs/reference/roles-reference.md +77 -0
- package/docs/reference/skills.md +33 -0
- package/docs/reference/templates.md +29 -0
- package/docs/reference/tooling-cli.md +94 -0
- package/docs/truth-claims.yaml +222 -0
- package/expertise/PROGRESS.md +63 -0
- package/expertise/README.md +18 -0
- package/expertise/antipatterns/PROGRESS.md +56 -0
- package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
- package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
- package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
- package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
- package/expertise/antipatterns/backend/index.md +24 -0
- package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
- package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
- package/expertise/antipatterns/code/async-antipatterns.md +622 -0
- package/expertise/antipatterns/code/code-smells.md +1186 -0
- package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
- package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
- package/expertise/antipatterns/code/index.md +27 -0
- package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
- package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
- package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
- package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
- package/expertise/antipatterns/design/dark-patterns.md +1121 -0
- package/expertise/antipatterns/design/index.md +22 -0
- package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
- package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
- package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
- package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
- package/expertise/antipatterns/frontend/index.md +23 -0
- package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
- package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
- package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
- package/expertise/antipatterns/index.md +31 -0
- package/expertise/antipatterns/performance/index.md +20 -0
- package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
- package/expertise/antipatterns/performance/premature-optimization.md +623 -0
- package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
- package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
- package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
- package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
- package/expertise/antipatterns/process/index.md +23 -0
- package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
- package/expertise/antipatterns/security/index.md +20 -0
- package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
- package/expertise/antipatterns/security/security-theater.md +843 -0
- package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
- package/expertise/architecture/PROGRESS.md +70 -0
- package/expertise/architecture/data/caching-architecture.md +671 -0
- package/expertise/architecture/data/data-consistency.md +574 -0
- package/expertise/architecture/data/data-modeling.md +536 -0
- package/expertise/architecture/data/event-streams-and-queues.md +634 -0
- package/expertise/architecture/data/index.md +25 -0
- package/expertise/architecture/data/search-architecture.md +663 -0
- package/expertise/architecture/data/sql-vs-nosql.md +708 -0
- package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
- package/expertise/architecture/decisions/build-vs-buy.md +616 -0
- package/expertise/architecture/decisions/index.md +23 -0
- package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
- package/expertise/architecture/decisions/technology-selection.md +616 -0
- package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
- package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
- package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
- package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
- package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
- package/expertise/architecture/distributed/index.md +25 -0
- package/expertise/architecture/distributed/saga-pattern.md +797 -0
- package/expertise/architecture/foundations/architectural-thinking.md +460 -0
- package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
- package/expertise/architecture/foundations/design-principles-solid.md +649 -0
- package/expertise/architecture/foundations/domain-driven-design.md +719 -0
- package/expertise/architecture/foundations/index.md +25 -0
- package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
- package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
- package/expertise/architecture/index.md +34 -0
- package/expertise/architecture/integration/api-design-graphql.md +638 -0
- package/expertise/architecture/integration/api-design-grpc.md +804 -0
- package/expertise/architecture/integration/api-design-rest.md +892 -0
- package/expertise/architecture/integration/index.md +25 -0
- package/expertise/architecture/integration/third-party-integration.md +795 -0
- package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
- package/expertise/architecture/integration/websockets-realtime.md +791 -0
- package/expertise/architecture/mobile-architecture/index.md +22 -0
- package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
- package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
- package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
- package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
- package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
- package/expertise/architecture/patterns/event-driven.md +797 -0
- package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
- package/expertise/architecture/patterns/index.md +27 -0
- package/expertise/architecture/patterns/layered-architecture.md +736 -0
- package/expertise/architecture/patterns/microservices.md +753 -0
- package/expertise/architecture/patterns/modular-monolith.md +692 -0
- package/expertise/architecture/patterns/monolith.md +626 -0
- package/expertise/architecture/patterns/plugin-architecture.md +735 -0
- package/expertise/architecture/patterns/serverless.md +780 -0
- package/expertise/architecture/scaling/database-scaling.md +615 -0
- package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
- package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
- package/expertise/architecture/scaling/index.md +24 -0
- package/expertise/architecture/scaling/multi-tenancy.md +800 -0
- package/expertise/architecture/scaling/stateless-design.md +787 -0
- package/expertise/backend/embedded-firmware.md +625 -0
- package/expertise/backend/go.md +853 -0
- package/expertise/backend/index.md +24 -0
- package/expertise/backend/java-spring.md +448 -0
- package/expertise/backend/node-typescript.md +625 -0
- package/expertise/backend/python-fastapi.md +724 -0
- package/expertise/backend/rust.md +458 -0
- package/expertise/backend/solidity.md +711 -0
- package/expertise/composition-map.yaml +443 -0
- package/expertise/content/foundations/content-modeling.md +395 -0
- package/expertise/content/foundations/editorial-standards.md +449 -0
- package/expertise/content/foundations/index.md +24 -0
- package/expertise/content/foundations/microcopy.md +455 -0
- package/expertise/content/foundations/terminology-governance.md +509 -0
- package/expertise/content/index.md +34 -0
- package/expertise/content/patterns/accessibility-copy.md +518 -0
- package/expertise/content/patterns/index.md +24 -0
- package/expertise/content/patterns/notification-content.md +433 -0
- package/expertise/content/patterns/sample-content.md +486 -0
- package/expertise/content/patterns/state-copy.md +439 -0
- package/expertise/design/PROGRESS.md +58 -0
- package/expertise/design/disciplines/dark-mode-theming.md +577 -0
- package/expertise/design/disciplines/design-systems.md +595 -0
- package/expertise/design/disciplines/index.md +25 -0
- package/expertise/design/disciplines/information-architecture.md +800 -0
- package/expertise/design/disciplines/interaction-design.md +788 -0
- package/expertise/design/disciplines/responsive-design.md +552 -0
- package/expertise/design/disciplines/usability-testing.md +516 -0
- package/expertise/design/disciplines/user-research.md +792 -0
- package/expertise/design/foundations/accessibility-design.md +796 -0
- package/expertise/design/foundations/color-theory.md +797 -0
- package/expertise/design/foundations/iconography.md +795 -0
- package/expertise/design/foundations/index.md +26 -0
- package/expertise/design/foundations/motion-and-animation.md +653 -0
- package/expertise/design/foundations/rtl-design.md +585 -0
- package/expertise/design/foundations/spacing-and-layout.md +607 -0
- package/expertise/design/foundations/typography.md +800 -0
- package/expertise/design/foundations/visual-hierarchy.md +761 -0
- package/expertise/design/index.md +32 -0
- package/expertise/design/patterns/authentication-flows.md +474 -0
- package/expertise/design/patterns/content-consumption.md +789 -0
- package/expertise/design/patterns/data-display.md +618 -0
- package/expertise/design/patterns/e-commerce.md +1494 -0
- package/expertise/design/patterns/feedback-and-states.md +642 -0
- package/expertise/design/patterns/forms-and-input.md +819 -0
- package/expertise/design/patterns/gamification.md +801 -0
- package/expertise/design/patterns/index.md +31 -0
- package/expertise/design/patterns/microinteractions.md +449 -0
- package/expertise/design/patterns/navigation.md +800 -0
- package/expertise/design/patterns/notifications.md +705 -0
- package/expertise/design/patterns/onboarding.md +700 -0
- package/expertise/design/patterns/search-and-filter.md +601 -0
- package/expertise/design/patterns/settings-and-preferences.md +768 -0
- package/expertise/design/patterns/social-and-community.md +748 -0
- package/expertise/design/platforms/desktop-native.md +612 -0
- package/expertise/design/platforms/index.md +25 -0
- package/expertise/design/platforms/mobile-android.md +825 -0
- package/expertise/design/platforms/mobile-cross-platform.md +983 -0
- package/expertise/design/platforms/mobile-ios.md +699 -0
- package/expertise/design/platforms/tablet.md +794 -0
- package/expertise/design/platforms/web-dashboard.md +790 -0
- package/expertise/design/platforms/web-responsive.md +550 -0
- package/expertise/design/psychology/behavioral-nudges.md +449 -0
- package/expertise/design/psychology/cognitive-load.md +1191 -0
- package/expertise/design/psychology/error-psychology.md +778 -0
- package/expertise/design/psychology/index.md +22 -0
- package/expertise/design/psychology/persuasive-design.md +736 -0
- package/expertise/design/psychology/user-mental-models.md +623 -0
- package/expertise/design/tooling/open-pencil.md +266 -0
- package/expertise/frontend/angular.md +1073 -0
- package/expertise/frontend/desktop-electron.md +546 -0
- package/expertise/frontend/flutter.md +782 -0
- package/expertise/frontend/index.md +27 -0
- package/expertise/frontend/native-android.md +409 -0
- package/expertise/frontend/native-ios.md +490 -0
- package/expertise/frontend/react-native.md +1160 -0
- package/expertise/frontend/react.md +808 -0
- package/expertise/frontend/vue.md +1089 -0
- package/expertise/humanize/domain-rules-code.md +79 -0
- package/expertise/humanize/domain-rules-content.md +67 -0
- package/expertise/humanize/domain-rules-technical-docs.md +56 -0
- package/expertise/humanize/index.md +35 -0
- package/expertise/humanize/self-audit-checklist.md +87 -0
- package/expertise/humanize/sentence-patterns.md +218 -0
- package/expertise/humanize/vocabulary-blacklist.md +105 -0
- package/expertise/i18n/PROGRESS.md +65 -0
- package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
- package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
- package/expertise/i18n/advanced/complex-scripts.md +30 -0
- package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
- package/expertise/i18n/advanced/testing-i18n.md +28 -0
- package/expertise/i18n/content/content-adaptation.md +23 -0
- package/expertise/i18n/content/locale-specific-formatting.md +23 -0
- package/expertise/i18n/content/machine-translation-integration.md +28 -0
- package/expertise/i18n/content/translation-management.md +29 -0
- package/expertise/i18n/foundations/date-time-calendars.md +67 -0
- package/expertise/i18n/foundations/i18n-architecture.md +272 -0
- package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
- package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
- package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
- package/expertise/i18n/foundations/string-externalization.md +236 -0
- package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
- package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
- package/expertise/i18n/index.md +38 -0
- package/expertise/i18n/platform/backend-i18n.md +31 -0
- package/expertise/i18n/platform/flutter-i18n.md +148 -0
- package/expertise/i18n/platform/native-android-i18n.md +36 -0
- package/expertise/i18n/platform/native-ios-i18n.md +36 -0
- package/expertise/i18n/platform/react-i18n.md +103 -0
- package/expertise/i18n/platform/web-css-i18n.md +81 -0
- package/expertise/i18n/rtl/arabic-specific.md +175 -0
- package/expertise/i18n/rtl/hebrew-specific.md +149 -0
- package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
- package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
- package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
- package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
- package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
- package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
- package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
- package/expertise/i18n/rtl/rtl-typography.md +160 -0
- package/expertise/index.md +113 -0
- package/expertise/index.yaml +216 -0
- package/expertise/infrastructure/cloud-aws.md +597 -0
- package/expertise/infrastructure/cloud-gcp.md +599 -0
- package/expertise/infrastructure/cybersecurity.md +816 -0
- package/expertise/infrastructure/database-mongodb.md +447 -0
- package/expertise/infrastructure/database-postgres.md +400 -0
- package/expertise/infrastructure/devops-cicd.md +787 -0
- package/expertise/infrastructure/index.md +27 -0
- package/expertise/performance/PROGRESS.md +50 -0
- package/expertise/performance/backend/api-latency.md +1204 -0
- package/expertise/performance/backend/background-jobs.md +506 -0
- package/expertise/performance/backend/connection-pooling.md +1209 -0
- package/expertise/performance/backend/database-query-optimization.md +515 -0
- package/expertise/performance/backend/index.md +23 -0
- package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
- package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
- package/expertise/performance/foundations/caching-strategies.md +489 -0
- package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
- package/expertise/performance/foundations/index.md +24 -0
- package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
- package/expertise/performance/foundations/memory-management.md +964 -0
- package/expertise/performance/foundations/performance-budgets.md +1314 -0
- package/expertise/performance/index.md +31 -0
- package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
- package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
- package/expertise/performance/infrastructure/index.md +22 -0
- package/expertise/performance/infrastructure/load-balancing.md +1081 -0
- package/expertise/performance/infrastructure/observability.md +1079 -0
- package/expertise/performance/mobile/index.md +23 -0
- package/expertise/performance/mobile/mobile-animations.md +544 -0
- package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
- package/expertise/performance/mobile/mobile-network.md +452 -0
- package/expertise/performance/mobile/mobile-rendering.md +599 -0
- package/expertise/performance/mobile/mobile-startup-time.md +505 -0
- package/expertise/performance/platform-specific/flutter-performance.md +647 -0
- package/expertise/performance/platform-specific/index.md +22 -0
- package/expertise/performance/platform-specific/node-performance.md +1307 -0
- package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
- package/expertise/performance/platform-specific/react-performance.md +1403 -0
- package/expertise/performance/web/bundle-optimization.md +1239 -0
- package/expertise/performance/web/image-and-media.md +636 -0
- package/expertise/performance/web/index.md +24 -0
- package/expertise/performance/web/network-optimization.md +1133 -0
- package/expertise/performance/web/rendering-performance.md +1098 -0
- package/expertise/performance/web/ssr-and-hydration.md +918 -0
- package/expertise/performance/web/web-vitals.md +1374 -0
- package/expertise/quality/accessibility.md +985 -0
- package/expertise/quality/evidence-based-verification.md +499 -0
- package/expertise/quality/index.md +24 -0
- package/expertise/quality/ml-model-audit.md +614 -0
- package/expertise/quality/performance.md +600 -0
- package/expertise/quality/testing-api.md +891 -0
- package/expertise/quality/testing-mobile.md +496 -0
- package/expertise/quality/testing-web.md +849 -0
- package/expertise/security/PROGRESS.md +54 -0
- package/expertise/security/agentic-identity.md +540 -0
- package/expertise/security/compliance-frameworks.md +601 -0
- package/expertise/security/data/data-encryption.md +364 -0
- package/expertise/security/data/data-privacy-gdpr.md +692 -0
- package/expertise/security/data/database-security.md +1171 -0
- package/expertise/security/data/index.md +22 -0
- package/expertise/security/data/pii-handling.md +531 -0
- package/expertise/security/foundations/authentication.md +1041 -0
- package/expertise/security/foundations/authorization.md +603 -0
- package/expertise/security/foundations/cryptography.md +1001 -0
- package/expertise/security/foundations/index.md +25 -0
- package/expertise/security/foundations/owasp-top-10.md +1354 -0
- package/expertise/security/foundations/secrets-management.md +1217 -0
- package/expertise/security/foundations/secure-sdlc.md +700 -0
- package/expertise/security/foundations/supply-chain-security.md +698 -0
- package/expertise/security/index.md +31 -0
- package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
- package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
- package/expertise/security/infrastructure/container-security.md +721 -0
- package/expertise/security/infrastructure/incident-response.md +1295 -0
- package/expertise/security/infrastructure/index.md +24 -0
- package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
- package/expertise/security/infrastructure/network-security.md +1337 -0
- package/expertise/security/mobile/index.md +23 -0
- package/expertise/security/mobile/mobile-android-security.md +1218 -0
- package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
- package/expertise/security/mobile/mobile-data-storage.md +1265 -0
- package/expertise/security/mobile/mobile-ios-security.md +1401 -0
- package/expertise/security/mobile/mobile-network-security.md +1520 -0
- package/expertise/security/smart-contract-security.md +594 -0
- package/expertise/security/testing/index.md +22 -0
- package/expertise/security/testing/penetration-testing.md +1258 -0
- package/expertise/security/testing/security-code-review.md +1765 -0
- package/expertise/security/testing/threat-modeling.md +1074 -0
- package/expertise/security/testing/vulnerability-scanning.md +1062 -0
- package/expertise/security/web/api-security.md +586 -0
- package/expertise/security/web/cors-and-headers.md +433 -0
- package/expertise/security/web/csrf.md +562 -0
- package/expertise/security/web/file-upload.md +1477 -0
- package/expertise/security/web/index.md +25 -0
- package/expertise/security/web/injection.md +1375 -0
- package/expertise/security/web/session-management.md +1101 -0
- package/expertise/security/web/xss.md +1158 -0
- package/exports/README.md +17 -0
- package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
- package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
- package/exports/hosts/claude/.claude/agents/designer.md +55 -0
- package/exports/hosts/claude/.claude/agents/executor.md +55 -0
- package/exports/hosts/claude/.claude/agents/learner.md +51 -0
- package/exports/hosts/claude/.claude/agents/planner.md +53 -0
- package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
- package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
- package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
- package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
- package/exports/hosts/claude/.claude/commands/author.md +42 -0
- package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
- package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
- package/exports/hosts/claude/.claude/commands/design.md +44 -0
- package/exports/hosts/claude/.claude/commands/discover.md +37 -0
- package/exports/hosts/claude/.claude/commands/execute.md +48 -0
- package/exports/hosts/claude/.claude/commands/learn.md +38 -0
- package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
- package/exports/hosts/claude/.claude/commands/plan.md +39 -0
- package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
- package/exports/hosts/claude/.claude/commands/review.md +40 -0
- package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
- package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
- package/exports/hosts/claude/.claude/commands/specify.md +38 -0
- package/exports/hosts/claude/.claude/commands/verify.md +37 -0
- package/exports/hosts/claude/.claude/settings.json +34 -0
- package/exports/hosts/claude/CLAUDE.md +19 -0
- package/exports/hosts/claude/export.manifest.json +38 -0
- package/exports/hosts/claude/host-package.json +67 -0
- package/exports/hosts/codex/AGENTS.md +19 -0
- package/exports/hosts/codex/export.manifest.json +38 -0
- package/exports/hosts/codex/host-package.json +41 -0
- package/exports/hosts/cursor/.cursor/hooks.json +16 -0
- package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
- package/exports/hosts/cursor/export.manifest.json +38 -0
- package/exports/hosts/cursor/host-package.json +42 -0
- package/exports/hosts/gemini/GEMINI.md +19 -0
- package/exports/hosts/gemini/export.manifest.json +38 -0
- package/exports/hosts/gemini/host-package.json +41 -0
- package/hooks/README.md +18 -0
- package/hooks/definitions/loop_cap_guard.yaml +21 -0
- package/hooks/definitions/post_tool_capture.yaml +24 -0
- package/hooks/definitions/pre_compact_summary.yaml +19 -0
- package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
- package/hooks/definitions/protected_path_write_guard.yaml +19 -0
- package/hooks/definitions/session_start.yaml +19 -0
- package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
- package/hooks/loop-cap-guard +17 -0
- package/hooks/post-tool-lint +36 -0
- package/hooks/protected-path-write-guard +17 -0
- package/hooks/session-start +41 -0
- package/llms-full.txt +2355 -0
- package/llms.txt +43 -0
- package/package.json +79 -0
- package/roles/README.md +20 -0
- package/roles/clarifier.md +42 -0
- package/roles/content-author.md +63 -0
- package/roles/designer.md +55 -0
- package/roles/executor.md +55 -0
- package/roles/learner.md +51 -0
- package/roles/planner.md +53 -0
- package/roles/researcher.md +43 -0
- package/roles/reviewer.md +54 -0
- package/roles/specifier.md +47 -0
- package/roles/verifier.md +71 -0
- package/schemas/README.md +24 -0
- package/schemas/accepted-learning.schema.json +20 -0
- package/schemas/author-artifact.schema.json +156 -0
- package/schemas/clarification.schema.json +19 -0
- package/schemas/design-artifact.schema.json +80 -0
- package/schemas/docs-claim.schema.json +18 -0
- package/schemas/export-manifest.schema.json +20 -0
- package/schemas/hook.schema.json +67 -0
- package/schemas/host-export-package.schema.json +18 -0
- package/schemas/implementation-plan.schema.json +19 -0
- package/schemas/proposed-learning.schema.json +19 -0
- package/schemas/research.schema.json +18 -0
- package/schemas/review.schema.json +29 -0
- package/schemas/run-manifest.schema.json +18 -0
- package/schemas/spec-challenge.schema.json +18 -0
- package/schemas/spec.schema.json +20 -0
- package/schemas/usage.schema.json +102 -0
- package/schemas/verification-proof.schema.json +29 -0
- package/schemas/wazir-manifest.schema.json +173 -0
- package/skills/README.md +40 -0
- package/skills/brainstorming/SKILL.md +77 -0
- package/skills/debugging/SKILL.md +50 -0
- package/skills/design/SKILL.md +61 -0
- package/skills/dispatching-parallel-agents/SKILL.md +128 -0
- package/skills/executing-plans/SKILL.md +70 -0
- package/skills/finishing-a-development-branch/SKILL.md +169 -0
- package/skills/humanize/SKILL.md +123 -0
- package/skills/init-pipeline/SKILL.md +124 -0
- package/skills/prepare-next/SKILL.md +20 -0
- package/skills/receiving-code-review/SKILL.md +123 -0
- package/skills/requesting-code-review/SKILL.md +105 -0
- package/skills/requesting-code-review/code-reviewer.md +108 -0
- package/skills/run-audit/SKILL.md +197 -0
- package/skills/scan-project/SKILL.md +41 -0
- package/skills/self-audit/SKILL.md +153 -0
- package/skills/subagent-driven-development/SKILL.md +154 -0
- package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
- package/skills/subagent-driven-development/implementer-prompt.md +102 -0
- package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/skills/tdd/SKILL.md +23 -0
- package/skills/using-git-worktrees/SKILL.md +163 -0
- package/skills/using-skills/SKILL.md +95 -0
- package/skills/verification/SKILL.md +22 -0
- package/skills/wazir/SKILL.md +463 -0
- package/skills/writing-plans/SKILL.md +30 -0
- package/skills/writing-skills/SKILL.md +157 -0
- package/skills/writing-skills/anthropic-best-practices.md +122 -0
- package/skills/writing-skills/persuasion-principles.md +50 -0
- package/templates/README.md +20 -0
- package/templates/artifacts/README.md +10 -0
- package/templates/artifacts/accepted-learning.md +19 -0
- package/templates/artifacts/accepted-learning.template.json +12 -0
- package/templates/artifacts/author.md +74 -0
- package/templates/artifacts/author.template.json +19 -0
- package/templates/artifacts/clarification.md +21 -0
- package/templates/artifacts/clarification.template.json +12 -0
- package/templates/artifacts/execute-notes.md +19 -0
- package/templates/artifacts/implementation-plan.md +21 -0
- package/templates/artifacts/implementation-plan.template.json +11 -0
- package/templates/artifacts/learning-proposal.md +19 -0
- package/templates/artifacts/next-run-handoff.md +21 -0
- package/templates/artifacts/plan-review.md +19 -0
- package/templates/artifacts/proposed-learning.template.json +12 -0
- package/templates/artifacts/research.md +21 -0
- package/templates/artifacts/research.template.json +12 -0
- package/templates/artifacts/review-findings.md +19 -0
- package/templates/artifacts/review.template.json +11 -0
- package/templates/artifacts/run-manifest.template.json +8 -0
- package/templates/artifacts/spec-challenge.md +19 -0
- package/templates/artifacts/spec-challenge.template.json +11 -0
- package/templates/artifacts/spec.md +21 -0
- package/templates/artifacts/spec.template.json +12 -0
- package/templates/artifacts/verification-proof.md +19 -0
- package/templates/artifacts/verification-proof.template.json +11 -0
- package/templates/examples/accepted-learning.example.json +14 -0
- package/templates/examples/author.example.json +152 -0
- package/templates/examples/clarification.example.json +15 -0
- package/templates/examples/docs-claim.example.json +8 -0
- package/templates/examples/export-manifest.example.json +7 -0
- package/templates/examples/host-export-package.example.json +11 -0
- package/templates/examples/implementation-plan.example.json +17 -0
- package/templates/examples/proposed-learning.example.json +13 -0
- package/templates/examples/research.example.json +15 -0
- package/templates/examples/research.example.md +6 -0
- package/templates/examples/review.example.json +17 -0
- package/templates/examples/run-manifest.example.json +9 -0
- package/templates/examples/spec-challenge.example.json +14 -0
- package/templates/examples/spec.example.json +21 -0
- package/templates/examples/verification-proof.example.json +21 -0
- package/templates/examples/wazir-manifest.example.yaml +65 -0
- package/templates/task-definition-schema.md +99 -0
- package/tooling/README.md +20 -0
- package/tooling/src/adapters/context-mode.js +50 -0
- package/tooling/src/capture/command.js +376 -0
- package/tooling/src/capture/store.js +99 -0
- package/tooling/src/capture/usage.js +270 -0
- package/tooling/src/checks/branches.js +50 -0
- package/tooling/src/checks/brand-truth.js +110 -0
- package/tooling/src/checks/changelog.js +231 -0
- package/tooling/src/checks/command-registry.js +36 -0
- package/tooling/src/checks/commits.js +102 -0
- package/tooling/src/checks/docs-drift.js +103 -0
- package/tooling/src/checks/docs-truth.js +201 -0
- package/tooling/src/checks/runtime-surface.js +156 -0
- package/tooling/src/cli.js +116 -0
- package/tooling/src/command-options.js +56 -0
- package/tooling/src/commands/validate.js +320 -0
- package/tooling/src/doctor/command.js +91 -0
- package/tooling/src/export/command.js +77 -0
- package/tooling/src/export/compiler.js +498 -0
- package/tooling/src/guards/loop-cap-guard.js +52 -0
- package/tooling/src/guards/protected-path-write-guard.js +67 -0
- package/tooling/src/index/command.js +152 -0
- package/tooling/src/index/storage.js +1061 -0
- package/tooling/src/index/summarizers.js +261 -0
- package/tooling/src/loaders.js +18 -0
- package/tooling/src/project-root.js +22 -0
- package/tooling/src/recall/command.js +225 -0
- package/tooling/src/schema-validator.js +30 -0
- package/tooling/src/state-root.js +40 -0
- package/tooling/src/status/command.js +71 -0
- package/wazir.manifest.yaml +135 -0
- package/workflows/README.md +19 -0
- package/workflows/author.md +42 -0
- package/workflows/clarify.md +38 -0
- package/workflows/design-review.md +46 -0
- package/workflows/design.md +44 -0
- package/workflows/discover.md +37 -0
- package/workflows/execute.md +48 -0
- package/workflows/learn.md +38 -0
- package/workflows/plan-review.md +42 -0
- package/workflows/plan.md +39 -0
- package/workflows/prepare-next.md +37 -0
- package/workflows/review.md +40 -0
- package/workflows/run-audit.md +41 -0
- package/workflows/spec-challenge.md +41 -0
- package/workflows/specify.md +38 -0
- package/workflows/verify.md +37 -0
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
# Rust -- Expertise Module
|
|
2
|
+
|
|
3
|
+
> A Rust developer builds high-performance, memory-safe systems software -- from backend web services and CLI tools to embedded systems and infrastructure. The scope spans safe concurrency, zero-cost abstractions, FFI interop, and production deployment of compiled binaries with minimal runtime overhead.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Core Patterns & Conventions
|
|
8
|
+
|
|
9
|
+
### Project Structure
|
|
10
|
+
|
|
11
|
+
Standard Cargo layout (per the Cargo Book):
|
|
12
|
+
```
|
|
13
|
+
my-project/
|
|
14
|
+
Cargo.toml
|
|
15
|
+
src/main.rs # Binary crate root
|
|
16
|
+
src/lib.rs # Library crate root
|
|
17
|
+
src/bin/ # Additional binaries
|
|
18
|
+
tests/ # Integration tests
|
|
19
|
+
benches/ # Benchmarks (Criterion)
|
|
20
|
+
examples/ # Runnable examples
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Cargo Workspace** for larger projects -- share `Cargo.lock` and output directory:
|
|
24
|
+
```toml
|
|
25
|
+
[workspace]
|
|
26
|
+
resolver = "2"
|
|
27
|
+
members = ["crates/core", "crates/api", "crates/cli", "crates/db", "crates/common"]
|
|
28
|
+
|
|
29
|
+
[workspace.dependencies]
|
|
30
|
+
tokio = { version = "1.44", features = ["full"] }
|
|
31
|
+
serde = { version = "1.0", features = ["derive"] }
|
|
32
|
+
tracing = "0.1"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Centralise dependencies in `[workspace.dependencies]` and inherit with `dep.workspace = true`. Prevents version drift, cuts build times 40-60%. Start with 2-3 crates; split only when coupling causes genuine pain.
|
|
36
|
+
|
|
37
|
+
### Naming Conventions (RFC 430 & Rust API Guidelines)
|
|
38
|
+
|
|
39
|
+
| Item | Convention | Example |
|
|
40
|
+
|------|-----------|---------|
|
|
41
|
+
| Types, Traits, Enums | `UpperCamelCase` | `HttpRequest`, `IntoIterator` |
|
|
42
|
+
| Functions, methods, variables | `snake_case` | `process_order` |
|
|
43
|
+
| Constants, statics | `SCREAMING_SNAKE_CASE` | `MAX_RETRIES` |
|
|
44
|
+
| Modules, crate names | `snake_case`, no `-rs` suffix | `auth_service` |
|
|
45
|
+
| Acronyms in `snake_case` | Lowercase | `is_xid_start` |
|
|
46
|
+
|
|
47
|
+
Iterator methods: `iter()`, `iter_mut()`, `into_iter()`. Conversions: `as_`, `to_`, `into_` prefixes.
|
|
48
|
+
|
|
49
|
+
### Architecture Patterns
|
|
50
|
+
|
|
51
|
+
**Layered / Hexagonal** -- Keep `core` crate framework-agnostic. Define traits (ports) in the domain; implement in adapter crates. The domain never imports infrastructure:
|
|
52
|
+
```rust
|
|
53
|
+
#[async_trait]
|
|
54
|
+
pub trait OrderRepository: Send + Sync {
|
|
55
|
+
async fn find_by_id(&self, id: OrderId) -> Result<Option<Order>, DomainError>;
|
|
56
|
+
async fn save(&self, order: &Order) -> Result<(), DomainError>;
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Actor Model** -- Actix provides actors that own their state, communicate via messages, and run on an async executor. Good for stateful, concurrent systems with isolated failure domains.
|
|
61
|
+
|
|
62
|
+
### Web Frameworks
|
|
63
|
+
|
|
64
|
+
- **Axum (v0.8)** -- Built by Tokio team, uses Tower middleware. Minimal by design. Best Tokio ecosystem integration. Default choice for most projects.
|
|
65
|
+
- **Actix Web (v4.12)** -- Highest raw throughput (~19-20K req/s vs ~17-18K for Axum). Largest middleware ecosystem. More complex.
|
|
66
|
+
- **Rocket (v0.5)** -- Simplest DX, type-safe routing, built-in form handling. Smallest community.
|
|
67
|
+
|
|
68
|
+
### Async Patterns (Tokio)
|
|
69
|
+
|
|
70
|
+
Use Tokio (v1.44+) as the default runtime. Critical rules:
|
|
71
|
+
- Tasks yield only at `.await` -- CPU work >100us without `.await` blocks the executor.
|
|
72
|
+
- Use `tokio::task::spawn_blocking` for synchronous/CPU-heavy work.
|
|
73
|
+
- Use `tokio::sync::mpsc` channels for inter-task communication.
|
|
74
|
+
- Never hold a `MutexGuard` across `.await` -- lock, copy, drop, then await.
|
|
75
|
+
- Prefer `async fn` in traits (stable since Rust 1.75) over `Pin<Box<dyn Future>>`.
|
|
76
|
+
|
|
77
|
+
### Error Handling
|
|
78
|
+
|
|
79
|
+
**Libraries** -- `thiserror` (v2.0) for structured, matchable error enums:
|
|
80
|
+
```rust
|
|
81
|
+
#[derive(thiserror::Error, Debug)]
|
|
82
|
+
pub enum ServiceError {
|
|
83
|
+
#[error("entity not found: {id}")]
|
|
84
|
+
NotFound { id: String },
|
|
85
|
+
#[error(transparent)]
|
|
86
|
+
Database(#[from] sqlx::Error),
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Applications** -- `anyhow` (v2.0) for ergonomic propagation with `.context()`. Always use `#[from]`/`#[source]` to preserve error chains. Keep variants under ~10 per enum.
|
|
91
|
+
|
|
92
|
+
### Ownership and Borrowing
|
|
93
|
+
|
|
94
|
+
- Prefer borrowing (`&T`) over cloning. Use `Cow<'a, str>` when allocation is conditional.
|
|
95
|
+
- One `&mut T` XOR many `&T` -- never both simultaneously.
|
|
96
|
+
- `Arc<T>` for shared ownership across threads; `Weak` to break cycles.
|
|
97
|
+
- Accept `&str` or `impl AsRef<str>` for read-only string parameters; `impl Into<String>` when storing.
|
|
98
|
+
|
|
99
|
+
### Trait Design Patterns
|
|
100
|
+
|
|
101
|
+
**Newtype** -- Wrap primitives for type safety at zero cost: `pub struct UserId(pub Uuid);`
|
|
102
|
+
**Extension Traits** -- Add methods to foreign types without orphan rule violations.
|
|
103
|
+
**Builder Pattern** -- For structs with many optional fields; `.build()` returns `Result<T>`.
|
|
104
|
+
|
|
105
|
+
### Logging and Observability
|
|
106
|
+
|
|
107
|
+
Use `tracing` (not `log`). Provides structured spans and events for async contexts:
|
|
108
|
+
```rust
|
|
109
|
+
#[instrument(skip(db), fields(user_id = %user_id))]
|
|
110
|
+
async fn get_user(db: &Pool, user_id: Uuid) -> Result<User> {
|
|
111
|
+
info!("fetching user");
|
|
112
|
+
db.fetch_user(user_id).await
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
- `tracing-subscriber` with JSON layer for production.
|
|
116
|
+
- `tracing-opentelemetry` for distributed tracing.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Anti-Patterns & Pitfalls
|
|
121
|
+
|
|
122
|
+
### 1. Excessive `.clone()` to Appease the Borrow Checker
|
|
123
|
+
Each clone allocates and copies. Habitual cloning defeats zero-copy and causes slowdowns in hot paths. **Fix:** Restructure to use references, `Cow`, or `Arc`.
|
|
124
|
+
|
|
125
|
+
### 2. `.unwrap()` / `.expect()` in Production Code
|
|
126
|
+
Both panic on `None`/`Err`, crashing the process. In async servers, one panic kills a worker thread. **Fix:** Use `?`, `map`, `and_then`. Reserve unwrap for tests.
|
|
127
|
+
|
|
128
|
+
### 3. Blocking the Async Runtime
|
|
129
|
+
Synchronous I/O or CPU-heavy work (>100us) without `.await` starves all tasks on that worker. **Fix:** `tokio::task::spawn_blocking` or `tokio::fs`.
|
|
130
|
+
|
|
131
|
+
### 4. Holding a Mutex Guard Across `.await`
|
|
132
|
+
`std::sync::MutexGuard` is `!Send`. Even `tokio::sync::Mutex` guards across await points risk deadlocks. **Fix:** Lock, copy, drop guard, then await.
|
|
133
|
+
|
|
134
|
+
### 5. Stringly-Typed Errors
|
|
135
|
+
`Box<dyn Error>` everywhere prevents programmatic recovery. **Fix:** `thiserror` enums in libraries, `anyhow` in applications.
|
|
136
|
+
|
|
137
|
+
### 6. Ignoring Clippy Warnings
|
|
138
|
+
Clippy catches real bugs: ignored `Result` values, suboptimal iterator chains, unnecessary allocations. **Fix:** `cargo clippy -- -D warnings` in CI.
|
|
139
|
+
|
|
140
|
+
### 7. Premature `unsafe`
|
|
141
|
+
Each `unsafe` block opts out of compiler guarantees. Bugs cause UB. **Fix:** Exhaust safe alternatives. Document `// SAFETY:` invariants. Audit with Miri.
|
|
142
|
+
|
|
143
|
+
### 8. Over-Abstracting with Generics
|
|
144
|
+
Excessive `where` clauses create unreadable signatures and monomorphisation bloat. **Fix:** `impl Trait` for simple cases; `dyn Trait` when static dispatch is unnecessary.
|
|
145
|
+
|
|
146
|
+
### 9. `Rc`/`Arc` Reference Cycles
|
|
147
|
+
Parent holding `Arc<Child>` + child holding `Arc<Parent>` leaks both. **Fix:** `Weak` for back-pointers. Arena allocators for graphs.
|
|
148
|
+
|
|
149
|
+
### 10. Applying OOP Inheritance Patterns
|
|
150
|
+
Rust has no inheritance. Forcing class hierarchies via `Any` downcasting fights ownership. **Fix:** Composition over inheritance. Enums for closed sets, traits for open extension.
|
|
151
|
+
|
|
152
|
+
### 11. Large Enum Variants Wasting Stack Space
|
|
153
|
+
An enum is as large as its biggest variant. One `[u8; 4096]` variant makes every instance 4KB+. **Fix:** `Box` large variants.
|
|
154
|
+
|
|
155
|
+
### 12. Forgetting Async Cancellation Safety
|
|
156
|
+
When a future is dropped via `select!`, partial work may be lost. **Fix:** Design cancellation-safe operations. Document which futures are safe to cancel.
|
|
157
|
+
|
|
158
|
+
### 13. Using `String` When `&str` Suffices
|
|
159
|
+
Accepting `String` forces callers to allocate even when they have a `&str`. **Fix:** Accept `&str` for read-only parameters.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Testing Strategy
|
|
164
|
+
|
|
165
|
+
### Unit Tests (Inline `#[cfg(test)]`)
|
|
166
|
+
Place in the same file; access private functions. Use `#[tokio::test]` for async:
|
|
167
|
+
```rust
|
|
168
|
+
#[cfg(test)]
|
|
169
|
+
mod tests {
|
|
170
|
+
use super::*;
|
|
171
|
+
#[test]
|
|
172
|
+
fn valid_email() { assert!(validate_email("user@example.com")); }
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Integration Tests (`tests/` Directory)
|
|
177
|
+
Each file compiles as a separate crate, accesses only the public API. Use `testcontainers` for real database instances in Docker.
|
|
178
|
+
|
|
179
|
+
### Property-Based Testing (proptest)
|
|
180
|
+
Test invariants across random inputs with automatic shrinking:
|
|
181
|
+
```rust
|
|
182
|
+
proptest! {
|
|
183
|
+
#[test]
|
|
184
|
+
fn parse_roundtrip(s in "[a-zA-Z0-9]{1,64}") {
|
|
185
|
+
let parsed = MyType::parse(&s).unwrap();
|
|
186
|
+
assert_eq!(parsed.to_string(), s);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Mocking (mockall)
|
|
192
|
+
Generate mock trait implementations: `#[automock]` on trait definitions. Set expectations with `.expect_method().returning(|_| ...)`.
|
|
193
|
+
|
|
194
|
+
### Benchmark Testing (Criterion)
|
|
195
|
+
Statistically rigorous micro-benchmarks with regression detection. Place in `benches/` directory.
|
|
196
|
+
|
|
197
|
+
### Doc Tests
|
|
198
|
+
Code in `///` comments runs as tests via `cargo test`. Ensures examples stay in sync with the API.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Performance Considerations
|
|
203
|
+
|
|
204
|
+
### Zero-Cost Abstractions
|
|
205
|
+
Iterators, closures, and generics compile to the same machine code as hand-written loops. Prefer `iter().map().filter().collect()` over manual indexing.
|
|
206
|
+
|
|
207
|
+
### Memory Allocation Patterns
|
|
208
|
+
- **Stack vs Heap:** Stack is near-instant. `Box<T>` for large values. Avoid boxing small, short-lived values.
|
|
209
|
+
- **Arena Allocation:** `bumpalo` or `typed-arena` for graphs or many short-lived objects. Freed all at once.
|
|
210
|
+
- **Small-String Optimisation:** `compact_str` for strings usually <24 bytes.
|
|
211
|
+
|
|
212
|
+
### Profiling Tools
|
|
213
|
+
|
|
214
|
+
| Tool | Purpose |
|
|
215
|
+
|------|---------|
|
|
216
|
+
| `cargo flamegraph` | CPU flame graphs via perf/DTrace |
|
|
217
|
+
| `samply` | Sampling profiler with GUI |
|
|
218
|
+
| DHAT (Valgrind) | Heap allocation profiling |
|
|
219
|
+
| `tokio-console` | Async task scheduling visualisation |
|
|
220
|
+
| Criterion | Micro-benchmark regression detection |
|
|
221
|
+
|
|
222
|
+
**Workflow:** Baseline with Criterion, profile with flamegraph, optimise, re-benchmark.
|
|
223
|
+
|
|
224
|
+
### Async Runtime Tuning
|
|
225
|
+
- Default: one worker thread per core. Override with `#[tokio::main(worker_threads = N)]`.
|
|
226
|
+
- `tokio::task::spawn_blocking` for >100us operations.
|
|
227
|
+
- `FuturesUnordered` or `JoinSet` for concurrent fan-out.
|
|
228
|
+
|
|
229
|
+
### SIMD and Unsafe Optimisation
|
|
230
|
+
- `std::simd` (nightly) or portable-simd for data-parallel operations (4x+ gains possible).
|
|
231
|
+
- Always benchmark -- thermal throttling can reduce SIMD gains.
|
|
232
|
+
- Minimise `unsafe` scope; validate with Miri.
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## Security Considerations
|
|
237
|
+
|
|
238
|
+
### Memory Safety
|
|
239
|
+
Rust's ownership model eliminates use-after-free, double-free, buffer overflows, and data races at compile time.
|
|
240
|
+
|
|
241
|
+
### Unsafe Code Auditing
|
|
242
|
+
- `cargo-geiger` -- maps all `unsafe` across the dependency tree.
|
|
243
|
+
- `cargo +nightly miri test` -- detects UB in unsafe code at runtime.
|
|
244
|
+
- Document `// SAFETY:` invariants for every `unsafe` block.
|
|
245
|
+
|
|
246
|
+
### Dependency Auditing
|
|
247
|
+
- **`cargo audit`** -- checks `Cargo.lock` against the RustSec Advisory Database.
|
|
248
|
+
- **`cargo deny`** -- license checks, duplicate deps, source restrictions, advisories. Run in CI.
|
|
249
|
+
- **`cargo vet`** -- supply-chain auditing, tracks reviewed crate versions.
|
|
250
|
+
|
|
251
|
+
### Cryptography
|
|
252
|
+
- **`rustls`** (v0.23+) for TLS. Pure Rust, audited. Default crypto: `aws-lc-rs`; alternative: `ring`.
|
|
253
|
+
- Never implement custom crypto. Use `ring` or `aws-lc-rs` for primitives.
|
|
254
|
+
- Post-quantum: `pqcrypto` (ML-KEM, ML-DSA).
|
|
255
|
+
|
|
256
|
+
### Input Validation
|
|
257
|
+
- Validate at the boundary (API handlers, CLI parsers, file readers).
|
|
258
|
+
- Newtypes with validation constructors (e.g., `Email::new()` rejects invalid formats).
|
|
259
|
+
- `#[serde(deny_unknown_fields)]` to reject unexpected JSON fields.
|
|
260
|
+
- `validator` crate for declarative validation rules.
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## Integration Patterns
|
|
265
|
+
|
|
266
|
+
### Database
|
|
267
|
+
|
|
268
|
+
- **sqlx (v0.8)** -- Async, compile-time checked SQL. Not an ORM. Best for raw SQL comfort.
|
|
269
|
+
- **Diesel (v2.3)** -- Sync, compile-time schema verification via codegen. Strongest type safety.
|
|
270
|
+
- **SeaORM (v2.0)** -- Async-first dynamic ORM. Familiar to ActiveRecord/Django developers.
|
|
271
|
+
|
|
272
|
+
### Message Queues
|
|
273
|
+
- **RabbitMQ:** `lapin` -- fully async AMQP 0.9.1 client. Advanced routing, persistent queues.
|
|
274
|
+
- **Kafka:** `rdkafka` -- wraps librdkafka. Consumer groups, rebalancing, transactional production.
|
|
275
|
+
- **Abstraction:** `omniqueue` -- unified interface over Redis, RabbitMQ, SQS.
|
|
276
|
+
|
|
277
|
+
### gRPC (tonic)
|
|
278
|
+
Built on Hyper and Tower, sharing middleware with Axum. Define services in `.proto`, generate with `tonic-build`. Axum and Tonic can multiplex on the same port via `axum_tonic`.
|
|
279
|
+
|
|
280
|
+
### REST API (Axum)
|
|
281
|
+
Extractors decompose requests: `Path`, `Query`, `Json`, `State`. Tower layers provide middleware (tracing, CORS, rate limiting, auth) shared with Tonic.
|
|
282
|
+
|
|
283
|
+
### FFI (C Interop)
|
|
284
|
+
- `#[repr(C)]` on structs for C-compatible layout.
|
|
285
|
+
- `CString`/`CStr` for string exchange. Never pass Rust `String` directly.
|
|
286
|
+
- Never panic across FFI -- use `std::panic::catch_unwind`.
|
|
287
|
+
- `cxx` crate for safe C++/Rust interop with compile-time validation.
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## DevOps & Deployment
|
|
292
|
+
|
|
293
|
+
### Build Optimisation
|
|
294
|
+
```toml
|
|
295
|
+
[profile.release]
|
|
296
|
+
opt-level = 3
|
|
297
|
+
lto = "fat" # 10-20% faster runtime, slower compile
|
|
298
|
+
codegen-units = 1 # Better optimisation, slower compile
|
|
299
|
+
panic = "abort" # Smaller binary, no unwinding
|
|
300
|
+
strip = "symbols" # Strip debug symbols
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### Docker (Multi-Stage with musl)
|
|
304
|
+
```dockerfile
|
|
305
|
+
FROM rust:1.85-alpine AS builder
|
|
306
|
+
RUN apk add --no-cache musl-dev
|
|
307
|
+
WORKDIR /app
|
|
308
|
+
COPY . .
|
|
309
|
+
RUN cargo build --release --target x86_64-unknown-linux-musl
|
|
310
|
+
|
|
311
|
+
FROM scratch
|
|
312
|
+
COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/my-app /my-app
|
|
313
|
+
USER 1000:1000
|
|
314
|
+
ENTRYPOINT ["/my-app"]
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### CI/CD Pipeline
|
|
318
|
+
Run on every commit: `cargo fmt --check`, `cargo clippy -- -D warnings`, `cargo test --workspace`, `cargo deny check`. Add `cargo-tarpaulin` for coverage.
|
|
319
|
+
|
|
320
|
+
### Cross-Compilation
|
|
321
|
+
Use `cross` for container-based builds: `cross build --release --target aarch64-unknown-linux-musl`.
|
|
322
|
+
|
|
323
|
+
### Monitoring
|
|
324
|
+
`metrics` crate + `metrics-exporter-prometheus`. Expose `/metrics` endpoint in Axum.
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
328
|
+
## Decision Trees
|
|
329
|
+
|
|
330
|
+
### Which Web Framework?
|
|
331
|
+
```
|
|
332
|
+
Need maximum raw throughput?
|
|
333
|
+
YES --> Actix Web
|
|
334
|
+
NO --> Tokio integration important?
|
|
335
|
+
YES --> Axum (default choice for most teams)
|
|
336
|
+
NO --> Simplicity top priority?
|
|
337
|
+
YES --> Rocket
|
|
338
|
+
NO --> Axum
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### Which Async Runtime?
|
|
342
|
+
```
|
|
343
|
+
Web service / networked application?
|
|
344
|
+
YES --> Tokio (de facto standard)
|
|
345
|
+
NO --> Embedded / no-std?
|
|
346
|
+
YES --> embassy
|
|
347
|
+
NO --> Tokio
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### Which Database Library?
|
|
351
|
+
```
|
|
352
|
+
Comfortable with raw SQL + need async?
|
|
353
|
+
YES --> sqlx
|
|
354
|
+
NO --> Maximum compile-time safety?
|
|
355
|
+
YES --> Diesel
|
|
356
|
+
NO --> Familiar ORM style?
|
|
357
|
+
YES --> SeaORM
|
|
358
|
+
NO --> sqlx
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
## Code Examples
|
|
364
|
+
|
|
365
|
+
### 1. Axum Handler with Error Mapping
|
|
366
|
+
```rust
|
|
367
|
+
use axum::{extract::{Path, State}, http::StatusCode, response::IntoResponse, Json};
|
|
368
|
+
|
|
369
|
+
async fn get_order(
|
|
370
|
+
State(pool): State<PgPool>,
|
|
371
|
+
Path(id): Path<Uuid>,
|
|
372
|
+
) -> Result<Json<Order>, AppError> {
|
|
373
|
+
let order = sqlx::query_as!(Order, "SELECT * FROM orders WHERE id = $1", id)
|
|
374
|
+
.fetch_optional(&pool).await?
|
|
375
|
+
.ok_or(AppError::NotFound)?;
|
|
376
|
+
Ok(Json(order))
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
enum AppError { NotFound, Internal(anyhow::Error) }
|
|
380
|
+
|
|
381
|
+
impl IntoResponse for AppError {
|
|
382
|
+
fn into_response(self) -> axum::response::Response {
|
|
383
|
+
match self {
|
|
384
|
+
Self::NotFound => StatusCode::NOT_FOUND.into_response(),
|
|
385
|
+
Self::Internal(e) => {
|
|
386
|
+
tracing::error!("internal error: {e:#}");
|
|
387
|
+
StatusCode::INTERNAL_SERVER_ERROR.into_response()
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
impl<E: Into<anyhow::Error>> From<E> for AppError {
|
|
394
|
+
fn from(err: E) -> Self { Self::Internal(err.into()) }
|
|
395
|
+
}
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### 2. Async Fan-Out with JoinSet
|
|
399
|
+
```rust
|
|
400
|
+
use tokio::task::JoinSet;
|
|
401
|
+
|
|
402
|
+
async fn fetch_all_prices(symbols: &[String]) -> anyhow::Result<Vec<(String, f64)>> {
|
|
403
|
+
let mut set = JoinSet::new();
|
|
404
|
+
for sym in symbols {
|
|
405
|
+
let s = sym.clone();
|
|
406
|
+
set.spawn(async move { Ok::<_, anyhow::Error>((s.clone(), fetch_price(&s).await?)) });
|
|
407
|
+
}
|
|
408
|
+
let mut results = Vec::with_capacity(symbols.len());
|
|
409
|
+
while let Some(res) = set.join_next().await { results.push(res??); }
|
|
410
|
+
Ok(results)
|
|
411
|
+
}
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
### 3. Newtype with Serde Validation
|
|
415
|
+
```rust
|
|
416
|
+
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
417
|
+
pub struct EmailAddress(String);
|
|
418
|
+
|
|
419
|
+
impl EmailAddress {
|
|
420
|
+
pub fn new(raw: &str) -> Result<Self, ValidationError> {
|
|
421
|
+
if raw.contains('@') && raw.len() <= 254 {
|
|
422
|
+
Ok(Self(raw.to_lowercase()))
|
|
423
|
+
} else {
|
|
424
|
+
Err(ValidationError::InvalidEmail(raw.into()))
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
pub fn as_str(&self) -> &str { &self.0 }
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
impl<'de> serde::Deserialize<'de> for EmailAddress {
|
|
431
|
+
fn deserialize<D: serde::Deserializer<'de>>(d: D) -> Result<Self, D::Error> {
|
|
432
|
+
let s = String::deserialize(d)?;
|
|
433
|
+
Self::new(&s).map_err(serde::de::Error::custom)
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### 4. Instrumented Service with Tracing
|
|
439
|
+
```rust
|
|
440
|
+
impl OrderService {
|
|
441
|
+
#[instrument(skip(self), fields(order_id = %id))]
|
|
442
|
+
pub async fn cancel_order(&self, id: Uuid) -> Result<(), DomainError> {
|
|
443
|
+
let order = self.repo.find(id).await?
|
|
444
|
+
.ok_or(DomainError::OrderNotFound { order_id: id })?;
|
|
445
|
+
if order.is_shipped() {
|
|
446
|
+
warn!("attempted to cancel shipped order");
|
|
447
|
+
return Err(DomainError::AlreadyShipped { order_id: id });
|
|
448
|
+
}
|
|
449
|
+
self.repo.update_status(id, OrderStatus::Cancelled).await?;
|
|
450
|
+
info!("order cancelled");
|
|
451
|
+
Ok(())
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
---
|
|
457
|
+
|
|
458
|
+
*Researched: 2026-03-07 | Sources: [Rust API Guidelines](https://rust-lang.github.io/api-guidelines/naming.html), [RFC 430](https://rust-lang.github.io/rfcs/0430-finalizing-naming-conventions.html), [Cargo Book - Workspaces](https://doc.rust-lang.org/cargo/reference/workspaces.html), [Cargo Book - Profiles](https://doc.rust-lang.org/cargo/reference/profiles.html), [Rust Design Patterns](https://rust-unofficial.github.io/patterns/), [Rust Performance Book](https://nnethercote.github.io/perf-book/profiling.html), [Tokio Tutorial](https://tokio.rs/tokio/tutorial), [Axum Docs](https://docs.rs/axum/latest/axum/), [Tracing Docs](https://docs.rs/tracing), [RustSec](https://rustsec.org/), [Rustls](https://github.com/rustls/rustls), [Effective Rust - FFI](https://effective-rust.com/ffi.html), [Rust Web Frameworks 2026](https://aarambhdevhub.medium.com/rust-web-frameworks-in-2026-axum-vs-actix-web-vs-rocket-vs-warp-vs-salvo-which-one-should-you-2db3792c79a2), [Rust ORMs 2026](https://aarambhdevhub.medium.com/rust-orms-in-2026-diesel-vs-sqlx-vs-seaorm-vs-rusqlite-which-one-should-you-actually-use-706d0fe912f3), [Diesel vs SQLx vs SeaORM 2026](https://reintech.io/blog/diesel-vs-sqlx-vs-seaorm-rust-database-library-comparison-2026), [Rust Error Handling Compared](https://dev.to/leapcell/rust-error-handling-compared-anyhow-vs-thiserror-vs-snafu-2003), [Rust Security Auditing 2026](https://sherlock.xyz/post/rust-security-auditing-guide-2026), [Async Rust Evolution (JetBrains)](https://blog.jetbrains.com/rust/2026/02/17/the-evolution-of-async-rust-from-tokio-to-high-level-applications/), [Rust Testing Patterns](https://dasroot.net/posts/2026/03/rust-testing-patterns-reliable-releases/), [Workspace Best Practices](https://reintech.io/blog/cargo-workspace-best-practices-large-rust-projects)*
|