@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,395 @@
|
|
|
1
|
+
# Content Modeling -- Content Foundation Module
|
|
2
|
+
|
|
3
|
+
> **Category:** Content Foundation
|
|
4
|
+
> **Applies to:** All platforms -- Web, iOS, Android, Desktop
|
|
5
|
+
> **Last updated:** 2026-03-14
|
|
6
|
+
> **Sources:** ICU Project, Unicode CLDR, W3C Internationalization, Mozilla Pontoon, Phrase (Memsource), Apple WWDR Localization Guide
|
|
7
|
+
|
|
8
|
+
Content modeling is the discipline of designing user-facing strings so they can accept
|
|
9
|
+
dynamic data, adapt to plural forms and grammatical gender, handle locale-specific
|
|
10
|
+
length variance, and degrade gracefully when truncated. This module covers the
|
|
11
|
+
**authoring** decisions -- what to put in a message, how to structure variables, and
|
|
12
|
+
when to use conditional content. For the technical file formats and extraction tooling,
|
|
13
|
+
see `i18n/foundations/string-externalization.md` and `i18n/foundations/pluralization-and-gender.md`.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 1. ICU MessageFormat Authoring
|
|
18
|
+
|
|
19
|
+
### 1.1 When to Use ICU MessageFormat
|
|
20
|
+
|
|
21
|
+
Use ICU MessageFormat when a string contains any of:
|
|
22
|
+
|
|
23
|
+
- A **variable** (user name, count, date, file name)
|
|
24
|
+
- A **plural** form (1 item vs 3 items)
|
|
25
|
+
- A **gender** reference (he/she/they completed the task)
|
|
26
|
+
- A **selection** (different text for different enum values)
|
|
27
|
+
|
|
28
|
+
If the string is fully static ("Cancel", "Save changes"), plain strings are fine.
|
|
29
|
+
|
|
30
|
+
### 1.2 Variable Interpolation
|
|
31
|
+
|
|
32
|
+
**Pattern:** `{variableName}` -- curly braces, camelCase, descriptive name.
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
Welcome back, {userName}.
|
|
36
|
+
You have {unreadCount} unread messages.
|
|
37
|
+
Last updated {lastUpdatedDate}.
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Naming rules:**
|
|
41
|
+
|
|
42
|
+
| Do | Don't | Why |
|
|
43
|
+
|---------------------------|------------------------|------------------------------------------|
|
|
44
|
+
| `{userName}` | `{0}` or `{name}` | Named args are self-documenting |
|
|
45
|
+
| `{fileSize}` | `{size}` | "size" is ambiguous (count? dimension?) |
|
|
46
|
+
| `{recipientCount}` | `{count}` | Distinguishes from other counts |
|
|
47
|
+
| `{expirationDate}` | `{date}` | Multiple dates may exist in context |
|
|
48
|
+
|
|
49
|
+
**Rules:**
|
|
50
|
+
|
|
51
|
+
1. **Never concatenate strings around variables.** "Hello, " + name + "!" forces
|
|
52
|
+
word order, which varies across languages. Use `"Hello, {name}!"` as a single
|
|
53
|
+
translatable unit.
|
|
54
|
+
2. **Never embed UI elements (links, buttons) by splitting strings.** "Click {here}
|
|
55
|
+
to continue" makes "here" a separate translation unit. Use full-sentence messages
|
|
56
|
+
with markup: `"Click <link>here</link> to continue."` or restructure to avoid
|
|
57
|
+
embedded actions.
|
|
58
|
+
3. **Provide translator context for every variable.** A comment like
|
|
59
|
+
`{fileSize} -- formatted file size, e.g. "2.5 MB"` helps translators understand
|
|
60
|
+
what value will fill the placeholder.
|
|
61
|
+
|
|
62
|
+
### 1.3 Plural Messages
|
|
63
|
+
|
|
64
|
+
**Pattern:** `{count, plural, one {# item} other {# items}}`
|
|
65
|
+
|
|
66
|
+
`#` is replaced with the formatted number. `one` and `other` are CLDR plural
|
|
67
|
+
categories.
|
|
68
|
+
|
|
69
|
+
**Authoring rules:**
|
|
70
|
+
|
|
71
|
+
1. **Always include the `other` category.** It is required by every language.
|
|
72
|
+
2. **Write the `other` form as the general case.** Many languages map most numbers
|
|
73
|
+
to `other`.
|
|
74
|
+
3. **Use `#` for the number, not the variable name.** `#` renders the number with
|
|
75
|
+
locale-appropriate formatting (commas, separators).
|
|
76
|
+
4. **Never hardcode English plural logic.** `count === 1 ? "item" : "items"` breaks
|
|
77
|
+
in Arabic (6 forms), Russian (3 forms), and Japanese (1 form).
|
|
78
|
+
|
|
79
|
+
**Complete example with context:**
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
# English source
|
|
83
|
+
{taskCount, plural,
|
|
84
|
+
one {# task remaining}
|
|
85
|
+
other {# tasks remaining}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
# Arabic (translator fills all 6 categories)
|
|
89
|
+
{taskCount, plural,
|
|
90
|
+
zero {لا مهام متبقية}
|
|
91
|
+
one {مهمة واحدة متبقية}
|
|
92
|
+
two {مهمتان متبقيتان}
|
|
93
|
+
few {# مهام متبقية}
|
|
94
|
+
many {# مهمة متبقية}
|
|
95
|
+
other {# مهمة متبقية}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 1.4 Gender-Aware Strings
|
|
100
|
+
|
|
101
|
+
**Pattern:** `{gender, select, male {He} female {She} other {They}} completed the task.`
|
|
102
|
+
|
|
103
|
+
**Authoring rules:**
|
|
104
|
+
|
|
105
|
+
1. **Always include `other`.** It is the fallback for unknown or non-binary gender.
|
|
106
|
+
2. **Avoid gender when possible.** "Alex completed the task" is better than pronoun
|
|
107
|
+
selection. Use gender only when the grammar requires it (many Romance and Semitic
|
|
108
|
+
languages do).
|
|
109
|
+
3. **Combine gender and plural when needed:**
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
{recipientGender, select,
|
|
113
|
+
male {{recipientCount, plural,
|
|
114
|
+
one {He has # new message}
|
|
115
|
+
other {He has # new messages}
|
|
116
|
+
}}
|
|
117
|
+
female {{recipientCount, plural,
|
|
118
|
+
one {She has # new message}
|
|
119
|
+
other {She has # new messages}
|
|
120
|
+
}}
|
|
121
|
+
other {{recipientCount, plural,
|
|
122
|
+
one {They have # new message}
|
|
123
|
+
other {They have # new messages}
|
|
124
|
+
}}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
This produces a combinatorial explosion. Consider restructuring the UI to avoid it.
|
|
129
|
+
|
|
130
|
+
### 1.5 Select (Enum-Based Content)
|
|
131
|
+
|
|
132
|
+
**Pattern:** `{status, select, active {Your account is active.} suspended {Your account is suspended. Contact support.} other {Account status unknown.}}`
|
|
133
|
+
|
|
134
|
+
Use `select` for any enum or categorical variable. Always include `other` as fallback
|
|
135
|
+
for future values the code may add.
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 2. Locale Length Variance
|
|
140
|
+
|
|
141
|
+
### 2.1 Expansion Ratios
|
|
142
|
+
|
|
143
|
+
Translated text is almost always longer than English. Plan for it.
|
|
144
|
+
|
|
145
|
+
| Source language | Target language | Typical expansion | Notes |
|
|
146
|
+
|-----------------|-----------------|-------------------|-------------------------------|
|
|
147
|
+
| English | German | +30% | Compound nouns, longer verbs |
|
|
148
|
+
| English | French | +15-20% | Articles, gendered adjectives |
|
|
149
|
+
| English | Finnish | +30-40% | Agglutinative morphology |
|
|
150
|
+
| English | Japanese | -30% | Denser script |
|
|
151
|
+
| English | Chinese (Simp.) | -50% | Logographic, very compact |
|
|
152
|
+
| English | Arabic | +25% | Prefixed articles, verb forms |
|
|
153
|
+
| English | Portuguese (BR) | +20-30% | Longer prepositions |
|
|
154
|
+
|
|
155
|
+
### 2.2 Design Rules for Expansion
|
|
156
|
+
|
|
157
|
+
1. **Allow 40% horizontal expansion for any text element.** This covers the worst
|
|
158
|
+
common case (Finnish, German). If the element cannot expand, it must truncate
|
|
159
|
+
gracefully.
|
|
160
|
+
2. **Use flexible layouts, not fixed widths.** A button that fits "Save" in English
|
|
161
|
+
may not fit "Speichern" in German or "Sauvegarder" in French.
|
|
162
|
+
3. **Test with pseudolocalization.** Generate strings that simulate expansion:
|
|
163
|
+
`"Save" -> "[Saaaavvvee]"`. This reveals layout breakage before real translation.
|
|
164
|
+
4. **Avoid horizontal space constraints for sentences.** A 200px-wide toast that fits
|
|
165
|
+
"File saved" will truncate "Arquivo salvo com sucesso" (Portuguese).
|
|
166
|
+
|
|
167
|
+
### 2.3 Pseudolocalization
|
|
168
|
+
|
|
169
|
+
Pseudolocalization transforms source strings to simulate translation challenges without
|
|
170
|
+
actual translation. It catches layout, truncation, and encoding issues early.
|
|
171
|
+
|
|
172
|
+
**Types:**
|
|
173
|
+
|
|
174
|
+
| Type | What it does | Example |
|
|
175
|
+
|--------------|-------------------------------------------|--------------------------------|
|
|
176
|
+
| Accented | Replaces ASCII with accented equivalents | "Save" -> "[Savve]" |
|
|
177
|
+
| Expanded | Pads strings to simulate 30-40% expansion | "Save" -> "[Saaaaave]" |
|
|
178
|
+
| Mirrored | Reverses string for pseudo-RTL | "Save" -> "[evaS]" |
|
|
179
|
+
| Bracketed | Wraps strings in markers to detect concat | "Save" -> "[Save]" |
|
|
180
|
+
|
|
181
|
+
Run pseudolocalization in CI to catch regressions automatically.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## 3. Truncation Strategies for Dynamic Content
|
|
186
|
+
|
|
187
|
+
### 3.1 Decision Matrix
|
|
188
|
+
|
|
189
|
+
| Content type | Truncation method | Fallback |
|
|
190
|
+
|--------------------|---------------------------|-----------------------------------|
|
|
191
|
+
| User name | Ellipsis after N chars | Full name in tooltip or detail |
|
|
192
|
+
| File path | Middle ellipsis | Full path in tooltip |
|
|
193
|
+
| Description | Line clamp (2-3 lines) | "Show more" toggle |
|
|
194
|
+
| Notification | End ellipsis at container | Tap to expand |
|
|
195
|
+
| Number | Never truncate | Use compact notation (1.2K) |
|
|
196
|
+
| Date/time | Abbreviate format | "Mar 14" vs "March 14, 2026" |
|
|
197
|
+
|
|
198
|
+
### 3.2 Rules
|
|
199
|
+
|
|
200
|
+
1. **Never truncate in the middle of a word.** Break at word boundaries or use
|
|
201
|
+
hyphenation.
|
|
202
|
+
2. **Never truncate a number.** "1,23..." could be 1,230 or 1,234,567. Use compact
|
|
203
|
+
number formatting instead: 1.2K, 3.4M.
|
|
204
|
+
3. **Never truncate a URL path segment.** "/users/setti..." is useless. Use middle
|
|
205
|
+
ellipsis: "/users/.../profile".
|
|
206
|
+
4. **Preserve meaning under truncation.** "You have 3 new..." is acceptable because
|
|
207
|
+
the key information (3 new) is at the start. "In order to complete your..." is
|
|
208
|
+
not acceptable because the meaning is at the end.
|
|
209
|
+
5. **Front-load the important information.** Write strings so the first N characters
|
|
210
|
+
carry the most meaning: "3 tasks due today -- review the dashboard" truncates
|
|
211
|
+
better than "Review the dashboard to see 3 tasks due today."
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## 4. Placeholder Decisions
|
|
216
|
+
|
|
217
|
+
### 4.1 When to Use a Variable vs Hardcoding
|
|
218
|
+
|
|
219
|
+
| Scenario | Use variable? | Rationale |
|
|
220
|
+
|---------------------------------------|----------------|----------------------------------|
|
|
221
|
+
| User's name | Yes | Always dynamic |
|
|
222
|
+
| Count of items | Yes | Needs plural handling |
|
|
223
|
+
| Product name (your own product) | Maybe | Only if rebranding is likely |
|
|
224
|
+
| Date or time | Yes | Needs locale formatting |
|
|
225
|
+
| Currency amount | Yes | Needs locale formatting |
|
|
226
|
+
| Units ("MB", "kg") | Yes | Varies by locale/measurement |
|
|
227
|
+
| "Email" (as a concept) | No | Stable term, not a variable |
|
|
228
|
+
| Error code | Yes | Varies per error |
|
|
229
|
+
|
|
230
|
+
### 4.2 Formatting Variables
|
|
231
|
+
|
|
232
|
+
Never format variables inside the string template. Use ICU format specifiers or
|
|
233
|
+
delegate to the runtime:
|
|
234
|
+
|
|
235
|
+
```
|
|
236
|
+
BAD: "File size: {fileSize}MB" -- unit hardcoded, no space in some locales
|
|
237
|
+
GOOD: "File size: {fileSize}" -- runtime formats as "2.5 MB" per locale
|
|
238
|
+
|
|
239
|
+
BAD: "{month}/{day}/{year}" -- date order varies by locale
|
|
240
|
+
GOOD: "{date}" -- runtime formats per locale's date pattern
|
|
241
|
+
|
|
242
|
+
BAD: "${amount}" -- currency symbol position varies
|
|
243
|
+
GOOD: "{amount}" -- runtime formats as "$5.00" or "5,00 $"
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## 5. Conditional Content
|
|
249
|
+
|
|
250
|
+
### 5.1 When to Conditionally Vary Copy
|
|
251
|
+
|
|
252
|
+
| Condition | Example | Approach |
|
|
253
|
+
|--------------------------|------------------------------------------------|--------------------------------|
|
|
254
|
+
| Zero vs nonzero | "No messages" vs "3 messages" | ICU plural with `=0` |
|
|
255
|
+
| First-time vs returning | "Welcome!" vs "Welcome back, {name}" | Separate string keys |
|
|
256
|
+
| Permission level | "View" vs "Edit" button label | Separate keys or `select` |
|
|
257
|
+
| Feature flag | "Try beta" vs hidden | Code-level condition, not copy |
|
|
258
|
+
| Locale | "Color" (en-US) vs "Colour" (en-GB) | Separate locale files |
|
|
259
|
+
| Platform | "Tap" (mobile) vs "Click" (desktop) | Separate keys per platform |
|
|
260
|
+
|
|
261
|
+
### 5.2 Rules for Conditional Content
|
|
262
|
+
|
|
263
|
+
1. **Never branch on locale inside a string template.** Use separate locale files.
|
|
264
|
+
The template `{locale === 'en-GB' ? 'colour' : 'color'}` is unmaintainable.
|
|
265
|
+
2. **Prefer separate string keys over complex conditionals.** Two simple strings are
|
|
266
|
+
easier to translate than one string with nested `select` and `plural`.
|
|
267
|
+
3. **Use ICU `=0` for zero-specific messages.** `{count, plural, =0 {No items} one {# item} other {# items}}`
|
|
268
|
+
-- the `=0` is an exact value match, distinct from the `zero` plural category
|
|
269
|
+
(which is language-specific).
|
|
270
|
+
4. **Document every condition in translator comments.** Translators see string files,
|
|
271
|
+
not code. If a string appears only for admins, say so in the comment.
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## 6. Common Mistakes in AI-Generated Content Models
|
|
276
|
+
|
|
277
|
+
### 6.1 String Concatenation
|
|
278
|
+
|
|
279
|
+
**The problem:** AI generates code like `"Hello, " + name + "! You have " + count + " items."` instead of a single ICU template.
|
|
280
|
+
|
|
281
|
+
**Why it breaks:** Word order changes across languages. Japanese puts the greeting
|
|
282
|
+
after the name. Arabic puts the count before the noun. Concatenation locks the word
|
|
283
|
+
order to English.
|
|
284
|
+
|
|
285
|
+
**How to fix:** Use a single translatable string: `"Hello, {name}! You have {count, plural, one {# item} other {# items}}."`
|
|
286
|
+
|
|
287
|
+
### 6.2 Hardcoded Plurals
|
|
288
|
+
|
|
289
|
+
**The problem:** AI writes `count === 1 ? "item" : "items"` -- English-only plural
|
|
290
|
+
logic embedded in code.
|
|
291
|
+
|
|
292
|
+
**Why it breaks:** Arabic has 6 plural forms. Russian has 3. Japanese has 1. English
|
|
293
|
+
logic produces grammatically wrong output in most languages.
|
|
294
|
+
|
|
295
|
+
**How to fix:** Use ICU `plural` with at least `one` and `other` categories. Let the
|
|
296
|
+
CLDR rules handle each locale.
|
|
297
|
+
|
|
298
|
+
### 6.3 Embedded Markup Without Boundaries
|
|
299
|
+
|
|
300
|
+
**The problem:** AI splits a sentence around HTML: `"Click " + "<a>here</a>" + " to continue"`. This creates three translation units ("Click ", "here", " to continue") that translators cannot reorder.
|
|
301
|
+
|
|
302
|
+
**Why it breaks:** In German, "here" might need to be at the end: "Klicken Sie
|
|
303
|
+
<a>hier</a>, um fortzufahren." Translators need the whole sentence.
|
|
304
|
+
|
|
305
|
+
**How to fix:** Keep the entire sentence as one translation unit with inline markup
|
|
306
|
+
tags: `"Click <link>here</link> to continue."` The translation system preserves
|
|
307
|
+
tag positions while allowing reordering.
|
|
308
|
+
|
|
309
|
+
### 6.4 Ignoring Locale-Specific Formatting
|
|
310
|
+
|
|
311
|
+
**The problem:** AI hardcodes date formats ("MM/DD/YYYY"), number formats ("1,234.56"),
|
|
312
|
+
or currency symbols ("$").
|
|
313
|
+
|
|
314
|
+
**Why it breaks:** Germany uses "DD.MM.YYYY" and "1.234,56". Japan uses "YYYY/MM/DD".
|
|
315
|
+
The UK puts the currency symbol before the amount; some locales put it after.
|
|
316
|
+
|
|
317
|
+
**How to fix:** Pass raw values (timestamps, numbers) to locale-aware formatters.
|
|
318
|
+
Never format inside the string template.
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## 7. Decision Framework
|
|
323
|
+
|
|
324
|
+
### 7.1 Simple String vs ICU Template
|
|
325
|
+
|
|
326
|
+
| If the string... | Use |
|
|
327
|
+
|--------------------------------------------|-----------------------|
|
|
328
|
+
| Contains no variables | Plain string |
|
|
329
|
+
| Contains 1 variable, no plurals | Simple interpolation |
|
|
330
|
+
| Contains a count | ICU `plural` |
|
|
331
|
+
| References a person's gender | ICU `select` |
|
|
332
|
+
| Has both count and gender | Nested ICU |
|
|
333
|
+
| Varies by 3+ enum values | ICU `select` |
|
|
334
|
+
| Has more than 2 nesting levels | Split into multiple keys |
|
|
335
|
+
|
|
336
|
+
### 7.2 When to Split vs Nest
|
|
337
|
+
|
|
338
|
+
**Split** when:
|
|
339
|
+
- Nesting exceeds 2 levels (readability collapses)
|
|
340
|
+
- Different branches produce fundamentally different sentences
|
|
341
|
+
- The conditions are independent (permission + count + gender = 8+ combinations)
|
|
342
|
+
|
|
343
|
+
**Nest** when:
|
|
344
|
+
- The sentence structure remains the same across branches
|
|
345
|
+
- Only a word or phrase changes
|
|
346
|
+
- The nesting stays at 1-2 levels
|
|
347
|
+
|
|
348
|
+
### 7.3 Translator Readability Rule
|
|
349
|
+
|
|
350
|
+
If a translator cannot understand the string in their translation tool without reading
|
|
351
|
+
the source code, the string is too complex. Simplify or split.
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## 8. Quick Reference Checklist
|
|
356
|
+
|
|
357
|
+
### Variables
|
|
358
|
+
- [ ] **All variables use named arguments** (`{userName}` not `{0}`)
|
|
359
|
+
- [ ] **No string concatenation** -- single translatable unit per message
|
|
360
|
+
- [ ] **Translator context comments on every variable**
|
|
361
|
+
- [ ] **No hardcoded formatting** (dates, numbers, currencies use runtime formatters)
|
|
362
|
+
|
|
363
|
+
### Plurals
|
|
364
|
+
- [ ] **`other` category always present**
|
|
365
|
+
- [ ] **`#` used for the number** (not the variable name)
|
|
366
|
+
- [ ] **No code-level plural logic** (`=== 1` ternaries)
|
|
367
|
+
- [ ] **`=0` used for zero-specific messages** (distinct from `zero` category)
|
|
368
|
+
|
|
369
|
+
### Gender
|
|
370
|
+
- [ ] **`other` always present as fallback**
|
|
371
|
+
- [ ] **Gender avoided when not grammatically necessary**
|
|
372
|
+
- [ ] **Combined gender+plural kept to 2 nesting levels max**
|
|
373
|
+
|
|
374
|
+
### Length Variance
|
|
375
|
+
- [ ] **40% expansion space in UI elements**
|
|
376
|
+
- [ ] **Pseudolocalization runs in CI**
|
|
377
|
+
- [ ] **Flexible layouts, no fixed-width text containers**
|
|
378
|
+
|
|
379
|
+
### Truncation
|
|
380
|
+
- [ ] **Important information front-loaded**
|
|
381
|
+
- [ ] **Numbers never truncated** (use compact formatting)
|
|
382
|
+
- [ ] **Full text accessible via tooltip or expand**
|
|
383
|
+
- [ ] **Truncation at word boundaries, not mid-word**
|
|
384
|
+
|
|
385
|
+
---
|
|
386
|
+
|
|
387
|
+
**Sources:**
|
|
388
|
+
|
|
389
|
+
- [ICU MessageFormat -- Formatting Messages](https://unicode-org.github.io/icu/userguide/format_parse/messages/)
|
|
390
|
+
- [Unicode CLDR -- Plural Rules](https://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html)
|
|
391
|
+
- [W3C -- Internationalization Techniques: Authoring HTML & CSS](https://www.w3.org/International/techniques/authoring-html)
|
|
392
|
+
- [Mozilla Pontoon -- Fluent Syntax Guide](https://mozilla-l10n.github.io/localizer-documentation/tools/pontoon/)
|
|
393
|
+
- [Phrase -- ICU Message Format Guide](https://support.phrase.com/hc/en-us/articles/5822519545756-ICU-MessageFormat)
|
|
394
|
+
- [Apple -- Localization Best Practices](https://developer.apple.com/documentation/xcode/localization)
|
|
395
|
+
- [Google -- Pseudolocalization](https://developer.android.com/guide/topics/resources/pseudolocales)
|