@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,496 @@
|
|
|
1
|
+
# Mobile Testing -- Expertise Module
|
|
2
|
+
|
|
3
|
+
> A mobile testing specialist designs, implements, and maintains test strategies across iOS, Android, and cross-platform applications to ensure functional correctness, performance, security, and usability across a fragmented ecosystem of 25,000+ device variants, multiple OS versions, and variable network conditions. Scope spans unit tests through E2E automation, device farm orchestration, CI/CD integration, accessibility compliance, and production crash analysis.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Core Patterns & Conventions
|
|
8
|
+
|
|
9
|
+
### Mobile Testing Pyramid
|
|
10
|
+
|
|
11
|
+
The mobile testing pyramid (Kwo Ding, 2017) structures test investment. The base is widest (most tests), narrowing toward the top:
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
/ E2E / UI \ ~10% -- real user flows on real/cloud devices
|
|
15
|
+
/ Integration \ ~20% -- API contracts, navigation, state
|
|
16
|
+
/ Widget/Component \ ~30% -- isolated UI component rendering
|
|
17
|
+
/ Unit Tests \ ~40% -- pure logic, ViewModels, repositories
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
| Layer | What to Test | Tools | Speed |
|
|
21
|
+
|-------|-------------|-------|-------|
|
|
22
|
+
| Unit | Business logic, data transforms, state management | XCTest, JUnit 5, flutter_test, Jest | <1ms/test |
|
|
23
|
+
| Widget/Component | UI rendering, widget state, layout constraints | Compose Testing, Flutter widget tests | 10-100ms |
|
|
24
|
+
| Integration | Navigation flows, API integration, DB operations | Espresso, XCUITest, integration_test | 1-10s |
|
|
25
|
+
| E2E | Full user journeys, cross-feature flows | Maestro, Appium, Detox, Patrol | 10-60s |
|
|
26
|
+
|
|
27
|
+
### Platform-Specific Testing Patterns
|
|
28
|
+
|
|
29
|
+
**iOS -- XCUITest:** Apple's first-party UI testing framework. Tests run in a separate process via accessibility APIs. Use `accessibilityIdentifier` for stable locators. Supports SwiftUI and UIKit. UI tests only work with XCTest, not Swift Testing.
|
|
30
|
+
|
|
31
|
+
**Android -- Espresso + Compose Testing:** Espresso runs synchronously on the main thread with automatic UI sync. Compose Testing uses semantic tree instead of view hierarchy; elements identified by `testTag()`. Use `IdlingResource` for async synchronization.
|
|
32
|
+
|
|
33
|
+
**Flutter -- flutter_test + integration_test:** `testWidgets()` for widget tests. `pumpWidget()` builds the tree; `pump()` advances one frame; `pumpAndSettle()` waits for animations. Golden tests via `matchesGoldenFile()` for pixel-perfect comparison.
|
|
34
|
+
|
|
35
|
+
### Cross-Platform Testing Frameworks
|
|
36
|
+
|
|
37
|
+
| Framework | Version | Approach | Speed | Best For |
|
|
38
|
+
|-----------|---------|----------|-------|----------|
|
|
39
|
+
| Maestro | v1.39+ | YAML declarative, black-box | 2-3x faster than Appium | New initiatives, non-technical QA |
|
|
40
|
+
| Appium | v2.x | WebDriver protocol, multi-language | Baseline | Established programs, broad platform coverage |
|
|
41
|
+
| Detox | v20.x | Gray-box, React Native native | 2-3x faster than Appium | React Native teams |
|
|
42
|
+
| Patrol | v3.x | Flutter-first, native automation | Comparable to integration_test | Flutter teams needing native interactions |
|
|
43
|
+
|
|
44
|
+
**Maestro** uses YAML exclusively, requires no programming, includes Maestro Studio Desktop for visual test creation. Setup: minutes. **Appium** supports Java/Python/JS/Ruby/C#, covers Android/iOS/Web/Hybrid/Windows. Setup: 1-2 days; maintenance: 30-40% of engineer time. **Detox** completes login flows in 8-12s vs Appium's 20-30s but is React Native only. **Patrol** handles permission dialogs, notifications, WebView from Dart code with hot-restart support.
|
|
45
|
+
|
|
46
|
+
### Device Farm Strategies
|
|
47
|
+
|
|
48
|
+
| Platform | Strengths | Pricing Model |
|
|
49
|
+
|----------|-----------|---------------|
|
|
50
|
+
| BrowserStack | 3,500+ real devices, fastest setup, highest satisfaction | Subscription, unlimited access |
|
|
51
|
+
| Firebase Test Lab | AI-powered Robo tests, deep Android/Google integration | Free tier + $1-5/hr per device |
|
|
52
|
+
| AWS Device Farm | AWS ecosystem integration, custom environments | Pay-per-minute |
|
|
53
|
+
| LambdaTest | Best value, HyperExecute speed | Subscription tiers |
|
|
54
|
+
| Sauce Labs | Enterprise compliance, extensive reporting | Enterprise pricing |
|
|
55
|
+
|
|
56
|
+
### Test Data Management
|
|
57
|
+
|
|
58
|
+
- **Factory pattern**: generate data programmatically per test run (no stale fixtures).
|
|
59
|
+
- **Backend seeding**: dedicated test API routes (`/test/seed`, `/test/reset`) for known state.
|
|
60
|
+
- **Local DB fixtures**: pre-populate SQLite/Realm/Hive for offline-first testing.
|
|
61
|
+
- **State reset**: always reset between tests (`adb pm clear`, reinstall, or reset APIs).
|
|
62
|
+
- **Sensitive data**: never use production PII; use synthetic data generators (Faker).
|
|
63
|
+
|
|
64
|
+
### Deep Link Testing
|
|
65
|
+
|
|
66
|
+
Test universal links (iOS) and app links (Android) across surfaces: email, SMS, QR codes, social platforms, push notifications. Verify AASA/DAL files, deferred deep links (store redirect then content), parameter preservation, and behavior across app states (foreground/background/killed).
|
|
67
|
+
- Android: `adb shell am start -a android.intent.action.VIEW -d "scheme://path"`
|
|
68
|
+
- iOS: `xcrun simctl openurl booted "scheme://path"`
|
|
69
|
+
|
|
70
|
+
### Push Notification Testing
|
|
71
|
+
|
|
72
|
+
Test delivery when app is foreground, background, killed, and offline. Cover rich content (images, action buttons, deep links), silent notifications, priority levels, permission flows, and offline queue deduplication. Tools: Firebase Console, FCM/APNS test APIs.
|
|
73
|
+
|
|
74
|
+
### Offline / Network Condition Testing
|
|
75
|
+
|
|
76
|
+
- **Airplane mode**: full offline behavior, local persistence, sync queue.
|
|
77
|
+
- **Network transitions**: Wi-Fi to cellular, cellular to offline, reconnection.
|
|
78
|
+
- **Throttling**: simulate 2G/3G via Charles Proxy, Network Link Conditioner (iOS), or `adb emu network` (Android).
|
|
79
|
+
- **Sync conflicts**: test offline edits conflicting with server state.
|
|
80
|
+
|
|
81
|
+
### Gesture and Accessibility Testing
|
|
82
|
+
|
|
83
|
+
**Gestures**: multi-touch (pinch-to-zoom, rotation), edge swipes (iOS back gesture), scroll (momentum, pull-to-refresh, infinite scroll). Espresso: `ViewActions.swipeUp()`. XCUITest: `pinch(withScale:velocity:)`.
|
|
84
|
+
|
|
85
|
+
**Accessibility**: screen reader compatibility (VoiceOver/TalkBack), semantic labels on all interactive elements, touch targets (44x44pt iOS, 48x48dp Android), WCAG 2.1 AA color contrast (4.5:1). Tools: Accessibility Inspector (Xcode), Accessibility Scanner (Android).
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Anti-Patterns & Pitfalls
|
|
90
|
+
|
|
91
|
+
### 1. Testing Only on Emulators/Simulators
|
|
92
|
+
Emulators miss hardware bugs: thermal throttling, real GPU rendering, biometrics, battery drain, Bluetooth/NFC. UI scaling and gesture response differ from real hardware. Always validate on real devices before release.
|
|
93
|
+
|
|
94
|
+
### 2. Hardcoding Test Data
|
|
95
|
+
Hardcoded credentials/IDs create brittle tests coupled to specific backend state. Parallel tests sharing data cause flaky failures. Use factories and per-test data generation.
|
|
96
|
+
|
|
97
|
+
### 3. Inverting the Pyramid (Ice Cream Cone)
|
|
98
|
+
Many E2E tests + few unit tests = slow, expensive, flaky suite. E2E tests are 100-1000x slower than unit tests. Teams waste hours debugging flaky E2E instead of catching logic bugs in milliseconds at unit level.
|
|
99
|
+
|
|
100
|
+
### 4. No Test Isolation Between Runs
|
|
101
|
+
Shared state (DB, sessions, server data) produces order-dependent results. Test A passes alone but fails after Test B. Always reset state and use independent test data.
|
|
102
|
+
|
|
103
|
+
### 5. Using `sleep()` Instead of Explicit Waits
|
|
104
|
+
Fixed delays are the leading cause of flaky mobile tests. They either wait too long (slow) or not enough (random failures). Use: Espresso `IdlingResource`, XCUITest `waitForExistence(timeout:)`, Maestro auto-wait, Detox synchronization.
|
|
105
|
+
|
|
106
|
+
### 6. Testing Only the Happy Path
|
|
107
|
+
Production crashes come from edge cases: network timeouts, permission denials, low storage, interrupted flows (incoming call during payment), background/foreground transitions, malformed API responses.
|
|
108
|
+
|
|
109
|
+
### 7. Neglecting Device Fragmentation
|
|
110
|
+
An app working on Pixel 9 / Android 15 may crash on Samsung Galaxy A13 / Android 12 due to manufacturer overlays, custom ROMs, or different WebView versions. Build a device matrix from production analytics.
|
|
111
|
+
|
|
112
|
+
### 8. Coupling Tests to UI Implementation Details
|
|
113
|
+
Tests relying on view hierarchy positions (`//LinearLayout[2]/Button[1]`) break with every UI refactor. Use stable identifiers: `accessibilityIdentifier`, `testTag`, `resource-id`.
|
|
114
|
+
|
|
115
|
+
### 9. No CI Integration for Mobile Tests
|
|
116
|
+
Tests only on developer machines run inconsistently. Regressions merge undetected, discovered days later (10-100x higher fix cost). Integrate into PR checks with pass/fail gates.
|
|
117
|
+
|
|
118
|
+
### 10. Skipping Accessibility Testing
|
|
119
|
+
15-20% of users have disabilities. Beyond ethics: inaccessible apps face ADA lawsuits, App Store rejection (Apple requires VoiceOver support), and lost market share.
|
|
120
|
+
|
|
121
|
+
### 11. Manual-Only Testing Without Automation
|
|
122
|
+
A 30-minute manual regression across 10 devices = 5 hours per release. Biweekly releases = 130 hours/year on regression alone. Automate stable flows; reserve manual for exploratory/UX.
|
|
123
|
+
|
|
124
|
+
### 12. Not Testing App Update / Migration Paths
|
|
125
|
+
Users update from v2.3 to v2.5, not from clean install. DB migrations, cached data, keychain entries must survive. Install-over-existing tests catch data corruption that clean-install tests miss.
|
|
126
|
+
|
|
127
|
+
### 13. Ignoring Background/Foreground Lifecycle
|
|
128
|
+
Apps interrupted by calls, notifications, multitasking, memory pressure. Test suspend/resume, process death, low-memory kill scenarios for state preservation.
|
|
129
|
+
|
|
130
|
+
### 14. Over-Mocking Native APIs
|
|
131
|
+
Mocking camera/GPS/biometrics gives false confidence. Real implementations have edge cases (permission timing, hardware unavailability, OS version differences). Mock for unit tests only; use real APIs for integration/E2E.
|
|
132
|
+
|
|
133
|
+
### 15. No Crash Monitoring Feedback Loop
|
|
134
|
+
Without connecting Crashlytics/Sentry data to test planning, teams test stable features while production crashes concentrate in untested areas. Use crash data to prioritize test coverage.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Testing Strategy
|
|
139
|
+
|
|
140
|
+
### Automate vs Manual
|
|
141
|
+
|
|
142
|
+
| Automate | Keep Manual |
|
|
143
|
+
|----------|------------|
|
|
144
|
+
| Login/auth, purchase/payment flows | Exploratory testing, UX evaluation |
|
|
145
|
+
| Regression suite, API contract validation | Visual design review, OS beta testing |
|
|
146
|
+
| Accessibility audits, performance benchmarks | Hardware interactions (NFC, Bluetooth pairing) |
|
|
147
|
+
| Deep link routing verification | Competitor comparison, App Store screenshot QA |
|
|
148
|
+
|
|
149
|
+
### Device Coverage Matrix
|
|
150
|
+
|
|
151
|
+
Build from production analytics. Example:
|
|
152
|
+
|
|
153
|
+
| Tier | Device | OS | Screen | Notes |
|
|
154
|
+
|------|--------|----|--------|-------|
|
|
155
|
+
| P1 | iPhone 16 Pro | iOS 18.x | 6.3" | Latest flagship |
|
|
156
|
+
| P1 | Samsung Galaxy S25 | Android 15 | 6.2" | Top Android |
|
|
157
|
+
| P1 | Google Pixel 9 | Android 15 | 6.3" | Stock Android |
|
|
158
|
+
| P2 | iPhone SE 3 | iOS 17.x | 4.7" | Small screen edge |
|
|
159
|
+
| P2 | Samsung Galaxy A54 | Android 14 | 6.4" | Mid-range popular |
|
|
160
|
+
| P3 | Xiaomi Redmi Note 12 | Android 13 | 6.67" | Budget segment |
|
|
161
|
+
|
|
162
|
+
### Beta Testing Programs
|
|
163
|
+
|
|
164
|
+
| Platform | Tool | Key Features |
|
|
165
|
+
|----------|------|--------------|
|
|
166
|
+
| iOS | TestFlight | 10,000 external testers, 90-day expiry, crash reports |
|
|
167
|
+
| Android | Firebase App Distribution | No Play Store review, tester groups, Fastlane integration |
|
|
168
|
+
| Android | Play Console Internal/Closed | Staged rollout %, ANR monitoring, pre-launch reports |
|
|
169
|
+
|
|
170
|
+
Stagger rollouts: internal -> closed beta -> open beta -> production. Do not proceed below 99% crash-free rate.
|
|
171
|
+
|
|
172
|
+
### Performance Testing
|
|
173
|
+
|
|
174
|
+
**Key metrics:** 60 FPS sustained (jank = any frame >16ms), cold start <2s, no memory leaks, monitor battery mAh/session, app size <100MB.
|
|
175
|
+
|
|
176
|
+
**Tools:** Android Profiler (CPU/memory/energy), Xcode Instruments (Time Profiler, Allocations, Energy Log), PerfDog/Apptim (cross-platform), BrowserStack App Performance.
|
|
177
|
+
|
|
178
|
+
### Crash Reporting
|
|
179
|
+
|
|
180
|
+
**Tools:** Firebase Crashlytics, Sentry, Bugsnag. Triage by crash-free user rate (target >99.5%), not raw count. Alert on >0.5% drop within 1 hour of release. Top 10 crash signatures should each have a regression test within 1 sprint.
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Performance Considerations
|
|
185
|
+
|
|
186
|
+
### Test Execution Speed Targets
|
|
187
|
+
Unit: <30s full suite. Widget: <2 min. Integration: <10 min/device. E2E: <30 min full, <10 min smoke. If suite >15 min, developers stop waiting.
|
|
188
|
+
|
|
189
|
+
### Parallel Device Testing
|
|
190
|
+
Maestro: `--shard-all` across devices. Firebase Test Lab: sharding flags. BrowserStack: parallel sessions (5+ on paid plans). Typical speedup: 4 devices = 3.5x (orchestration overhead).
|
|
191
|
+
|
|
192
|
+
### Emulator vs Real Device vs Cloud
|
|
193
|
+
|
|
194
|
+
| Factor | Emulator | Real Device | Cloud Farm |
|
|
195
|
+
|--------|----------|-------------|------------|
|
|
196
|
+
| Cost | Free | $200-1,500/device | $29-299/month |
|
|
197
|
+
| Hardware fidelity | No biometrics/thermal | Full access | Real hardware, remote |
|
|
198
|
+
| CI suitability | Excellent for unit/widget | Requires physical lab | Excellent, scales on demand |
|
|
199
|
+
| Use case | Dev + unit/widget/integration | Performance profiling, final validation | Regression, device matrix |
|
|
200
|
+
|
|
201
|
+
**Hybrid approach:** Emulators in dev/CI for fast tests -> cloud farm for E2E regression -> real devices for performance profiling and final sign-off.
|
|
202
|
+
|
|
203
|
+
### CI/CD Pipeline Optimization
|
|
204
|
+
- Run unit tests first (fast fail); E2E only if unit tests pass.
|
|
205
|
+
- Cache Gradle/CocoaPods/pub dependencies (saves 2-5 min).
|
|
206
|
+
- Build app once, test on artifact (no rebuild per device).
|
|
207
|
+
- On PR: run only tests affected by changed files.
|
|
208
|
+
- Retry failed tests once (infra flakiness); if retry fails, it is real.
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Security Considerations
|
|
213
|
+
|
|
214
|
+
### OWASP Mobile Top 10 (2024 -- first major update since 2016)
|
|
215
|
+
|
|
216
|
+
| # | Risk | Testing Approach |
|
|
217
|
+
|---|------|-----------------|
|
|
218
|
+
| M1 | Improper Credential Usage | Check for hardcoded keys in APK/IPA, strings.xml/Info.plist |
|
|
219
|
+
| M2 | Inadequate Supply Chain Security | Audit SDKs; `npm audit`, `pub outdated`, CodeQL |
|
|
220
|
+
| M3 | Insecure Authentication/Authorization | Test session mgmt, token expiry, role-based access |
|
|
221
|
+
| M4 | Insufficient Input/Output Validation | Fuzz inputs, test injection via deep links/intents |
|
|
222
|
+
| M5 | Insecure Communication | Verify TLS 1.2+, test certificate pinning |
|
|
223
|
+
| M6 | Inadequate Privacy Controls | Audit data collection, verify GDPR/CCPA consent |
|
|
224
|
+
| M7 | Insufficient Binary Protections | Decompile (jadx/Hopper); verify obfuscation |
|
|
225
|
+
| M8 | Security Misconfiguration | `android:debuggable=false`, ATS enabled (iOS) |
|
|
226
|
+
| M9 | Insecure Data Storage | Inspect SharedPreferences/UserDefaults for plaintext secrets |
|
|
227
|
+
| M10 | Insufficient Cryptography | No MD5/SHA1 for security; verify KeyStore/Keychain usage |
|
|
228
|
+
|
|
229
|
+
### SSL Pinning Testing
|
|
230
|
+
1. Configure proxy (Burp Suite, Charles, mitmproxy) as MITM on test device.
|
|
231
|
+
2. Install proxy CA as trusted root.
|
|
232
|
+
3. Launch app -- **expected**: app refuses connection. If traffic flows, pinning is broken.
|
|
233
|
+
4. Advanced: use Frida scripts to attempt runtime bypass; success = weak implementation.
|
|
234
|
+
|
|
235
|
+
Libraries: OkHttp `CertificatePinner` (Android), TrustKit (iOS/Android), Alamofire `ServerTrustManager` (iOS).
|
|
236
|
+
|
|
237
|
+
### Local Storage Security
|
|
238
|
+
- **Android**: inspect `/data/data/<pkg>/shared_prefs/`, SQLite. Use EncryptedSharedPreferences/KeyStore.
|
|
239
|
+
- **iOS**: inspect NSUserDefaults plist, Keychain. Use Keychain for tokens/passwords.
|
|
240
|
+
- **Flutter**: `shared_preferences` stores plaintext; use `flutter_secure_storage` (Keychain/KeyStore).
|
|
241
|
+
- **Tools**: `adb shell`, Objection (Frida-based), `jadx`, `dex2jar`.
|
|
242
|
+
|
|
243
|
+
### Reverse Engineering Protection
|
|
244
|
+
Decompile with `jadx`/`apktool` (Android) or `class-dump`/`Hopper` (iOS). Verify: obfuscation (ProGuard/R8), no debug symbols in release, root/jailbreak detection, debugger detection, integrity checks.
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Integration Patterns
|
|
249
|
+
|
|
250
|
+
### CI/CD Platform Comparison
|
|
251
|
+
|
|
252
|
+
| Platform | Strengths | Limitation | Best For |
|
|
253
|
+
|----------|-----------|------------|----------|
|
|
254
|
+
| Bitrise | Mobile-optimized, pre-built steps, managed macOS VMs | Credits-based cost | Teams wanting zero infra management |
|
|
255
|
+
| GitHub Actions | Broad ecosystem, `macos-latest` runners | No native real-device testing | Teams on GitHub wanting unified CI |
|
|
256
|
+
| Codemagic | Flutter-first, auto code signing, M2 Macs | Smaller ecosystem | Flutter-first teams |
|
|
257
|
+
|
|
258
|
+
### API Mocking
|
|
259
|
+
|
|
260
|
+
| Tool | Type | Best For |
|
|
261
|
+
|------|------|----------|
|
|
262
|
+
| WireMock | Standalone server (Java) | Complex stateful mocking |
|
|
263
|
+
| MockWebServer | In-process (OkHttp) | Espresso/JUnit integration |
|
|
264
|
+
| OHHTTPStubs | In-process (iOS) | XCUITest, URLSession interception |
|
|
265
|
+
| Mockoon | Desktop app + CLI | Visual API mocking, no code |
|
|
266
|
+
|
|
267
|
+
Use in-process mocks for unit/widget tests (fast). Standalone servers for integration/E2E (realistic). Never mock in E2E tests validating real backend integration.
|
|
268
|
+
|
|
269
|
+
### Test Reporting
|
|
270
|
+
- **JUnit XML**: universal format for all CI systems.
|
|
271
|
+
- **Allure**: rich HTML with screenshots, steps, history, flakiness detection.
|
|
272
|
+
- **Track**: pass rate, flaky test rate, execution time trend, coverage by feature area.
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## DevOps & Deployment
|
|
277
|
+
|
|
278
|
+
### Mobile CI/CD Test Gates
|
|
279
|
+
|
|
280
|
+
```
|
|
281
|
+
PR Created
|
|
282
|
+
-> Lint + Static Analysis (SwiftLint, detekt, dart analyze) [< 2 min]
|
|
283
|
+
-> Unit Tests [< 2 min]
|
|
284
|
+
-> Widget/Component Tests [< 5 min]
|
|
285
|
+
-> Build APK/IPA [< 10 min]
|
|
286
|
+
-> E2E Smoke (cloud farm, top 3 devices) [< 15 min]
|
|
287
|
+
Merge to main
|
|
288
|
+
-> Full E2E Regression (full device matrix) [< 45 min]
|
|
289
|
+
-> Performance Benchmark vs baseline [< 15 min]
|
|
290
|
+
Release
|
|
291
|
+
-> Beta distribution (TestFlight / Firebase App Dist)
|
|
292
|
+
-> Monitor crash-free rate 24-48 hours
|
|
293
|
+
-> Staged rollout: 1% -> 10% -> 50% -> 100%
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Screenshot/Video Capture in CI
|
|
297
|
+
Maestro: `--format junit` generates XML + video. Firebase Test Lab: auto-records everything. Espresso: `spoon` library. XCUITest: `XCUIScreen.main.screenshot()` on failure. Store artifacts with build number + git SHA; retain 30 days minimum.
|
|
298
|
+
|
|
299
|
+
### Automated Store Submission
|
|
300
|
+
**Fastlane**: automate screenshots (`snapshot`/`screengrab`), metadata upload, binary submission. Pre-submission checks: app size limits, privacy manifests (iOS), target API level (Android: API 34+ for 2025). Smoke test submitted binary on TestFlight/Internal testing before promoting.
|
|
301
|
+
|
|
302
|
+
### Production Crash Monitoring
|
|
303
|
+
Firebase Crashlytics / Sentry / Bugsnag for real-time reporting. Target: >99.5% crash-free users, ANR <0.47% (Android). Alert via PagerDuty/Slack on spikes within 1 hour. Compare crash rates between versions. Every P0/P1 crash gets a regression test within the same sprint.
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## Decision Trees
|
|
308
|
+
|
|
309
|
+
### Decision Tree 1: Which Mobile Testing Framework?
|
|
310
|
+
|
|
311
|
+
```
|
|
312
|
+
React Native app?
|
|
313
|
+
YES -> Experienced team? -> YES: Detox | NO: Maestro
|
|
314
|
+
NO
|
|
315
|
+
Flutter app?
|
|
316
|
+
YES -> Need native interactions (permissions, notifications)?
|
|
317
|
+
YES: Patrol | NO: integration_test + flutter_test
|
|
318
|
+
NO
|
|
319
|
+
Native iOS/Android?
|
|
320
|
+
YES -> Need cross-platform test reuse?
|
|
321
|
+
YES -> Need programming flexibility? -> YES: Appium | NO: Maestro
|
|
322
|
+
NO -> Platform-native (XCUITest / Espresso+Compose Testing)
|
|
323
|
+
NO (Hybrid/PWA) -> Appium (broadest support)
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
### Decision Tree 2: Emulator vs Real Device vs Cloud?
|
|
327
|
+
|
|
328
|
+
```
|
|
329
|
+
Development (writing/debugging tests)?
|
|
330
|
+
-> LOCAL EMULATOR: instant feedback, free, debugger access
|
|
331
|
+
|
|
332
|
+
CI/CD (automated regression)?
|
|
333
|
+
-> Budget > $100/month? -> YES: CLOUD FARM (BrowserStack, Firebase Test Lab)
|
|
334
|
+
-> NO: CI-hosted emulators (GitHub Actions)
|
|
335
|
+
|
|
336
|
+
Pre-release validation?
|
|
337
|
+
-> Uses hardware features (camera, biometrics, NFC)?
|
|
338
|
+
YES: REAL DEVICES | NO: Cloud farm sufficient
|
|
339
|
+
|
|
340
|
+
Performance profiling (FPS, battery, memory)?
|
|
341
|
+
-> ALWAYS REAL DEVICES: emulators cannot measure real thermal/battery behavior
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Decision Tree 3: UI Tests vs Unit Tests?
|
|
345
|
+
|
|
346
|
+
```
|
|
347
|
+
Pure business logic (calculations, state machines)? -> UNIT TEST
|
|
348
|
+
Data layer (API calls, DB queries, repositories)? -> UNIT TEST + mocks
|
|
349
|
+
Single widget/component rendering? -> WIDGET TEST
|
|
350
|
+
Navigation between screens? -> INTEGRATION TEST
|
|
351
|
+
Multi-screen user journey (login -> browse -> purchase)? -> E2E / UI TEST
|
|
352
|
+
Visual appearance (colors, spacing, layout)? -> SCREENSHOT / GOLDEN TEST
|
|
353
|
+
Native platform interaction (permissions, deep links)? -> E2E on real device/cloud
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
## Code Examples
|
|
359
|
+
|
|
360
|
+
### Example 1: Maestro YAML -- Login Flow
|
|
361
|
+
|
|
362
|
+
```yaml
|
|
363
|
+
# login-flow.yaml
|
|
364
|
+
appId: com.example.myapp
|
|
365
|
+
tags:
|
|
366
|
+
- smoke
|
|
367
|
+
- auth
|
|
368
|
+
---
|
|
369
|
+
- launchApp:
|
|
370
|
+
clearState: true
|
|
371
|
+
- assertVisible: "Welcome"
|
|
372
|
+
- tapOn: "Log In"
|
|
373
|
+
- tapOn:
|
|
374
|
+
id: "email_input"
|
|
375
|
+
- inputText: "test@example.com"
|
|
376
|
+
- tapOn:
|
|
377
|
+
id: "password_input"
|
|
378
|
+
- inputText: "SecurePass123!"
|
|
379
|
+
- tapOn: "Sign In"
|
|
380
|
+
- assertVisible:
|
|
381
|
+
text: "Dashboard"
|
|
382
|
+
timeout: 10000
|
|
383
|
+
- screenshot: "dashboard_after_login"
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
### Example 2: Flutter Widget Test
|
|
387
|
+
|
|
388
|
+
```dart
|
|
389
|
+
// test/counter_widget_test.dart
|
|
390
|
+
import 'package:flutter/material.dart';
|
|
391
|
+
import 'package:flutter_test/flutter_test.dart';
|
|
392
|
+
import 'package:my_app/counter_page.dart';
|
|
393
|
+
|
|
394
|
+
void main() {
|
|
395
|
+
testWidgets('increments count when FAB is tapped', (tester) async {
|
|
396
|
+
await tester.pumpWidget(const MaterialApp(home: CounterPage()));
|
|
397
|
+
expect(find.text('0'), findsOneWidget);
|
|
398
|
+
|
|
399
|
+
await tester.tap(find.byIcon(Icons.add));
|
|
400
|
+
await tester.pump();
|
|
401
|
+
|
|
402
|
+
expect(find.text('1'), findsOneWidget);
|
|
403
|
+
expect(find.text('0'), findsNothing);
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
### Example 3: XCUITest (Swift)
|
|
409
|
+
|
|
410
|
+
```swift
|
|
411
|
+
// LoginUITests.swift
|
|
412
|
+
import XCTest
|
|
413
|
+
|
|
414
|
+
final class LoginUITests: XCTestCase {
|
|
415
|
+
let app = XCUIApplication()
|
|
416
|
+
|
|
417
|
+
override func setUpWithError() throws {
|
|
418
|
+
continueAfterFailure = false
|
|
419
|
+
app.launchArguments = ["--uitesting"]
|
|
420
|
+
app.launch()
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
func testSuccessfulLogin() throws {
|
|
424
|
+
app.buttons["loginNavButton"].tap()
|
|
425
|
+
|
|
426
|
+
let emailField = app.textFields["emailTextField"]
|
|
427
|
+
emailField.tap()
|
|
428
|
+
emailField.typeText("user@example.com")
|
|
429
|
+
|
|
430
|
+
app.secureTextFields["passwordTextField"].tap()
|
|
431
|
+
app.secureTextFields["passwordTextField"].typeText("password123")
|
|
432
|
+
|
|
433
|
+
app.buttons["signInButton"].tap()
|
|
434
|
+
|
|
435
|
+
let dashboard = app.staticTexts["welcomeLabel"]
|
|
436
|
+
XCTAssertTrue(dashboard.waitForExistence(timeout: 10),
|
|
437
|
+
"Dashboard should appear after login")
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
### Example 4: Jetpack Compose Test
|
|
443
|
+
|
|
444
|
+
```kotlin
|
|
445
|
+
// LoginScreenTest.kt
|
|
446
|
+
class LoginScreenTest {
|
|
447
|
+
@get:Rule val composeTestRule = createComposeRule()
|
|
448
|
+
|
|
449
|
+
@Test
|
|
450
|
+
fun loginButton_enablesAfterInput_andShowsWelcome() {
|
|
451
|
+
composeTestRule.setContent { LoginScreen(onLoginSuccess = {}) }
|
|
452
|
+
|
|
453
|
+
composeTestRule.onNodeWithTag("login_button").assertIsNotEnabled()
|
|
454
|
+
|
|
455
|
+
composeTestRule.onNodeWithTag("email_field")
|
|
456
|
+
.performTextInput("test@example.com")
|
|
457
|
+
composeTestRule.onNodeWithTag("password_field")
|
|
458
|
+
.performTextInput("password123")
|
|
459
|
+
|
|
460
|
+
composeTestRule.onNodeWithTag("login_button")
|
|
461
|
+
.assertIsEnabled()
|
|
462
|
+
.performClick()
|
|
463
|
+
|
|
464
|
+
composeTestRule.onNodeWithText("Welcome Back!").assertIsDisplayed()
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
### Example 5: Patrol (Flutter) -- Native Permission Handling
|
|
470
|
+
|
|
471
|
+
```dart
|
|
472
|
+
// integration_test/permission_test.dart
|
|
473
|
+
import 'package:patrol/patrol.dart';
|
|
474
|
+
import 'package:my_app/main.dart' as app;
|
|
475
|
+
|
|
476
|
+
void main() {
|
|
477
|
+
patrolTest('grants notification permission', ($) async {
|
|
478
|
+
await app.main();
|
|
479
|
+
await $.pumpAndSettle();
|
|
480
|
+
|
|
481
|
+
await $(#requestNotificationButton).tap();
|
|
482
|
+
|
|
483
|
+
if (await $.native.isPermissionDialogVisible(
|
|
484
|
+
timeout: Duration(seconds: 5))) {
|
|
485
|
+
await $.native.grantPermissionWhenInUse();
|
|
486
|
+
}
|
|
487
|
+
await $.pumpAndSettle();
|
|
488
|
+
|
|
489
|
+
expect($('Notifications Enabled'), findsOneWidget);
|
|
490
|
+
});
|
|
491
|
+
}
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
---
|
|
495
|
+
|
|
496
|
+
*Researched: 2026-03-07 | Sources: [Sauce Labs - Mobile Testing Pyramid](https://saucelabs.com/resources/blog/mobile-automated-testing-pyramid), [Bitrise - Mobile Testing Pyramid](https://bitrise.io/blog/post/mastering-the-mobile-testing-pyramid), [BrowserStack - Mobile Testing Pyramid](https://www.browserstack.com/guide/mobile-testing-pyramid), [Maestro vs Appium](https://maestro.dev/insights/maestro-vs-appium-choosing-the-right-mobile-testing-framework), [Detox vs Appium vs Maestro](https://www.getpanto.ai/blog/detox-vs-appium-vs-maestro), [Patrol GitHub](https://github.com/leancodepl/patrol), [OWASP Mobile Top 10 2024](https://owasp.org/www-project-mobile-top-10/2023-risks/), [BrowserStack - Performance Tools](https://www.browserstack.com/guide/android-app-performance-testing-tools), [Device Farms 2026](https://www.getpanto.ai/blog/device-farms-for-mobile-testing), [Bitrise vs GitHub Actions](https://bitrise.io/resources/compare/bitrise-vs-github), [Codemagic vs Bitrise](https://blog.codemagic.io/codemagic-vs-bitrise/), [SSL Pinning Testing](https://medium.com/globant/testing-ssl-pinning-in-a-mobile-application-2dcac9ab3d0c), [HeadSpin - Emulator vs Real Device](https://www.headspin.io/blog/real-device-cloud-vs-emulator-mobile-app-testing), [Flutter Docs - Widget Testing](https://docs.flutter.dev/cookbook/testing/widget/introduction), [Maestro Docs](https://docs.maestro.dev/getting-started/writing-your-first-flow), [XCUITest Guide](https://www.swiftyplace.com/blog/xcuitest-ui-testing-swiftui), [Compose Testing - Android](https://developer.android.com/develop/ui/compose/testing), [Testing Anti-Patterns](https://blog.codepipes.com/testing/software-testing-antipatterns.html), [OWASP Mobile Security Guide](https://www.getastra.com/blog/mobile/owasp-mobile-top-10-2024-a-security-guide/)*
|