gaia-framework 1.57.0 → 1.57.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/gaia-framework.js +27 -19
- package/gaia-install.sh +1 -1
- package/package.json +15 -11
- package/.claude/commands/gaia-a11y-testing.md +0 -17
- package/.claude/commands/gaia-action-items.md +0 -23
- package/.claude/commands/gaia-add-feature.md +0 -17
- package/.claude/commands/gaia-add-stories.md +0 -17
- package/.claude/commands/gaia-advanced-elicitation.md +0 -17
- package/.claude/commands/gaia-adversarial.md +0 -15
- package/.claude/commands/gaia-agent-analyst.md +0 -14
- package/.claude/commands/gaia-agent-architect.md +0 -14
- package/.claude/commands/gaia-agent-brainstorming.md +0 -14
- package/.claude/commands/gaia-agent-data-engineer.md +0 -14
- package/.claude/commands/gaia-agent-design-thinking.md +0 -14
- package/.claude/commands/gaia-agent-dev-angular.md +0 -14
- package/.claude/commands/gaia-agent-dev-flutter.md +0 -14
- package/.claude/commands/gaia-agent-dev-go.md +0 -14
- package/.claude/commands/gaia-agent-dev-java.md +0 -14
- package/.claude/commands/gaia-agent-dev-mobile.md +0 -14
- package/.claude/commands/gaia-agent-dev-python.md +0 -14
- package/.claude/commands/gaia-agent-dev-typescript.md +0 -14
- package/.claude/commands/gaia-agent-devops.md +0 -14
- package/.claude/commands/gaia-agent-innovation.md +0 -14
- package/.claude/commands/gaia-agent-performance.md +0 -14
- package/.claude/commands/gaia-agent-pm.md +0 -14
- package/.claude/commands/gaia-agent-presentation.md +0 -14
- package/.claude/commands/gaia-agent-problem-solver.md +0 -14
- package/.claude/commands/gaia-agent-qa.md +0 -14
- package/.claude/commands/gaia-agent-security.md +0 -14
- package/.claude/commands/gaia-agent-sm.md +0 -14
- package/.claude/commands/gaia-agent-storyteller.md +0 -14
- package/.claude/commands/gaia-agent-tech-writer.md +0 -14
- package/.claude/commands/gaia-agent-test-architect.md +0 -14
- package/.claude/commands/gaia-agent-ux-designer.md +0 -14
- package/.claude/commands/gaia-agent-validator.md +0 -14
- package/.claude/commands/gaia-atdd.md +0 -17
- package/.claude/commands/gaia-brainstorm.md +0 -17
- package/.claude/commands/gaia-brainstorming.md +0 -17
- package/.claude/commands/gaia-brownfield.md +0 -17
- package/.claude/commands/gaia-build-configs.md +0 -22
- package/.claude/commands/gaia-change-request.md +0 -11
- package/.claude/commands/gaia-changelog.md +0 -16
- package/.claude/commands/gaia-check-dod.md +0 -17
- package/.claude/commands/gaia-check-review-gate.md +0 -17
- package/.claude/commands/gaia-ci-setup.md +0 -17
- package/.claude/commands/gaia-code-review.md +0 -17
- package/.claude/commands/gaia-correct-course.md +0 -17
- package/.claude/commands/gaia-create-arch.md +0 -17
- package/.claude/commands/gaia-create-epics.md +0 -17
- package/.claude/commands/gaia-create-prd.md +0 -17
- package/.claude/commands/gaia-create-story.md +0 -23
- package/.claude/commands/gaia-create-ux.md +0 -17
- package/.claude/commands/gaia-creative-sprint.md +0 -17
- package/.claude/commands/gaia-deploy-checklist.md +0 -17
- package/.claude/commands/gaia-design-thinking.md +0 -17
- package/.claude/commands/gaia-dev-story.md +0 -23
- package/.claude/commands/gaia-document-project.md +0 -17
- package/.claude/commands/gaia-domain-research.md +0 -17
- package/.claude/commands/gaia-edge-cases.md +0 -15
- package/.claude/commands/gaia-edit-arch.md +0 -17
- package/.claude/commands/gaia-edit-prd.md +0 -17
- package/.claude/commands/gaia-edit-test-plan.md +0 -17
- package/.claude/commands/gaia-editorial-prose.md +0 -15
- package/.claude/commands/gaia-editorial-structure.md +0 -15
- package/.claude/commands/gaia-epic-status.md +0 -17
- package/.claude/commands/gaia-fix-story.md +0 -17
- package/.claude/commands/gaia-help.md +0 -15
- package/.claude/commands/gaia-index-docs.md +0 -15
- package/.claude/commands/gaia-infra-design.md +0 -17
- package/.claude/commands/gaia-innovation.md +0 -17
- package/.claude/commands/gaia-market-research.md +0 -17
- package/.claude/commands/gaia-memory-hygiene.md +0 -17
- package/.claude/commands/gaia-merge-docs.md +0 -16
- package/.claude/commands/gaia-mobile-testing.md +0 -17
- package/.claude/commands/gaia-nfr.md +0 -17
- package/.claude/commands/gaia-party.md +0 -17
- package/.claude/commands/gaia-perf-testing.md +0 -17
- package/.claude/commands/gaia-performance-review.md +0 -17
- package/.claude/commands/gaia-pitch-deck.md +0 -17
- package/.claude/commands/gaia-post-deploy.md +0 -17
- package/.claude/commands/gaia-problem-solving.md +0 -17
- package/.claude/commands/gaia-product-brief.md +0 -17
- package/.claude/commands/gaia-project-context.md +0 -17
- package/.claude/commands/gaia-qa-tests.md +0 -17
- package/.claude/commands/gaia-quick-dev.md +0 -17
- package/.claude/commands/gaia-quick-spec.md +0 -17
- package/.claude/commands/gaia-readiness-check.md +0 -17
- package/.claude/commands/gaia-refresh-ground-truth.md +0 -17
- package/.claude/commands/gaia-release-plan.md +0 -17
- package/.claude/commands/gaia-resume.md +0 -25
- package/.claude/commands/gaia-retro.md +0 -20
- package/.claude/commands/gaia-review-a11y.md +0 -16
- package/.claude/commands/gaia-review-api.md +0 -16
- package/.claude/commands/gaia-review-deps.md +0 -16
- package/.claude/commands/gaia-review-perf.md +0 -16
- package/.claude/commands/gaia-review-security.md +0 -16
- package/.claude/commands/gaia-rollback-plan.md +0 -17
- package/.claude/commands/gaia-run-all-reviews.md +0 -17
- package/.claude/commands/gaia-security-review.md +0 -17
- package/.claude/commands/gaia-shard-doc.md +0 -15
- package/.claude/commands/gaia-slide-deck.md +0 -17
- package/.claude/commands/gaia-sprint-plan.md +0 -17
- package/.claude/commands/gaia-sprint-status.md +0 -17
- package/.claude/commands/gaia-storytelling.md +0 -17
- package/.claude/commands/gaia-summarize.md +0 -16
- package/.claude/commands/gaia-teach-testing.md +0 -17
- package/.claude/commands/gaia-tech-debt-review.md +0 -20
- package/.claude/commands/gaia-tech-research.md +0 -17
- package/.claude/commands/gaia-test-automate.md +0 -17
- package/.claude/commands/gaia-test-design.md +0 -17
- package/.claude/commands/gaia-test-framework.md +0 -17
- package/.claude/commands/gaia-test-review.md +0 -17
- package/.claude/commands/gaia-threat-model.md +0 -17
- package/.claude/commands/gaia-trace.md +0 -17
- package/.claude/commands/gaia-triage-findings.md +0 -20
- package/.claude/commands/gaia-val-validate-plan.md +0 -17
- package/.claude/commands/gaia-val-validate.md +0 -17
- package/.claude/commands/gaia-validate-framework.md +0 -17
- package/.claude/commands/gaia-validate-prd.md +0 -17
- package/.claude/commands/gaia-validate-story.md +0 -22
- package/.claude/commands/gaia.md +0 -32
- package/CLAUDE.md +0 -165
- package/_gaia/_config/agent-manifest.csv +0 -29
- package/_gaia/_config/agents/CUSTOMIZATION-README.md +0 -117
- package/_gaia/_config/files-manifest.csv +0 -30
- package/_gaia/_config/gaia-help.csv +0 -82
- package/_gaia/_config/global.yaml +0 -45
- package/_gaia/_config/lifecycle-sequence.yaml +0 -593
- package/_gaia/_config/manifest.yaml +0 -24
- package/_gaia/_config/skill-manifest.csv +0 -12
- package/_gaia/_config/task-manifest.csv +0 -17
- package/_gaia/_config/workflow-manifest.csv +0 -73
- package/_gaia/_memory/tier2-results/.gitkeep +0 -0
- package/_gaia/_memory/tier2-results/checkpoint-resume-2026-03-24.yaml +0 -6
- package/_gaia/_memory/tier2-results/engine-scenarios-2026-03-22.yaml +0 -14
- package/_gaia/core/.resolved/.gitkeep +0 -0
- package/_gaia/core/agents/orchestrator.md +0 -303
- package/_gaia/core/config.yaml +0 -8
- package/_gaia/core/engine/error-recovery.xml +0 -28
- package/_gaia/core/engine/protocols/discover-inputs.xml +0 -31
- package/_gaia/core/engine/protocols/handoff.xml +0 -21
- package/_gaia/core/engine/protocols/preflight-check.xml +0 -31
- package/_gaia/core/engine/task-runner.xml +0 -63
- package/_gaia/core/engine/workflow.xml +0 -225
- package/_gaia/core/module-help.csv +0 -21
- package/_gaia/core/protocols/agent-specification-protocol.md +0 -103
- package/_gaia/core/protocols/review-gate-check.xml +0 -29
- package/_gaia/core/protocols/sprint-status-write-safety.xml +0 -35
- package/_gaia/core/protocols/status-sync.xml +0 -49
- package/_gaia/core/tasks/editorial-review-prose.xml +0 -42
- package/_gaia/core/tasks/editorial-review-structure.xml +0 -43
- package/_gaia/core/tasks/generate-changelog.xml +0 -35
- package/_gaia/core/tasks/help.md +0 -45
- package/_gaia/core/tasks/index-docs.xml +0 -46
- package/_gaia/core/tasks/merge-docs.xml +0 -34
- package/_gaia/core/tasks/review-accessibility.xml +0 -47
- package/_gaia/core/tasks/review-adversarial.xml +0 -55
- package/_gaia/core/tasks/review-api-design.xml +0 -38
- package/_gaia/core/tasks/review-dependency-audit.xml +0 -38
- package/_gaia/core/tasks/review-edge-case-hunter.xml +0 -52
- package/_gaia/core/tasks/review-performance.xml +0 -49
- package/_gaia/core/tasks/review-security.xml +0 -37
- package/_gaia/core/tasks/shard-doc.xml +0 -49
- package/_gaia/core/tasks/summarize-doc.xml +0 -33
- package/_gaia/core/tasks/validate-framework.xml +0 -66
- package/_gaia/core/workflows/brainstorming/steps/step-01-session-setup.md +0 -7
- package/_gaia/core/workflows/brainstorming/steps/step-02-technique-selection.md +0 -20
- package/_gaia/core/workflows/brainstorming/steps/step-03-technique-execution.md +0 -11
- package/_gaia/core/workflows/brainstorming/steps/step-04-idea-organization.md +0 -14
- package/_gaia/core/workflows/brainstorming/template.md +0 -38
- package/_gaia/core/workflows/brainstorming/workflow.yaml +0 -26
- package/_gaia/core/workflows/party-mode/steps/step-01-agent-loading.md +0 -11
- package/_gaia/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +0 -16
- package/_gaia/core/workflows/party-mode/steps/step-03-graceful-exit.md +0 -10
- package/_gaia/core/workflows/party-mode/workflow.yaml +0 -23
- package/_gaia/creative/.resolved/.gitkeep +0 -0
- package/_gaia/creative/agents/brainstorming-coach.md +0 -93
- package/_gaia/creative/agents/design-thinking-coach.md +0 -91
- package/_gaia/creative/agents/innovation-strategist.md +0 -89
- package/_gaia/creative/agents/presentation-designer.md +0 -99
- package/_gaia/creative/agents/problem-solver.md +0 -90
- package/_gaia/creative/agents/storyteller.md +0 -90
- package/_gaia/creative/config.yaml +0 -8
- package/_gaia/creative/data/design-methods.csv +0 -28
- package/_gaia/creative/data/innovation-frameworks.csv +0 -15
- package/_gaia/creative/data/solving-methods.csv +0 -14
- package/_gaia/creative/data/story-types.csv +0 -12
- package/_gaia/creative/module-help.csv +0 -8
- package/_gaia/creative/teams/creative-squad.yaml +0 -10
- package/_gaia/creative/workflows/creative-sprint/checklist.md +0 -10
- package/_gaia/creative/workflows/creative-sprint/instructions.xml +0 -40
- package/_gaia/creative/workflows/creative-sprint/workflow.yaml +0 -11
- package/_gaia/creative/workflows/design-thinking/checklist.md +0 -25
- package/_gaia/creative/workflows/design-thinking/instructions.xml +0 -38
- package/_gaia/creative/workflows/design-thinking/workflow.yaml +0 -13
- package/_gaia/creative/workflows/innovation-strategy/checklist.md +0 -26
- package/_gaia/creative/workflows/innovation-strategy/instructions.xml +0 -34
- package/_gaia/creative/workflows/innovation-strategy/workflow.yaml +0 -13
- package/_gaia/creative/workflows/pitch-deck/checklist.md +0 -22
- package/_gaia/creative/workflows/pitch-deck/instructions.xml +0 -49
- package/_gaia/creative/workflows/pitch-deck/workflow.yaml +0 -15
- package/_gaia/creative/workflows/problem-solving/checklist.md +0 -26
- package/_gaia/creative/workflows/problem-solving/instructions.xml +0 -39
- package/_gaia/creative/workflows/problem-solving/workflow.yaml +0 -13
- package/_gaia/creative/workflows/slide-deck/checklist.md +0 -21
- package/_gaia/creative/workflows/slide-deck/instructions.xml +0 -39
- package/_gaia/creative/workflows/slide-deck/workflow.yaml +0 -15
- package/_gaia/creative/workflows/storytelling/checklist.md +0 -26
- package/_gaia/creative/workflows/storytelling/instructions.xml +0 -38
- package/_gaia/creative/workflows/storytelling/workflow.yaml +0 -13
- package/_gaia/dev/agents/_base-dev.md +0 -180
- package/_gaia/dev/agents/angular-dev.md +0 -70
- package/_gaia/dev/agents/flutter-dev.md +0 -70
- package/_gaia/dev/agents/go-dev.md +0 -72
- package/_gaia/dev/agents/java-dev.md +0 -70
- package/_gaia/dev/agents/mobile-dev.md +0 -70
- package/_gaia/dev/agents/python-dev.md +0 -70
- package/_gaia/dev/agents/typescript-dev.md +0 -70
- package/_gaia/dev/config.yaml +0 -11
- package/_gaia/dev/knowledge/_index.csv +0 -25
- package/_gaia/dev/knowledge/angular/angular-conventions.md +0 -119
- package/_gaia/dev/knowledge/angular/angular-patterns.md +0 -126
- package/_gaia/dev/knowledge/angular/ngrx-state.md +0 -124
- package/_gaia/dev/knowledge/angular/rxjs-patterns.md +0 -119
- package/_gaia/dev/knowledge/flutter/dart-conventions.md +0 -143
- package/_gaia/dev/knowledge/flutter/platform-channels.md +0 -144
- package/_gaia/dev/knowledge/flutter/state-management.md +0 -144
- package/_gaia/dev/knowledge/flutter/widget-patterns.md +0 -134
- package/_gaia/dev/knowledge/go/gin-fiber-patterns.md +0 -40
- package/_gaia/dev/knowledge/go/go-conventions.md +0 -54
- package/_gaia/dev/knowledge/go/go-stdlib-patterns.md +0 -39
- package/_gaia/dev/knowledge/go/go-testing-patterns.md +0 -39
- package/_gaia/dev/knowledge/java/jpa-patterns.md +0 -136
- package/_gaia/dev/knowledge/java/maven-gradle.md +0 -189
- package/_gaia/dev/knowledge/java/microservices.md +0 -159
- package/_gaia/dev/knowledge/java/spring-boot-patterns.md +0 -160
- package/_gaia/dev/knowledge/mobile/kotlin-patterns.md +0 -193
- package/_gaia/dev/knowledge/mobile/mobile-testing.md +0 -186
- package/_gaia/dev/knowledge/mobile/react-native-patterns.md +0 -162
- package/_gaia/dev/knowledge/mobile/swift-patterns.md +0 -190
- package/_gaia/dev/knowledge/python/data-pipelines.md +0 -169
- package/_gaia/dev/knowledge/python/django-patterns.md +0 -145
- package/_gaia/dev/knowledge/python/fastapi-patterns.md +0 -164
- package/_gaia/dev/knowledge/python/python-conventions.md +0 -170
- package/_gaia/dev/knowledge/typescript/express-patterns.md +0 -188
- package/_gaia/dev/knowledge/typescript/nextjs-patterns.md +0 -166
- package/_gaia/dev/knowledge/typescript/react-patterns.md +0 -176
- package/_gaia/dev/knowledge/typescript/ts-conventions.md +0 -133
- package/_gaia/dev/module-help.csv +0 -10
- package/_gaia/dev/skills/_skill-index.yaml +0 -55
- package/_gaia/dev/skills/api-design.md +0 -229
- package/_gaia/dev/skills/code-review-standards.md +0 -226
- package/_gaia/dev/skills/database-design.md +0 -172
- package/_gaia/dev/skills/docker-workflow.md +0 -222
- package/_gaia/dev/skills/documentation-standards.md +0 -256
- package/_gaia/dev/skills/git-workflow.md +0 -157
- package/_gaia/dev/skills/security-basics.md +0 -230
- package/_gaia/dev/skills/testing-patterns.md +0 -232
- package/_gaia/lifecycle/.resolved/.gitkeep +0 -0
- package/_gaia/lifecycle/agents/analyst.md +0 -104
- package/_gaia/lifecycle/agents/architect.md +0 -109
- package/_gaia/lifecycle/agents/data-engineer.md +0 -99
- package/_gaia/lifecycle/agents/devops.md +0 -110
- package/_gaia/lifecycle/agents/performance.md +0 -92
- package/_gaia/lifecycle/agents/pm.md +0 -112
- package/_gaia/lifecycle/agents/qa.md +0 -89
- package/_gaia/lifecycle/agents/security.md +0 -108
- package/_gaia/lifecycle/agents/sm.md +0 -119
- package/_gaia/lifecycle/agents/tech-writer.md +0 -94
- package/_gaia/lifecycle/agents/ux-designer.md +0 -94
- package/_gaia/lifecycle/agents/validator.md +0 -189
- package/_gaia/lifecycle/config.yaml +0 -14
- package/_gaia/lifecycle/module-help.csv +0 -39
- package/_gaia/lifecycle/skills/ground-truth-management.md +0 -252
- package/_gaia/lifecycle/skills/memory-management.md +0 -322
- package/_gaia/lifecycle/skills/validation-patterns.md +0 -230
- package/_gaia/lifecycle/teams/team-data-intensive.yaml +0 -12
- package/_gaia/lifecycle/teams/team-enterprise.yaml +0 -16
- package/_gaia/lifecycle/teams/team-full.yaml +0 -13
- package/_gaia/lifecycle/teams/team-implementation.yaml +0 -8
- package/_gaia/lifecycle/teams/team-planning.yaml +0 -9
- package/_gaia/lifecycle/teams/team-quick-ship.yaml +0 -6
- package/_gaia/lifecycle/teams/team-security-focused.yaml +0 -13
- package/_gaia/lifecycle/templates/api-documentation-template.md +0 -112
- package/_gaia/lifecycle/templates/architecture-template.md +0 -65
- package/_gaia/lifecycle/templates/brownfield-architecture-template.md +0 -198
- package/_gaia/lifecycle/templates/brownfield-assessment-template.md +0 -78
- package/_gaia/lifecycle/templates/brownfield-onboarding-template.md +0 -160
- package/_gaia/lifecycle/templates/dependency-map-template.md +0 -73
- package/_gaia/lifecycle/templates/deployment-template.md +0 -52
- package/_gaia/lifecycle/templates/epic-status-template.md +0 -64
- package/_gaia/lifecycle/templates/event-catalog-template.md +0 -78
- package/_gaia/lifecycle/templates/nfr-assessment-template.md +0 -96
- package/_gaia/lifecycle/templates/prd-template.md +0 -83
- package/_gaia/lifecycle/templates/product-brief-template.md +0 -48
- package/_gaia/lifecycle/templates/review-template.md +0 -47
- package/_gaia/lifecycle/templates/sprint-plan-template.md +0 -45
- package/_gaia/lifecycle/templates/story-template.md +0 -118
- package/_gaia/lifecycle/templates/tech-debt-dashboard-template.md +0 -71
- package/_gaia/lifecycle/templates/test-plan-template.md +0 -56
- package/_gaia/lifecycle/templates/ux-design-assessment-template.md +0 -122
- package/_gaia/lifecycle/workflows/1-analysis/advanced-elicitation/instructions.xml +0 -44
- package/_gaia/lifecycle/workflows/1-analysis/advanced-elicitation/methods.csv +0 -9
- package/_gaia/lifecycle/workflows/1-analysis/advanced-elicitation/workflow.yaml +0 -33
- package/_gaia/lifecycle/workflows/1-analysis/brainstorm-project/checklist.md +0 -24
- package/_gaia/lifecycle/workflows/1-analysis/brainstorm-project/instructions.xml +0 -39
- package/_gaia/lifecycle/workflows/1-analysis/brainstorm-project/workflow.yaml +0 -19
- package/_gaia/lifecycle/workflows/1-analysis/create-product-brief/checklist.md +0 -27
- package/_gaia/lifecycle/workflows/1-analysis/create-product-brief/instructions.xml +0 -57
- package/_gaia/lifecycle/workflows/1-analysis/create-product-brief/workflow.yaml +0 -38
- package/_gaia/lifecycle/workflows/1-analysis/domain-research/checklist.md +0 -22
- package/_gaia/lifecycle/workflows/1-analysis/domain-research/instructions.xml +0 -34
- package/_gaia/lifecycle/workflows/1-analysis/domain-research/workflow.yaml +0 -15
- package/_gaia/lifecycle/workflows/1-analysis/market-research/checklist.md +0 -28
- package/_gaia/lifecycle/workflows/1-analysis/market-research/instructions.xml +0 -42
- package/_gaia/lifecycle/workflows/1-analysis/market-research/workflow.yaml +0 -15
- package/_gaia/lifecycle/workflows/1-analysis/technical-research/checklist.md +0 -22
- package/_gaia/lifecycle/workflows/1-analysis/technical-research/instructions.xml +0 -34
- package/_gaia/lifecycle/workflows/1-analysis/technical-research/workflow.yaml +0 -15
- package/_gaia/lifecycle/workflows/2-planning/create-prd/checklist.md +0 -36
- package/_gaia/lifecycle/workflows/2-planning/create-prd/instructions.xml +0 -80
- package/_gaia/lifecycle/workflows/2-planning/create-prd/workflow.yaml +0 -23
- package/_gaia/lifecycle/workflows/2-planning/create-ux-design/checklist.md +0 -26
- package/_gaia/lifecycle/workflows/2-planning/create-ux-design/instructions.xml +0 -49
- package/_gaia/lifecycle/workflows/2-planning/create-ux-design/workflow.yaml +0 -23
- package/_gaia/lifecycle/workflows/2-planning/edit-prd/checklist.md +0 -17
- package/_gaia/lifecycle/workflows/2-planning/edit-prd/instructions.xml +0 -50
- package/_gaia/lifecycle/workflows/2-planning/edit-prd/workflow.yaml +0 -22
- package/_gaia/lifecycle/workflows/2-planning/validate-prd/checklist.md +0 -12
- package/_gaia/lifecycle/workflows/2-planning/validate-prd/instructions.xml +0 -52
- package/_gaia/lifecycle/workflows/2-planning/validate-prd/workflow.yaml +0 -19
- package/_gaia/lifecycle/workflows/3-solutioning/create-architecture/checklist.md +0 -32
- package/_gaia/lifecycle/workflows/3-solutioning/create-architecture/instructions.xml +0 -100
- package/_gaia/lifecycle/workflows/3-solutioning/create-architecture/workflow.yaml +0 -41
- package/_gaia/lifecycle/workflows/3-solutioning/create-epics-stories/checklist.md +0 -30
- package/_gaia/lifecycle/workflows/3-solutioning/create-epics-stories/instructions.xml +0 -86
- package/_gaia/lifecycle/workflows/3-solutioning/create-epics-stories/workflow.yaml +0 -34
- package/_gaia/lifecycle/workflows/3-solutioning/edit-architecture/checklist.md +0 -24
- package/_gaia/lifecycle/workflows/3-solutioning/edit-architecture/instructions.xml +0 -91
- package/_gaia/lifecycle/workflows/3-solutioning/edit-architecture/workflow.yaml +0 -32
- package/_gaia/lifecycle/workflows/3-solutioning/implementation-readiness/checklist.md +0 -66
- package/_gaia/lifecycle/workflows/3-solutioning/implementation-readiness/instructions.xml +0 -160
- package/_gaia/lifecycle/workflows/3-solutioning/implementation-readiness/workflow.yaml +0 -48
- package/_gaia/lifecycle/workflows/3-solutioning/infrastructure-design/checklist.md +0 -24
- package/_gaia/lifecycle/workflows/3-solutioning/infrastructure-design/instructions.xml +0 -44
- package/_gaia/lifecycle/workflows/3-solutioning/infrastructure-design/workflow.yaml +0 -23
- package/_gaia/lifecycle/workflows/3-solutioning/security-threat-model/checklist.md +0 -24
- package/_gaia/lifecycle/workflows/3-solutioning/security-threat-model/instructions.xml +0 -55
- package/_gaia/lifecycle/workflows/3-solutioning/security-threat-model/workflow.yaml +0 -23
- package/_gaia/lifecycle/workflows/4-implementation/action-items/instructions.xml +0 -131
- package/_gaia/lifecycle/workflows/4-implementation/action-items/workflow.yaml +0 -19
- package/_gaia/lifecycle/workflows/4-implementation/add-stories/checklist.md +0 -27
- package/_gaia/lifecycle/workflows/4-implementation/add-stories/instructions.xml +0 -100
- package/_gaia/lifecycle/workflows/4-implementation/add-stories/workflow.yaml +0 -35
- package/_gaia/lifecycle/workflows/4-implementation/change-request/checklist.md +0 -25
- package/_gaia/lifecycle/workflows/4-implementation/change-request/instructions.xml +0 -123
- package/_gaia/lifecycle/workflows/4-implementation/change-request/workflow.yaml +0 -38
- package/_gaia/lifecycle/workflows/4-implementation/check-dod/checklist.md +0 -18
- package/_gaia/lifecycle/workflows/4-implementation/check-dod/instructions.xml +0 -54
- package/_gaia/lifecycle/workflows/4-implementation/check-dod/workflow.yaml +0 -19
- package/_gaia/lifecycle/workflows/4-implementation/check-review-gate/checklist.md +0 -18
- package/_gaia/lifecycle/workflows/4-implementation/check-review-gate/instructions.xml +0 -53
- package/_gaia/lifecycle/workflows/4-implementation/check-review-gate/workflow.yaml +0 -19
- package/_gaia/lifecycle/workflows/4-implementation/code-review/checklist.md +0 -18
- package/_gaia/lifecycle/workflows/4-implementation/code-review/instructions.xml +0 -50
- package/_gaia/lifecycle/workflows/4-implementation/code-review/workflow.yaml +0 -24
- package/_gaia/lifecycle/workflows/4-implementation/correct-course/checklist.md +0 -21
- package/_gaia/lifecycle/workflows/4-implementation/correct-course/instructions.xml +0 -63
- package/_gaia/lifecycle/workflows/4-implementation/correct-course/workflow.yaml +0 -25
- package/_gaia/lifecycle/workflows/4-implementation/create-story/checklist.md +0 -38
- package/_gaia/lifecycle/workflows/4-implementation/create-story/instructions.xml +0 -194
- package/_gaia/lifecycle/workflows/4-implementation/create-story/workflow.yaml +0 -26
- package/_gaia/lifecycle/workflows/4-implementation/dev-story/checklist.md +0 -26
- package/_gaia/lifecycle/workflows/4-implementation/dev-story/instructions.xml +0 -268
- package/_gaia/lifecycle/workflows/4-implementation/dev-story/workflow.yaml +0 -51
- package/_gaia/lifecycle/workflows/4-implementation/epic-status/checklist.md +0 -25
- package/_gaia/lifecycle/workflows/4-implementation/epic-status/instructions.xml +0 -62
- package/_gaia/lifecycle/workflows/4-implementation/epic-status/workflow.yaml +0 -24
- package/_gaia/lifecycle/workflows/4-implementation/fix-story/checklist.md +0 -12
- package/_gaia/lifecycle/workflows/4-implementation/fix-story/instructions.xml +0 -67
- package/_gaia/lifecycle/workflows/4-implementation/fix-story/workflow.yaml +0 -17
- package/_gaia/lifecycle/workflows/4-implementation/qa-generate-tests/checklist.md +0 -19
- package/_gaia/lifecycle/workflows/4-implementation/qa-generate-tests/instructions.xml +0 -52
- package/_gaia/lifecycle/workflows/4-implementation/qa-generate-tests/workflow.yaml +0 -20
- package/_gaia/lifecycle/workflows/4-implementation/retrospective/checklist.md +0 -15
- package/_gaia/lifecycle/workflows/4-implementation/retrospective/instructions.xml +0 -164
- package/_gaia/lifecycle/workflows/4-implementation/retrospective/workflow.yaml +0 -30
- package/_gaia/lifecycle/workflows/4-implementation/run-all-reviews/checklist.md +0 -14
- package/_gaia/lifecycle/workflows/4-implementation/run-all-reviews/instructions.xml +0 -78
- package/_gaia/lifecycle/workflows/4-implementation/run-all-reviews/workflow.yaml +0 -16
- package/_gaia/lifecycle/workflows/4-implementation/security-review/checklist.md +0 -29
- package/_gaia/lifecycle/workflows/4-implementation/security-review/instructions.xml +0 -80
- package/_gaia/lifecycle/workflows/4-implementation/security-review/workflow.yaml +0 -27
- package/_gaia/lifecycle/workflows/4-implementation/sprint-planning/checklist.md +0 -29
- package/_gaia/lifecycle/workflows/4-implementation/sprint-planning/instructions.xml +0 -140
- package/_gaia/lifecycle/workflows/4-implementation/sprint-planning/workflow.yaml +0 -33
- package/_gaia/lifecycle/workflows/4-implementation/sprint-status/checklist.md +0 -18
- package/_gaia/lifecycle/workflows/4-implementation/sprint-status/instructions.xml +0 -36
- package/_gaia/lifecycle/workflows/4-implementation/sprint-status/workflow.yaml +0 -19
- package/_gaia/lifecycle/workflows/4-implementation/tech-debt-review/checklist.md +0 -30
- package/_gaia/lifecycle/workflows/4-implementation/tech-debt-review/instructions.xml +0 -147
- package/_gaia/lifecycle/workflows/4-implementation/tech-debt-review/workflow.yaml +0 -24
- package/_gaia/lifecycle/workflows/4-implementation/triage-findings/checklist.md +0 -17
- package/_gaia/lifecycle/workflows/4-implementation/triage-findings/instructions.xml +0 -124
- package/_gaia/lifecycle/workflows/4-implementation/triage-findings/workflow.yaml +0 -15
- package/_gaia/lifecycle/workflows/4-implementation/val-refresh-ground-truth/checklist.md +0 -48
- package/_gaia/lifecycle/workflows/4-implementation/val-refresh-ground-truth/instructions.xml +0 -125
- package/_gaia/lifecycle/workflows/4-implementation/val-refresh-ground-truth/workflow.yaml +0 -31
- package/_gaia/lifecycle/workflows/4-implementation/val-validate-artifact/checklist.md +0 -54
- package/_gaia/lifecycle/workflows/4-implementation/val-validate-artifact/instructions.xml +0 -147
- package/_gaia/lifecycle/workflows/4-implementation/val-validate-artifact/test-structure.sh +0 -116
- package/_gaia/lifecycle/workflows/4-implementation/val-validate-artifact/workflow.yaml +0 -29
- package/_gaia/lifecycle/workflows/4-implementation/val-validate-plan/checklist.md +0 -34
- package/_gaia/lifecycle/workflows/4-implementation/val-validate-plan/instructions.xml +0 -162
- package/_gaia/lifecycle/workflows/4-implementation/val-validate-plan/workflow.yaml +0 -39
- package/_gaia/lifecycle/workflows/4-implementation/validate-story/checklist.md +0 -23
- package/_gaia/lifecycle/workflows/4-implementation/validate-story/instructions.xml +0 -146
- package/_gaia/lifecycle/workflows/4-implementation/validate-story/workflow.yaml +0 -25
- package/_gaia/lifecycle/workflows/5-deployment/deployment-checklist/checklist.md +0 -29
- package/_gaia/lifecycle/workflows/5-deployment/deployment-checklist/instructions.xml +0 -59
- package/_gaia/lifecycle/workflows/5-deployment/deployment-checklist/workflow.yaml +0 -39
- package/_gaia/lifecycle/workflows/5-deployment/post-deploy-verify/checklist.md +0 -19
- package/_gaia/lifecycle/workflows/5-deployment/post-deploy-verify/instructions.xml +0 -33
- package/_gaia/lifecycle/workflows/5-deployment/post-deploy-verify/workflow.yaml +0 -15
- package/_gaia/lifecycle/workflows/5-deployment/release-plan/checklist.md +0 -20
- package/_gaia/lifecycle/workflows/5-deployment/release-plan/instructions.xml +0 -33
- package/_gaia/lifecycle/workflows/5-deployment/release-plan/workflow.yaml +0 -19
- package/_gaia/lifecycle/workflows/5-deployment/rollback-plan/checklist.md +0 -20
- package/_gaia/lifecycle/workflows/5-deployment/rollback-plan/instructions.xml +0 -33
- package/_gaia/lifecycle/workflows/5-deployment/rollback-plan/workflow.yaml +0 -15
- package/_gaia/lifecycle/workflows/anytime/brownfield-onboarding/checklist.md +0 -52
- package/_gaia/lifecycle/workflows/anytime/brownfield-onboarding/instructions.xml +0 -122
- package/_gaia/lifecycle/workflows/anytime/brownfield-onboarding/test-step7.sh +0 -149
- package/_gaia/lifecycle/workflows/anytime/brownfield-onboarding/workflow.yaml +0 -33
- package/_gaia/lifecycle/workflows/anytime/document-project/checklist.md +0 -11
- package/_gaia/lifecycle/workflows/anytime/document-project/instructions.xml +0 -26
- package/_gaia/lifecycle/workflows/anytime/document-project/workflow.yaml +0 -15
- package/_gaia/lifecycle/workflows/anytime/generate-project-context/checklist.md +0 -11
- package/_gaia/lifecycle/workflows/anytime/generate-project-context/instructions.xml +0 -22
- package/_gaia/lifecycle/workflows/anytime/generate-project-context/workflow.yaml +0 -15
- package/_gaia/lifecycle/workflows/anytime/memory-hygiene/checklist.md +0 -24
- package/_gaia/lifecycle/workflows/anytime/memory-hygiene/instructions.xml +0 -108
- package/_gaia/lifecycle/workflows/anytime/memory-hygiene/workflow.yaml +0 -15
- package/_gaia/lifecycle/workflows/anytime/performance-review/checklist.md +0 -25
- package/_gaia/lifecycle/workflows/anytime/performance-review/instructions.xml +0 -62
- package/_gaia/lifecycle/workflows/anytime/performance-review/workflow.yaml +0 -15
- package/_gaia/lifecycle/workflows/cross-phase/add-feature/checklist.md +0 -30
- package/_gaia/lifecycle/workflows/cross-phase/add-feature/instructions.xml +0 -85
- package/_gaia/lifecycle/workflows/cross-phase/add-feature/workflow.yaml +0 -37
- package/_gaia/lifecycle/workflows/quick-flow/quick-dev/checklist.md +0 -11
- package/_gaia/lifecycle/workflows/quick-flow/quick-dev/instructions.xml +0 -26
- package/_gaia/lifecycle/workflows/quick-flow/quick-dev/workflow.yaml +0 -19
- package/_gaia/lifecycle/workflows/quick-flow/quick-spec/checklist.md +0 -13
- package/_gaia/lifecycle/workflows/quick-flow/quick-spec/instructions.xml +0 -27
- package/_gaia/lifecycle/workflows/quick-flow/quick-spec/workflow.yaml +0 -15
- package/_gaia/testing/.resolved/.gitkeep +0 -0
- package/_gaia/testing/agents/test-architect.md +0 -131
- package/_gaia/testing/config.yaml +0 -8
- package/_gaia/testing/knowledge/_index.csv +0 -22
- package/_gaia/testing/knowledge/accessibility/axe-core-patterns.md +0 -177
- package/_gaia/testing/knowledge/accessibility/wcag-checks.md +0 -191
- package/_gaia/testing/knowledge/core/deterministic-testing.md +0 -167
- package/_gaia/testing/knowledge/core/fixture-architecture.md +0 -131
- package/_gaia/testing/knowledge/core/test-isolation.md +0 -142
- package/_gaia/testing/knowledge/core/test-pyramid.md +0 -129
- package/_gaia/testing/knowledge/extended/api-testing-patterns.md +0 -196
- package/_gaia/testing/knowledge/extended/data-factories.md +0 -158
- package/_gaia/testing/knowledge/extended/risk-governance.md +0 -119
- package/_gaia/testing/knowledge/extended/selector-resilience.md +0 -109
- package/_gaia/testing/knowledge/mobile-testing/appium-patterns.md +0 -164
- package/_gaia/testing/knowledge/mobile-testing/react-native-testing.md +0 -193
- package/_gaia/testing/knowledge/mobile-testing/responsive-testing.md +0 -177
- package/_gaia/testing/knowledge/performance/k6-patterns.md +0 -200
- package/_gaia/testing/knowledge/performance/lighthouse-ci.md +0 -158
- package/_gaia/testing/knowledge/specialized/contract-testing.md +0 -173
- package/_gaia/testing/knowledge/specialized/test-healing.md +0 -129
- package/_gaia/testing/knowledge/specialized/visual-testing.md +0 -129
- package/_gaia/testing/knowledge/unit-testing/jest-vitest-patterns.md +0 -193
- package/_gaia/testing/knowledge/unit-testing/junit5-patterns.md +0 -200
- package/_gaia/testing/knowledge/unit-testing/pytest-patterns.md +0 -185
- package/_gaia/testing/module-help.csv +0 -13
- package/_gaia/testing/workflows/accessibility-testing/checklist.md +0 -12
- package/_gaia/testing/workflows/accessibility-testing/instructions.xml +0 -41
- package/_gaia/testing/workflows/accessibility-testing/workflow.yaml +0 -13
- package/_gaia/testing/workflows/atdd/checklist.md +0 -6
- package/_gaia/testing/workflows/atdd/instructions.xml +0 -36
- package/_gaia/testing/workflows/atdd/workflow.yaml +0 -22
- package/_gaia/testing/workflows/ci-setup/checklist.md +0 -9
- package/_gaia/testing/workflows/ci-setup/instructions.xml +0 -43
- package/_gaia/testing/workflows/ci-setup/workflow.yaml +0 -11
- package/_gaia/testing/workflows/edit-test-plan/checklist.md +0 -20
- package/_gaia/testing/workflows/edit-test-plan/instructions.xml +0 -65
- package/_gaia/testing/workflows/edit-test-plan/workflow.yaml +0 -35
- package/_gaia/testing/workflows/mobile-testing/checklist.md +0 -13
- package/_gaia/testing/workflows/mobile-testing/instructions.xml +0 -41
- package/_gaia/testing/workflows/mobile-testing/workflow.yaml +0 -11
- package/_gaia/testing/workflows/nfr-assessment/checklist.md +0 -7
- package/_gaia/testing/workflows/nfr-assessment/instructions.xml +0 -26
- package/_gaia/testing/workflows/nfr-assessment/workflow.yaml +0 -11
- package/_gaia/testing/workflows/performance-testing/checklist.md +0 -11
- package/_gaia/testing/workflows/performance-testing/instructions.xml +0 -41
- package/_gaia/testing/workflows/performance-testing/workflow.yaml +0 -11
- package/_gaia/testing/workflows/teach-me-testing/checklist.md +0 -6
- package/_gaia/testing/workflows/teach-me-testing/instructions.xml +0 -28
- package/_gaia/testing/workflows/teach-me-testing/workflow.yaml +0 -12
- package/_gaia/testing/workflows/test-automation/checklist.md +0 -6
- package/_gaia/testing/workflows/test-automation/instructions.xml +0 -49
- package/_gaia/testing/workflows/test-automation/workflow.yaml +0 -11
- package/_gaia/testing/workflows/test-design/checklist.md +0 -9
- package/_gaia/testing/workflows/test-design/instructions.xml +0 -47
- package/_gaia/testing/workflows/test-design/workflow.yaml +0 -11
- package/_gaia/testing/workflows/test-framework/checklist.md +0 -8
- package/_gaia/testing/workflows/test-framework/instructions.xml +0 -25
- package/_gaia/testing/workflows/test-framework/workflow.yaml +0 -11
- package/_gaia/testing/workflows/test-review/checklist.md +0 -9
- package/_gaia/testing/workflows/test-review/instructions.xml +0 -51
- package/_gaia/testing/workflows/test-review/workflow.yaml +0 -11
- package/_gaia/testing/workflows/traceability/checklist.md +0 -6
- package/_gaia/testing/workflows/traceability/instructions.xml +0 -49
- package/_gaia/testing/workflows/traceability/workflow.yaml +0 -21
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: appium-patterns
|
|
3
|
-
tier: mobile-testing
|
|
4
|
-
version: '1.0'
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Appium Patterns
|
|
8
|
-
|
|
9
|
-
## Principle
|
|
10
|
-
|
|
11
|
-
Appium provides cross-platform mobile test automation using the WebDriver protocol.
|
|
12
|
-
Write tests once against a standard API, then run them on iOS and Android with
|
|
13
|
-
platform-specific capabilities. The Page Object Model keeps tests maintainable
|
|
14
|
-
as the app evolves.
|
|
15
|
-
|
|
16
|
-
## Rationale
|
|
17
|
-
|
|
18
|
-
Native mobile apps have platform-specific UI frameworks (UIKit, Jetpack Compose) that
|
|
19
|
-
require different automation approaches. Appium abstracts these differences behind a
|
|
20
|
-
unified API, enabling shared test logic with platform-specific configuration. This
|
|
21
|
-
reduces maintenance overhead for cross-platform apps.
|
|
22
|
-
|
|
23
|
-
## Pattern Examples
|
|
24
|
-
|
|
25
|
-
### Desired Capabilities
|
|
26
|
-
|
|
27
|
-
```javascript
|
|
28
|
-
// Android
|
|
29
|
-
const androidCaps = {
|
|
30
|
-
platformName: 'Android',
|
|
31
|
-
'appium:automationName': 'UiAutomator2',
|
|
32
|
-
'appium:deviceName': 'Pixel 6',
|
|
33
|
-
'appium:platformVersion': '13',
|
|
34
|
-
'appium:app': '/path/to/app.apk',
|
|
35
|
-
'appium:noReset': false,
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
// iOS
|
|
39
|
-
const iosCaps = {
|
|
40
|
-
platformName: 'iOS',
|
|
41
|
-
'appium:automationName': 'XCUITest',
|
|
42
|
-
'appium:deviceName': 'iPhone 14',
|
|
43
|
-
'appium:platformVersion': '16.4',
|
|
44
|
-
'appium:app': '/path/to/app.ipa',
|
|
45
|
-
'appium:noReset': false,
|
|
46
|
-
};
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
### Element Location Strategies
|
|
50
|
-
|
|
51
|
-
```javascript
|
|
52
|
-
// Accessibility ID — preferred, cross-platform
|
|
53
|
-
const loginButton = await driver.$('~login-button');
|
|
54
|
-
|
|
55
|
-
// Resource ID (Android)
|
|
56
|
-
const emailField = await driver.$('android=new UiSelector().resourceId("email-input")');
|
|
57
|
-
|
|
58
|
-
// iOS predicate
|
|
59
|
-
const submitBtn = await driver.$('-ios predicate string:name == "Submit"');
|
|
60
|
-
|
|
61
|
-
// XPath — last resort, fragile
|
|
62
|
-
const header = await driver.$('//android.widget.TextView[@text="Welcome"]');
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### Page Object Model
|
|
66
|
-
|
|
67
|
-
```typescript
|
|
68
|
-
class LoginPage {
|
|
69
|
-
get emailInput() { return $('~email-input'); }
|
|
70
|
-
get passwordInput() { return $('~password-input'); }
|
|
71
|
-
get loginButton() { return $('~login-button'); }
|
|
72
|
-
get errorMessage() { return $('~error-message'); }
|
|
73
|
-
|
|
74
|
-
async login(email: string, password: string) {
|
|
75
|
-
await this.emailInput.setValue(email);
|
|
76
|
-
await this.passwordInput.setValue(password);
|
|
77
|
-
await this.loginButton.click();
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
async getErrorText(): Promise<string> {
|
|
81
|
-
await this.errorMessage.waitForDisplayed({ timeout: 5000 });
|
|
82
|
-
return this.errorMessage.getText();
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### Wait Strategies
|
|
88
|
-
|
|
89
|
-
```javascript
|
|
90
|
-
// Explicit wait — preferred
|
|
91
|
-
await driver.waitUntil(
|
|
92
|
-
async () => (await $('~dashboard-title')).isDisplayed(),
|
|
93
|
-
{ timeout: 10000, timeoutMsg: 'Dashboard did not load' }
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
// Element wait
|
|
97
|
-
const element = await $('~loading-spinner');
|
|
98
|
-
await element.waitForDisplayed({ timeout: 5000, reverse: true }); // wait to disappear
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
### Gesture Automation
|
|
102
|
-
|
|
103
|
-
```javascript
|
|
104
|
-
// Swipe
|
|
105
|
-
await driver.execute('mobile: swipe', { direction: 'up', element: listView.elementId });
|
|
106
|
-
|
|
107
|
-
// Long press
|
|
108
|
-
await driver.execute('mobile: longClickGesture', {
|
|
109
|
-
elementId: item.elementId,
|
|
110
|
-
duration: 2000,
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
// Scroll to element
|
|
114
|
-
await driver.execute('mobile: scroll', {
|
|
115
|
-
strategy: 'accessibility id',
|
|
116
|
-
selector: 'target-element',
|
|
117
|
-
});
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
### Device Farm Integration
|
|
121
|
-
|
|
122
|
-
```javascript
|
|
123
|
-
// BrowserStack
|
|
124
|
-
const bsCaps = {
|
|
125
|
-
'bstack:options': {
|
|
126
|
-
projectName: 'MyApp Tests',
|
|
127
|
-
buildName: `Build ${process.env.BUILD_NUMBER}`,
|
|
128
|
-
deviceName: 'Samsung Galaxy S22',
|
|
129
|
-
osVersion: '12.0',
|
|
130
|
-
},
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
// SauceLabs
|
|
134
|
-
const sauceCaps = {
|
|
135
|
-
'sauce:options': {
|
|
136
|
-
appiumVersion: '2.0',
|
|
137
|
-
deviceName: 'Google Pixel 6',
|
|
138
|
-
platformVersion: '13',
|
|
139
|
-
},
|
|
140
|
-
};
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
## Anti-Patterns
|
|
144
|
-
|
|
145
|
-
1. **XPath-first selectors** — XPath is slow and fragile. Use accessibility IDs
|
|
146
|
-
as the primary locator strategy; they survive UI restructuring.
|
|
147
|
-
|
|
148
|
-
2. **Implicit waits** — Global implicit waits mask timing issues and slow down
|
|
149
|
-
failure detection. Use explicit waits targeted to specific elements.
|
|
150
|
-
|
|
151
|
-
3. **Hardcoded sleep** — `Thread.sleep(5000)` is always wrong. Use waitUntil
|
|
152
|
-
with a meaningful condition and timeout.
|
|
153
|
-
|
|
154
|
-
4. **Platform-coupled tests** — Writing separate test suites for iOS and Android
|
|
155
|
-
when 90% of the logic is identical. Share test logic, isolate capabilities.
|
|
156
|
-
|
|
157
|
-
5. **Ignoring app state** — Not resetting app state between tests causes cascading
|
|
158
|
-
failures. Use `noReset: false` or explicit cleanup.
|
|
159
|
-
|
|
160
|
-
## Integration Points
|
|
161
|
-
|
|
162
|
-
- **Tools**: Appium Server 2.x, UiAutomator2 (Android), XCUITest (iOS)
|
|
163
|
-
- **Workflows**: `mobile-testing` (test plan), `test-automation` (coverage expansion)
|
|
164
|
-
- **Related fragments**: `selector-resilience` (locator strategies)
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: react-native-testing
|
|
3
|
-
tier: mobile-testing
|
|
4
|
-
version: '1.0'
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# React Native Testing
|
|
8
|
-
|
|
9
|
-
## Principle
|
|
10
|
-
|
|
11
|
-
React Native testing follows the same test pyramid as web React: Jest for unit tests,
|
|
12
|
-
React Native Testing Library for component tests, and Detox for E2E. Native modules
|
|
13
|
-
require mocking, but the core testing philosophy — test behavior, not implementation
|
|
14
|
-
— remains identical.
|
|
15
|
-
|
|
16
|
-
## Rationale
|
|
17
|
-
|
|
18
|
-
React Native bridges JavaScript and native code, creating unique testing challenges.
|
|
19
|
-
Native modules, platform-specific behavior, and navigation require careful mocking
|
|
20
|
-
strategies. Detox provides gray-box E2E testing that synchronizes with the app's
|
|
21
|
-
internal state, reducing flakiness.
|
|
22
|
-
|
|
23
|
-
## Pattern Examples
|
|
24
|
-
|
|
25
|
-
### Jest + React Native Testing Library
|
|
26
|
-
|
|
27
|
-
```typescript
|
|
28
|
-
import { render, screen, fireEvent } from '@testing-library/react-native';
|
|
29
|
-
import { ProfileCard } from './ProfileCard';
|
|
30
|
-
|
|
31
|
-
describe('ProfileCard', () => {
|
|
32
|
-
it('displays user information', () => {
|
|
33
|
-
render(<ProfileCard name="Alice" email="alice@example.com" />);
|
|
34
|
-
|
|
35
|
-
expect(screen.getByText('Alice')).toBeTruthy();
|
|
36
|
-
expect(screen.getByText('alice@example.com')).toBeTruthy();
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
it('calls onPress when tapped', () => {
|
|
40
|
-
const onPress = jest.fn();
|
|
41
|
-
render(<ProfileCard name="Alice" email="alice@example.com" onPress={onPress} />);
|
|
42
|
-
|
|
43
|
-
fireEvent.press(screen.getByText('Alice'));
|
|
44
|
-
expect(onPress).toHaveBeenCalledTimes(1);
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
### Navigation Testing
|
|
50
|
-
|
|
51
|
-
```typescript
|
|
52
|
-
import { NavigationContainer } from '@react-navigation/native';
|
|
53
|
-
import { render, screen, fireEvent } from '@testing-library/react-native';
|
|
54
|
-
|
|
55
|
-
function renderWithNavigation(component: React.ReactElement) {
|
|
56
|
-
return render(
|
|
57
|
-
<NavigationContainer>{component}</NavigationContainer>
|
|
58
|
-
);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
describe('AppNavigator', () => {
|
|
62
|
-
it('navigates to profile on tab press', () => {
|
|
63
|
-
renderWithNavigation(<AppNavigator />);
|
|
64
|
-
fireEvent.press(screen.getByText('Profile'));
|
|
65
|
-
expect(screen.getByText('Profile Settings')).toBeTruthy();
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
### Native Module Mocking
|
|
71
|
-
|
|
72
|
-
```typescript
|
|
73
|
-
// jest/setup.ts — mock native modules globally
|
|
74
|
-
jest.mock('react-native/Libraries/Animated/NativeAnimatedHelper');
|
|
75
|
-
|
|
76
|
-
jest.mock('@react-native-async-storage/async-storage', () =>
|
|
77
|
-
require('@react-native-async-storage/async-storage/jest/async-storage-mock')
|
|
78
|
-
);
|
|
79
|
-
|
|
80
|
-
jest.mock('react-native-camera', () => ({
|
|
81
|
-
RNCamera: {
|
|
82
|
-
Constants: {
|
|
83
|
-
Type: { back: 'back', front: 'front' },
|
|
84
|
-
FlashMode: { on: 'on', off: 'off', auto: 'auto' },
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
}));
|
|
88
|
-
|
|
89
|
-
// Platform-specific mock
|
|
90
|
-
jest.mock('react-native/Libraries/Utilities/Platform', () => ({
|
|
91
|
-
OS: 'ios',
|
|
92
|
-
select: (obj: any) => obj.ios,
|
|
93
|
-
}));
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
### Detox E2E Setup
|
|
97
|
-
|
|
98
|
-
```javascript
|
|
99
|
-
// .detoxrc.js
|
|
100
|
-
module.exports = {
|
|
101
|
-
testRunner: { args: { config: 'e2e/jest.config.js' } },
|
|
102
|
-
apps: {
|
|
103
|
-
'ios.release': {
|
|
104
|
-
type: 'ios.app',
|
|
105
|
-
binaryPath: 'ios/build/MyApp.app',
|
|
106
|
-
build: 'xcodebuild -workspace ios/MyApp.xcworkspace -scheme MyApp -configuration Release -sdk iphonesimulator',
|
|
107
|
-
},
|
|
108
|
-
'android.release': {
|
|
109
|
-
type: 'android.apk',
|
|
110
|
-
binaryPath: 'android/app/build/outputs/apk/release/app-release.apk',
|
|
111
|
-
build: 'cd android && ./gradlew assembleRelease',
|
|
112
|
-
},
|
|
113
|
-
},
|
|
114
|
-
devices: {
|
|
115
|
-
simulator: { type: 'ios.simulator', device: { type: 'iPhone 15' } },
|
|
116
|
-
emulator: { type: 'android.emulator', device: { avdName: 'Pixel_6_API_33' } },
|
|
117
|
-
},
|
|
118
|
-
};
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
### Detox E2E Tests
|
|
122
|
-
|
|
123
|
-
```typescript
|
|
124
|
-
describe('Login Flow', () => {
|
|
125
|
-
beforeAll(async () => {
|
|
126
|
-
await device.launchApp({ newInstance: true });
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
beforeEach(async () => {
|
|
130
|
-
await device.reloadReactNative();
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
it('logs in with valid credentials', async () => {
|
|
134
|
-
await element(by.id('email-input')).typeText('user@example.com');
|
|
135
|
-
await element(by.id('password-input')).typeText('password123');
|
|
136
|
-
await element(by.id('login-button')).tap();
|
|
137
|
-
|
|
138
|
-
await waitFor(element(by.id('dashboard-screen')))
|
|
139
|
-
.toBeVisible()
|
|
140
|
-
.withTimeout(5000);
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
it('shows error for invalid credentials', async () => {
|
|
144
|
-
await element(by.id('email-input')).typeText('wrong@example.com');
|
|
145
|
-
await element(by.id('password-input')).typeText('wrong');
|
|
146
|
-
await element(by.id('login-button')).tap();
|
|
147
|
-
|
|
148
|
-
await expect(element(by.text('Invalid credentials'))).toBeVisible();
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
### Snapshot Testing for Components
|
|
154
|
-
|
|
155
|
-
```typescript
|
|
156
|
-
import { render } from '@testing-library/react-native';
|
|
157
|
-
import { Button } from './Button';
|
|
158
|
-
|
|
159
|
-
describe('Button snapshots', () => {
|
|
160
|
-
it('renders primary variant', () => {
|
|
161
|
-
const tree = render(<Button variant="primary" title="Submit" />);
|
|
162
|
-
expect(tree.toJSON()).toMatchSnapshot();
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
it('renders disabled state', () => {
|
|
166
|
-
const tree = render(<Button variant="primary" title="Submit" disabled />);
|
|
167
|
-
expect(tree.toJSON()).toMatchSnapshot();
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
## Anti-Patterns
|
|
173
|
-
|
|
174
|
-
1. **Not mocking native modules** — Unmocked native modules crash Jest. Set up
|
|
175
|
-
comprehensive mocks in jest/setup.ts for all native dependencies.
|
|
176
|
-
|
|
177
|
-
2. **Testing styles directly** — Asserting on style objects is brittle. Test visual
|
|
178
|
-
outcomes with snapshots or accessibility labels instead.
|
|
179
|
-
|
|
180
|
-
3. **Ignoring platform differences** — Platform.select branches need testing on
|
|
181
|
-
both platforms. Use parameterized tests with platform mocks.
|
|
182
|
-
|
|
183
|
-
4. **Detox without synchronization** — Not waiting for animations or network calls
|
|
184
|
-
to complete before assertions. Use waitFor patterns.
|
|
185
|
-
|
|
186
|
-
5. **Over-relying on snapshots** — Large component tree snapshots are unreviewed noise.
|
|
187
|
-
Use targeted snapshots for small, stable components only.
|
|
188
|
-
|
|
189
|
-
## Integration Points
|
|
190
|
-
|
|
191
|
-
- **Tools**: Jest, RNTL, Detox, Metro bundler
|
|
192
|
-
- **Workflows**: `mobile-testing` (test plan), `test-framework` (initial setup)
|
|
193
|
-
- **Related fragments**: `jest-vitest-patterns` (shared Jest patterns)
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: responsive-testing
|
|
3
|
-
tier: mobile-testing
|
|
4
|
-
version: '1.0'
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Responsive Testing
|
|
8
|
-
|
|
9
|
-
## Principle
|
|
10
|
-
|
|
11
|
-
Responsive testing validates that applications adapt correctly across viewport sizes,
|
|
12
|
-
orientations, and input methods. It bridges the gap between mobile and desktop testing
|
|
13
|
-
by ensuring CSS breakpoints, touch interactions, and dynamic layouts work as designed.
|
|
14
|
-
|
|
15
|
-
## Rationale
|
|
16
|
-
|
|
17
|
-
Users access applications on devices ranging from 320px to 2560px wide. Responsive
|
|
18
|
-
design failures — overlapping elements, hidden content, broken navigation — are among
|
|
19
|
-
the most common UI bugs. Automated viewport testing catches layout regressions that
|
|
20
|
-
manual testing misses.
|
|
21
|
-
|
|
22
|
-
## Pattern Examples
|
|
23
|
-
|
|
24
|
-
### Viewport Testing Matrix
|
|
25
|
-
|
|
26
|
-
```typescript
|
|
27
|
-
const viewports = [
|
|
28
|
-
{ name: 'mobile-small', width: 320, height: 568 }, // iPhone SE
|
|
29
|
-
{ name: 'mobile', width: 375, height: 812 }, // iPhone 13
|
|
30
|
-
{ name: 'mobile-large', width: 428, height: 926 }, // iPhone 14 Pro Max
|
|
31
|
-
{ name: 'tablet-portrait', width: 768, height: 1024 },// iPad
|
|
32
|
-
{ name: 'tablet-landscape', width: 1024, height: 768 },
|
|
33
|
-
{ name: 'laptop', width: 1366, height: 768 },
|
|
34
|
-
{ name: 'desktop', width: 1920, height: 1080 },
|
|
35
|
-
];
|
|
36
|
-
|
|
37
|
-
for (const vp of viewports) {
|
|
38
|
-
test(`renders correctly at ${vp.name} (${vp.width}x${vp.height})`, async ({ page }) => {
|
|
39
|
-
await page.setViewportSize({ width: vp.width, height: vp.height });
|
|
40
|
-
await page.goto('/dashboard');
|
|
41
|
-
await expect(page.locator('[data-testid="main-content"]')).toBeVisible();
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
### CSS Breakpoint Coverage
|
|
47
|
-
|
|
48
|
-
```typescript
|
|
49
|
-
describe('Navigation', () => {
|
|
50
|
-
test('shows hamburger menu on mobile', async ({ page }) => {
|
|
51
|
-
await page.setViewportSize({ width: 375, height: 812 });
|
|
52
|
-
await page.goto('/');
|
|
53
|
-
await expect(page.locator('[data-testid="hamburger-menu"]')).toBeVisible();
|
|
54
|
-
await expect(page.locator('[data-testid="desktop-nav"]')).toBeHidden();
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
test('shows full nav on desktop', async ({ page }) => {
|
|
58
|
-
await page.setViewportSize({ width: 1920, height: 1080 });
|
|
59
|
-
await page.goto('/');
|
|
60
|
-
await expect(page.locator('[data-testid="desktop-nav"]')).toBeVisible();
|
|
61
|
-
await expect(page.locator('[data-testid="hamburger-menu"]')).toBeHidden();
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
test('collapses sidebar on tablet', async ({ page }) => {
|
|
65
|
-
await page.setViewportSize({ width: 768, height: 1024 });
|
|
66
|
-
await page.goto('/dashboard');
|
|
67
|
-
await expect(page.locator('[data-testid="sidebar"]')).toHaveCSS('width', '64px');
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
### Visual Regression with Percy/Chromatic
|
|
73
|
-
|
|
74
|
-
```typescript
|
|
75
|
-
// Percy integration with Playwright
|
|
76
|
-
import percySnapshot from '@percy/playwright';
|
|
77
|
-
|
|
78
|
-
test('homepage visual regression', async ({ page }) => {
|
|
79
|
-
await page.goto('/');
|
|
80
|
-
|
|
81
|
-
// Capture at multiple widths
|
|
82
|
-
await percySnapshot(page, 'Homepage - Mobile', { widths: [375] });
|
|
83
|
-
await percySnapshot(page, 'Homepage - Tablet', { widths: [768] });
|
|
84
|
-
await percySnapshot(page, 'Homepage - Desktop', { widths: [1920] });
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
// Chromatic integration (Storybook)
|
|
88
|
-
// stories/Button.stories.tsx
|
|
89
|
-
export default {
|
|
90
|
-
title: 'Components/Button',
|
|
91
|
-
component: Button,
|
|
92
|
-
parameters: {
|
|
93
|
-
chromatic: {
|
|
94
|
-
viewports: [320, 768, 1200],
|
|
95
|
-
},
|
|
96
|
-
},
|
|
97
|
-
};
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
### Touch vs Click Interaction Testing
|
|
101
|
-
|
|
102
|
-
```typescript
|
|
103
|
-
describe('Touch interactions', () => {
|
|
104
|
-
test('swipe to delete on mobile', async ({ page }) => {
|
|
105
|
-
await page.setViewportSize({ width: 375, height: 812 });
|
|
106
|
-
await page.goto('/list');
|
|
107
|
-
|
|
108
|
-
const item = page.locator('[data-testid="list-item-1"]');
|
|
109
|
-
const box = await item.boundingBox();
|
|
110
|
-
|
|
111
|
-
await page.mouse.move(box!.x + box!.width - 10, box!.y + box!.height / 2);
|
|
112
|
-
await page.mouse.down();
|
|
113
|
-
await page.mouse.move(box!.x + 10, box!.y + box!.height / 2, { steps: 10 });
|
|
114
|
-
await page.mouse.up();
|
|
115
|
-
|
|
116
|
-
await expect(page.locator('[data-testid="delete-action"]')).toBeVisible();
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
test('hover tooltip on desktop', async ({ page }) => {
|
|
120
|
-
await page.setViewportSize({ width: 1920, height: 1080 });
|
|
121
|
-
await page.goto('/');
|
|
122
|
-
|
|
123
|
-
await page.hover('[data-testid="info-icon"]');
|
|
124
|
-
await expect(page.locator('[role="tooltip"]')).toBeVisible();
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
test('long press context menu on mobile', async ({ page }) => {
|
|
128
|
-
await page.setViewportSize({ width: 375, height: 812 });
|
|
129
|
-
await page.goto('/list');
|
|
130
|
-
|
|
131
|
-
const item = page.locator('[data-testid="list-item-1"]');
|
|
132
|
-
await item.click({ delay: 1000 }); // simulate long press
|
|
133
|
-
|
|
134
|
-
await expect(page.locator('[data-testid="context-menu"]')).toBeVisible();
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
### Orientation Testing
|
|
140
|
-
|
|
141
|
-
```typescript
|
|
142
|
-
describe('Orientation changes', () => {
|
|
143
|
-
test('landscape mode adjusts layout', async ({ page }) => {
|
|
144
|
-
// Portrait
|
|
145
|
-
await page.setViewportSize({ width: 375, height: 812 });
|
|
146
|
-
await page.goto('/video-player');
|
|
147
|
-
await expect(page.locator('[data-testid="controls"]')).toBeVisible();
|
|
148
|
-
|
|
149
|
-
// Landscape
|
|
150
|
-
await page.setViewportSize({ width: 812, height: 375 });
|
|
151
|
-
await expect(page.locator('[data-testid="fullscreen-controls"]')).toBeVisible();
|
|
152
|
-
});
|
|
153
|
-
});
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
## Anti-Patterns
|
|
157
|
-
|
|
158
|
-
1. **Testing only desktop** — Most traffic is mobile. Include at least 320px, 375px,
|
|
159
|
-
and 768px viewports in every visual regression suite.
|
|
160
|
-
|
|
161
|
-
2. **Hardcoded pixel assertions** — Asserting `element.width === 375` is fragile.
|
|
162
|
-
Test visibility, layout behavior, and CSS properties instead.
|
|
163
|
-
|
|
164
|
-
3. **Ignoring touch targets** — Buttons under 44x44px fail mobile usability. Validate
|
|
165
|
-
minimum touch target sizes in responsive tests.
|
|
166
|
-
|
|
167
|
-
4. **Single breakpoint testing** — Testing only at exact breakpoints misses issues
|
|
168
|
-
at in-between sizes. Include non-standard widths like 360px, 414px, 834px.
|
|
169
|
-
|
|
170
|
-
5. **Skipping orientation** — Many layouts break in landscape. Test both orientations
|
|
171
|
-
for tablet and mobile viewports.
|
|
172
|
-
|
|
173
|
-
## Integration Points
|
|
174
|
-
|
|
175
|
-
- **Tools**: Playwright, Percy, Chromatic, Storybook
|
|
176
|
-
- **Workflows**: `mobile-testing` (test plan), `test-automation` (coverage expansion)
|
|
177
|
-
- **Related fragments**: `visual-testing` (screenshot comparison), `selector-resilience` (locators)
|