froid-plane-test-architecture-enterprise 1.23.4
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/.claude-plugin/marketplace.json +52 -0
- package/.coderabbit.yaml +40 -0
- package/.github/CODE_OF_CONDUCT.md +128 -0
- package/.github/FUNDING.yaml +15 -0
- package/.github/ISSUE_TEMPLATE/config.yaml +8 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +70 -0
- package/.github/ISSUE_TEMPLATE/issue.md +61 -0
- package/.github/ISSUE_TEMPLATE/rule_quality_report.md +46 -0
- package/.github/workflows/docs.yaml +66 -0
- package/.github/workflows/publish.yaml +193 -0
- package/.github/workflows/quality.yaml +171 -0
- package/.github/workflows/tea-test-review.yaml +240 -0
- package/.husky/pre-commit +20 -0
- package/.markdownlint-cli2.yaml +36 -0
- package/.nvmrc +1 -0
- package/.prettierignore +9 -0
- package/.vscode/settings.json +47 -0
- package/AGENTS.md +32 -0
- package/CHANGELOG.md +582 -0
- package/CONTRIBUTING.md +268 -0
- package/DESIGN-CRITERIA-REGISTRY.md +336 -0
- package/LICENSE +26 -0
- package/README.md +782 -0
- package/SECURITY.md +85 -0
- package/cli/examples/README.md +53 -0
- package/cli/examples/pr-test-review.yml +315 -0
- package/cli/lib/agent-adapters.js +256 -0
- package/cli/lib/build-prompt.js +327 -0
- package/cli/lib/changed-tests.js +479 -0
- package/cli/lib/convention-baseline.js +237 -0
- package/cli/lib/isolate.js +353 -0
- package/cli/lib/parse-report.js +1081 -0
- package/cli/lib/registry-rows.js +60 -0
- package/cli/lib/resolve-skill.js +44 -0
- package/cli/lib/resolve-tea-config.js +229 -0
- package/cli/lib/run-agent.js +146 -0
- package/cli/test-review.js +874 -0
- package/docs/404.md +20 -0
- package/docs/explanation/engagement-models.md +191 -0
- package/docs/explanation/eval-quality-roadmap.md +164 -0
- package/docs/explanation/fixture-architecture.md +350 -0
- package/docs/explanation/knowledge-base-system.md +158 -0
- package/docs/explanation/network-first-patterns.md +342 -0
- package/docs/explanation/risk-based-testing.md +189 -0
- package/docs/explanation/step-file-architecture.md +227 -0
- package/docs/explanation/tea-overview.md +244 -0
- package/docs/explanation/test-quality-standards.md +475 -0
- package/docs/explanation/test-review-cli-architecture.md +159 -0
- package/docs/explanation/testing-as-engineering.md +124 -0
- package/docs/explanation/verification-architecture.md +129 -0
- package/docs/glossary/index.md +160 -0
- package/docs/how-to/brownfield/use-tea-for-enterprise.md +394 -0
- package/docs/how-to/brownfield/use-tea-with-existing-tests.md +499 -0
- package/docs/how-to/customization/configure-browser-automation.md +213 -0
- package/docs/how-to/customization/extend-tea-with-custom-workflows.md +102 -0
- package/docs/how-to/customization/integrate-pactjs-utils.md +184 -0
- package/docs/how-to/customization/integrate-playwright-utils.md +886 -0
- package/docs/how-to/install-behind-firewall.md +43 -0
- package/docs/how-to/workflows/run-atdd.md +453 -0
- package/docs/how-to/workflows/run-automate.md +673 -0
- package/docs/how-to/workflows/run-nfr-assess.md +723 -0
- package/docs/how-to/workflows/run-test-design.md +155 -0
- package/docs/how-to/workflows/run-test-review.md +622 -0
- package/docs/how-to/workflows/run-trace.md +973 -0
- package/docs/how-to/workflows/setup-ci.md +741 -0
- package/docs/how-to/workflows/setup-test-framework.md +130 -0
- package/docs/how-to/workflows/teach-me-testing.md +287 -0
- package/docs/index.md +67 -0
- package/docs/reference/commands.md +394 -0
- package/docs/reference/configuration.md +561 -0
- package/docs/reference/execution-targets.md +106 -0
- package/docs/reference/knowledge-base.md +271 -0
- package/docs/reference/live-verification-results.md +193 -0
- package/docs/reference/tea-test-review-cli.md +282 -0
- package/docs/reference/troubleshooting.md +362 -0
- package/docs/tutorials/learn-testing-tea-academy.md +67 -0
- package/docs/tutorials/tea-lite-quickstart.md +459 -0
- package/eslint.config.mjs +146 -0
- package/package.json +139 -0
- package/prettier.config.mjs +32 -0
- package/src/agents/froid-tea/SKILL.md +86 -0
- package/src/agents/froid-tea/customize.toml +108 -0
- package/src/agents/froid-tea/resources/knowledge/adr-quality-readiness-checklist.md +377 -0
- package/src/agents/froid-tea/resources/knowledge/api-request.md +572 -0
- package/src/agents/froid-tea/resources/knowledge/api-testing-patterns.md +931 -0
- package/src/agents/froid-tea/resources/knowledge/auth-session.md +553 -0
- package/src/agents/froid-tea/resources/knowledge/burn-in.md +273 -0
- package/src/agents/froid-tea/resources/knowledge/ci-burn-in.md +717 -0
- package/src/agents/froid-tea/resources/knowledge/component-tdd.md +522 -0
- package/src/agents/froid-tea/resources/knowledge/confidence-gate.md +73 -0
- package/src/agents/froid-tea/resources/knowledge/contract-testing.md +1066 -0
- package/src/agents/froid-tea/resources/knowledge/data-factories.md +539 -0
- package/src/agents/froid-tea/resources/knowledge/email-auth.md +721 -0
- package/src/agents/froid-tea/resources/knowledge/error-handling.md +725 -0
- package/src/agents/froid-tea/resources/knowledge/evidence-integrity.md +265 -0
- package/src/agents/froid-tea/resources/knowledge/feature-flags.md +750 -0
- package/src/agents/froid-tea/resources/knowledge/file-utils.md +456 -0
- package/src/agents/froid-tea/resources/knowledge/fixture-architecture.md +401 -0
- package/src/agents/froid-tea/resources/knowledge/fixtures-composition.md +385 -0
- package/src/agents/froid-tea/resources/knowledge/intercept-network-call.md +426 -0
- package/src/agents/froid-tea/resources/knowledge/library-integration-mandate.md +93 -0
- package/src/agents/froid-tea/resources/knowledge/log.md +432 -0
- package/src/agents/froid-tea/resources/knowledge/maestro-flows.md +540 -0
- package/src/agents/froid-tea/resources/knowledge/mobile-ci-device-lab.md +208 -0
- package/src/agents/froid-tea/resources/knowledge/mobile-test-strategy.md +127 -0
- package/src/agents/froid-tea/resources/knowledge/network-error-monitor.md +402 -0
- package/src/agents/froid-tea/resources/knowledge/network-first.md +486 -0
- package/src/agents/froid-tea/resources/knowledge/network-recorder.md +527 -0
- package/src/agents/froid-tea/resources/knowledge/nfr-criteria.md +670 -0
- package/src/agents/froid-tea/resources/knowledge/overview.md +290 -0
- package/src/agents/froid-tea/resources/knowledge/pact-broker-webhooks.md +237 -0
- package/src/agents/froid-tea/resources/knowledge/pact-consumer-di.md +310 -0
- package/src/agents/froid-tea/resources/knowledge/pact-consumer-framework-setup.md +704 -0
- package/src/agents/froid-tea/resources/knowledge/pact-mcp.md +242 -0
- package/src/agents/froid-tea/resources/knowledge/pactjs-utils-consumer-helpers.md +379 -0
- package/src/agents/froid-tea/resources/knowledge/pactjs-utils-mandate.md +204 -0
- package/src/agents/froid-tea/resources/knowledge/pactjs-utils-overview.md +219 -0
- package/src/agents/froid-tea/resources/knowledge/pactjs-utils-provider-verifier.md +397 -0
- package/src/agents/froid-tea/resources/knowledge/pactjs-utils-request-filter.md +224 -0
- package/src/agents/froid-tea/resources/knowledge/pactjs-utils-zod-to-pact.md +262 -0
- package/src/agents/froid-tea/resources/knowledge/playwright-cli.md +280 -0
- package/src/agents/froid-tea/resources/knowledge/playwright-config.md +734 -0
- package/src/agents/froid-tea/resources/knowledge/playwright-utils-mandate.md +183 -0
- package/src/agents/froid-tea/resources/knowledge/probability-impact.md +593 -0
- package/src/agents/froid-tea/resources/knowledge/recurse.md +433 -0
- package/src/agents/froid-tea/resources/knowledge/risk-governance.md +625 -0
- package/src/agents/froid-tea/resources/knowledge/selective-testing.md +732 -0
- package/src/agents/froid-tea/resources/knowledge/selector-resilience.md +527 -0
- package/src/agents/froid-tea/resources/knowledge/test-healing-patterns.md +644 -0
- package/src/agents/froid-tea/resources/knowledge/test-levels-framework.md +473 -0
- package/src/agents/froid-tea/resources/knowledge/test-priorities-matrix.md +382 -0
- package/src/agents/froid-tea/resources/knowledge/test-quality.md +848 -0
- package/src/agents/froid-tea/resources/knowledge/timing-debugging.md +464 -0
- package/src/agents/froid-tea/resources/knowledge/visual-debugging.md +527 -0
- package/src/agents/froid-tea/resources/knowledge/webhook-module-setup.md +122 -0
- package/src/agents/froid-tea/resources/knowledge/webhook-providers.md +155 -0
- package/src/agents/froid-tea/resources/knowledge/webhook-risk-guidance.md +114 -0
- package/src/agents/froid-tea/resources/knowledge/webhook-template-matchers.md +160 -0
- package/src/agents/froid-tea/resources/knowledge/webhook-testing-fundamentals.md +42 -0
- package/src/agents/froid-tea/resources/knowledge/webhook-timeout-error.md +130 -0
- package/src/agents/froid-tea/resources/knowledge/webhook-waiting-querying.md +167 -0
- package/src/agents/froid-tea/resources/tea-index.csv +60 -0
- package/src/module-help.csv +11 -0
- package/src/module.yaml +332 -0
- package/src/workflows/testarch/froid-teach-me-testing/SKILL.md +129 -0
- package/src/workflows/testarch/froid-teach-me-testing/checklist.md +198 -0
- package/src/workflows/testarch/froid-teach-me-testing/customize.toml +38 -0
- package/src/workflows/testarch/froid-teach-me-testing/data/curriculum.yaml +129 -0
- package/src/workflows/testarch/froid-teach-me-testing/data/quiz-questions.yaml +206 -0
- package/src/workflows/testarch/froid-teach-me-testing/data/role-paths.yaml +136 -0
- package/src/workflows/testarch/froid-teach-me-testing/data/session-content-map.yaml +222 -0
- package/src/workflows/testarch/froid-teach-me-testing/data/tea-resources-index.yaml +483 -0
- package/src/workflows/testarch/froid-teach-me-testing/instructions.md +129 -0
- package/src/workflows/testarch/froid-teach-me-testing/resources/tea-completion-summary.example.md +102 -0
- package/src/workflows/testarch/froid-teach-me-testing/steps-c/step-01-init.md +235 -0
- package/src/workflows/testarch/froid-teach-me-testing/steps-c/step-01b-continue.md +147 -0
- package/src/workflows/testarch/froid-teach-me-testing/steps-c/step-02-assess.md +258 -0
- package/src/workflows/testarch/froid-teach-me-testing/steps-c/step-03-session-menu.md +219 -0
- package/src/workflows/testarch/froid-teach-me-testing/steps-c/step-04-session-01.md +460 -0
- package/src/workflows/testarch/froid-teach-me-testing/steps-c/step-04-session-02.md +465 -0
- package/src/workflows/testarch/froid-teach-me-testing/steps-c/step-04-session-03.md +301 -0
- package/src/workflows/testarch/froid-teach-me-testing/steps-c/step-04-session-04.md +234 -0
- package/src/workflows/testarch/froid-teach-me-testing/steps-c/step-04-session-05.md +234 -0
- package/src/workflows/testarch/froid-teach-me-testing/steps-c/step-04-session-06.md +209 -0
- package/src/workflows/testarch/froid-teach-me-testing/steps-c/step-04-session-07.md +243 -0
- package/src/workflows/testarch/froid-teach-me-testing/steps-c/step-05-completion.md +343 -0
- package/src/workflows/testarch/froid-teach-me-testing/steps-e/step-e-01-assess-workflow.md +141 -0
- package/src/workflows/testarch/froid-teach-me-testing/steps-e/step-e-02-apply-edits.md +130 -0
- package/src/workflows/testarch/froid-teach-me-testing/steps-v/step-v-01-validate.md +278 -0
- package/src/workflows/testarch/froid-teach-me-testing/templates/completion-summary-template.md +82 -0
- package/src/workflows/testarch/froid-teach-me-testing/templates/progress-template.yaml +95 -0
- package/src/workflows/testarch/froid-teach-me-testing/templates/session-notes-template.md +83 -0
- package/src/workflows/testarch/froid-testarch-atdd/SKILL.md +85 -0
- package/src/workflows/testarch/froid-testarch-atdd/atdd-checklist-template.md +394 -0
- package/src/workflows/testarch/froid-testarch-atdd/checklist.md +408 -0
- package/src/workflows/testarch/froid-testarch-atdd/customize.toml +38 -0
- package/src/workflows/testarch/froid-testarch-atdd/instructions.md +44 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/atdd-checklist-2-4-guest-checkout.example.md +594 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/adr-quality-readiness-checklist.md +377 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/api-request.md +572 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/api-testing-patterns.md +931 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/auth-session.md +553 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/burn-in.md +273 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/ci-burn-in.md +717 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/component-tdd.md +522 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/confidence-gate.md +73 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/contract-testing.md +1066 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/data-factories.md +539 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/email-auth.md +721 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/error-handling.md +725 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/evidence-integrity.md +265 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/feature-flags.md +750 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/file-utils.md +456 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/fixture-architecture.md +401 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/fixtures-composition.md +385 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/intercept-network-call.md +426 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/library-integration-mandate.md +93 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/log.md +432 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/maestro-flows.md +540 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/mobile-ci-device-lab.md +208 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/mobile-test-strategy.md +127 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/network-error-monitor.md +402 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/network-first.md +486 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/network-recorder.md +527 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/nfr-criteria.md +670 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/overview.md +290 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/pact-broker-webhooks.md +237 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/pact-consumer-di.md +310 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/pact-consumer-framework-setup.md +704 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/pact-mcp.md +242 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/pactjs-utils-consumer-helpers.md +379 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/pactjs-utils-mandate.md +204 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/pactjs-utils-overview.md +219 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/pactjs-utils-provider-verifier.md +397 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/pactjs-utils-request-filter.md +224 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/pactjs-utils-zod-to-pact.md +262 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/playwright-cli.md +280 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/playwright-config.md +734 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/playwright-utils-mandate.md +183 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/probability-impact.md +593 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/recurse.md +433 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/risk-governance.md +625 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/selective-testing.md +732 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/selector-resilience.md +527 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/test-healing-patterns.md +644 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/test-levels-framework.md +473 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/test-priorities-matrix.md +382 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/test-quality.md +848 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/timing-debugging.md +464 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/visual-debugging.md +527 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/webhook-module-setup.md +122 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/webhook-providers.md +155 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/webhook-risk-guidance.md +114 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/webhook-template-matchers.md +160 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/webhook-testing-fundamentals.md +42 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/webhook-timeout-error.md +130 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/knowledge/webhook-waiting-querying.md +167 -0
- package/src/workflows/testarch/froid-testarch-atdd/resources/tea-index.csv +60 -0
- package/src/workflows/testarch/froid-testarch-atdd/steps-c/step-01-preflight-and-context.md +256 -0
- package/src/workflows/testarch/froid-testarch-atdd/steps-c/step-01b-resume.md +96 -0
- package/src/workflows/testarch/froid-testarch-atdd/steps-c/step-02-generation-mode.md +125 -0
- package/src/workflows/testarch/froid-testarch-atdd/steps-c/step-03-test-strategy.md +110 -0
- package/src/workflows/testarch/froid-testarch-atdd/steps-c/step-04-generate-tests.md +362 -0
- package/src/workflows/testarch/froid-testarch-atdd/steps-c/step-04a-subagent-api-failing.md +323 -0
- package/src/workflows/testarch/froid-testarch-atdd/steps-c/step-04b-subagent-e2e-failing.md +305 -0
- package/src/workflows/testarch/froid-testarch-atdd/steps-c/step-04c-aggregate.md +430 -0
- package/src/workflows/testarch/froid-testarch-atdd/steps-c/step-05-validate-and-complete.md +123 -0
- package/src/workflows/testarch/froid-testarch-atdd/steps-e/step-01-assess.md +65 -0
- package/src/workflows/testarch/froid-testarch-atdd/steps-e/step-02-apply-edit.md +68 -0
- package/src/workflows/testarch/froid-testarch-atdd/steps-v/step-01-validate.md +85 -0
- package/src/workflows/testarch/froid-testarch-atdd/workflow.yaml +46 -0
- package/src/workflows/testarch/froid-testarch-automate/SKILL.md +85 -0
- package/src/workflows/testarch/froid-testarch-automate/checklist.md +645 -0
- package/src/workflows/testarch/froid-testarch-automate/customize.toml +38 -0
- package/src/workflows/testarch/froid-testarch-automate/instructions.md +49 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/automation-summary.example.md +76 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/adr-quality-readiness-checklist.md +377 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/api-request.md +572 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/api-testing-patterns.md +931 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/auth-session.md +553 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/burn-in.md +273 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/ci-burn-in.md +717 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/component-tdd.md +522 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/confidence-gate.md +73 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/contract-testing.md +1066 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/data-factories.md +539 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/email-auth.md +721 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/error-handling.md +725 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/evidence-integrity.md +265 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/feature-flags.md +750 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/file-utils.md +456 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/fixture-architecture.md +401 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/fixtures-composition.md +385 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/intercept-network-call.md +426 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/library-integration-mandate.md +93 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/log.md +432 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/maestro-flows.md +540 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/mobile-ci-device-lab.md +208 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/mobile-test-strategy.md +127 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/network-error-monitor.md +402 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/network-first.md +486 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/network-recorder.md +527 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/nfr-criteria.md +670 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/overview.md +290 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/pact-broker-webhooks.md +237 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/pact-consumer-di.md +310 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/pact-consumer-framework-setup.md +704 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/pact-mcp.md +242 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/pactjs-utils-consumer-helpers.md +379 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/pactjs-utils-mandate.md +204 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/pactjs-utils-overview.md +219 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/pactjs-utils-provider-verifier.md +397 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/pactjs-utils-request-filter.md +224 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/pactjs-utils-zod-to-pact.md +262 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/playwright-cli.md +280 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/playwright-config.md +734 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/playwright-utils-mandate.md +183 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/probability-impact.md +593 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/recurse.md +433 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/risk-governance.md +625 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/selective-testing.md +732 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/selector-resilience.md +527 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/test-healing-patterns.md +644 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/test-levels-framework.md +473 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/test-priorities-matrix.md +382 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/test-quality.md +848 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/timing-debugging.md +464 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/visual-debugging.md +527 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/webhook-module-setup.md +122 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/webhook-providers.md +155 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/webhook-risk-guidance.md +114 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/webhook-template-matchers.md +160 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/webhook-testing-fundamentals.md +42 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/webhook-timeout-error.md +130 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/knowledge/webhook-waiting-querying.md +167 -0
- package/src/workflows/testarch/froid-testarch-automate/resources/tea-index.csv +60 -0
- package/src/workflows/testarch/froid-testarch-automate/steps-c/step-01-preflight-and-context.md +261 -0
- package/src/workflows/testarch/froid-testarch-automate/steps-c/step-01b-resume.md +94 -0
- package/src/workflows/testarch/froid-testarch-automate/steps-c/step-02-identify-targets.md +182 -0
- package/src/workflows/testarch/froid-testarch-automate/steps-c/step-03-generate-tests.md +458 -0
- package/src/workflows/testarch/froid-testarch-automate/steps-c/step-03a-subagent-api.md +333 -0
- package/src/workflows/testarch/froid-testarch-automate/steps-c/step-03b-subagent-backend.md +248 -0
- package/src/workflows/testarch/froid-testarch-automate/steps-c/step-03b-subagent-e2e.md +282 -0
- package/src/workflows/testarch/froid-testarch-automate/steps-c/step-03b-subagent-mobile.md +162 -0
- package/src/workflows/testarch/froid-testarch-automate/steps-c/step-03c-aggregate.md +494 -0
- package/src/workflows/testarch/froid-testarch-automate/steps-c/step-04-validate-and-summarize.md +120 -0
- package/src/workflows/testarch/froid-testarch-automate/steps-e/step-01-assess.md +65 -0
- package/src/workflows/testarch/froid-testarch-automate/steps-e/step-02-apply-edit.md +68 -0
- package/src/workflows/testarch/froid-testarch-automate/steps-v/step-01-validate.md +85 -0
- package/src/workflows/testarch/froid-testarch-automate/workflow.yaml +53 -0
- package/src/workflows/testarch/froid-testarch-ci/SKILL.md +85 -0
- package/src/workflows/testarch/froid-testarch-ci/azure-pipelines-template.yaml +155 -0
- package/src/workflows/testarch/froid-testarch-ci/checklist.md +289 -0
- package/src/workflows/testarch/froid-testarch-ci/customize.toml +38 -0
- package/src/workflows/testarch/froid-testarch-ci/github-actions-template.yaml +328 -0
- package/src/workflows/testarch/froid-testarch-ci/gitlab-ci-template.yaml +158 -0
- package/src/workflows/testarch/froid-testarch-ci/harness-pipeline-template.yaml +160 -0
- package/src/workflows/testarch/froid-testarch-ci/instructions.md +44 -0
- package/src/workflows/testarch/froid-testarch-ci/jenkins-pipeline-template.groovy +129 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/ci-pipeline-progress.example.md +121 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/adr-quality-readiness-checklist.md +377 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/api-request.md +572 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/api-testing-patterns.md +931 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/auth-session.md +553 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/burn-in.md +273 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/ci-burn-in.md +717 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/component-tdd.md +522 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/confidence-gate.md +73 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/contract-testing.md +1066 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/data-factories.md +539 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/email-auth.md +721 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/error-handling.md +725 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/evidence-integrity.md +265 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/feature-flags.md +750 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/file-utils.md +456 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/fixture-architecture.md +401 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/fixtures-composition.md +385 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/intercept-network-call.md +426 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/library-integration-mandate.md +93 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/log.md +432 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/maestro-flows.md +540 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/mobile-ci-device-lab.md +208 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/mobile-test-strategy.md +127 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/network-error-monitor.md +402 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/network-first.md +486 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/network-recorder.md +527 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/nfr-criteria.md +670 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/overview.md +290 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/pact-broker-webhooks.md +237 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/pact-consumer-di.md +310 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/pact-consumer-framework-setup.md +704 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/pact-mcp.md +242 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/pactjs-utils-consumer-helpers.md +379 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/pactjs-utils-mandate.md +204 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/pactjs-utils-overview.md +219 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/pactjs-utils-provider-verifier.md +397 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/pactjs-utils-request-filter.md +224 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/pactjs-utils-zod-to-pact.md +262 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/playwright-cli.md +280 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/playwright-config.md +734 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/playwright-utils-mandate.md +183 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/probability-impact.md +593 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/recurse.md +433 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/risk-governance.md +625 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/selective-testing.md +732 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/selector-resilience.md +527 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/test-healing-patterns.md +644 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/test-levels-framework.md +473 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/test-priorities-matrix.md +382 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/test-quality.md +848 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/timing-debugging.md +464 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/visual-debugging.md +527 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/webhook-module-setup.md +122 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/webhook-providers.md +155 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/webhook-risk-guidance.md +114 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/webhook-template-matchers.md +160 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/webhook-testing-fundamentals.md +42 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/webhook-timeout-error.md +130 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/knowledge/webhook-waiting-querying.md +167 -0
- package/src/workflows/testarch/froid-testarch-ci/resources/tea-index.csv +60 -0
- package/src/workflows/testarch/froid-testarch-ci/steps-c/step-01-preflight.md +173 -0
- package/src/workflows/testarch/froid-testarch-ci/steps-c/step-01b-resume.md +110 -0
- package/src/workflows/testarch/froid-testarch-ci/steps-c/step-02-generate-pipeline.md +305 -0
- package/src/workflows/testarch/froid-testarch-ci/steps-c/step-03-configure-quality-gates.md +164 -0
- package/src/workflows/testarch/froid-testarch-ci/steps-c/step-04-validate-and-summary.md +100 -0
- package/src/workflows/testarch/froid-testarch-ci/steps-e/step-01-assess.md +65 -0
- package/src/workflows/testarch/froid-testarch-ci/steps-e/step-02-apply-edit.md +68 -0
- package/src/workflows/testarch/froid-testarch-ci/steps-v/step-01-validate.md +99 -0
- package/src/workflows/testarch/froid-testarch-ci/workflow.yaml +48 -0
- package/src/workflows/testarch/froid-testarch-framework/SKILL.md +85 -0
- package/src/workflows/testarch/froid-testarch-framework/checklist.md +370 -0
- package/src/workflows/testarch/froid-testarch-framework/customize.toml +38 -0
- package/src/workflows/testarch/froid-testarch-framework/instructions.md +44 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/framework-setup-progress.example.md +195 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/hooks/tea-enforce.cjs +1098 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/adr-quality-readiness-checklist.md +377 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/api-request.md +572 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/api-testing-patterns.md +931 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/auth-session.md +553 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/burn-in.md +273 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/ci-burn-in.md +717 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/component-tdd.md +522 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/confidence-gate.md +73 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/contract-testing.md +1066 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/data-factories.md +539 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/email-auth.md +721 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/error-handling.md +725 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/evidence-integrity.md +265 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/feature-flags.md +750 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/file-utils.md +456 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/fixture-architecture.md +401 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/fixtures-composition.md +385 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/intercept-network-call.md +426 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/library-integration-mandate.md +93 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/log.md +432 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/maestro-flows.md +540 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/mobile-ci-device-lab.md +208 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/mobile-test-strategy.md +127 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/network-error-monitor.md +402 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/network-first.md +486 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/network-recorder.md +527 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/nfr-criteria.md +670 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/overview.md +290 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/pact-broker-webhooks.md +237 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/pact-consumer-di.md +310 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/pact-consumer-framework-setup.md +704 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/pact-mcp.md +242 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/pactjs-utils-consumer-helpers.md +379 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/pactjs-utils-mandate.md +204 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/pactjs-utils-overview.md +219 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/pactjs-utils-provider-verifier.md +397 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/pactjs-utils-request-filter.md +224 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/pactjs-utils-zod-to-pact.md +262 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/playwright-cli.md +280 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/playwright-config.md +734 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/playwright-utils-mandate.md +183 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/probability-impact.md +593 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/recurse.md +433 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/risk-governance.md +625 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/selective-testing.md +732 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/selector-resilience.md +527 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/test-healing-patterns.md +644 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/test-levels-framework.md +473 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/test-priorities-matrix.md +382 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/test-quality.md +848 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/timing-debugging.md +464 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/visual-debugging.md +527 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/webhook-module-setup.md +122 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/webhook-providers.md +155 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/webhook-risk-guidance.md +114 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/webhook-template-matchers.md +160 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/webhook-testing-fundamentals.md +42 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/webhook-timeout-error.md +130 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/webhook-waiting-querying.md +167 -0
- package/src/workflows/testarch/froid-testarch-framework/resources/tea-index.csv +60 -0
- package/src/workflows/testarch/froid-testarch-framework/steps-c/step-01-preflight.md +145 -0
- package/src/workflows/testarch/froid-testarch-framework/steps-c/step-01b-resume.md +116 -0
- package/src/workflows/testarch/froid-testarch-framework/steps-c/step-02-select-framework.md +131 -0
- package/src/workflows/testarch/froid-testarch-framework/steps-c/step-03-scaffold-framework.md +444 -0
- package/src/workflows/testarch/froid-testarch-framework/steps-c/step-04-docs-and-scripts.md +210 -0
- package/src/workflows/testarch/froid-testarch-framework/steps-c/step-05-validate-and-summary.md +101 -0
- package/src/workflows/testarch/froid-testarch-framework/steps-e/step-01-assess.md +65 -0
- package/src/workflows/testarch/froid-testarch-framework/steps-e/step-02-apply-edit.md +68 -0
- package/src/workflows/testarch/froid-testarch-framework/steps-v/step-01-validate.md +85 -0
- package/src/workflows/testarch/froid-testarch-framework/workflow.yaml +48 -0
- package/src/workflows/testarch/froid-testarch-nfr/SKILL.md +85 -0
- package/src/workflows/testarch/froid-testarch-nfr/checklist.md +405 -0
- package/src/workflows/testarch/froid-testarch-nfr/customize.toml +38 -0
- package/src/workflows/testarch/froid-testarch-nfr/instructions.md +45 -0
- package/src/workflows/testarch/froid-testarch-nfr/nfr-report-template.md +454 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/adr-quality-readiness-checklist.md +377 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/api-request.md +572 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/api-testing-patterns.md +931 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/auth-session.md +553 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/burn-in.md +273 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/ci-burn-in.md +717 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/component-tdd.md +522 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/confidence-gate.md +73 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/contract-testing.md +1066 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/data-factories.md +539 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/email-auth.md +721 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/error-handling.md +725 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/evidence-integrity.md +265 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/feature-flags.md +750 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/file-utils.md +456 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/fixture-architecture.md +401 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/fixtures-composition.md +385 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/intercept-network-call.md +426 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/library-integration-mandate.md +93 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/log.md +432 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/maestro-flows.md +540 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/mobile-ci-device-lab.md +208 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/mobile-test-strategy.md +127 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/network-error-monitor.md +402 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/network-first.md +486 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/network-recorder.md +527 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/nfr-criteria.md +670 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/overview.md +290 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/pact-broker-webhooks.md +237 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/pact-consumer-di.md +310 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/pact-consumer-framework-setup.md +704 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/pact-mcp.md +242 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/pactjs-utils-consumer-helpers.md +379 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/pactjs-utils-mandate.md +204 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/pactjs-utils-overview.md +219 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/pactjs-utils-provider-verifier.md +397 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/pactjs-utils-request-filter.md +224 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/pactjs-utils-zod-to-pact.md +262 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/playwright-cli.md +280 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/playwright-config.md +734 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/playwright-utils-mandate.md +183 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/probability-impact.md +593 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/recurse.md +433 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/risk-governance.md +625 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/selective-testing.md +732 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/selector-resilience.md +527 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/test-healing-patterns.md +644 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/test-levels-framework.md +473 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/test-priorities-matrix.md +382 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/test-quality.md +848 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/timing-debugging.md +464 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/visual-debugging.md +527 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/webhook-module-setup.md +122 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/webhook-providers.md +155 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/webhook-risk-guidance.md +114 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/webhook-template-matchers.md +160 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/webhook-testing-fundamentals.md +42 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/webhook-timeout-error.md +130 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/knowledge/webhook-waiting-querying.md +167 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/nfr-assessment.example.md +497 -0
- package/src/workflows/testarch/froid-testarch-nfr/resources/tea-index.csv +60 -0
- package/src/workflows/testarch/froid-testarch-nfr/steps-c/nfr-status-definitions.md +37 -0
- package/src/workflows/testarch/froid-testarch-nfr/steps-c/step-01-load-context.md +138 -0
- package/src/workflows/testarch/froid-testarch-nfr/steps-c/step-01b-resume.md +106 -0
- package/src/workflows/testarch/froid-testarch-nfr/steps-c/step-02-define-thresholds.md +120 -0
- package/src/workflows/testarch/froid-testarch-nfr/steps-c/step-03-gather-evidence.md +108 -0
- package/src/workflows/testarch/froid-testarch-nfr/steps-c/step-04-evaluate-and-score.md +254 -0
- package/src/workflows/testarch/froid-testarch-nfr/steps-c/step-04a-subagent-security.md +135 -0
- package/src/workflows/testarch/froid-testarch-nfr/steps-c/step-04b-subagent-performance.md +97 -0
- package/src/workflows/testarch/froid-testarch-nfr/steps-c/step-04c-subagent-reliability.md +93 -0
- package/src/workflows/testarch/froid-testarch-nfr/steps-c/step-04d-subagent-maintainability.md +104 -0
- package/src/workflows/testarch/froid-testarch-nfr/steps-c/step-04e-aggregate-nfr.md +294 -0
- package/src/workflows/testarch/froid-testarch-nfr/steps-c/step-05-generate-report.md +116 -0
- package/src/workflows/testarch/froid-testarch-nfr/steps-e/step-01-assess.md +65 -0
- package/src/workflows/testarch/froid-testarch-nfr/steps-e/step-02-apply-edit.md +68 -0
- package/src/workflows/testarch/froid-testarch-nfr/steps-v/step-01-validate.md +85 -0
- package/src/workflows/testarch/froid-testarch-nfr/workflow.yaml +48 -0
- package/src/workflows/testarch/froid-testarch-test-design/SKILL.md +89 -0
- package/src/workflows/testarch/froid-testarch-test-design/checklist.md +486 -0
- package/src/workflows/testarch/froid-testarch-test-design/customize.toml +38 -0
- package/src/workflows/testarch/froid-testarch-test-design/instructions.md +104 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/adr-quality-readiness-checklist.md +377 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/api-request.md +572 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/api-testing-patterns.md +931 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/auth-session.md +553 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/burn-in.md +273 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/ci-burn-in.md +717 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/component-tdd.md +522 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/confidence-gate.md +73 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/contract-testing.md +1066 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/data-factories.md +539 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/email-auth.md +721 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/error-handling.md +725 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/evidence-integrity.md +265 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/feature-flags.md +750 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/file-utils.md +456 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/fixture-architecture.md +401 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/fixtures-composition.md +385 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/intercept-network-call.md +426 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/library-integration-mandate.md +93 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/log.md +432 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/maestro-flows.md +540 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/mobile-ci-device-lab.md +208 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/mobile-test-strategy.md +127 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/network-error-monitor.md +402 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/network-first.md +486 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/network-recorder.md +527 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/nfr-criteria.md +670 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/overview.md +290 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/pact-broker-webhooks.md +237 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/pact-consumer-di.md +310 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/pact-consumer-framework-setup.md +704 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/pact-mcp.md +242 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/pactjs-utils-consumer-helpers.md +379 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/pactjs-utils-mandate.md +204 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/pactjs-utils-overview.md +219 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/pactjs-utils-provider-verifier.md +397 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/pactjs-utils-request-filter.md +224 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/pactjs-utils-zod-to-pact.md +262 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/playwright-cli.md +280 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/playwright-config.md +734 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/playwright-utils-mandate.md +183 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/probability-impact.md +593 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/recurse.md +433 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/risk-governance.md +625 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/selective-testing.md +732 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/selector-resilience.md +527 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/test-healing-patterns.md +644 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/test-levels-framework.md +473 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/test-priorities-matrix.md +382 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/test-quality.md +848 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/timing-debugging.md +464 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/visual-debugging.md +527 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/webhook-module-setup.md +122 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/webhook-providers.md +155 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/webhook-risk-guidance.md +114 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/webhook-template-matchers.md +160 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/webhook-testing-fundamentals.md +42 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/webhook-timeout-error.md +130 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/knowledge/webhook-waiting-querying.md +167 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/tea-index.csv +60 -0
- package/src/workflows/testarch/froid-testarch-test-design/resources/test-design-epic-3.example.md +300 -0
- package/src/workflows/testarch/froid-testarch-test-design/steps-c/step-01-detect-mode.md +187 -0
- package/src/workflows/testarch/froid-testarch-test-design/steps-c/step-01b-resume.md +141 -0
- package/src/workflows/testarch/froid-testarch-test-design/steps-c/step-02-load-context.md +268 -0
- package/src/workflows/testarch/froid-testarch-test-design/steps-c/step-03-risk-and-testability.md +133 -0
- package/src/workflows/testarch/froid-testarch-test-design/steps-c/step-04-coverage-plan.md +148 -0
- package/src/workflows/testarch/froid-testarch-test-design/steps-c/step-05-generate-output.md +241 -0
- package/src/workflows/testarch/froid-testarch-test-design/steps-e/step-01-assess.md +65 -0
- package/src/workflows/testarch/froid-testarch-test-design/steps-e/step-02-apply-edit.md +68 -0
- package/src/workflows/testarch/froid-testarch-test-design/steps-v/step-01-validate.md +85 -0
- package/src/workflows/testarch/froid-testarch-test-design/test-design-architecture-template.md +250 -0
- package/src/workflows/testarch/froid-testarch-test-design/test-design-handoff-template.md +70 -0
- package/src/workflows/testarch/froid-testarch-test-design/test-design-qa-template.md +414 -0
- package/src/workflows/testarch/froid-testarch-test-design/test-design-template.md +367 -0
- package/src/workflows/testarch/froid-testarch-test-design/workflow.yaml +77 -0
- package/src/workflows/testarch/froid-testarch-test-review/SKILL.md +97 -0
- package/src/workflows/testarch/froid-testarch-test-review/checklist.md +506 -0
- package/src/workflows/testarch/froid-testarch-test-review/customize.toml +66 -0
- package/src/workflows/testarch/froid-testarch-test-review/instructions.md +50 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/adr-quality-readiness-checklist.md +377 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/api-request.md +572 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/api-testing-patterns.md +931 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/auth-session.md +553 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/burn-in.md +273 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/ci-burn-in.md +717 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/component-tdd.md +522 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/confidence-gate.md +73 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/contract-testing.md +1066 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/data-factories.md +539 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/email-auth.md +721 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/error-handling.md +725 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/evidence-integrity.md +265 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/feature-flags.md +750 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/file-utils.md +456 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/fixture-architecture.md +401 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/fixtures-composition.md +385 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/intercept-network-call.md +426 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/library-integration-mandate.md +93 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/log.md +432 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/maestro-flows.md +540 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/mobile-ci-device-lab.md +208 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/mobile-test-strategy.md +127 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/network-error-monitor.md +402 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/network-first.md +486 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/network-recorder.md +527 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/nfr-criteria.md +670 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/overview.md +290 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/pact-broker-webhooks.md +237 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/pact-consumer-di.md +310 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/pact-consumer-framework-setup.md +704 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/pact-mcp.md +242 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/pactjs-utils-consumer-helpers.md +379 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/pactjs-utils-mandate.md +204 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/pactjs-utils-overview.md +219 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/pactjs-utils-provider-verifier.md +397 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/pactjs-utils-request-filter.md +224 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/pactjs-utils-zod-to-pact.md +262 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/playwright-cli.md +280 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/playwright-config.md +734 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/playwright-utils-mandate.md +183 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/probability-impact.md +593 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/recurse.md +433 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/risk-governance.md +625 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/selective-testing.md +732 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/selector-resilience.md +527 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/test-healing-patterns.md +644 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/test-levels-framework.md +473 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/test-priorities-matrix.md +382 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/test-quality.md +848 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/timing-debugging.md +464 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/visual-debugging.md +527 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/webhook-module-setup.md +122 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/webhook-providers.md +155 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/webhook-risk-guidance.md +114 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/webhook-template-matchers.md +160 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/webhook-testing-fundamentals.md +42 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/webhook-timeout-error.md +130 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/knowledge/webhook-waiting-querying.md +167 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/tea-index.csv +60 -0
- package/src/workflows/testarch/froid-testarch-test-review/resources/test-review.example.md +297 -0
- package/src/workflows/testarch/froid-testarch-test-review/steps-c/criteria-registry.md +230 -0
- package/src/workflows/testarch/froid-testarch-test-review/steps-c/step-01-load-context.md +236 -0
- package/src/workflows/testarch/froid-testarch-test-review/steps-c/step-01b-resume.md +104 -0
- package/src/workflows/testarch/froid-testarch-test-review/steps-c/step-02-discover-tests.md +271 -0
- package/src/workflows/testarch/froid-testarch-test-review/steps-c/step-03-quality-evaluation.md +296 -0
- package/src/workflows/testarch/froid-testarch-test-review/steps-c/step-03a-subagent-determinism.md +336 -0
- package/src/workflows/testarch/froid-testarch-test-review/steps-c/step-03b-subagent-isolation.md +142 -0
- package/src/workflows/testarch/froid-testarch-test-review/steps-c/step-03c-subagent-maintainability.md +173 -0
- package/src/workflows/testarch/froid-testarch-test-review/steps-c/step-03e-subagent-performance.md +145 -0
- package/src/workflows/testarch/froid-testarch-test-review/steps-c/step-03f-aggregate-scores.md +409 -0
- package/src/workflows/testarch/froid-testarch-test-review/steps-c/step-04-generate-report.md +122 -0
- package/src/workflows/testarch/froid-testarch-test-review/steps-e/step-01-assess.md +65 -0
- package/src/workflows/testarch/froid-testarch-test-review/steps-e/step-02-apply-edit.md +68 -0
- package/src/workflows/testarch/froid-testarch-test-review/steps-v/step-01-validate.md +85 -0
- package/src/workflows/testarch/froid-testarch-test-review/test-review-template.md +469 -0
- package/src/workflows/testarch/froid-testarch-test-review/workflow.yaml +55 -0
- package/src/workflows/testarch/froid-testarch-trace/SKILL.md +87 -0
- package/src/workflows/testarch/froid-testarch-trace/checklist.md +677 -0
- package/src/workflows/testarch/froid-testarch-trace/customize.toml +38 -0
- package/src/workflows/testarch/froid-testarch-trace/instructions.md +45 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/adr-quality-readiness-checklist.md +377 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/api-request.md +572 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/api-testing-patterns.md +931 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/auth-session.md +553 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/burn-in.md +273 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/ci-burn-in.md +717 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/component-tdd.md +522 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/confidence-gate.md +73 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/contract-testing.md +1066 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/data-factories.md +539 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/email-auth.md +721 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/error-handling.md +725 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/evidence-integrity.md +265 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/feature-flags.md +750 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/file-utils.md +456 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/fixture-architecture.md +401 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/fixtures-composition.md +385 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/intercept-network-call.md +426 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/library-integration-mandate.md +93 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/log.md +432 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/maestro-flows.md +540 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/mobile-ci-device-lab.md +208 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/mobile-test-strategy.md +127 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/network-error-monitor.md +402 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/network-first.md +486 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/network-recorder.md +527 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/nfr-criteria.md +670 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/overview.md +290 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/pact-broker-webhooks.md +237 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/pact-consumer-di.md +310 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/pact-consumer-framework-setup.md +704 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/pact-mcp.md +242 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/pactjs-utils-consumer-helpers.md +379 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/pactjs-utils-mandate.md +204 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/pactjs-utils-overview.md +219 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/pactjs-utils-provider-verifier.md +397 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/pactjs-utils-request-filter.md +224 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/pactjs-utils-zod-to-pact.md +262 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/playwright-cli.md +280 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/playwright-config.md +734 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/playwright-utils-mandate.md +183 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/probability-impact.md +593 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/recurse.md +433 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/risk-governance.md +625 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/selective-testing.md +732 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/selector-resilience.md +527 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/test-healing-patterns.md +644 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/test-levels-framework.md +473 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/test-priorities-matrix.md +382 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/test-quality.md +848 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/timing-debugging.md +464 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/visual-debugging.md +527 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/webhook-module-setup.md +122 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/webhook-providers.md +155 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/webhook-risk-guidance.md +114 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/webhook-template-matchers.md +160 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/webhook-testing-fundamentals.md +42 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/webhook-timeout-error.md +130 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/knowledge/webhook-waiting-querying.md +167 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/live-verification-results.example.json +37 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/tea-index.csv +60 -0
- package/src/workflows/testarch/froid-testarch-trace/resources/traceability-matrix.example.md +346 -0
- package/src/workflows/testarch/froid-testarch-trace/steps-c/step-01-load-context.md +166 -0
- package/src/workflows/testarch/froid-testarch-trace/steps-c/step-01b-resume.md +102 -0
- package/src/workflows/testarch/froid-testarch-trace/steps-c/step-02-discover-tests.md +292 -0
- package/src/workflows/testarch/froid-testarch-trace/steps-c/step-03-map-criteria.md +149 -0
- package/src/workflows/testarch/froid-testarch-trace/steps-c/step-04-analyze-gaps.md +795 -0
- package/src/workflows/testarch/froid-testarch-trace/steps-c/step-05-gate-decision.md +795 -0
- package/src/workflows/testarch/froid-testarch-trace/steps-e/step-01-assess.md +65 -0
- package/src/workflows/testarch/froid-testarch-trace/steps-e/step-02-apply-edit.md +68 -0
- package/src/workflows/testarch/froid-testarch-trace/steps-v/step-01-validate.md +85 -0
- package/src/workflows/testarch/froid-testarch-trace/trace-template.md +716 -0
- package/src/workflows/testarch/froid-testarch-trace/workflow.yaml +98 -0
- package/test/README.md +57 -0
- package/test/eval-all.js +213 -0
- package/test/eval-fragment-selection.js +521 -0
- package/test/eval-test-review.js +525 -0
- package/test/evals/froid-testarch-atdd/evals.json +98 -0
- package/test/evals/froid-testarch-automate/evals.json +198 -0
- package/test/evals/froid-testarch-ci/evals.json +78 -0
- package/test/evals/froid-testarch-framework/evals.json +111 -0
- package/test/evals/froid-testarch-nfr/evals.json +78 -0
- package/test/evals/froid-testarch-test-design/evals.json +136 -0
- package/test/evals/froid-testarch-test-review/evals.json +76 -0
- package/test/evals/froid-testarch-trace/evals.json +62 -0
- package/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +30 -0
- package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +22 -0
- package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +20 -0
- package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/compound-invalid-format.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +31 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +26 -0
- package/test/fixtures/agent-schema/invalid/metadata/empty-name.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/metadata/missing-id.agent.yaml +23 -0
- package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +29 -0
- package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +31 -0
- package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +28 -0
- package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +28 -0
- package/test/fixtures/agent-schema/invalid/top-level/empty-file.agent.yaml +5 -0
- package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +28 -0
- package/test/fixtures/agent-schema/invalid/top-level/missing-agent-key.agent.yaml +11 -0
- package/test/fixtures/agent-schema/invalid/yaml-errors/invalid-indentation.agent.yaml +19 -0
- package/test/fixtures/agent-schema/invalid/yaml-errors/malformed-yaml.agent.yaml +18 -0
- package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +27 -0
- package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +31 -0
- package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +38 -0
- package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/menu-triggers/compound-triggers.agent.yaml +31 -0
- package/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +34 -0
- package/test/fixtures/agent-schema/valid/metadata/core-agent-with-module.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/module-agent-missing-module.agent.yaml +23 -0
- package/test/fixtures/agent-schema/valid/metadata/wrong-module-value.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +28 -0
- package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +30 -0
- package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +24 -0
- package/test/fixtures/test-review-cli/project/_froid/tea/workflows/testarch/froid-testarch-test-review/SKILL.md +1 -0
- package/test/fixtures/test-review-cli/project-claude/.claude/skills/froid-testarch-test-review/SKILL.md +1 -0
- package/test/fixtures/test-review-cli/project-empty/.gitkeep +0 -0
- package/test/fixtures/test-review-cli/reports/approve-low-score.md +54 -0
- package/test/fixtures/test-review-cli/reports/approve-with-high.md +61 -0
- package/test/fixtures/test-review-cli/reports/approve.md +54 -0
- package/test/fixtures/test-review-cli/reports/bad-value.md +38 -0
- package/test/fixtures/test-review-cli/reports/block.md +102 -0
- package/test/fixtures/test-review-cli/reports/bonus-not-multiple.md +71 -0
- package/test/fixtures/test-review-cli/reports/colon-in-bold.md +51 -0
- package/test/fixtures/test-review-cli/reports/conflicting.md +38 -0
- package/test/fixtures/test-review-cli/reports/context-basis-without-manifest.md +61 -0
- package/test/fixtures/test-review-cli/reports/context-none-with-manifest.md +66 -0
- package/test/fixtures/test-review-cli/reports/context-overlaps-reviewed.md +67 -0
- package/test/fixtures/test-review-cli/reports/context-pr-diff.md +86 -0
- package/test/fixtures/test-review-cli/reports/convention-baseline-unavailable.md +61 -0
- package/test/fixtures/test-review-cli/reports/convention-fabricated.md +62 -0
- package/test/fixtures/test-review-cli/reports/convention-honest-absent.md +61 -0
- package/test/fixtures/test-review-cli/reports/critical-approve.md +38 -0
- package/test/fixtures/test-review-cli/reports/duplicate-breakdown-heading.md +87 -0
- package/test/fixtures/test-review-cli/reports/empty-steps-flow.md +56 -0
- package/test/fixtures/test-review-cli/reports/fenced-recommendation.md +59 -0
- package/test/fixtures/test-review-cli/reports/key-strengths-weaknesses.md +72 -0
- package/test/fixtures/test-review-cli/reports/lowercase.md +53 -0
- package/test/fixtures/test-review-cli/reports/malformed.md +12 -0
- package/test/fixtures/test-review-cli/reports/missing-breakdown.md +46 -0
- package/test/fixtures/test-review-cli/reports/missing-context-basis.md +59 -0
- package/test/fixtures/test-review-cli/reports/missing-decision.md +53 -0
- package/test/fixtures/test-review-cli/reports/missing-frontmatter.md +45 -0
- package/test/fixtures/test-review-cli/reports/missing-reviewed-files.md +49 -0
- package/test/fixtures/test-review-cli/reports/missing-score.md +52 -0
- package/test/fixtures/test-review-cli/reports/missing-violations.md +36 -0
- package/test/fixtures/test-review-cli/reports/plain-bullets-key-strengths.md +62 -0
- package/test/fixtures/test-review-cli/reports/request-changes-critical.md +98 -0
- package/test/fixtures/test-review-cli/reports/request-changes.md +91 -0
- package/test/fixtures/test-review-cli/reports/score-140.md +38 -0
- package/test/fixtures/test-review-cli/reports/score-mismatch.md +57 -0
- package/test/fixtures/test-review-cli/reports/table-breakdown.md +65 -0
- package/test/fixtures/test-review-cli/reports/wrapped-steps-flow.md +58 -0
- package/test/fixtures/test-review-cli/stub-agent.js +398 -0
- package/test/fixtures/test-review-eval/clean/profile.spec.ts +36 -0
- package/test/fixtures/test-review-eval/ground-truth.json +60 -0
- package/test/fixtures/test-review-eval/seeded/checkout.spec.ts +42 -0
- package/test/fixtures/test-review-eval/seeded/orders.service.spec.ts +40 -0
- package/test/schema/agent.js +491 -0
- package/test/test-agent-schema.js +387 -0
- package/test/test-enforce-hook.js +413 -0
- package/test/test-installation-components.js +510 -0
- package/test/test-knowledge-base.js +445 -0
- package/test/test-release-metadata.js +71 -0
- package/test/test-stamp-changelog.js +102 -0
- package/test/test-test-review-cli.js +4830 -0
- package/tools/build-docs.js +575 -0
- package/tools/fix-doc-links.js +288 -0
- package/tools/schema/agent.js +491 -0
- package/tools/stamp-changelog.js +123 -0
- package/tools/validate-agent-schema.js +284 -0
- package/tools/validate-criteria-fragments.js +446 -0
- package/tools/validate-doc-links.js +440 -0
- package/tools/validate-tea-workflow-descriptions.js +123 -0
- package/website/README.md +137 -0
- package/website/astro.config.mjs +189 -0
- package/website/package-lock.json +6856 -0
- package/website/package.json +24 -0
- package/website/public/favicon.ico +0 -0
- package/website/public/img/tea-logo.svg +7 -0
- package/website/public/robots.txt +37 -0
- package/website/src/components/Banner.astro +74 -0
- package/website/src/components/Header.astro +121 -0
- package/website/src/components/MobileMenuFooter.astro +53 -0
- package/website/src/content/config.ts +6 -0
- package/website/src/lib/site-url.js +25 -0
- package/website/src/pages/404.astro +11 -0
- package/website/src/rehype-base-paths.js +89 -0
- package/website/src/rehype-markdown-links.js +117 -0
- package/website/src/styles/custom.css +518 -0
- package/website/tsconfig.json +9 -0
package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/mobile-ci-device-lab.md
ADDED
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
# Mobile Device Lab in CI
|
|
2
|
+
|
|
3
|
+
## Principle
|
|
4
|
+
|
|
5
|
+
Before a single flow is written, decide **which artifact the flows run against**. That one decision fixes the failure surface of the whole suite: a compiled build is a file the runner installs, while a development-client shell served by a live dev server adds a metro process, a manifest HTTP exchange, and a bundle download to every launch. Everything else in a device lab (emulator snapshots, version pinning, artifact layout, sharding) is mechanical once the artifact is right, and unfixable while it is wrong.
|
|
6
|
+
|
|
7
|
+
## Rationale
|
|
8
|
+
|
|
9
|
+
**The Problem**: Mobile CI failures are usually attributed to "flaky emulators." Most of them are not. They are a launch path that only exists in CI, a snapshot that silently never restores, a runner version eight releases from local, or a diagnosis read off the wrong artifact. Teams then add retries, which converts a reproducible configuration defect into an intermittent one.
|
|
10
|
+
|
|
11
|
+
**The Solution**: Ship the app as a build artifact so the launch path in CI is the launch path users get. Make the emulator boot from a cached snapshot and prove that it did. Pin the runner version and assert the resolved version. Read the failure out of the hierarchy dump instead of the screenshot.
|
|
12
|
+
|
|
13
|
+
**Why This Matters**:
|
|
14
|
+
|
|
15
|
+
- Flows exercise the shipped app instead of a development shell
|
|
16
|
+
- Emulator boot drops from tens of seconds to a few, and the saving is verifiable
|
|
17
|
+
- Failures name the step that broke and what was on screen when it broke
|
|
18
|
+
- CI-only failure modes stop being written into flow files as workarounds
|
|
19
|
+
|
|
20
|
+
## The Build Artifact Decision
|
|
21
|
+
|
|
22
|
+
| Artifact | What it proves | What it costs | Use for |
|
|
23
|
+
| ------------------------------------------------------ | ---------------------------------------------------- | --------------------------------------------------------------------------------- | ------------------------------ |
|
|
24
|
+
| **Release-shaped build** (unsigned APK, simulator IPA) | The binary users get, including all native modules | A build step per change, or a cached build keyed on native inputs | The default for every CI suite |
|
|
25
|
+
| **Development build / dev client** | The app with dev tooling, all native modules present | A build step, plus a dev server when the JS bundle is served rather than embedded | Local iteration, debug flows |
|
|
26
|
+
| **Prebuilt development shell (for example Expo Go)** | That the JS runs inside someone else's container | A live dev server, a manifest exchange, and a launch through a third-party app | Manual smoke work only |
|
|
27
|
+
|
|
28
|
+
**Rule**: the prebuilt shell is the wrong artifact for E2E. It cannot load your native modules, so for any flow touching notifications, OAuth, maps, in-app purchases, or any feature that hands an API key to native code, **a pass in the shell does not prove the native implementation ran**. It proves that whatever the app did in the shell's absence of that module did not throw. Where the module has a fallback path, the flow is exercising the fallback, and the native behavior stays unverified no matter how green the run is. Require evidence that the native path itself was exercised before counting such a flow as coverage, which in practice means running it against a real build.
|
|
29
|
+
|
|
30
|
+
**Be precise about which part is unreachable, because the coarse version of this rule is wrong and gets flows abandoned that would pass.** Deep links are the case worth stating carefully. A shell cannot register the app's custom scheme, so a `myapp://` URL fails there. It can still route its own URL form into the app with the path and query intact, so the app's link parsing, routing, and resulting state changes are all testable. Only the OS-level handoff is out of reach: a cold start from a real widget or notification tap. One suite recorded a deep-link flow as impossible under the shell for exactly this reason, and the flow passed on the first attempt once the URL was built the shell's way. "Untestable here" is a claim that needs the same evidence as any other.
|
|
31
|
+
|
|
32
|
+
**"Absent" is not always the shape it takes, and the other shape is worse.** Some SDKs detect the shell and degrade instead of failing. One in-app-purchase SDK logs `Expo Go app detected. Using RevenueCat in Browser Mode.` and keeps working through a different code path. Nothing errors, the flow proceeds, and what the suite proves is that the fallback path works in a container users never run. A hard `undefined` at least announces itself; a silent degradation gives you a green flow covering the wrong implementation. When a flow touches a native module in a shell, check the device log for what the module decided to do rather than assuming it did nothing.
|
|
33
|
+
|
|
34
|
+
Expo's own CI tutorial builds a dedicated EAS profile for this (`e2e-test`, with `withoutCredentials: true`, Android `buildType: "apk"`, and iOS `simulator: true`) and runs Maestro against those builds. It never runs the flows through Expo Go. See <https://docs.expo.dev/tutorial/cicd/e2e-tests/> and <https://expo.dev/blog/expo-go-vs-development-builds>.
|
|
35
|
+
|
|
36
|
+
The cost of getting this wrong is measurable in flow source. In one audit, about 120 of 195 lines in a single launch subflow existed solely to fight the development shell (dev-server readiness, manifest retries, a third-party app's own UI), and most of the defects fixed that week would not have existed against a compiled build. Workarounds for a wrong artifact do not stay in the harness; they migrate into the flows and become the suite.
|
|
37
|
+
|
|
38
|
+
### "Development Build" Is Not Automatically the Fix
|
|
39
|
+
|
|
40
|
+
A development build is the usual proposal once the shell is ruled out, and on Android it frequently changes nothing. In EAS, `developmentClient: true` sets the Gradle task to `:app:assembleDebug`, and a **debug variant does not embed the JS bundle**. The app still needs a live packager and a manifest exchange at launch, which is the same CI-only network surface the shell had. Only a **release** variant embeds the bundle. SDK 54's `debugOptimized` is the near miss worth naming: it optimizes the C++ layer and remains a debug variant, so the bundle is still served rather than embedded.
|
|
41
|
+
|
|
42
|
+
Getting to a release-variant APK without an account or a build service:
|
|
43
|
+
|
|
44
|
+
- **`eas build --local` composes badly with CI caching.** Expo documents "Caching is not supported" for local builds, and they still require `eas login` or an `EXPO_TOKEN`. `npx expo prebuild` followed by `./gradlew :app:assembleRelease` is the path that caches. See <https://docs.expo.dev/build-reference/local-builds/>.
|
|
45
|
+
- **A locally prebuilt release APK is debug-signed.** The generated `android/app/build.gradle` sets `release { signingConfig signingConfigs.debug }`, so the artifact installs on an emulator with no credentials, which is exactly what a device lab needs and not something to "fix".
|
|
46
|
+
- **`__DEV__` is `false` in a release build.** Any E2E affordance gated behind it silently disappears in the one build the suite is meant to run against. Move the switch to an `EXPO_PUBLIC_`-prefixed variable, which is inlined into the bundle at build time. Expo documents these as "visible in plain-text in your compiled application", so whatever the switch gates must be safe to ship: a throwaway credential against a disposable environment, never a real one.
|
|
47
|
+
- **Custom-scheme deep links need a different URL in the shell, and that is a constraint rather than a hole.** `scheme` is documented as "a build-time configuration, it has no effect in Expo Go", so the shell never registers the app's own scheme and a `myapp://` link fails there with `Activity not started, unable to resolve Intent`. What works is the shell's routed form, `exp://<host>/--/<path>?<query>`, which delivers the path and query string into the app. The parsing, routing, and application logic behind a deep link is therefore fully reachable in a shell. What is not reachable is anything that needs the production scheme registered with the OS: a cold start from a real widget or notification tap, or another app handing the link over. Build the URL from one helper used by every flow, so no single platform branch quietly hardcodes the unregistered scheme.
|
|
48
|
+
|
|
49
|
+
Universal Links and Android App Links are a different mechanism and get no such reprieve. They are HTTPS links resolved through a domain association (`apple-app-site-association`, `assetlinks.json`) that the OS fetches and verifies, so the shell's routed form exercises the in-app routing and says nothing about whether the handoff would have happened. Verify the association against a real build, and treat routing coverage and handoff coverage as two separate claims.
|
|
50
|
+
|
|
51
|
+
## If the Suite Must Run Against a Dev Server
|
|
52
|
+
|
|
53
|
+
Sometimes the compiled build is not ready yet and the dev-server path has to work for one release. Treat it as a temporary configuration with these constraints:
|
|
54
|
+
|
|
55
|
+
- **Reach the host over the debug bridge, not the guest NIC.** `adb reverse tcp:8081 tcp:8081` tunnels over the adb transport, so it survives emulator network breakage that would kill a `10.0.2.2` route. Pin the device with `adb -s <serial>` when more than one is attached.
|
|
56
|
+
- **Do not verify the forward by connecting to it from the device.** A reverse mapping gives the device a local listener on that port unconditionally, so the connect succeeds whether or not anything on the host is behind it. That probe measures that the mapping exists and reports that the server is reachable. Prove it from the host process instead: accept a socket and assert that the accept happened.
|
|
57
|
+
- **Do not assume the toolchain set it up.** Expo CLI issues `adb reverse` from the path where the CLI itself opens the app. Start the server without that flag and the forward silently never happens.
|
|
58
|
+
- **The shell may be asking for a SIGNED manifest, and signing needs an account.** Expo Go sends `expo-expect-signature` with `keyid="expo-root"`. When the app config carries `extra.eas.projectId`, `@expo/cli` answers by fetching a development code-signing certificate from Expo's API and caching it under `~/.expo/codesigning/<projectId>`. That fetch resolves the current user, and with no session it prompts; under `EXPO_NO_INTERACTIVE=1` the prompt cannot be answered and the request dies with `CommandError: Input is required, but 'npx expo' is in non-interactive mode.` A developer machine never sees this, because `~/.expo/state.json` holds a session and the certificate is already cached. A fresh runner has neither, which is why the failure is CI-only and survives every emulator, image, and network change tried against it. **The trigger is `extra.eas.projectId`, not `owner`**; removing `owner` changes nothing. Two fixes work: an `EXPO_TOKEN` secret (Expo's documented CI authentication), or starting the server `--offline`, which skips the network requests behind the signing path and serves an unsigned manifest, which the shell accepts. Apply whichever you choose on every path, local and CI, so the two do not diverge on the one axis that only breaks in CI.
|
|
59
|
+
- **Health-check the manifest the way the client asks for it.** A bare `GET /` with no headers returns `200` and a browser interstitial, so a harness can log "dev server reachable" while every client request fails. Send **every** header the client sends (the platform header, `accept: multipart/mixed`, and the signature-expectation header above), and log the response body: the CLI serializes manifest-path errors as a JSON `error` payload with status `500`. One harness omitted only the signature header and reported "manifest served, HTTP 200, multipart/mixed" through five consecutive red runs, because that one header selects a different branch through the middleware than the app under test takes. See `evidence-integrity.md`: a probe must issue the request it stands in for.
|
|
60
|
+
- **Read the discriminating log line.** `Remote update request not successful` is emitted at exactly one place in `expo-updates`, guarded by the HTTP client's 200-299 check. If it appears, an HTTP response arrived with an error status, which makes it a manifest or HTTP problem and rules out connectivity. The surrounding generic lines (`Failed to download remote update`, `Failed to launch embedded or launchable update`) appear for any failure including connection-refused, so only the specific line carries information. Source: `packages/expo-updates/android/src/main/java/expo/modules/updates/loader/FileDownloader.kt` in <https://github.com/expo/expo>.
|
|
61
|
+
- **Expect the app config to be evaluated per request.** The manifest handler re-reads the project config on every manifest request, so config plugins run per request. Anything environment-sensitive in that config is a live macOS-versus-Linux divergence axis.
|
|
62
|
+
- **Do not build on undocumented packager host variables.** They carry a "drop the undocumented env variables" note upstream, and setting one can break a working `adb reverse` plus loopback setup by advertising a different host back to the client.
|
|
63
|
+
|
|
64
|
+
## Local and CI Run the Same Device Profile
|
|
65
|
+
|
|
66
|
+
Pin one device profile and use it on both sides. A different profile is a different layout, and a different layout is a class of failure that reproduces nowhere but CI.
|
|
67
|
+
|
|
68
|
+
Measured: CI booted a `pixel_3a` (1080x2220 at 440dpi, roughly 807dp tall) while every local run used a `medium_phone` (1080x2400 at 420dpi, roughly 914dp). A screen about 12% shorter pushes more of each scrolling section below the fold, and four unrelated flows failed on the runner with "not visible" while staying green on every developer machine. Each one read like a product defect. None was.
|
|
69
|
+
|
|
70
|
+
The height that matters is **density-independent pixels**, not the pixel resolution, because the layout is laid out in dp. Two profiles with the same `1080x` resolution and different densities are different screens, and comparing the resolutions alone will tell you they match.
|
|
71
|
+
|
|
72
|
+
- Name the profile in the harness, not in a person's local setup, so both sides read the same value.
|
|
73
|
+
- When the matrix genuinely needs more than one profile, keep the PR-gate profile identical to the local one and let the extra profiles run nightly, where a difference is information rather than noise.
|
|
74
|
+
- A suite running two profiles cannot distinguish a real regression from a screen-height artifact, and the artifact is far more common. That ambiguity costs more than the coverage the second profile adds at the gate.
|
|
75
|
+
|
|
76
|
+
## Local Emulators Need Repair After Creation
|
|
77
|
+
|
|
78
|
+
`avdmanager create avd` does not hand back a device a UI driver can use. Three defects, all measured on an Apple Silicon host, all needing a post-creation edit:
|
|
79
|
+
|
|
80
|
+
- **`target=android-0` in the AVD's `.ini` pointer file.** `avdmanager` cannot parse a dotted API level, so a system image such as `system-images;android-36.1;google_apis;arm64-v8a` writes `target=android-0`. The emulator cannot resolve the platform, silently drops hardware acceleration (`hvf is not enabled on this aarch64 host`, then `qemu_mprotect__osdep: mprotect failed: Permission denied`) and software-emulates ARM64 on an ARM64 host. The device never leaves `offline` in `adb devices`, with nothing in the log naming the cause. The same parse failure leaves `avd.id` and `avd.name` as the literal string `<build>`. Correcting `target` makes the identical AVD boot with no acceleration warnings.
|
|
81
|
+
- **`hw.gpu.enabled=no`**, which leaves gfxstream logging `Failed to make display surface context current` and boot never completing.
|
|
82
|
+
- **`hw.keyboard=no`**, wrong for any suite that types through `adb`.
|
|
83
|
+
|
|
84
|
+
Two launch flags worth pinning while you are there:
|
|
85
|
+
|
|
86
|
+
- **`-gpu auto`, not `-gpu swiftshader_indirect`.** Software rendering is fine for a single emulator and does not survive several at once on the same host.
|
|
87
|
+
- **`-no-snapshot-save`, not `-no-snapshot`.** The latter also refuses to LOAD a snapshot, which makes every boot cold and quietly undoes the caching work below.
|
|
88
|
+
|
|
89
|
+
**Read the values back and fail on a mismatch.** A creation script that writes the right lines and never checks them produces exactly the failure this section describes: an AVD that looks configured, boots to `offline`, and costs a full run to diagnose.
|
|
90
|
+
|
|
91
|
+
## Android Emulator on Hosted Runners
|
|
92
|
+
|
|
93
|
+
Using `reactivecircus/android-emulator-runner`:
|
|
94
|
+
|
|
95
|
+
- **The `script:` input is not a shell script.** It is trimmed, split on newlines, and each surviving line is executed as its own `sh -c` invocation. `set -euo pipefail` therefore dies on line one under `dash` and, more importantly, applies to nothing after it. Variables, `cd`, functions, multi-line `if`/`for`, and heredocs do not survive between lines. The working pattern is a single line: `script: bash ./scripts/ci-e2e.sh`.
|
|
96
|
+
- **Snapshot caching is a four-step recipe.** Restore the cache, run the action once with a no-op `script:` to create the AVD and save a boot snapshot, save the cache, then run the real test step with `-no-snapshot-save`. Use the split `actions/cache/restore` plus `actions/cache/save` form: a combined `actions/cache` step saves in a post-step gated on success, so a red run never saves what it just built.
|
|
97
|
+
- **Pass hardware inputs on the creation step only.** The action appends `hw.ramSize`, `disk.dataPartition.size`, `hw.cpu.ncore`, and friends to `config.ini` with `>>` on **every** invocation, outside the guard that decides whether to create the AVD. The emulator normalizes those values when it writes the snapshot, so a re-appended literal no longer matches what the snapshot recorded and the snapshot is rejected at boot with `cannot load snapshot: default_boot` and `Reason: different AVD configuration`. Passing identical inputs to both steps does not fix it, because the mismatch is normalized-versus-literal, not step-versus-step. Verified effect of the fix: snapshot restore in single-digit seconds against a roughly 40-second cold boot.
|
|
98
|
+
- **Put an image version component in the cache key.** Key on API level, target, arch, and the system-image or runner-image version. Without it a runner-image bump invalidates the snapshot while the key still hits, producing permanent cold boots with no signal that anything changed.
|
|
99
|
+
- **Leave hardware acceleration on.** The KVM udev rule plus `disable-linux-hw-accel: auto` is the single largest lever on boot time (seconds versus minutes). Check it before optimizing anything else.
|
|
100
|
+
- **Do not use ATD images for UI-driver suites.** The automated-test-device variants strip SystemUI, the launcher, and the IME, and disable hardware rendering. A UI driver needs exactly those. The gain is roughly a fifth of runtime and it is not worth a suite that cannot see the system UI.
|
|
101
|
+
- **Treat a known-bad base image as a hypothesis to falsify, never as a diagnosis.** Specific API levels do go bad on hosted runners for months at a time, with open reports of no network connectivity or a system-UI ANR that holds window focus, so the tracker is worth reading before pinning an older level. It is not worth believing on a symptom match. One investigation adopted a reported no-network defect as its root cause on the strength of a false-negative probe, bumped the API level on that basis, and reproduced the identical failure on the new level. Changing the image is a test of the hypothesis, and a green run is the only thing that confirms it.
|
|
102
|
+
|
|
103
|
+
## Per-Device Identity for Sharded Runs
|
|
104
|
+
|
|
105
|
+
When flows create and delete data for the signed-in user, each parallel device needs its own fixture account, and the app has to know which account is its own. The usual mechanism is a device-name-to-credential map in the bundle, with the app selecting its entry by reading its own device name.
|
|
106
|
+
|
|
107
|
+
On iOS the simulator name is a device property, so the app reads it. **On Android there is nothing to read.** `expo-device`'s `deviceName` resolves `Settings.Global.DEVICE_NAME` on API 32 and above, and the `bluetooth_name` secure setting below that; on an emulator both default to the product model. Measured: an AVD named `Medium_Phone_API_36.1` reports `sdk_gphone64_arm64`. **Four differently-named AVDs produce four identical map keys.** Every shard then signs in as the same user, the shards delete each other's data mid-flow, and every flow still passes. This is the most expensive shape of hollow green in this fragment, because the green is stable and what it hides is a data race.
|
|
108
|
+
|
|
109
|
+
The identity has to be **written** per device before the run, then proven:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# The API level picks the namespace. Writing the wrong one succeeds and changes
|
|
113
|
+
# nothing the app can read, which is a silent version of the same defect.
|
|
114
|
+
api=$(adb -s "$serial" shell getprop ro.build.version.sdk | tr -d '\r')
|
|
115
|
+
if [ "$api" -ge 32 ]; then
|
|
116
|
+
adb -s "$serial" shell settings put global device_name "$name"
|
|
117
|
+
read_back=$(adb -s "$serial" shell settings get global device_name | tr -d '\r')
|
|
118
|
+
else
|
|
119
|
+
adb -s "$serial" shell settings put secure bluetooth_name "$name"
|
|
120
|
+
read_back=$(adb -s "$serial" shell settings get secure bluetooth_name | tr -d '\r')
|
|
121
|
+
fi
|
|
122
|
+
[ "$read_back" = "$name" ] || { echo "FAIL: $serial reports '$read_back'"; exit 1; }
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Then reconcile across the booted set: **a duplicate key is a hard error, never a warning.** A warning here becomes a shared account, and a shared account becomes a suite that cannot fail for the right reason.
|
|
126
|
+
|
|
127
|
+
## Version Drift and Artifact Layout
|
|
128
|
+
|
|
129
|
+
- **Pin the runner and assert what resolved.** Package-manager and `curl | bash` installers both float. Set an explicit version variable, and assert the reported version in CI. Checking that the binary exists does not catch drift; one project ran eight releases apart between local and CI without noticing.
|
|
130
|
+
- **Do not hardcode the artifact layout.** Older Maestro versions wrote a flat run directory: `commands-(Flow Name).json` and `screenshot-<status>-<epoch>-(Flow Name).png` side by side. Newer versions write a directory per flow: `<timestamp>/<Flow Name>/commands.json`, plus `screen-hierarchy/step-NNN-<command>-<target>.json`, `screenshots/`, and `logs/`. The change landed somewhere between those, so pin nothing to a version and glob nothing flat. Resolve the newest run directory and walk it.
|
|
131
|
+
- **The per-step hierarchy files are the upgrade worth having.** `screen-hierarchy/step-NNN-*.json` makes each step's view tree separately addressable, which is a strictly better diagnostic surface than one blob per flow: you can read what was on screen at the step before the failure, not only at the failure.
|
|
132
|
+
- **Or take the layout out of the equation.** `maestro test --test-output-dir <dir>` writes `manifest.json`, `commands.json`, and `logs/` directly into a directory you name, and `--flatten-debug-output` writes without per-run subfolders or timestamps. Both are in `maestro test --help` on 2.8.0. Naming the directory beats globbing for the newest one, and it survives the next layout change.
|
|
133
|
+
- **Upload the hierarchy dump, always.** It is the artifact people forget and the one that identifies a selector break.
|
|
134
|
+
|
|
135
|
+
## Diagnosing a Failed Run
|
|
136
|
+
|
|
137
|
+
Read, in this order:
|
|
138
|
+
|
|
139
|
+
1. **`commands.json`** for the run: each step carries its own status, so it names the exact step that failed rather than the flow.
|
|
140
|
+
2. **The hierarchy dump captured at failure** (`screen-hierarchy/`, and the error's embedded hierarchy root): this is what was actually on screen, which is the single highest-value artifact in the run.
|
|
141
|
+
3. **Device logs** for the app's own errors.
|
|
142
|
+
4. **The screenshot, last and with suspicion.** It is captured after teardown, so it frequently shows the launcher rather than the failing screen. Diagnosing from it produces confident wrong answers.
|
|
143
|
+
|
|
144
|
+
**Check present-but-off-screen before anything else.** When a step fails on "not visible", find the id in that step's `screen-hierarchy` entry. Present with bounds outside the screen is a scroll problem in the flow; absent is a defect in the app. This one lookup separates the two most common causes of a red run and costs seconds. Skipping it is how an investigation spends hours building plausible mechanisms for a feature that was working the whole time.
|
|
145
|
+
|
|
146
|
+
**Count root causes, not red flows.** One serial run failed with `Maestro Android driver did not start up in time`, and three further flows then failed in one to two seconds each with no artifacts written. Four red flows, one defect. A flow that failed in seconds and wrote nothing did not run; treat it as could-not-measure and diagnose the first failure, because a defect count inflated by a cascade sends the investigation at four subsystems instead of one.
|
|
147
|
+
|
|
148
|
+
## Parallelism
|
|
149
|
+
|
|
150
|
+
- `--shard-split N` divides the suite across N already-booted devices. `--shard-all N` runs the whole suite on each. Boot the devices first; neither flag provisions them.
|
|
151
|
+
- `--udid` (aliased `--device`) takes a comma-separated list on **both** platforms, so a single `--shard-split` invocation drives Android emulator serials and iOS simulator UDIDs through the same code path. One sharding implementation covers both.
|
|
152
|
+
- **Run one Maestro process per machine.** Two concurrent single-shard processes on one host have been observed to collide on the driver connection, failing with `Failed to connect to /127.0.0.1:7001` and `only one gesture can be performed at a time`. Drive every attached device from a single process with `--shard-split`. **There is no per-process driver port to escape with**: `--driver-host-port` is absent from both `maestro --help` and `maestro test --help` on 2.8.0. A handover note claiming an earlier release added it did not survive the check, which is `evidence-integrity.md`'s verify-the-property rule applied to a flag someone else told you about.
|
|
153
|
+
- **Choose the shard count on measured wall clock, not on per-flow duration.** Same suite, same 14-core / 48 GB host, same day: **four emulators finished in 21.1 minutes, two in 27.3.** Four does oversubscribe the host, with load average around 20 and per-flow times stretching from roughly 40 seconds to several minutes, and the total is still shorter. Wall clock is what gates a pull request, so the per-flow number tempts you to the wrong conclusion. Serial for comparison was roughly 1.5 to 2 hours.
|
|
154
|
+
|
|
155
|
+
## Anti-Patterns
|
|
156
|
+
|
|
157
|
+
| Anti-pattern | Why it fails | Fix |
|
|
158
|
+
| ------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
|
|
159
|
+
| E2E against a prebuilt development shell | Native modules absent; adds a CI-only launch path; flows fill with workarounds | Build a release-shaped artifact and install it |
|
|
160
|
+
| Development build adopted as the fix for the dev-server dependency | `developmentClient: true` builds a debug variant, which does not embed the JS bundle, so a packager is still required | Build a release variant; only it embeds the bundle |
|
|
161
|
+
| E2E affordance gated behind `__DEV__` | `__DEV__` is false in a release build, so the affordance is absent from the build under test | Gate on an `EXPO_PUBLIC_` variable and keep what it gates safe to ship in plain text |
|
|
162
|
+
| Signed-manifest path left intact in CI | The certificate fetch needs an account session; non-interactive CI cannot answer the prompt | Supply `EXPO_TOKEN`, or serve the manifest `--offline`, on every path |
|
|
163
|
+
| Local and CI on different device profiles | A shorter screen pushes content below the fold, producing "not visible" failures that reproduce only in CI and read as product defects | Pin one profile for both; extra profiles run nightly, not at the gate |
|
|
164
|
+
| Native module assumed absent in a development shell | Some SDKs detect the shell and degrade silently, so the flow covers a fallback path users never run | Read the device log for what the module decided; prefer a real build |
|
|
165
|
+
| "Not visible" diagnosed before the hierarchy is read | Present-but-off-screen and genuinely-absent are different bugs behind the same message | Look for the id and its bounds in that step's `screen-hierarchy` first |
|
|
166
|
+
| AVD used as the creation tool produced it | `target=android-0`, GPU off, keyboard off: acceleration silently drops or boot never completes | Repair the `.ini` and `config.ini`, then read the values back |
|
|
167
|
+
| Android device identity read rather than written | Every emulator reports the product model, so parallel shards share one map key and one account | Write `device_name` / `bluetooth_name` per device and hard-fail duplicates |
|
|
168
|
+
| Shard count chosen from per-flow duration | Oversubscription stretches each flow while still shortening the run | Choose on measured wall clock, which is what gates the PR |
|
|
169
|
+
| Every red flow counted as its own defect | A driver timeout cascades into fast, artifact-less failures | Diagnose the first failure; artifact-less seconds-long failures are could-not-measure |
|
|
170
|
+
| Multi-line `script:` in the emulator action | Each line is a separate `sh -c`; `set -e` and every variable are lost | One line invoking a real script file |
|
|
171
|
+
| Hardware inputs on both the create and the test step | `config.ini` is re-appended every run; the snapshot is rejected at boot | Pass them on the creation step only, or not at all |
|
|
172
|
+
| Cache key without an image version component | Runner-image bump silently invalidates the snapshot; permanent cold boots | Key on API level, target, arch, and image version |
|
|
173
|
+
| Combined cache step for the AVD | Saves only on success, so the run that built the snapshot never stores it | Split `cache/restore` and `cache/save` |
|
|
174
|
+
| ATD image under a UI driver | SystemUI, launcher, and IME are stripped; hardware rendering is off | Use a standard system image |
|
|
175
|
+
| Floating runner install | Local and CI drift apart silently; behavior differs with no version in the logs | Pin the version and assert the resolved version |
|
|
176
|
+
| Flat artifact glob | Breaks on the run-directory layout change | Resolve the newest run directory and walk it |
|
|
177
|
+
| Diagnosing from the failure screenshot | Taken after teardown; usually shows the launcher | Read the per-step status and the hierarchy dump |
|
|
178
|
+
| Host-side reachability check standing in for the device | Different network namespace; proves nothing about the guest | Prove it from the device, or forward the port over the debug bridge |
|
|
179
|
+
| Device-side connect used to verify an `adb reverse` forward | The mapping itself answers, so the check passes with nothing behind it | Accept a socket in the host process and assert the accept happened |
|
|
180
|
+
| Retries added over a configuration defect | Converts a reproducible failure into an intermittent one | Fix the configuration; keep retries for genuinely nondeterministic steps |
|
|
181
|
+
|
|
182
|
+
## Device Lab Checklist
|
|
183
|
+
|
|
184
|
+
- [ ] **Artifact decided first**: flows run against a release-shaped or development build, never a prebuilt development shell
|
|
185
|
+
- [ ] **Release variant confirmed**: the installed artifact embeds the JS bundle and launches with no packager running
|
|
186
|
+
- [ ] **No `__DEV__`-gated test affordance**: E2E switches ride an `EXPO_PUBLIC_` variable and gate nothing that must stay secret
|
|
187
|
+
- [ ] **Runner version pinned and asserted**: CI fails if the resolved version is not the pinned one
|
|
188
|
+
- [ ] **Emulator script is one line**: any real logic lives in a checked-in script file
|
|
189
|
+
- [ ] **Snapshot restore proven**: boot time recorded, and a rejected snapshot fails the job rather than passing slowly
|
|
190
|
+
- [ ] **Hardware inputs on the creation step only**
|
|
191
|
+
- [ ] **Cache key carries an image version component**
|
|
192
|
+
- [ ] **Hardware acceleration verified on**, not left to chance
|
|
193
|
+
- [ ] **Standard system image**, not an ATD variant
|
|
194
|
+
- [ ] **One device profile across local and CI**, compared on density-independent height rather than pixel resolution
|
|
195
|
+
- [ ] **Locally created AVDs asserted after creation**: `target`, GPU, and keyboard read back rather than assumed written
|
|
196
|
+
- [ ] **Per-device identity written and proven unique** before any sharded run, with a duplicate failing the job
|
|
197
|
+
- [ ] **Artifacts uploaded**: per-step statuses, hierarchy dumps, screenshots, and device logs, resolved by run directory or written to a named output directory
|
|
198
|
+
- [ ] **Dev-server path, if used, is explicitly temporary**: port forwarded over the debug bridge, manifest health-checked with every header the client sends, signing resolved for a non-interactive session, and error bodies logged
|
|
199
|
+
- [ ] **Sharding matches the booted device count**, driven by one runner process per machine
|
|
200
|
+
- [ ] **Shard count justified by measured wall clock**, not by per-flow duration
|
|
201
|
+
|
|
202
|
+
## Integration Points
|
|
203
|
+
|
|
204
|
+
- **Used in workflows**: `*ci` (pipeline shape, caching, artifacts), `*framework` (scaffolding the device suite and its scripts), `*automate` (flows must not encode harness workarounds), `*nfr-assess` (boot and run duration as evidence)
|
|
205
|
+
- **Related fragments**: `mobile-test-strategy.md` (what belongs on a device at all), `maestro-flows.md` (flow-level quality and command semantics), `evidence-integrity.md` (three-state diagnostics and hollow green, which is where most of these defects hide), `ci-burn-in.md` (burn-in and sharding mechanics)
|
|
206
|
+
- **Tools**: `maestro test`, `adb`, `avdmanager`, `emulator`, `reactivecircus/android-emulator-runner`, EAS or the platform build toolchain
|
|
207
|
+
|
|
208
|
+
_Source: Maestro 2.8.0 CLI help and documentation; Expo app-config, local-build, and environment-variable documentation; `@expo/cli` code-signing source; `reactivecircus/android-emulator-runner` source and issue tracker; defects, measurements, and timings from live Maestro device-lab investigations on hosted runners and an Apple Silicon host_
|
package/src/workflows/testarch/froid-testarch-framework/resources/knowledge/mobile-test-strategy.md
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Mobile Test Strategy
|
|
2
|
+
|
|
3
|
+
## Principle
|
|
4
|
+
|
|
5
|
+
Mobile applies the same level discipline as any other stack: push verification to the cheapest level that can carry it, and reserve device-level flows for what genuinely requires a device. The mobile-specific part is that the expensive level is **much** more expensive (emulator boot, app install, real network) and the risk surface includes conditions web apps do not have: permissions, backgrounding, offline, deep links, and OS version fragmentation.
|
|
6
|
+
|
|
7
|
+
## Rationale
|
|
8
|
+
|
|
9
|
+
**The Problem**: Mobile suites tend to collapse into one level. Teams write end-to-end device flows for everything because that is the only tool they set up, then watch a 40-flow suite take 50 minutes and fail for reasons unrelated to the change. The opposite failure is equally common: unit-testing every reducer and shipping an app nobody ever launched in CI.
|
|
10
|
+
|
|
11
|
+
**The Solution**: Split by what actually needs the device. Business logic, formatting, state reduction, and API clients are unit and integration concerns and do not need a simulator. Component or screen tests cover rendering and interaction without a full app launch. Device flows exist for the journeys where the integration of app, OS, and backend is itself the risk.
|
|
12
|
+
|
|
13
|
+
**Why This Matters**:
|
|
14
|
+
|
|
15
|
+
- Suite runtime stays inside a PR-gate budget
|
|
16
|
+
- Failures point at the layer that broke
|
|
17
|
+
- Device capacity is spent on the risks only a device can prove
|
|
18
|
+
- The same P0-P3 prioritization used elsewhere in TEA transfers unchanged
|
|
19
|
+
|
|
20
|
+
## The Mobile Test Level Framework
|
|
21
|
+
|
|
22
|
+
| Level | Runs on | Covers | Typical share (indicative) |
|
|
23
|
+
| ------------------------- | -------------------------- | ----------------------------------------------------------------------- | -------------------------- |
|
|
24
|
+
| **Unit** | Node / JVM / Swift runtime | Pure logic, reducers, formatters, validation, mappers | 60-70% |
|
|
25
|
+
| **Component / screen** | Test renderer, no device | Rendering, props, interaction handlers, conditional UI | 20-25% |
|
|
26
|
+
| **Contract** | No device | The app's HTTP boundary against its backend (Pact or schema validation) | small, high value |
|
|
27
|
+
| **Device flow (Maestro)** | Simulator/emulator/device | Cross-screen journeys, permissions, deep links, background/foreground | 5-15% |
|
|
28
|
+
| **Manual / exploratory** | Real device | Gestures, haptics, biometrics, accessibility, real-network degradation | remainder |
|
|
29
|
+
|
|
30
|
+
**Duplicate coverage guard** (same rule as every other stack): before adding a device flow, check whether a component test or a contract test already proves the behavior. A device flow that only verifies a label renders is a unit test wearing a 90-second costume.
|
|
31
|
+
|
|
32
|
+
## What Belongs in a Device Flow
|
|
33
|
+
|
|
34
|
+
Promote to a Maestro flow when the risk is in the **integration**, not the logic:
|
|
35
|
+
|
|
36
|
+
- P0 revenue or access journeys end to end (sign in, purchase, submit claim)
|
|
37
|
+
- OS permission grants and denials, including the denied path
|
|
38
|
+
- Deep link entry into a specific screen. The app's own parsing and routing is testable even in a development shell, through the shell's routed URL form; the OS-level handoff needs the app's custom scheme registered, which a shell does not do.
|
|
39
|
+
- Universal Links and Android App Links are a **separate** surface from custom-scheme deep links, and the same shell trick does not cover them. A verified HTTPS link depends on the platform's domain association (`apple-app-site-association`, `assetlinks.json`) being served and accepted, so a shell-routed URL exercises the in-app routing while proving nothing about whether the OS would have handed the link over at all. Score and cover the association separately from the routing.
|
|
40
|
+
- Background, foreground, and process-death restoration
|
|
41
|
+
- Offline and reconnect behavior
|
|
42
|
+
- Push notification tap-through
|
|
43
|
+
- App upgrade with existing local data (explicit exception to clearState isolation: seeds previous-build state, installs the new build without clearState, asserts migration, and cleans up in teardown)
|
|
44
|
+
|
|
45
|
+
Keep out of device flows:
|
|
46
|
+
|
|
47
|
+
- Field-level input validation (component level)
|
|
48
|
+
- Every variant of a list cell (component level)
|
|
49
|
+
- Error message copy (component level)
|
|
50
|
+
- API error mapping (contract or unit level)
|
|
51
|
+
|
|
52
|
+
## Mobile Risk Categories
|
|
53
|
+
|
|
54
|
+
Extends the standard TEA risk categories with the conditions unique to the platform. Score each with the usual probability × impact 1-9 scale.
|
|
55
|
+
|
|
56
|
+
| Category | Example risk | Typical level |
|
|
57
|
+
| -------------------- | ---------------------------------------------------- | ------------------------- |
|
|
58
|
+
| **Permissions** | Camera denied leaves the user on a dead screen | Device flow |
|
|
59
|
+
| **Lifecycle** | State lost when the OS kills a backgrounded app | Device flow |
|
|
60
|
+
| **Connectivity** | Offline write is silently discarded on reconnect | Device flow + unit |
|
|
61
|
+
| **Fragmentation** | Layout breaks on a small screen or an older OS | Device matrix |
|
|
62
|
+
| **Upgrade** | Local database migration corrupts existing user data | Device flow |
|
|
63
|
+
| **Store compliance** | Missing privacy declaration blocks release | Release checklist |
|
|
64
|
+
| **Performance** | Cold start over budget, frame drops on scroll | Instrumented, not Maestro |
|
|
65
|
+
| **Binary size** | Growth pushes past a cellular download threshold | CI metric |
|
|
66
|
+
|
|
67
|
+
Cold start, frame rate, memory, and binary size are NFR evidence. Collect them with platform instrumentation and audit them in the NFR workflow; do not try to assert them from a Maestro flow.
|
|
68
|
+
|
|
69
|
+
## Device Matrix
|
|
70
|
+
|
|
71
|
+
Pick the matrix from risk, not from availability. A defensible minimum:
|
|
72
|
+
|
|
73
|
+
- **Primary**: newest OS on the highest-usage device for each platform
|
|
74
|
+
- **Floor**: the oldest OS version the app still supports
|
|
75
|
+
- **Form factor**: one small screen, and a tablet only if the app ships a tablet layout
|
|
76
|
+
|
|
77
|
+
Run the full matrix nightly and on release candidates. Run the primary target only on PRs, because a PR gate that boots six emulators stops being a gate people wait for.
|
|
78
|
+
|
|
79
|
+
**The PR-gate profile and the local profile must be the same one.** A different screen height moves content below the fold, and `assertVisible` means inside the viewport, so a shorter runner device fails UI assertions that pass on every developer machine and reads as a product defect. Compare on density-independent height rather than pixel resolution: two profiles can share `1080x` and differ by 100dp. The matrix exists to find fragmentation defects, and it can only do that from a gate that is not producing them by accident. See `mobile-ci-device-lab.md`.
|
|
80
|
+
|
|
81
|
+
## CI Shape
|
|
82
|
+
|
|
83
|
+
- **Build artifact first**: decide what the flows run against before writing any of them. A release-shaped build (unsigned APK, simulator IPA) is the default; a prebuilt development shell such as Expo Go is not a CI artifact, because the native modules the flows need are absent and the launch path exists only in CI. This decision sets the failure surface of the whole suite; see `mobile-ci-device-lab.md`.
|
|
84
|
+
- **PR gate**: unit + component + contract on every push. P0-tagged Maestro flows on the primary target only.
|
|
85
|
+
- **Nightly**: full Maestro suite across the device matrix.
|
|
86
|
+
- **Release candidate**: full suite plus the upgrade-path flow from the previous production build.
|
|
87
|
+
- **Artifacts**: Maestro writes per-step statuses, a hierarchy dump, screenshots, a video, and device logs per run. Upload all of them, and diagnose from the per-step status and the hierarchy dump captured at failure. The failure screenshot is taken after teardown and often shows the launcher rather than the failing screen, so leading with it produces confident wrong answers.
|
|
88
|
+
- **No live third-party evaluation in the run path**: a flow asserting behavior behind a remotely evaluated feature flag hands the outcome to a third-party service, for a user the run created seconds earlier. Start the environment with the remote provider unconfigured, so the service falls back to its seeded local value, and seed that value as test data. The same applies to remote personalization and experiment services. See `feature-flags.md` for the flag-testing patterns this reuses.
|
|
89
|
+
- **Burn-in**: applies to mobile the same way it applies to browser E2E. New or changed flows run repeatedly before merge, because device flows are the most flake-prone level in the suite.
|
|
90
|
+
- **Sharding**: shard by flow file across parallel emulators, and pick the shard count from measured wall clock rather than from per-flow duration. Oversubscribing the host stretches every flow while still finishing the run sooner, and wall clock is what gates the PR. Each parallel device also needs its own fixture account and a way to know which one is its own; on Android that identity has to be written to the device rather than read from it (`mobile-ci-device-lab.md`).
|
|
91
|
+
|
|
92
|
+
## Anti-Patterns
|
|
93
|
+
|
|
94
|
+
| Anti-pattern | Why it fails | Fix |
|
|
95
|
+
| ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
|
|
96
|
+
| Every acceptance criterion becomes a device flow | Suite runtime explodes; failures are slow to diagnose | Apply the level framework and the duplicate-coverage guard |
|
|
97
|
+
| Full device matrix on every PR | Gate becomes too slow to block on, so people bypass it | Primary target on PRs, matrix nightly |
|
|
98
|
+
| Performance asserted inside a Maestro flow | Measures the harness, not the app | Platform instrumentation as NFR evidence |
|
|
99
|
+
| Flows depend on a shared logged-in account | Parallel runs collide; failures are not reproducible | Per-run accounts/data or explicit backend reset when server state changes |
|
|
100
|
+
| No offline or permission-denied coverage | The paths users actually hit in the wild are the untested ones | Score them as risks; they are usually P0 or P1 |
|
|
101
|
+
| Testing against a production backend | Non-deterministic data, and a test order can mutate real state | Dedicated environment or a stubbed backend |
|
|
102
|
+
| Device flows run through a prebuilt development shell | Native modules are absent, so notifications and payments can only be asserted missing; the launch path is CI-only | Build a release-shaped artifact and install it (`mobile-ci-device-lab.md`) |
|
|
103
|
+
| A surface written off as untestable without a check | The coarse claim is often wrong: a shell routes its own deep-link URL form into the app, so link handling is reachable | Test the claim before dropping coverage; name the part that is genuinely out of reach |
|
|
104
|
+
| Flow asserts behavior behind a remotely evaluated flag | A third-party service decides the outcome, for a user created seconds earlier | Unconfigure the remote provider so the seeded local value wins, and seed it as test data |
|
|
105
|
+
|
|
106
|
+
## Mobile Strategy Checklist
|
|
107
|
+
|
|
108
|
+
- [ ] **Build artifact decided**: flows run against a release-shaped or development build, never a prebuilt development shell
|
|
109
|
+
- [ ] **Levels assigned**: each acceptance criterion mapped to unit, component, contract, or device flow
|
|
110
|
+
- [ ] **Duplicate coverage checked**: no device flow proving something a cheaper level already proves
|
|
111
|
+
- [ ] **Mobile risk categories scored**: permissions, lifecycle, connectivity, fragmentation, upgrade
|
|
112
|
+
- [ ] **Device matrix justified**: primary, floor, and form factor chosen from usage data
|
|
113
|
+
- [ ] **PR-gate profile matches the local profile**, compared on density-independent height
|
|
114
|
+
- [ ] **PR gate bounded**: P0 flows on the primary target only
|
|
115
|
+
- [ ] **NFR evidence separated**: cold start, frame rate, memory, binary size instrumented rather than asserted in flows
|
|
116
|
+
- [ ] **No live third-party flag or experiment service in the run path**: remote evaluation disabled, values seeded as test data
|
|
117
|
+
- [ ] **Artifacts uploaded**: video, screenshot, and hierarchy dump on failure
|
|
118
|
+
- [ ] **Burn-in enabled** for new and changed flows
|
|
119
|
+
- [ ] **Parallel devices carry distinct fixture accounts**, keyed on an identity the run wrote and verified
|
|
120
|
+
|
|
121
|
+
## Integration Points
|
|
122
|
+
|
|
123
|
+
- **Used in workflows**: `*test-design` (risk and level assignment for mobile), `*framework` (scaffold the suite), `*automate` (generate flows at the right level), `*ci` (device pipeline shape), `*nfr-assess` (mobile NFR evidence), `*trace` (map criteria to flows)
|
|
124
|
+
- **Related fragments**: `maestro-flows.md` (flow syntax and quality), `mobile-ci-device-lab.md` (build artifact selection, emulator caching, version pinning, per-device identity, failure diagnosis), `test-levels-framework.md` (the general level model this specializes), `probability-impact.md` (the scoring scale), `test-priorities-matrix.md` (P0-P3), `ci-burn-in.md` (burn-in and sharding mechanics), `feature-flags.md` (testing both flag states without a live provider)
|
|
125
|
+
- **Tools**: `maestro test`, `maestro studio`, platform instrumentation (Xcode Instruments, Android Profiler, Firebase Performance)
|
|
126
|
+
|
|
127
|
+
_Source: TEA test-levels framework applied to mobile constraints, Maestro CI practice, mobile risk categories from permissions/lifecycle/connectivity/fragmentation failure modes_
|