@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,79 @@
|
|
|
1
|
+
# Locale and Language Tags — i18n/RTL Expertise Module
|
|
2
|
+
|
|
3
|
+
> BCP 47 (RFC 5646) defines language tags: `en-US`, `ar-SA`, `zh-Hans-CN`. Structure, lookup, fallback chain, and locale resolution for i18n.
|
|
4
|
+
|
|
5
|
+
> **Category:** Foundation
|
|
6
|
+
> **Applies to:** All
|
|
7
|
+
> **Key standards:** BCP 47 (RFC 5646), RFC 4647 (matching)
|
|
8
|
+
> **RTL impact:** Low — locale selects RTL; tags don't encode direction
|
|
9
|
+
|
|
10
|
+
## 1. Core Concepts
|
|
11
|
+
|
|
12
|
+
### BCP 47 Structure
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
language ["-" script] ["-" region] ["-" variant] ["-" extension]
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
| Subtag | Source | Example |
|
|
19
|
+
|--------|--------|---------|
|
|
20
|
+
| language | ISO 639 | en, ar, zh |
|
|
21
|
+
| script | ISO 15924 | Hans, Hant, Latn |
|
|
22
|
+
| region | ISO 3166-1 / UN M.49 | US, SA, 419 |
|
|
23
|
+
| variant | Registered | |
|
|
24
|
+
| extension | u-, t- | u-ca-hebrew |
|
|
25
|
+
|
|
26
|
+
### Examples
|
|
27
|
+
|
|
28
|
+
- `en` — English
|
|
29
|
+
- `en-US` — American English
|
|
30
|
+
- `ar-SA` — Arabic (Saudi Arabia)
|
|
31
|
+
- `zh-Hans-CN` — Chinese Simplified (China)
|
|
32
|
+
- `sr-Cyrl` — Serbian (Cyrillic script)
|
|
33
|
+
- `en-u-ca-hebrew` — English with Hebrew calendar extension
|
|
34
|
+
|
|
35
|
+
### Legacy: `iw` = `he`
|
|
36
|
+
|
|
37
|
+
- `iw` was deprecated for Hebrew; use `he`
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 2. Fallback Chain
|
|
42
|
+
|
|
43
|
+
When `ar-SA` is requested but a translation is missing:
|
|
44
|
+
|
|
45
|
+
1. `ar-SA`
|
|
46
|
+
2. `ar`
|
|
47
|
+
3. Default (e.g., `en`)
|
|
48
|
+
|
|
49
|
+
Implement via RFC 4647 lookup or framework fallback.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 3. Locale Resolution
|
|
54
|
+
|
|
55
|
+
- **User preference:** `Accept-Language` header, OS locale, app setting
|
|
56
|
+
- **Explicit:** Pass locale to API/component
|
|
57
|
+
- **Default:** Project default when no match
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 4. Anti-Patterns
|
|
62
|
+
|
|
63
|
+
1. **Hardcoding locale** — Use user preference or explicit param
|
|
64
|
+
2. **No fallback** — Always have a default
|
|
65
|
+
3. **Using `iw`** — Use `he` for Hebrew
|
|
66
|
+
4. **Ignoring script** — `zh-Hans` vs `zh-Hant` matter
|
|
67
|
+
5. **Wrong region** — `es-ES` vs `es-419` (Latin America)
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Quick Reference Checklist
|
|
72
|
+
|
|
73
|
+
- [ ] Use BCP 47 tags
|
|
74
|
+
- [ ] Implement fallback chain
|
|
75
|
+
- [ ] Resolve from user preference
|
|
76
|
+
- [ ] Use `he` not `iw`
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
*Researched: 2026-03-08 | Sources: RFC 5646, W3C BCP 47, IANA registry*
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Numbers, Currency, and Units — i18n/RTL Expertise Module
|
|
2
|
+
|
|
3
|
+
> Number formatting varies: decimal separator (`.` vs `,`), grouping, currency symbol position, and numeral system (Western vs Eastern Arabic). Use `Intl.NumberFormat`; never hardcode.
|
|
4
|
+
|
|
5
|
+
> **Category:** Foundation
|
|
6
|
+
> **Applies to:** All
|
|
7
|
+
> **Key standards:** CLDR, Intl API
|
|
8
|
+
> **RTL impact:** Medium — Eastern Arabic numerals (٠١٢٣) in some locales
|
|
9
|
+
|
|
10
|
+
## 1. Core Concepts
|
|
11
|
+
|
|
12
|
+
### Decimal and Grouping
|
|
13
|
+
|
|
14
|
+
| Locale | Decimal | Thousands |
|
|
15
|
+
|--------|---------|-----------|
|
|
16
|
+
| en-US | . | , |
|
|
17
|
+
| de-DE | , | . |
|
|
18
|
+
| ar-SA | ٫ (Arabic decimal) | ٬ (Arabic thousands) |
|
|
19
|
+
| fr-FR | , | space |
|
|
20
|
+
|
|
21
|
+
### Numeral Systems
|
|
22
|
+
|
|
23
|
+
- **Western (0123):** en, de, fr, he-IL
|
|
24
|
+
- **Eastern Arabic (٠١٢٣):** ar-SA, ar-EG, fa-IR
|
|
25
|
+
- **Locale-dependent:** Use `Intl.NumberFormat(locale)` — it picks the right one
|
|
26
|
+
|
|
27
|
+
### Currency
|
|
28
|
+
|
|
29
|
+
```javascript
|
|
30
|
+
new Intl.NumberFormat('ar-SA', {
|
|
31
|
+
style: 'currency',
|
|
32
|
+
currency: 'SAR'
|
|
33
|
+
}).format(1234.56);
|
|
34
|
+
// "١٬٢٣٤٫٥٦ ر.س"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Units
|
|
38
|
+
|
|
39
|
+
- **Intl.NumberFormat** with `style: 'unit'` for lengths, etc.
|
|
40
|
+
- Or use `Intl` + custom unit strings
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 2. Anti-Patterns
|
|
45
|
+
|
|
46
|
+
1. **Hardcoded decimal separator** — Use Intl
|
|
47
|
+
2. **Assuming Western numerals** — ar-SA uses Eastern
|
|
48
|
+
3. **Currency symbol position** — Locale-dependent (before/after, spacing)
|
|
49
|
+
4. **No currency code** — Use ISO 4217 (USD, EUR, SAR)
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Quick Reference Checklist
|
|
54
|
+
|
|
55
|
+
- [ ] Use Intl.NumberFormat
|
|
56
|
+
- [ ] Pass locale and currency
|
|
57
|
+
- [ ] No hardcoded separators
|
|
58
|
+
- [ ] Test with ar-SA (Eastern numerals)
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
*Researched: 2026-03-08 | Sources: MDN Intl.NumberFormat, CLDR*
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Pluralization and Gender — i18n/RTL Expertise Module
|
|
2
|
+
|
|
3
|
+
> Languages have different plural rules (English: 2 forms; Arabic: 6; Japanese: 1) and gender agreement. ICU MessageFormat handles both via `plural` and `select`. Never use `count === 1 ? 'item' : 'items'`.
|
|
4
|
+
|
|
5
|
+
> **Category:** Foundation
|
|
6
|
+
> **Applies to:** All
|
|
7
|
+
> **Key standards:** CLDR plural rules, ICU MessageFormat
|
|
8
|
+
> **RTL impact:** Low — plural/gender are language rules
|
|
9
|
+
|
|
10
|
+
## 1. Core Concepts
|
|
11
|
+
|
|
12
|
+
### CLDR Plural Categories
|
|
13
|
+
|
|
14
|
+
- **zero** — Some languages (e.g., Arabic) have explicit zero form
|
|
15
|
+
- **one** — Singular (n=1 in English; varies by language)
|
|
16
|
+
- **two** — Dual (Arabic, Welsh, etc.)
|
|
17
|
+
- **few** — Small quantity (e.g., 2–4 in Russian)
|
|
18
|
+
- **many** — Large quantity (e.g., Polish)
|
|
19
|
+
- **other** — Default; required in every plural rule
|
|
20
|
+
|
|
21
|
+
No language uses all six. English uses one + other. Arabic uses all six.
|
|
22
|
+
|
|
23
|
+
### ICU MessageFormat: plural
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
{count, plural,
|
|
27
|
+
zero {لا رسائل}
|
|
28
|
+
one {رسالة واحدة}
|
|
29
|
+
two {رسالتان}
|
|
30
|
+
few {# رسائل}
|
|
31
|
+
many {# رسالة}
|
|
32
|
+
other {# رسالة}
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
`#` = formatted number.
|
|
37
|
+
|
|
38
|
+
### ICU MessageFormat: select (gender)
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
{gender, select,
|
|
42
|
+
male {He}
|
|
43
|
+
female {She}
|
|
44
|
+
other {They}
|
|
45
|
+
} liked this.
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Locale Examples
|
|
49
|
+
|
|
50
|
+
| Language | Forms | Example |
|
|
51
|
+
|----------|-------|---------|
|
|
52
|
+
| English | one, other | 1 item / 2 items |
|
|
53
|
+
| Arabic | zero, one, two, few, many, other | 6 forms |
|
|
54
|
+
| Hebrew | one, two, other | 3 forms |
|
|
55
|
+
| Russian | one, few, many, other | 4 forms |
|
|
56
|
+
| Japanese | other | 1 form |
|
|
57
|
+
| Polish | one, few, many, other | 4 forms |
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 2. Implementation
|
|
62
|
+
|
|
63
|
+
### JavaScript (formatjs/react-intl)
|
|
64
|
+
|
|
65
|
+
```tsx
|
|
66
|
+
<FormattedMessage
|
|
67
|
+
id="itemCount"
|
|
68
|
+
defaultMessage="{count, plural, one {# item} other {# items}}"
|
|
69
|
+
values={{ count: 5 }}
|
|
70
|
+
/>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Dart (Flutter)
|
|
74
|
+
|
|
75
|
+
```dart
|
|
76
|
+
AppLocalizations.of(context)!.itemCount(5)
|
|
77
|
+
// From ARB: "{count, plural, one {# item} other {# items}}"
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Nested: plural + select
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
{count, plural,
|
|
84
|
+
one {{gender, select, male {He has} female {She has} other {They have}} one.}
|
|
85
|
+
other {{gender, select, male {He has} female {She has} other {They have}} #.}
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## 3. Anti-Patterns
|
|
92
|
+
|
|
93
|
+
1. **`count === 1 ? 'item' : 'items'`** — Fails for Arabic, Russian, etc.
|
|
94
|
+
2. **Missing `other`** — Required in ICU
|
|
95
|
+
3. **Concatenating** — "You have " + count + " items"; use full message
|
|
96
|
+
4. **No gender** — French, German, etc. need gender agreement
|
|
97
|
+
5. **Ordinal as cardinal** — Use `selectordinal` for "1st", "2nd"
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Quick Reference Checklist
|
|
102
|
+
|
|
103
|
+
- [ ] Use ICU MessageFormat for plurals
|
|
104
|
+
- [ ] Include `other` in every plural
|
|
105
|
+
- [ ] Use `select` for gender when needed
|
|
106
|
+
- [ ] Never concatenate for plurals
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
*Researched: 2026-03-08 | Sources: CLDR plurals, ICU MessageFormat, IntlPull guide*
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
# String Externalization — i18n/RTL Expertise Module
|
|
2
|
+
|
|
3
|
+
> Extracting all user-facing strings from code into external resource files so they can be translated without touching source. The foundation of every localization workflow—get this wrong and translators work against the codebase.
|
|
4
|
+
|
|
5
|
+
> **Category:** Foundation
|
|
6
|
+
> **Applies to:** All (Mobile, Web, Backend)
|
|
7
|
+
> **Key standards:** ICU MessageFormat, XLIFF (ISO 21720), gettext PO, ARB
|
|
8
|
+
> **RTL impact:** Medium — externalized strings enable RTL; keys and placeholders must not assume LTR
|
|
9
|
+
|
|
10
|
+
## 1. Core Concepts
|
|
11
|
+
|
|
12
|
+
### What This Area Covers
|
|
13
|
+
|
|
14
|
+
String externalization is the practice of moving every user-facing string out of source code into separate resource files. This enables:
|
|
15
|
+
- Translation without code changes
|
|
16
|
+
- Consistent key management across languages
|
|
17
|
+
- Context for translators (descriptions, placeholders, screenshots)
|
|
18
|
+
- Automated extraction and validation
|
|
19
|
+
|
|
20
|
+
### Why It Matters
|
|
21
|
+
|
|
22
|
+
- **Retrofitting costs 3–5×** — Hunting for hardcoded strings across components, templates, and API responses is expensive
|
|
23
|
+
- **Keys are a contract** — Between developers, translators, and translation management systems
|
|
24
|
+
- **Poor key naming** — Causes 2–3× more time on translation management, reuse errors, and maintenance brittleness
|
|
25
|
+
|
|
26
|
+
### Common Misconceptions
|
|
27
|
+
|
|
28
|
+
1. **"We can grep for strings later"** — Strings appear in JSX, templates, error constructors, validation messages, logs. Grep misses many.
|
|
29
|
+
2. **"Keys can be the English text"** — Ties you to English; renames break translation history.
|
|
30
|
+
3. **"One big file per language"** — Doesn't scale; no code-splitting, merge conflicts, slow loads.
|
|
31
|
+
4. **"Translators don't need context"** — "Save" can mean "persist" or "rescue"; "Close" can mean "shut" or "near."
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 2. Implementation Patterns
|
|
36
|
+
|
|
37
|
+
### Key Naming Convention
|
|
38
|
+
|
|
39
|
+
**Hierarchical, feature-based, semantic:**
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
{namespace}.{component}.{element}.{modifier}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Examples:**
|
|
46
|
+
- `auth.login.submitButton` — not `loginSubmitButton`
|
|
47
|
+
- `checkout.cart.emptyState.title` — not `emptyCart`
|
|
48
|
+
- `common.errors.networkError` — not `error1`
|
|
49
|
+
|
|
50
|
+
**Rules:**
|
|
51
|
+
- Use consistent casing (camelCase or snake_case project-wide)
|
|
52
|
+
- Keep keys under ~50 characters
|
|
53
|
+
- Avoid positional names (`sidebar.firstItem`, `modal.button1`)
|
|
54
|
+
- No special characters or spaces; alphanumeric + dots/underscores only
|
|
55
|
+
|
|
56
|
+
### File Formats
|
|
57
|
+
|
|
58
|
+
| Format | Used By | Structure | Plurals |
|
|
59
|
+
|--------|---------|-----------|---------|
|
|
60
|
+
| **ARB** | Flutter/Dart | JSON, `@` metadata | ICU MessageFormat |
|
|
61
|
+
| **JSON** | React, Vue, Node | Key-value, nested or flat | ICU or `_one`/`_other` suffix |
|
|
62
|
+
| **XLIFF** | Enterprise, CAT tools | XML, source+target pairs | Embedded in `<trans-unit>` |
|
|
63
|
+
| **PO** | gettext, Linux, PHP | `msgid`/`msgstr`, `msgid_plural` | `Plural-Forms` header |
|
|
64
|
+
| **strings.xml** | Android | XML, `string`/`plurals` | `quantity` attributes |
|
|
65
|
+
| **Localizable.strings** | iOS | `"key" = "value";` | `.stringsdict` |
|
|
66
|
+
|
|
67
|
+
### ARB (Flutter) Example
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"@@locale": "en",
|
|
72
|
+
"welcomeMessage": "Hello, {name}!",
|
|
73
|
+
"@welcomeMessage": {
|
|
74
|
+
"description": "Greeting on dashboard",
|
|
75
|
+
"placeholders": {
|
|
76
|
+
"name": {
|
|
77
|
+
"type": "String"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"itemCount": "{count, plural, =0{No items} one{1 item} other{# items}}",
|
|
82
|
+
"@itemCount": {
|
|
83
|
+
"description": "Cart item count",
|
|
84
|
+
"placeholders": {
|
|
85
|
+
"count": {
|
|
86
|
+
"type": "int"
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### JSON (React/i18next) Example
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
{
|
|
97
|
+
"auth": {
|
|
98
|
+
"login": {
|
|
99
|
+
"title": "Sign in",
|
|
100
|
+
"submit": "Log in",
|
|
101
|
+
"forgotPassword": "Forgot password?"
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"common": {
|
|
105
|
+
"save": "Save",
|
|
106
|
+
"cancel": "Cancel"
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### PO (gettext) Example
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
#: src/components/Login.tsx:42
|
|
115
|
+
msgid "Sign in"
|
|
116
|
+
msgstr ""
|
|
117
|
+
|
|
118
|
+
#: src/components/Cart.tsx:15
|
|
119
|
+
msgid "One item in cart"
|
|
120
|
+
msgid_plural "%d items in cart"
|
|
121
|
+
msgstr[0] ""
|
|
122
|
+
msgstr[1] ""
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### XLIFF 2.0 Snippet
|
|
126
|
+
|
|
127
|
+
```xml
|
|
128
|
+
<trans-unit id="auth.login.title">
|
|
129
|
+
<source>Sign in</source>
|
|
130
|
+
<target>تسجيل الدخول</target>
|
|
131
|
+
<note>Login screen heading</note>
|
|
132
|
+
</trans-unit>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Folder Structure
|
|
136
|
+
|
|
137
|
+
Organize by feature/namespace, not by page or file location:
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
locales/
|
|
141
|
+
en/
|
|
142
|
+
auth.json
|
|
143
|
+
dashboard.json
|
|
144
|
+
checkout.json
|
|
145
|
+
common.json
|
|
146
|
+
ar/
|
|
147
|
+
auth.json
|
|
148
|
+
dashboard.json
|
|
149
|
+
...
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Enables code-splitting, clear ownership, and lazy loading per namespace.
|
|
153
|
+
|
|
154
|
+
### Placeholder and Interpolation Rules
|
|
155
|
+
|
|
156
|
+
1. **Never concatenate** — Use `{name}` or `{{name}}`; let translators control word order.
|
|
157
|
+
2. **Document placeholders** — Type, purpose, example in metadata.
|
|
158
|
+
3. **Escape carefully** — Some formats use `{count}` (ICU) vs `{{count}}` (i18next); know your framework.
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## 3. Locale Variations
|
|
163
|
+
|
|
164
|
+
### Arabic
|
|
165
|
+
- Long strings for formal register; short for informal. Provide both if needed.
|
|
166
|
+
- Placeholders may need to appear in different positions: "مرحباً {{name}}" vs "Welcome, {{name}}"
|
|
167
|
+
- RTL affects placeholder placement in mixed content.
|
|
168
|
+
|
|
169
|
+
### German
|
|
170
|
+
- ~30% longer; design for expansion. Keys should not imply length.
|
|
171
|
+
- Compound words: "E-Mail-Adresse" — ensure UI doesn't truncate.
|
|
172
|
+
|
|
173
|
+
### Japanese / Chinese
|
|
174
|
+
- Often shorter; avoid fixed-width layouts that assume long text.
|
|
175
|
+
- No spaces; line breaks differ. Provide max length hints for translators.
|
|
176
|
+
|
|
177
|
+
### Hebrew
|
|
178
|
+
- Similar to Arabic for RTL; different typography. Keys and structure are shared; values differ.
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## 4. Anti-Patterns
|
|
183
|
+
|
|
184
|
+
1. **Hardcoded strings in components** — Every visible string must be externalized.
|
|
185
|
+
2. **Keys as English text** — `"Welcome back"` as key; use `auth.welcomeBack`.
|
|
186
|
+
3. **String concatenation** — `"Hello, " + name`; use `t('greeting', { name })`.
|
|
187
|
+
4. **No context for translators** — Add descriptions, screenshots, max length.
|
|
188
|
+
5. **Flat key namespace** — `button1`, `title2`; use hierarchical semantic keys.
|
|
189
|
+
6. **Inconsistent casing** — Mix of camelCase and snake_case; pick one.
|
|
190
|
+
7. **Positional keys** — `sidebar.firstItem`; use `navigation.sidebar.dashboard`.
|
|
191
|
+
8. **Translating in UI only** — API errors, validation, logs shown to users must be externalized.
|
|
192
|
+
9. **Missing placeholder metadata** — Translators need type and purpose.
|
|
193
|
+
10. **One giant file** — Split by feature for maintainability and lazy loading.
|
|
194
|
+
11. **No fallback for missing keys** — Define policy: show key, default locale, or throw.
|
|
195
|
+
12. **Keys that change** — Renaming breaks translation memory; use stable semantic keys.
|
|
196
|
+
13. **Embedding HTML in strings** — Prefer structured messages (e.g., rich text components).
|
|
197
|
+
14. **Translating developer-only strings** — Log messages, debug text—exclude from extraction.
|
|
198
|
+
15. **No extraction automation** — Manual copy-paste leads to drift; use extraction tools.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## 5. Testing Approach
|
|
203
|
+
|
|
204
|
+
### Extraction Validation
|
|
205
|
+
- Run extraction; ensure no new hardcoded strings
|
|
206
|
+
- CI check: fail if strings appear in code without extraction
|
|
207
|
+
|
|
208
|
+
### Missing Key Detection
|
|
209
|
+
- Test with a locale that has incomplete translations
|
|
210
|
+
- Verify fallback behavior (key vs default locale)
|
|
211
|
+
|
|
212
|
+
### Placeholder Coverage
|
|
213
|
+
- Ensure all placeholders documented
|
|
214
|
+
- Test with long/short/empty values, RTL text (e.g., العربية)
|
|
215
|
+
|
|
216
|
+
### Pseudo-Localization
|
|
217
|
+
- Replace values with expanded/accented text to find truncation
|
|
218
|
+
- Use bracketed placeholders `[KeyName]` to find untranslated keys
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Quick Reference Checklist
|
|
223
|
+
|
|
224
|
+
- [ ] All user-facing strings in resource files
|
|
225
|
+
- [ ] Keys are semantic, hierarchical, consistent casing
|
|
226
|
+
- [ ] Placeholders documented (type, purpose)
|
|
227
|
+
- [ ] No string concatenation for sentences
|
|
228
|
+
- [ ] Files organized by feature/namespace
|
|
229
|
+
- [ ] Extraction automated in CI
|
|
230
|
+
- [ ] Missing key policy defined and enforced
|
|
231
|
+
- [ ] Context (descriptions, screenshots) for translators
|
|
232
|
+
- [ ] API/validation/error messages externalized
|
|
233
|
+
- [ ] Test with pseudo-localization and incomplete locales
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
*Researched: 2026-03-08 | Sources: Locize key naming guide, IntlPull translation keys, Flutter ARB docs, XLIFF spec, gettext PO manual*
|