e2e-maestro
Writes and runs Maestro E2E flows on simulator or emulator - pinned install, testIDs, debug links, no-network check, screenshot baselines. Use when adding a flow or e2e or screenshot runs fail. Not for Jest (unit-and-component-tests), pixel goldens (golden-tests) or parity (toybox-visual-parity).
- License 许可
- MIT
- 最近更新
- 2026-11-05
- Stars
- ★ 0
- Forks
- 0
01 前言 Front Matter
- name
- e2e-maestro
- description
- Writes and runs Maestro E2E flows on simulator or emulator - pinned install, testIDs, debug links, no-network check, screenshot baselines. Use when adding a flow or e2e or screenshot runs fail. Not for Jest (unit-and-component-tests), pixel goldens (golden-tests) or parity (toybox-visual-parity).
02 资源文件 500
- 资产文件assets/debug-link-params.json3.4 KB
- 资产文件assets/e2e-testids.json4.5 KB
- 资产文件assets/screen-testids.json213.7 KB
- 资产文件assets/shared.json1.5 KB
- 参考文档references/debug-deep-link.md29.6 KB
- 参考文档references/flows.md30.3 KB
- 参考文档references/maestro-setup.md7.4 KB
- 参考文档references/runner-and-network.md35.0 KB
- 参考文档references/screenshot-matrix.md10.6 KB
- 脚本scripts/check-e2e-report.mjs29.9 KB
- 脚本scripts/check-e2e-setup.mjs68.6 KB
- 脚本scripts/check-flows.mjs56.0 KB
- 脚本scripts/check-lib.mjs44.4 KB
- 脚本scripts/lib/android-e2e.mjs2.5 KB
- 脚本scripts/lib/maestro-spawns.mjs8.2 KB
- 脚本scripts/lib/maestro-yaml.mjs7.3 KB
- 脚本scripts/selftest.mjs2.0 KB
- 参考文档templates/apps/__GAME_ID__/e2e/flows/journeys/11-daily.yaml2.2 KB
- 参考文档templates/apps/__GAME_ID__/e2e/flows/journeys/12-continue-premium.yaml1.5 KB
- 参考文档templates/apps/__GAME_ID__/e2e/flows/journeys/13-endless.yaml2.5 KB
- 参考文档templates/apps/__GAME_ID__/e2e/flows/smoke/10-level-1.yaml4.6 KB
- 参考文档templates/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.5 KB
- 参考文档templates/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档templates/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档templates/packages/shell/e2e/flows/smoke/04-debug-performance.yaml1.7 KB
- 参考文档templates/packages/shell/e2e/screenshots/matrix.yaml1.5 KB
- 参考文档templates/packages/shell/e2e/subflows/airplane-mode.yaml785 B
- 参考文档templates/packages/shell/e2e/subflows/assert-no-network.yaml549 B
- 参考文档templates/packages/shell/e2e/subflows/debug-setup.yaml2.3 KB
- 参考文档templates/packages/shell/e2e/subflows/kill-app.yaml647 B
- 参考文档templates/packages/shell/e2e/subflows/shoot-screen.yaml490 B
- 参考文档templates/packages/shell/e2e/subflows/win-and-next.yaml568 B
- 脚本templates/packages/shell/src/app/create-debug-parts.test.ts13.6 KB
- 脚本templates/packages/shell/src/app/create-debug-parts.ts10.3 KB
- 脚本templates/packages/shell/src/app/debug-link-handler.test.ts14.8 KB
- 脚本templates/packages/shell/src/app/debug-link-handler.ts12.6 KB
- 脚本templates/packages/shell/src/app/debug-link-intake.test.ts3.6 KB
- 脚本templates/packages/shell/src/app/debug-link-intake.ts3.1 KB
- 脚本templates/packages/shell/src/app/debug-link-routes.test.ts5.2 KB
- 脚本templates/packages/shell/src/app/debug-link-routes.ts5.9 KB
- 其他templates/packages/shell/src/app/debug-services-context.test.tsx4.0 KB
- 其他templates/packages/shell/src/app/debug-services-context.tsx2.3 KB
- 脚本templates/packages/shell/src/screens/debug/debug-actions.test.ts6.5 KB
- 脚本templates/packages/shell/src/screens/debug/debug-actions.ts4.8 KB
- 脚本templates/packages/shell/src/screens/debug/debug-link.test.ts3.6 KB
- 脚本templates/packages/shell/src/screens/debug/debug-link.ts5.9 KB
- 脚本templates/packages/shell/src/screens/debug/debug-overrides.test.ts1.5 KB
- 脚本templates/packages/shell/src/screens/debug/debug-overrides.ts3.6 KB
- 脚本templates/packages/shell/src/screens/debug/debug-perf.test.ts1.7 KB
- 脚本templates/packages/shell/src/screens/debug/debug-perf.ts3.6 KB
- 脚本templates/packages/shell/src/screens/debug/debug-save-import.test.ts2.0 KB
- 脚本templates/packages/shell/src/screens/debug/debug-save-import.ts2.6 KB
- 脚本templates/packages/shell/src/screens/debug/debug-save-recipe.test.ts3.1 KB
- 脚本templates/packages/shell/src/screens/debug/debug-save-recipe.ts4.1 KB
- 脚本templates/packages/shell/src/screens/debug/debug-services.test.ts11.0 KB
- 脚本templates/packages/shell/src/screens/debug/debug-services.ts9.5 KB
- 脚本templates/packages/shell/src/screens/debug/debug-sheets.test.ts2.0 KB
- 脚本templates/packages/shell/src/screens/debug/debug-sheets.ts1.6 KB
- 脚本templates/packages/shell/src/screens/debug/debug-tools.test.ts3.5 KB
- 脚本templates/packages/shell/src/screens/debug/debug-tools.ts5.4 KB
- 脚本templates/packages/shell/src/screens/debug/fake-debug-perf.test.ts1.3 KB
- 脚本templates/packages/shell/src/screens/debug/fake-debug-perf.ts1.5 KB
- 脚本templates/packages/shell/src/screens/debug/fake-debug-store.test.ts593 B
- 脚本templates/packages/shell/src/screens/debug/fake-debug-store.ts966 B
- 脚本templates/packages/shell/src/screens/debug/network-guard.test.ts2.1 KB
- 脚本templates/packages/shell/src/screens/debug/network-guard.ts2.7 KB
- 脚本templates/packages/shell/src/screens/debug/simulated-clock.test.ts1.2 KB
- 脚本templates/packages/shell/src/screens/debug/simulated-clock.ts1.3 KB
- 脚本templates/packages/shell/src/screens/debug/simulated-connectivity.test.ts2.7 KB
- 脚本templates/packages/shell/src/screens/debug/simulated-connectivity.ts1.8 KB
- 其他templates/packages/shell/src/screens/debug/use-debug-model.test.tsx12.5 KB
- 脚本templates/packages/shell/src/screens/debug/use-debug-model.ts12.3 KB
- 脚本templates/packages/shell/src/services/save/sqlite-kv-debug-store-adapter.ts1012 B
- 脚本templates/packages/tooling/scripts/install-maestro.sh1.4 KB
- 脚本templates/packages/tooling/src/audit/network-runtime-layer.test.ts8.2 KB
- 脚本templates/packages/tooling/src/audit/network-runtime-layer.ts8.1 KB
- 脚本templates/packages/tooling/src/audit/sample-sockets.ts1.8 KB
- 脚本templates/packages/tooling/src/e2e/airplane-mode.test.ts2.2 KB
- 脚本templates/packages/tooling/src/e2e/airplane-mode.ts991 B
- 脚本templates/packages/tooling/src/e2e/android-cli.test.ts4.9 KB
- 脚本templates/packages/tooling/src/e2e/android-cli.ts8.3 KB
- 脚本templates/packages/tooling/src/e2e/android-cold-start.test.ts3.4 KB
- 脚本templates/packages/tooling/src/e2e/android-cold-start.ts3.6 KB
- 脚本templates/packages/tooling/src/e2e/android-device-args.test.ts6.5 KB
- 脚本templates/packages/tooling/src/e2e/android-device-args.ts6.8 KB
- 脚本templates/packages/tooling/src/e2e/android-e2e-device.ts4.9 KB
- 脚本templates/packages/tooling/src/e2e/android-flow-steps.ts7.1 KB
- 脚本templates/packages/tooling/src/e2e/android-memory.test.ts4.7 KB
- 脚本templates/packages/tooling/src/e2e/android-memory.ts3.8 KB
- 脚本templates/packages/tooling/src/e2e/android-socket-sampler.test.ts4.7 KB
- 脚本templates/packages/tooling/src/e2e/android-socket-sampler.ts5.1 KB
- 脚本templates/packages/tooling/src/e2e/capture-screenshots-android.ts6.1 KB
- 脚本templates/packages/tooling/src/e2e/capture-screenshots-ios.ts6.8 KB
- 脚本templates/packages/tooling/src/e2e/e2e-cli.test.ts3.8 KB
- 脚本templates/packages/tooling/src/e2e/e2e-cli.ts6.4 KB
- 脚本templates/packages/tooling/src/e2e/emu-perf-steps.ts8.6 KB
- 脚本templates/packages/tooling/src/e2e/feedback-evidence.test.ts1.8 KB
- 脚本templates/packages/tooling/src/e2e/feedback-evidence.ts2.4 KB
- 脚本templates/packages/tooling/src/e2e/flow-files.test.ts3.0 KB
- 脚本templates/packages/tooling/src/e2e/flow-files.ts2.1 KB
- 脚本templates/packages/tooling/src/e2e/junit-merge.test.ts3.1 KB
- 脚本templates/packages/tooling/src/e2e/junit-merge.ts3.1 KB
- 脚本templates/packages/tooling/src/e2e/level-line.test.ts5.8 KB
- 脚本templates/packages/tooling/src/e2e/level-line.ts6.6 KB
- 脚本templates/packages/tooling/src/e2e/maestro-args.test.ts2.4 KB
- 脚本templates/packages/tooling/src/e2e/maestro-args.ts3.2 KB
- 脚本templates/packages/tooling/src/e2e/print-level-line.ts5.1 KB
- 脚本templates/packages/tooling/src/e2e/run-e2e-android.ts6.3 KB
- 脚本templates/packages/tooling/src/e2e/run-e2e-ios.ts12.5 KB
- 脚本templates/packages/tooling/src/e2e/sample-sockets-android.ts3.0 KB
- 脚本templates/packages/tooling/src/e2e/sampler-evidence.test.ts3.6 KB
- 脚本templates/packages/tooling/src/e2e/sampler-evidence.ts3.6 KB
- 脚本templates/packages/tooling/src/e2e/save-benchmark-evidence.test.ts2.4 KB
- 脚本templates/packages/tooling/src/e2e/save-benchmark-evidence.ts2.8 KB
- 脚本templates/packages/tooling/src/e2e/screenshot-compare.test.ts3.5 KB
- 脚本templates/packages/tooling/src/e2e/screenshot-compare.ts3.9 KB
- 脚本templates/packages/tooling/src/e2e/screenshot-matrix.test.ts3.4 KB
- 脚本templates/packages/tooling/src/e2e/screenshot-matrix.ts2.8 KB
- 脚本templates/packages/tooling/src/e2e/screenshots-cli.test.ts2.6 KB
- 脚本templates/packages/tooling/src/e2e/screenshots-cli.ts5.0 KB
- 脚本templates/packages/tooling/src/e2e/sim-perf-steps.test.ts4.3 KB
- 脚本templates/packages/tooling/src/e2e/sim-perf-steps.ts12.6 KB
- 脚本templates/packages/tooling/src/e2e/sim-perf.test.ts6.8 KB
- 脚本templates/packages/tooling/src/e2e/sim-perf.ts8.0 KB
- 脚本templates/packages/tooling/src/e2e/simulator.test.ts8.6 KB
- 脚本templates/packages/tooling/src/e2e/simulator.ts12.1 KB
- 脚本templates/packages/tooling/src/e2e/write-gallery.ts2.7 KB
- 脚本templates/packages/tooling/src/visual/compare-png.ts2.3 KB
- 脚本templates/test/integration/save/sqlite-kv-debug-store-adapter.test.ts4.8 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-cold-start-missing/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-cold-start-missing/args.txt46 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-cold-start-missing/EXPECT.txt103 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-cold-start-missing/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-cold-start-missing/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-cold-start-missing/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-cold-start-missing/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-cold-start-missing/reports/e2e-android/demo/feedback.json130 B
- 其他tests/fixtures/check-e2e-report/bad-android-cold-start-missing/reports/e2e-android/demo/junit.xml1.9 KB
- 其他tests/fixtures/check-e2e-report/bad-android-cold-start-missing/reports/e2e-android/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-cold-start-missing/reports/e2e-android/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-cold-start-missing/reports/e2e-android/demo/large-text/tablet-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-cold-start-missing/reports/e2e-android/demo/large-text/tablet-fa/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-cold-start-missing/reports/e2e-android/demo/memory.json83 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-cold-start-missing/reports/e2e-android/demo/network-samplers.json201 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-cold-start-missing/reports/e2e-android/demo/network.txt—
- 参考文档tests/fixtures/check-e2e-report/bad-android-cold-start-missing/reports/e2e-android/demo/save-benchmark.json368 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-cold-start-missing/reports/screenshots-android/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-feedback-missing/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-feedback-missing/args.txt46 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-feedback-missing/EXPECT.txt139 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-feedback-missing/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-feedback-missing/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-feedback-missing/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-feedback-missing/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-feedback-missing/reports/e2e-android/demo/cold-start.json195 B
- 其他tests/fixtures/check-e2e-report/bad-android-feedback-missing/reports/e2e-android/demo/junit.xml1.9 KB
- 其他tests/fixtures/check-e2e-report/bad-android-feedback-missing/reports/e2e-android/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-feedback-missing/reports/e2e-android/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-feedback-missing/reports/e2e-android/demo/large-text/tablet-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-feedback-missing/reports/e2e-android/demo/large-text/tablet-fa/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-feedback-missing/reports/e2e-android/demo/memory.json83 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-feedback-missing/reports/e2e-android/demo/network-samplers.json201 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-feedback-missing/reports/e2e-android/demo/network.txt—
- 参考文档tests/fixtures/check-e2e-report/bad-android-feedback-missing/reports/e2e-android/demo/save-benchmark.json368 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-feedback-missing/reports/screenshots-android/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-large-text/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-large-text/args.txt46 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-large-text/EXPECT.txt146 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-large-text/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-large-text/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-large-text/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-large-text/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-large-text/reports/e2e-android/demo/cold-start.json195 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-large-text/reports/e2e-android/demo/feedback.json130 B
- 其他tests/fixtures/check-e2e-report/bad-android-large-text/reports/e2e-android/demo/junit.xml1.9 KB
- 其他tests/fixtures/check-e2e-report/bad-android-large-text/reports/e2e-android/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-large-text/reports/e2e-android/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-large-text/reports/e2e-android/demo/large-text/tablet-en/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-large-text/reports/e2e-android/demo/memory.json83 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-large-text/reports/e2e-android/demo/network-samplers.json201 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-large-text/reports/e2e-android/demo/network.txt—
- 参考文档tests/fixtures/check-e2e-report/bad-android-large-text/reports/e2e-android/demo/save-benchmark.json368 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-large-text/reports/screenshots-android/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-missing/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-missing/args.txt46 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-missing/EXPECT.txt95 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-missing/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-missing/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-missing/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-missing/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-missing/reports/e2e-android/demo/cold-start.json195 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-missing/reports/e2e-android/demo/feedback.json130 B
- 其他tests/fixtures/check-e2e-report/bad-android-memory-missing/reports/e2e-android/demo/junit.xml1.9 KB
- 其他tests/fixtures/check-e2e-report/bad-android-memory-missing/reports/e2e-android/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-memory-missing/reports/e2e-android/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-memory-missing/reports/e2e-android/demo/large-text/tablet-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-memory-missing/reports/e2e-android/demo/large-text/tablet-fa/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-missing/reports/e2e-android/demo/network-samplers.json201 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-missing/reports/e2e-android/demo/network.txt—
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-missing/reports/e2e-android/demo/save-benchmark.json368 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-missing/reports/screenshots-android/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-over/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-over/args.txt46 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-over/EXPECT.txt110 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-over/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-over/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-over/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-over/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-over/reports/e2e-android/demo/cold-start.json195 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-over/reports/e2e-android/demo/feedback.json130 B
- 其他tests/fixtures/check-e2e-report/bad-android-memory-over/reports/e2e-android/demo/junit.xml1.9 KB
- 其他tests/fixtures/check-e2e-report/bad-android-memory-over/reports/e2e-android/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-memory-over/reports/e2e-android/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-memory-over/reports/e2e-android/demo/large-text/tablet-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-memory-over/reports/e2e-android/demo/large-text/tablet-fa/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-over/reports/e2e-android/demo/memory.json179 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-over/reports/e2e-android/demo/network-samplers.json201 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-over/reports/e2e-android/demo/network.txt—
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-over/reports/e2e-android/demo/save-benchmark.json368 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-over/reports/screenshots-android/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-pss-only/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-pss-only/args.txt46 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-pss-only/EXPECT.txt42 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-pss-only/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-pss-only/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-pss-only/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-pss-only/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-pss-only/reports/e2e-android/demo/cold-start.json195 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-pss-only/reports/e2e-android/demo/feedback.json130 B
- 其他tests/fixtures/check-e2e-report/bad-android-memory-pss-only/reports/e2e-android/demo/junit.xml1.9 KB
- 其他tests/fixtures/check-e2e-report/bad-android-memory-pss-only/reports/e2e-android/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-memory-pss-only/reports/e2e-android/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-memory-pss-only/reports/e2e-android/demo/large-text/tablet-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-memory-pss-only/reports/e2e-android/demo/large-text/tablet-fa/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-pss-only/reports/e2e-android/demo/memory.json83 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-pss-only/reports/e2e-android/demo/network-samplers.json201 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-pss-only/reports/e2e-android/demo/network.txt—
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-pss-only/reports/e2e-android/demo/save-benchmark.json368 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-memory-pss-only/reports/screenshots-android/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-network-sockets/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-network-sockets/args.txt46 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-network-sockets/EXPECT.txt123 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-network-sockets/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-network-sockets/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-network-sockets/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-android-network-sockets/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-network-sockets/reports/e2e-android/demo/cold-start.json195 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-network-sockets/reports/e2e-android/demo/feedback.json130 B
- 其他tests/fixtures/check-e2e-report/bad-android-network-sockets/reports/e2e-android/demo/junit.xml1.9 KB
- 其他tests/fixtures/check-e2e-report/bad-android-network-sockets/reports/e2e-android/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-network-sockets/reports/e2e-android/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-network-sockets/reports/e2e-android/demo/large-text/tablet-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-android-network-sockets/reports/e2e-android/demo/large-text/tablet-fa/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-network-sockets/reports/e2e-android/demo/memory.json83 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-network-sockets/reports/e2e-android/demo/network-samplers.json201 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-network-sockets/reports/e2e-android/demo/network.txt78 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-network-sockets/reports/e2e-android/demo/save-benchmark.json368 B
- 参考文档tests/fixtures/check-e2e-report/bad-android-network-sockets/reports/screenshots-android/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-feedback-no-win/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-feedback-no-win/args.txt27 B
- 参考文档tests/fixtures/check-e2e-report/bad-feedback-no-win/EXPECT.txt168 B
- 参考文档tests/fixtures/check-e2e-report/bad-feedback-no-win/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-feedback-no-win/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-feedback-no-win/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-feedback-no-win/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-feedback-no-win/reports/e2e/demo/feedback.json122 B
- 其他tests/fixtures/check-e2e-report/bad-feedback-no-win/reports/e2e/demo/junit.xml1.9 KB
- 其他tests/fixtures/check-e2e-report/bad-feedback-no-win/reports/e2e/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-feedback-no-win/reports/e2e/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-feedback-no-win/reports/e2e/demo/large-text/tablet-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-feedback-no-win/reports/e2e/demo/large-text/tablet-fa/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-feedback-no-win/reports/e2e/demo/network.txt—
- 参考文档tests/fixtures/check-e2e-report/bad-feedback-no-win/reports/e2e/demo/perf.json331 B
- 参考文档tests/fixtures/check-e2e-report/bad-feedback-no-win/reports/e2e/demo/save-benchmark.json368 B
- 参考文档tests/fixtures/check-e2e-report/bad-feedback-no-win/reports/screenshots/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-flow-failed/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-flow-failed/args.txt27 B
- 参考文档tests/fixtures/check-e2e-report/bad-flow-failed/EXPECT.txt217 B
- 参考文档tests/fixtures/check-e2e-report/bad-flow-failed/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-flow-failed/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-flow-failed/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-flow-failed/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-flow-failed/reports/e2e/demo/feedback.json130 B
- 其他tests/fixtures/check-e2e-report/bad-flow-failed/reports/e2e/demo/junit.xml2.0 KB
- 其他tests/fixtures/check-e2e-report/bad-flow-failed/reports/e2e/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-flow-failed/reports/e2e/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-flow-failed/reports/e2e/demo/large-text/tablet-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-flow-failed/reports/e2e/demo/large-text/tablet-fa/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-flow-failed/reports/e2e/demo/network.txt—
- 参考文档tests/fixtures/check-e2e-report/bad-flow-failed/reports/e2e/demo/perf.json331 B
- 参考文档tests/fixtures/check-e2e-report/bad-flow-failed/reports/e2e/demo/save-benchmark.json368 B
- 参考文档tests/fixtures/check-e2e-report/bad-flow-failed/reports/screenshots/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-large-text/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-large-text/args.txt27 B
- 参考文档tests/fixtures/check-e2e-report/bad-large-text/EXPECT.txt257 B
- 参考文档tests/fixtures/check-e2e-report/bad-large-text/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-large-text/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-large-text/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-large-text/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-large-text/reports/e2e/demo/feedback.json130 B
- 其他tests/fixtures/check-e2e-report/bad-large-text/reports/e2e/demo/junit.xml1.9 KB
- 其他tests/fixtures/check-e2e-report/bad-large-text/reports/e2e/demo/large-text/phone-en/junit.xml708 B
- 其他tests/fixtures/check-e2e-report/bad-large-text/reports/e2e/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-large-text/reports/e2e/demo/large-text/tablet-en/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-large-text/reports/e2e/demo/network.txt—
- 参考文档tests/fixtures/check-e2e-report/bad-large-text/reports/e2e/demo/perf.json331 B
- 参考文档tests/fixtures/check-e2e-report/bad-large-text/reports/e2e/demo/save-benchmark.json368 B
- 参考文档tests/fixtures/check-e2e-report/bad-large-text/reports/screenshots/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-missing/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-missing/args.txt27 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-missing/EXPECT.txt92 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-missing/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-missing/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-missing/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-missing/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-missing/reports/e2e/demo/feedback.json130 B
- 其他tests/fixtures/check-e2e-report/bad-network-missing/reports/e2e/demo/junit.xml1.9 KB
- 其他tests/fixtures/check-e2e-report/bad-network-missing/reports/e2e/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-network-missing/reports/e2e/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-network-missing/reports/e2e/demo/large-text/tablet-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-network-missing/reports/e2e/demo/large-text/tablet-fa/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-missing/reports/e2e/demo/perf.json331 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-missing/reports/e2e/demo/save-benchmark.json368 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-missing/reports/screenshots/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-dead/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-dead/args.txt27 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-dead/EXPECT.txt325 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-dead/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-dead/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-dead/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-dead/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-dead/reports/e2e/demo/feedback.json130 B
- 其他tests/fixtures/check-e2e-report/bad-network-sampler-dead/reports/e2e/demo/junit.xml1.9 KB
- 其他tests/fixtures/check-e2e-report/bad-network-sampler-dead/reports/e2e/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-network-sampler-dead/reports/e2e/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-network-sampler-dead/reports/e2e/demo/large-text/tablet-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-network-sampler-dead/reports/e2e/demo/large-text/tablet-fa/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-dead/reports/e2e/demo/network-samplers.json480 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-dead/reports/e2e/demo/network.txt—
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-dead/reports/e2e/demo/perf.json331 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-dead/reports/e2e/demo/save-benchmark.json368 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-dead/reports/screenshots/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-missing/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-missing/args.txt27 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-missing/EXPECT.txt147 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-missing/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-missing/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-missing/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-missing/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-missing/reports/e2e/demo/feedback.json130 B
- 其他tests/fixtures/check-e2e-report/bad-network-sampler-missing/reports/e2e/demo/junit.xml1.9 KB
- 其他tests/fixtures/check-e2e-report/bad-network-sampler-missing/reports/e2e/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-network-sampler-missing/reports/e2e/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-network-sampler-missing/reports/e2e/demo/large-text/tablet-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-network-sampler-missing/reports/e2e/demo/large-text/tablet-fa/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-missing/reports/e2e/demo/network.txt—
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-missing/reports/e2e/demo/perf.json331 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-missing/reports/e2e/demo/save-benchmark.json368 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sampler-missing/reports/screenshots/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-sockets/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-sockets/args.txt27 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sockets/EXPECT.txt86 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sockets/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-sockets/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-sockets/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-network-sockets/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sockets/reports/e2e/demo/feedback.json130 B
- 其他tests/fixtures/check-e2e-report/bad-network-sockets/reports/e2e/demo/junit.xml1.9 KB
- 其他tests/fixtures/check-e2e-report/bad-network-sockets/reports/e2e/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-network-sockets/reports/e2e/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-network-sockets/reports/e2e/demo/large-text/tablet-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-network-sockets/reports/e2e/demo/large-text/tablet-fa/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sockets/reports/e2e/demo/network.txt95 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sockets/reports/e2e/demo/perf.json331 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sockets/reports/e2e/demo/save-benchmark.json368 B
- 参考文档tests/fixtures/check-e2e-report/bad-network-sockets/reports/screenshots/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-no-feedback/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-no-feedback/args.txt27 B
- 参考文档tests/fixtures/check-e2e-report/bad-no-feedback/EXPECT.txt132 B
- 参考文档tests/fixtures/check-e2e-report/bad-no-feedback/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-no-feedback/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-no-feedback/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-no-feedback/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 其他tests/fixtures/check-e2e-report/bad-no-feedback/reports/e2e/demo/junit.xml1.9 KB
- 其他tests/fixtures/check-e2e-report/bad-no-feedback/reports/e2e/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-no-feedback/reports/e2e/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-no-feedback/reports/e2e/demo/large-text/tablet-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-no-feedback/reports/e2e/demo/large-text/tablet-fa/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-no-feedback/reports/e2e/demo/network.txt—
- 参考文档tests/fixtures/check-e2e-report/bad-no-feedback/reports/e2e/demo/perf.json331 B
- 参考文档tests/fixtures/check-e2e-report/bad-no-feedback/reports/e2e/demo/save-benchmark.json368 B
- 参考文档tests/fixtures/check-e2e-report/bad-no-feedback/reports/screenshots/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-no-flows/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-no-flows/args.txt27 B
- 参考文档tests/fixtures/check-e2e-report/bad-no-flows/EXPECT.txt46 B
- 参考文档tests/fixtures/check-e2e-report/bad-no-flows/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-no-flows/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-no-flows/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-no-flows/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-no-flows/reports/e2e/demo/feedback.json130 B
- 其他tests/fixtures/check-e2e-report/bad-no-flows/reports/e2e/demo/junit.xml254 B
- 其他tests/fixtures/check-e2e-report/bad-no-flows/reports/e2e/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-no-flows/reports/e2e/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-no-flows/reports/e2e/demo/large-text/tablet-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-no-flows/reports/e2e/demo/large-text/tablet-fa/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-no-flows/reports/e2e/demo/network.txt—
- 参考文档tests/fixtures/check-e2e-report/bad-no-flows/reports/e2e/demo/perf.json331 B
- 参考文档tests/fixtures/check-e2e-report/bad-no-flows/reports/e2e/demo/save-benchmark.json368 B
- 参考文档tests/fixtures/check-e2e-report/bad-no-flows/reports/screenshots/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-no-save-benchmark/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-no-save-benchmark/args.txt27 B
- 参考文档tests/fixtures/check-e2e-report/bad-no-save-benchmark/EXPECT.txt86 B
- 参考文档tests/fixtures/check-e2e-report/bad-no-save-benchmark/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-no-save-benchmark/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-no-save-benchmark/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-no-save-benchmark/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-no-save-benchmark/reports/e2e/demo/feedback.json130 B
- 其他tests/fixtures/check-e2e-report/bad-no-save-benchmark/reports/e2e/demo/junit.xml1.9 KB
- 其他tests/fixtures/check-e2e-report/bad-no-save-benchmark/reports/e2e/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-no-save-benchmark/reports/e2e/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-no-save-benchmark/reports/e2e/demo/large-text/tablet-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-no-save-benchmark/reports/e2e/demo/large-text/tablet-fa/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-no-save-benchmark/reports/e2e/demo/network.txt—
- 参考文档tests/fixtures/check-e2e-report/bad-no-save-benchmark/reports/e2e/demo/perf.json331 B
- 参考文档tests/fixtures/check-e2e-report/bad-no-save-benchmark/reports/e2e/demo/save-benchmark.json78 B
- 参考文档tests/fixtures/check-e2e-report/bad-no-save-benchmark/reports/screenshots/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-perf-budget/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-perf-budget/args.txt27 B
- 参考文档tests/fixtures/check-e2e-report/bad-perf-budget/EXPECT.txt160 B
- 参考文档tests/fixtures/check-e2e-report/bad-perf-budget/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-perf-budget/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-perf-budget/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-perf-budget/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-perf-budget/reports/e2e/demo/feedback.json130 B
- 其他tests/fixtures/check-e2e-report/bad-perf-budget/reports/e2e/demo/junit.xml1.9 KB
- 其他tests/fixtures/check-e2e-report/bad-perf-budget/reports/e2e/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-perf-budget/reports/e2e/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-perf-budget/reports/e2e/demo/large-text/tablet-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-perf-budget/reports/e2e/demo/large-text/tablet-fa/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-perf-budget/reports/e2e/demo/network.txt—
- 参考文档tests/fixtures/check-e2e-report/bad-perf-budget/reports/e2e/demo/perf.json333 B
- 参考文档tests/fixtures/check-e2e-report/bad-perf-budget/reports/e2e/demo/save-benchmark.json368 B
- 参考文档tests/fixtures/check-e2e-report/bad-perf-budget/reports/screenshots/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-perf-missing/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-perf-missing/args.txt27 B
- 参考文档tests/fixtures/check-e2e-report/bad-perf-missing/EXPECT.txt101 B
- 参考文档tests/fixtures/check-e2e-report/bad-perf-missing/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-perf-missing/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-perf-missing/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-perf-missing/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 其他tests/fixtures/check-e2e-report/bad-perf-missing/reports/e2e/demo/junit.xml1.9 KB
- 其他tests/fixtures/check-e2e-report/bad-perf-missing/reports/e2e/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-perf-missing/reports/e2e/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-perf-missing/reports/e2e/demo/large-text/tablet-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-perf-missing/reports/e2e/demo/large-text/tablet-fa/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-perf-missing/reports/e2e/demo/network.txt—
- 参考文档tests/fixtures/check-e2e-report/bad-perf-missing/reports/screenshots/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-perf-step-errors/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-perf-step-errors/args.txt27 B
- 参考文档tests/fixtures/check-e2e-report/bad-perf-step-errors/EXPECT.txt213 B
- 参考文档tests/fixtures/check-e2e-report/bad-perf-step-errors/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-perf-step-errors/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-perf-step-errors/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-perf-step-errors/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-perf-step-errors/reports/e2e/demo/feedback.json130 B
- 其他tests/fixtures/check-e2e-report/bad-perf-step-errors/reports/e2e/demo/junit.xml1.9 KB
- 其他tests/fixtures/check-e2e-report/bad-perf-step-errors/reports/e2e/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-perf-step-errors/reports/e2e/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-perf-step-errors/reports/e2e/demo/large-text/tablet-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-perf-step-errors/reports/e2e/demo/large-text/tablet-fa/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-perf-step-errors/reports/e2e/demo/network.txt—
- 参考文档tests/fixtures/check-e2e-report/bad-perf-step-errors/reports/e2e/demo/perf.json240 B
- 参考文档tests/fixtures/check-e2e-report/bad-perf-step-errors/reports/e2e/demo/save-benchmark.json368 B
- 参考文档tests/fixtures/check-e2e-report/bad-perf-step-errors/reports/screenshots/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-save-benchmark-slow/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-save-benchmark-slow/args.txt27 B
- 参考文档tests/fixtures/check-e2e-report/bad-save-benchmark-slow/EXPECT.txt105 B
- 参考文档tests/fixtures/check-e2e-report/bad-save-benchmark-slow/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-save-benchmark-slow/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-save-benchmark-slow/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-save-benchmark-slow/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-save-benchmark-slow/reports/e2e/demo/feedback.json130 B
- 其他tests/fixtures/check-e2e-report/bad-save-benchmark-slow/reports/e2e/demo/junit.xml1.9 KB
- 其他tests/fixtures/check-e2e-report/bad-save-benchmark-slow/reports/e2e/demo/large-text/phone-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-save-benchmark-slow/reports/e2e/demo/large-text/phone-fa/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-save-benchmark-slow/reports/e2e/demo/large-text/tablet-en/junit.xml643 B
- 其他tests/fixtures/check-e2e-report/bad-save-benchmark-slow/reports/e2e/demo/large-text/tablet-fa/junit.xml643 B
- 参考文档tests/fixtures/check-e2e-report/bad-save-benchmark-slow/reports/e2e/demo/network.txt—
- 参考文档tests/fixtures/check-e2e-report/bad-save-benchmark-slow/reports/e2e/demo/perf.json331 B
- 参考文档tests/fixtures/check-e2e-report/bad-save-benchmark-slow/reports/e2e/demo/save-benchmark.json367 B
- 参考文档tests/fixtures/check-e2e-report/bad-save-benchmark-slow/reports/screenshots/summary.json1.2 KB
- 参考文档tests/fixtures/check-e2e-report/bad-screenshot-capture-failed/apps/demo/e2e/flows/smoke/10-level-1.yaml2.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-screenshot-capture-failed/args.txt27 B
- 参考文档tests/fixtures/check-e2e-report/bad-screenshot-capture-failed/EXPECT.txt116 B
- 参考文档tests/fixtures/check-e2e-report/bad-screenshot-capture-failed/packages/shell/e2e/flows/a11y/01-large-text-core-screens.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-screenshot-capture-failed/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml1.3 KB
- 参考文档tests/fixtures/check-e2e-report/bad-screenshot-capture-failed/packages/shell/e2e/flows/rtl/03-language-switch.yaml1.1 KB
- 参考文档tests/fixtures/check-e2e-report/bad-screenshot-capture-failed/packages/shell/e2e/flows/smoke/01-first-launch.yaml641 B
- 参考文档tests/fixtures/check-e2e-report/bad-screenshot-capture-failed/reports/e2e/demo/feedback.json130 B
- 其他tests/fixtures/check-e2e-report/bad-screenshot-capture-failed/reports/e2e/demo/junit.xml1.9 KB
03 SKILL.md 正文
End-to-end flows with Maestro
Every Pocket Arcade game proves its wiring on a real Release simulator build: Maestro 2.10.0 flows drive the Shell's journeys and the game's own level, the app is shown to make no network traffic, the simulator cold start, memory and 200 % text are measured in the same run, and every screen is captured in 4 languages × light/dark × phone/tablet against committed baselines. Android runs the same flows (e2e:android, screenshots:android). This skill sets up the tooling, writes and runs the flows; its scripts prove the set-up, the flows and each run's reports.
Rules that must hold
- Install Maestro only with
packages/tooling/scripts/install-maestro.sh(2.10.0 zip from GitHub, SHA-25629b675e1…d991checked, into the ignoredtools/maestro/), and run it with Java 17 andMAESTRO_CLI_NO_ANALYTICS,MAESTRO_CLI_ANALYSIS_NOTIFICATION_DISABLED,MAESTRO_DISABLE_UPDATE_CHECKset totrue. Why: Homebrew andcurl | bashare unpinned, and by default Maestro sends analytics and checks for updates. - Run flows only through
npm run e2e:ios -- --app <game-id>, against a Release simulator build of thetestvariant with ads off, on dedicated named simulators (e07-e2e-phone,e07-e2e-tablet,e07-shots-phone,e07-shots-tablet, or this session'se07-<purpose>), neverbootedor another agent's device. The runner refuses any other build (requireAdsOffTestBuild): with ads off the app never asks Google's consent form or Apple's tracking prompt. The evidence run has four steps: flows, cold start, memory (with the feedback evidence) and large text;--flows-onlyis for iterating and is never evidence. Android:npm run e2e:androidon a test/off Release APK (readApkApp), one07-android-*emulators. Why: debug builds talk to Metro and ads open sockets on purpose, which hides a real leak; other agents' simulators get broken. - Every Maestro run names its simulator and its own driver port, before the command:
maestro --device <udid> --driver-host-port <port> test ..., built in code withmaestroGlobalArgs(packages/tooling/src/e2e/maestro-args.ts) and a free port per run (freeDriverPort(), or the session's--driver-port); never the per-command--udidalone and never the default port 7001. Everysimctlcall names the UDID. Android: every adb call starts-s <serial>(deviceAdbArgs,adbOn), every Maestro runandroidMaestroGlobalArgs(android-serial). Why: in round 3 another session's XCTest driver answered a run that named this session's simulator. - Select elements by
id:only, with ids from the testID contract (assets/screen-testids.json,assets/e2e-testids.json, or the game'sapps/<game-id>/e2e/testids.json). Text selectors are allowed only for OS-owned UI, under a# system-ui: <why>comment. Never select a crop-only part (the map'sparentora11yHiddenentries, such aslevels.level-tile.1.stars-3): Maestro lists only accessible elements, so select thecoveredByelement and match its label withtext:. Why: flows must run unchanged in en, de, fa and ckb, and an unknown or unreachable id should fail before a simulator waits 15 s for it. - Start each flow with
launchApp: { clearState: true }and set state only throughsubflows/debug-setup.yaml(the test build's<scheme>://debug/setup?...link,QUERY+WAIT_FOR; it waits for a screen root first, so one link right after the launch works,firstRun=0&...&screen=gameincluded; it accepts Apple's "Open in “<app name>”?" alert guarded on that title, never a bare'Open', which also matches an ad banner's "OPEN" button:check-flowsruleopen-alert-guard). Sendaction=in a link of its own once the run is on screen (it ends any active run: a level, today's daily or an endless run). NeveropenLinkin a flow and never tap through menus to reach a state; the one tap allowed is the key under test on the screen the link opened (S9's Play key, Home's endless card, the Result's continue key, the level-2 tile). Why: setting up through the UI is slow and flaky, and it ties every flow to every screen. - Every
smokeflow ends withrunFlow: <…>/subflows/assert-no-network.yaml, and the run'snetwork.txtis empty. Android adds real airplane mode for theofflinejourneys and a sampler by uid; a one-platform step sits underwhen: platform:(platform-guard). Why: spec N3 says the app's own code never uses the network; iOS simulators have no airplane mode, so the JS guard counter (debug.network-attempts=0) and the socket sampler are the offline proof. - Never give a flow an
env:block forAPP_ID,APP_SCHEME,LANGorTHEME. Why: in Maestro 2.10.0 the flow'senv:value wins over-e(verified), so every run would silently use the flow's value. - Flows live in
<workspace>/e2e/flows/<area>/<nn>-<name>.yaml(Shell01-09, games10+), shared steps inpackages/shell/e2e/subflows/, the matrix inpackages/shell/e2e/screenshots/, and the premium-purchase skill's Tier 2 StoreKit flows (tagstorekit, noclearState) inpackages/shell/e2e/storekit/, which only its harness runs. Why: Maestro runs only the top-level files of a folder it is given, so a nested flow never runs and a sub-flow underflows/runs on its own and fails. - No AI commands and nothing that uploads (
assertWithAI,assertNoDefectsWithAI,extractTextWithAI,maestro test --analyze,maestro cloud,maestro login,maestro recordwithout--local). Why: they send screenshots or the run to a third-party service. - A flaky flow is a bug: wait on ids (
extendedWaitUntil), never sleep; noretry:around app steps; a non-smoke flow may be quarantined for at most 7 days with# quarantine YYYY-MM-DD: <reason>; asmokeflow is never quarantined. Why: retries and sleeps hide timing bugs players will hit. - Screenshots come only from a still, deterministic screen: status bar 9:41,
reduceMotion=1, ads off, seed 42 and date 2026-09-26, iPhone 17 Pro Max and iPad Pro 13-inch (M5) on iOS 26.5, tolerance 0.2% of pixels. Android: phone and tablet AVDs, animation scales 0, demo status bar 9:41,font_scale2.0 for large text, the same 0.2%. Never raise the tolerance. Why: an animating screen differed by 1.08% between two captures one second apart (verified). - Baselines change only on purpose:
--updatefor the sets you mean, every new or changed PNG (and its diff) opened with the Read tool, then a commit with aGate-Change:trailer. The same holds forperf-baselines/cold-start-sim-<game-id>.jsonandcold-start-emu-(--write-perf-baseline). Why: an unread baseline freezes a bug for every later run. - The debug switches and the debug link reach services only through
debug-services.ts:offline=0|1flips theSimulatedConnectivitythe whole app was built with, so every ConnectivityPort subscriber hears it;date=YYYY-MM-DDsets theSimulatedClockthe whole app was built with (onlytoday()moves);premium=0|1writes the save, then dispatchesdebug-premium-set;geo=eea|other(setConsentGeography) resets Google's UMP answer (ads on only) and the composition root's consent port (services.consentFor(port)) asks UMP with that geography from the next consent moment on; a debug consent port comes fromcreateConsentPort. Why: a flip only the debug screen sees leaves the store, the ads and S12 in the old state, and a UMP call in anADS_MODE=offbuild fails the network check. - One path for the link and S15:
debug-link-handler.ts(handleUrlfor links,applyandimportSavefor S15's tools). It listens toLinkingfromcreateDebugPartson and queues links until the navigator'sonReadycallsstart(Linking); a save write that switches the navigator's group opensscreen=on the next navigation state. The flags outside the save live in the test-only key-value store (debug.overrides,debug.pending-screen). Why: a link sent while nothing listened is lost (round 2: every first link afterclearState), a screen opened before its group is mounted never opens, and a flag held only in memory is lost at the direction reload and afterkillApp. - The level-1 flow proves the real board, then wins through the game host. One real move by taps (from
print-level-line.ts), a kill and relaunch that resumes it, thenaction=win-level(GameHost.debugControls().playTo), asserting the stars the game's example win earns (result.stars-<n>, listed in the game'se2e/testids.json), then Levels shows those stars onlevels.level-tile.1and the level-2 tile opens level 2 (progress-after-win). Why: taps prove input and persistence; the host's one run-end path proves stars are saved like a real win, without a hand-typed 12-move line. - Each game mode has its flow (
check-flowsrulemode-flows, read fromgame.config.ts):modes.dailyplays today's daily and checks the streak the next day (journeys/11-daily.yaml),isContinueAllowedcontinues after a loss with the Premium continue (12-continue-premium.yaml; the rewarded continue is admob-ads' ads-on smoke test),modes.endlessloses an endless run as an ads-off player without Premium (premium=0, neverpremium=1) and sees the endless result with New best at once, with no continue offer, then Home's best (13-endless.yaml; lead decision L11: never strand a finished run,hiddenalways means unavailable). Why: the daily, continue and endless paths have their own saves and screens that a level flow never reaches, and a run nothing can rescue must still end. - The evidence run proves the win feedback was asked for:
reports/e2e/<game-id>/feedback.jsonholds the win sound and the success haptic from the perf log (check-e2e-reportrulefeedback-evidence). Why: Jest fakes prove the wiring and the WAV preview the sound, but only this shows the simulator app asked for them; how they sound and feel stays the owner's own check (never waited for). - The evidence run proves S15's save benchmark: smoke flow
04-debug-performance.yamlruns "Run save benchmark", the runner keeps the entry insave-benchmark.json,check-e2e-report(save-benchmark) needs 300 writes and p95 under 5 ms. Why: otherwise the budget is measured only in Jest. - S15 keeps design parity (L12, L13):
use-debug-model.tsopensdebug-ads-always-testonce on mount through the "Always show test ads" switch's handler, readingparityFrameState()fromapp/parity/parity-session.ts(neveruseParityOpener: an import loop through the gate), and formats its numbers in the language's digits (neverString(n)); labels stay English. Why: the frame draws the switch on and Persian digits. - admob-ads'
packages/shell/e2e/ads-smoke/flows run by hand on anADS_MODE=testbuild started withxcrun simctl launch(Maestro'slaunchAppgrants the tracking answer; Android:adb -s <serial> shell am start),geo=in their first link, Apple's prompt underwhen: platform: iOS;check-flowschecks them, the runner never lists them. Why: they need ads on and the real prompts.
Workflow
- Check the set-up from the repo root:
node ${CLAUDE_SKILL_DIR}/scripts/check-e2e-setup.mjs .. For each missing file copy the template of the same path fromtemplates/(the Files table below), with its test. The perf layer the cold-start, feedback and benchmark steps read comes from performance-budgets (JS half at Shell step 7, native half at step 8; ruleperf-layer, runner reference). The debug kit is Shell core, installed with the composition root at Shell step 7 whatever the slice (not-yet-dueSKIPlines before); onlyuse-debug-model.tsand the sub-flows wait for S15 (SKIPlines while S15 is outsideshell-slice.json).npm run e2e:ios -- --helplists every runner option (e2e-cli.ts). Add the npm scripts and the exact pinspixelmatch7.2.0,pngjs7.0.0 and@types/pngjs6.0.5, and make.gitignorelist/tools/andreports/. Read references/maestro-setup.md and references/runner-and-network.md first, and when the install or the runner fails. Wire the kit as "Wiring" in references/debug-deep-link.md shows (createDebugParts(...)in the composition root,parts.feedback,services?.consentFor(port),DebugServicesProvider, the handler started fromonReady).use-debug-model.tsis the hook toybox-screens'debug-screen.tsxrenders; copy it after that screen andapp/use-game-extra.tsexist. If neither/usr/libexec/java_home -v 17nor Android Studio's JBR gives Java 17, stop and ask the owner to install a Java 17 JDK. - Get the build: a Release simulator app of the test variant with ads off,
npm run build:ios:sim -- --app <game-id> --variant test --ads off(building belongs toios-simulator-build). The runner finds it inapps/<game-id>/build/dd/Build/Products/Release-iphonesimulator/. - Write or change a flow: read references/flows.md once per session, and references/debug-deep-link.md for every
QUERYparameter.- Shell journeys: copy from
templates/packages/shell/e2e/flows/(smoke/01-first-launch.yaml,journeys/02-core-journey-offline.yaml,rtl/03-language-switch.yaml,smoke/04-debug-performance.yaml) at Shell step 10, once every screen they reach is built (in a partial Shellcheck-flowsprintsSKIP ... [slice]for them). - A game: run
node --disable-warning=MODULE_TYPELESS_PACKAGE_JSON packages/tooling/src/e2e/print-level-line.ts --app <game-id> --level 1, then copytemplates/apps/__GAME_ID__/e2e/flows/smoke/10-level-1.yamltoapps/<game-id>/e2e/flows/smoke/10-level-1.yamland fill__GAME_ID__,__GAME_NAME__, the region ids, rows and columns of the printed first move and__WIN_STARS__(the starsaction=win-levelearns, also printed). Listresult.stars-<n>with that reason inapps/<game-id>/e2e/testids.json. Without the host'sdebugControlsyet, play the printed bot line by taps instead (flows reference, "The level-1 flow"). - The game's mode flows: copy
templates/apps/__GAME_ID__/e2e/flows/journeys/11-daily.yaml(whenmodes.daily),12-continue-premium.yaml(whenisContinueAllowed) and13-endless.yaml(whenmodes.endless) and fill__GAME_ID__and__GAME_NAME__(flows reference, "A game's mode flows"). - An id the game adds only for flows goes into
apps/<game-id>/e2e/testids.jsonin the same change as the code that renders it. No:inside anevalScript(YAML reads a mapping): use arithmetic such asNumber(cond).
- Shell journeys: copy from
- Check the flows without a simulator:
node ${CLAUDE_SKILL_DIR}/scripts/check-flows.mjs .and fix everyFAILline (file, rule, fix). Once Maestro is installed, add--syntax(Maestro's owncheck-syntax, about 3 s per file). No flow yet: aSKIP ... [flows-missing]line whileshell-slice.jsonmarks a partial Shell, else aflows-missingfailure. - Run them:
npm run e2e:ios -- --app <game-id>(add--sim <purpose>to use this session's owne07-<purpose>simulator, ande07-<purpose>-tabletfor the iPad's large-text step;--driver-port <n>only when the session must hold one port; when a boot fails for lack of resources, shut down only your owne07-*simulators, never another session's): the flows (thensave-benchmark.json), 6 cold launches againstperf-baselines/cold-start-sim-<game-id>.json(the first run writes it: commit it with aGate-Change:trailer), the game's smoke flow withfeedback.json, a relaunch andfootprint(≤ 150 MB), and thea11yflows at 200 % text in en and fa on phone and iPad. While iterating,-- --flows-only --include-tags smokeis fine; the evidence run has no filter. Then runnode ${CLAUDE_SKILL_DIR}/scripts/check-e2e-report.mjs . --app <game-id>. Android (step 7):npm run e2e:android -- --app <game-id>, then--platform android(runner reference, "Android"). For a failure, openreports/e2e/<game-id>/and rerun that flow alone; if it then passes it is flaky (flows reference, "Flaky flows and quarantine"). A line innetwork.txtis a spec N3 bug: find the code that opened it. Open every screenshot underreports/e2e/<game-id>/large-text/with the Read tool (clipping, overlap, rows that should stack). - Screenshot matrix (after any UI change and before a release): read references/screenshot-matrix.md.
npm run screenshots:ios -- --app <game-id> --sim <purpose>(first time, or for an intended change:--updatenarrowed with--devicesand--langs). Open every new or changed PNG and its diff with the Read tool: check direction, clipping, overlap, truncation and colours. Android:screenshots:android,--platform android. Then runnode ${CLAUDE_SKILL_DIR}/scripts/check-e2e-report.mjs . --app <game-id> --screenshotsand commit the baselines withGate-Change: <which screens and why>. For a new or redesigned screen, run the design parity check (toybox-visual-parity) before accepting its baseline. - Before a release: add the screenshot matrix at 200 % text (
--text-size accessibility-extra-extra-extra-large, checked by eye) and runcheck-e2e-setup.mjs . --baselines(all 16 device/language/theme sets). - Report and clean up: paste the
evidence:lines thatcheck-e2e-report.mjsprints (flows passed, quarantined, network, screenshots) into the report, with at most five gallery rows worth the owner's look. For a release, openreports/screenshots/index.htmlfor the owner. Shut down the simulators the run created (xcrun simctl shutdown <udid>,e07-*only). - Rerun the checks until each prints
RESULT: PASS.
Definition of done
- [ ] Every new flow is in
flows/<area>/<nn>-<name>.yaml, selects by id, sets state throughdebug-setup.yaml, and was seen passing on the simulator. - [ ] The debug kit's and the tooling's Jest tests pass (
npx jest packages/shell/src/screens/debug 'packages/shell/src/app/(create-)?debug-' packages/tooling/src/e2e test/integration/save/sqlite-kv-debug-store-adapter.test.ts --ci --selectProjects unit --coverage --collectCoverageFrom='packages/shell/src/screens/debug/**/*.ts' --coverageThreshold='{}'), alang=fa&date=...&offline=1&screen=levelslink lands on Levels after the reload with the date and offline flag still set, and one link afterlaunchApp: { clearState: true }on a fresh install (firstRun=0&level=1&boardLayout=1&screen=game) opens Game. - [ ]
npm run e2e:ios -- --app <game-id>passed with no tag filter and without--flows-only(13-endless included), no smoke flow is quarantined, and the large-text screenshots were read;check-e2e-reportjudges the rest. - [ ] Every Maestro line of the run log names this session's simulator and its own driver port (
maestro: device <udid>, driver port <port>: ...). - [ ] After UI changes,
npm run screenshots:iosran, every changed PNG and its diff was opened, and every baseline change has aGate-Change:trailer. The tolerance is unchanged. - [ ] Simulators the run created are shut down, and nothing ran on another agent's simulator.
- [ ]
node ${CLAUDE_SKILL_DIR}/scripts/check-e2e-setup.mjs .printsRESULT: PASS(with--baselinesbefore a release). - [ ]
node ${CLAUDE_SKILL_DIR}/scripts/check-flows.mjs . --syntaxprintsRESULT: PASS. - [ ]
node ${CLAUDE_SKILL_DIR}/scripts/check-e2e-report.mjs . --app <game-id>printsRESULT: PASS(and with--platform androidfrom Android step 7)
Anti-patterns
tapOn: 'Play'orassertVisible: 'Level 1'. It breaks in German, Persian and Kurdish, and it breaks again whenever copy changes. Useid: 'home.play-button'.- Tapping Settings → Language → … to reach a state. It is slow, and every screen change breaks unrelated flows. Use
debug-setup.yamlwith aQUERY. xcrun simctl openurlfor a debug link from a script. iOS answers a custom scheme opened from outside with an "Open in <app>?" prompt that nobody accepts, so the app never gets the link (and the queued prompt hides the app from the next flow). Launch the app and rundebug-setup.yamlthrough Maestro (debugSetupArgs), as the cold-start step does;check-e2e-setupfailsopenurlin the tooling (openurl-prompt).brew install maestroor thecurl | bashinstaller. The version and checksum are unknown and analytics are on. Runinstall-maestro.sh(the runner calls it anyway).- Running on the
bootedsimulator or a Debug build. You may break another agent's device, and Metro's WebSocket makes the network check meaningless. Use the runner with a Release test build. - An
env:block withAPP_ID"so the flow runs on its own". It overrides the runner's-ein 2.10.0. Pass-e APP_ID=… -e APP_SCHEME=…when running a flow alone. retry:or a longer timeout to make a red flow green. That hides a race the player will hit. Wait on the id that proves the state, or fix the app.--updatefor every device and language, or a biggerMAX_DIFF_RATIO, to clear a diff. That accepts regressions nobody looked at. Open the diff, fix the screen, and update only the sets you meant to change.assertNoDefectsWithAIfor "visual QA". It uploads screenshots. Open the PNGs with the Read tool instead.- A "Simulate offline" switch that only changes what
isOnline()returns, or a debug Premium switch that dispatchespremium-granted. Subscribers never hear the flip, and the save and the store disagree. UsedebugServices.setOfflineandsetPremium. --write-perf-baselineto clear a slower cold start. That hides the regression. Find the start-up work that grew; a slower baseline needs the owner.- A shared sub-flow saved under
flows/. Maestro runs it on its own and it fails. Shared steps belong inpackages/shell/e2e/subflows/. - A debug flag kept in a module variable or React state. The direction reload and
killAppdrop it; keep it indebug-services.ts, which writesdebug.overridesat once. - Reading a debug flag, the simulated day or a log straight from its service in S15's model. An app build's React Compiler keeps the first value (verified: the offline switch stayed off, the perf summary stayed "empty"). Read them through
readDebugState(..., version). - A guard or a tap on a bare
'Open'. It also matches an ad banner's "OPEN" button; guard on Apple's alert title'Open in .*\?'(open-alert-guard). - Tapping a row right after
scrollUntilVisible. A tap while the list still glides only stops the scroll; addwaitForAnimationToEndfirst. - A second debug path for S15 (its own save writes,
navigation.navigateto a jump target,Alertprompts). Send the tool's request throughlinks.apply(request); ESLint bansAlert, so S15 uses the system action and share sheets.
Files in this skill
| File | What it is | Read/run when |
|---|---|---|
| references/maestro-setup.md | Pins, the installer, the no-telemetry environment, verified and banned commands, check-syntax, moving the pin |
Workflow step 1, or when an install or command fails |
| references/runner-and-network.md | What the run needs, what the runner does, simulator helpers, layer F (JS guard + socket sampler), reading the reports | Workflow steps 1-2 and 5 |
| references/flows.md | Folders, names, header and tags, id selectors, debug setup, the sub-flows, Shell and game flows, board taps, waits, quarantine | Workflow step 3 |
| references/debug-deep-link.md | The debug/setup parameters, what the handler does in order, what survives the reload, the debug services, the wiring, S15's model hook, game.board-layout, debug.network-attempts |
Workflow steps 1 and 3, for every QUERY |
| references/screenshot-matrix.md | The 176-shot matrix, still screens, running, baselines, review, gallery, the 200% pass | Workflow steps 6-7 |
| templates/packages/tooling/scripts/install-maestro.sh | Pinned, checksum-verified, idempotent Maestro installer | Copy in step 1 |
| templates/packages/tooling/src/e2e/run-e2e-ios.ts | npm run e2e:ios: flows (then S15's save benchmark), cold start, memory and large text under the socket sampler; JUnit, network.txt, save-benchmark.json, perf.json |
Copy in step 1 |
| templates/packages/tooling/src/e2e/e2e-cli.ts | The runner's command line, pure, on node:util parseArgs: --help with every option, usage errors (exit 2, no stack), driverPortOf (the driver port range maestroGlobalArgs accepts, shared with screenshots-cli.ts), readOptions (the token loop android-cli.ts shares) |
Copy in step 1 |
| templates/packages/tooling/src/e2e/e2e-cli.test.ts | Its test | Copied with it |
| templates/packages/tooling/src/e2e/flow-files.ts | What e2e:ios and e2e:android share: allFlows and largeTextFlows (the top-level flows, listed one by one), reportArgs (the JUnit report) and mergeJunitInto (a later call's test cases join the step's junit.xml) |
Copy in step 1 |
| templates/packages/tooling/src/e2e/flow-files.test.ts | Its test | Copied with it |
| templates/packages/tooling/src/e2e/save-benchmark-evidence.ts | The newest save-benchmark entry of the perf log; save-benchmark.json's text; flowCallsOf, the flows step's two Maestro calls (the benchmark flow alone, after the others) |
Copy in step 1 |
| templates/packages/tooling/src/e2e/save-benchmark-evidence.test.ts | Its test | Copied with it |
| templates/packages/tooling/src/e2e/junit-merge.ts | mergeJunitReports: the benchmark call's test case joins the flows step's junit.xml (one Maestro report) |
Copy in step 1 |
| templates/packages/tooling/src/e2e/junit-merge.test.ts | Its test | Copied with it |
| templates/packages/tooling/src/e2e/sampler-evidence.ts | The end of the run: trackSampler (how a sampler ended) and proveSamplersAlive (two reads of each status, the verdict in network-samplers.json, a failure line per dead sampler) |
Copy in step 1 |
| templates/packages/tooling/src/e2e/sampler-evidence.test.ts | Its test | Copied with it |
| templates/packages/tooling/src/e2e/sim-perf-steps.ts | The cold-start and memory steps (perf log via sqlite3, the data container looked up once per step; smoke flows, relaunch, 10 s settle, footprint; the committed baseline) |
Copy in step 1 |
| templates/packages/tooling/src/e2e/sim-perf-steps.test.ts | Its test: the app is relaunched before footprint, never measured after a failed flow | Copied with it |
| templates/packages/tooling/src/e2e/sim-perf.ts | Pure judges: cold-start median vs baseline × 1.2, phys_footprint vs 150 MB, budgets from quality-gates.json |
Copy in step 1 |
| templates/packages/tooling/src/e2e/sim-perf.test.ts | Its Jest test (synced from the library) | Copied with it |
| templates/packages/tooling/src/e2e/maestro-args.ts | maestroGlobalArgs (--device <udid> --driver-host-port <port> before the command), freeDriverPort, driverPortFor, maestroRunLine (synced from the library, identical to ios-simulator-build's copy; do not edit here) |
Copy in step 1 |
| templates/packages/tooling/src/e2e/maestro-args.test.ts | Its test | Copied with it |
| templates/packages/tooling/src/e2e/feedback-evidence.ts | Splits the perf log's feedback entries into sounds and haptic cues; feedback.json's text |
Copy in step 1 |
| templates/packages/tooling/src/e2e/feedback-evidence.test.ts | Its test | Copied with it |
| templates/packages/tooling/src/e2e/simulator.ts | Dedicated simulators on ios-simulator-build's simulator layer (e2eSimctl: simctl under the pinned Xcode; startSimulator, waitForBoot; --sim: e2eSimulatorName, e2eTabletName; a full Mac: bootFailureMessage), its status bar (statusBarArgs), text size, appearance, launch/terminate, a debug link through debug-setup.yaml (debugSetupArgs), the app's pid in any bundle folder and its data folder, maestroEnv(), runMaestro(device, args) (device and a driver port of its own first), findSimulatorBuild (the one build lookup of every E2E run and capture, which refuses an ads-on build: requireAdsOffTestBuild) |
Copy in step 1 |
| templates/packages/tooling/src/e2e/simulator.test.ts | Its test (the pure helpers) | Copied with it |
| templates/packages/tooling/src/e2e/print-level-line.ts | Prints a level's first move and the bot's line as tap targets, and the stars action=win-level earns |
Step 3, per game |
| templates/packages/tooling/src/e2e/level-line.ts | Its pure logic (tapsFor through the game's intentToMove, the bot's line from game-kit's playBotLine, starsFor) |
Copied with it |
| templates/packages/tooling/src/e2e/level-line.test.ts | Its test over a one-tap and a tap-then-tap game | Copied with it |
| templates/packages/tooling/src/e2e/capture-screenshots-ios.ts | npm run screenshots:ios: capture, compare, always summary.json and the gallery (a failed combination is listed, exit 1; a bad command line or a missing build, exit 2 without a stack) |
Copy in step 1 |
| templates/packages/tooling/src/e2e/screenshot-compare.ts | The compare core both capture scripts share: MAX_DIFF_RATIO (0.2 %), combosOf, jobOf, rawDirOf, checkShot, each platform's folders (ShotLayout) |
Copy in step 1 |
| templates/packages/tooling/src/e2e/screenshot-compare.test.ts | Its test | Copied with it |
| templates/packages/tooling/src/e2e/screenshot-matrix.ts | The matrix to its end: one job per combination, a failed one becomes a capture-failed row and the next still runs; the counts, the failure list and the exit code (matrixOutcome) |
Copy in step 1 |
| templates/packages/tooling/src/e2e/screenshot-matrix.test.ts | Its test | Copied with it |
| templates/packages/tooling/src/e2e/screenshots-cli.ts | Its command line, pure: --help, usage errors, --sim <purpose> (this session's own simulators) |
Copy in step 1 |
| templates/packages/tooling/src/e2e/screenshots-cli.test.ts | Its test | Copied with it |
| templates/packages/tooling/src/e2e/write-gallery.ts | The owner's baseline / this run / diff gallery (reports/screenshots/, or reports/screenshots-android/ for screenshots:android) |
Copy in step 1 |
| templates/packages/tooling/src/e2e/run-e2e-android.ts | npm run e2e:android: the same four steps on e07-android-* emulators under one socket sampler per emulator; writes reports/e2e-android/<game-id>/ |
Copy at Android step 7 |
| templates/packages/tooling/src/e2e/android-flow-steps.ts | Its flows step (the offline journeys under real airplane mode, then the save benchmark) and its large-text step (font_scale 2.0, en and fa, phone and tablet) |
Copied with it |
| templates/packages/tooling/src/e2e/airplane-mode.ts | underAirplaneMode, pure: the offline journeys between airplane mode on and off, the off run whatever happens (a failed on run, flows that throw), a failed off run failing the step |
Copied with it |
| templates/packages/tooling/src/e2e/airplane-mode.test.ts | Its test | Copied with it |
| templates/packages/tooling/src/e2e/emu-perf-steps.ts | Its cold-start step (am start -W -S against perf-baselines/cold-start-emu-<game-id>.json) and memory step (dumpsys meminfo private dirty + swap, feedback.json) |
Copied with it |
| templates/packages/tooling/src/e2e/android-cli.ts | The command lines of e2e:android and screenshots:android, pure (--help, usage errors, --avd, --driver-port), and apkVariantProblem (test/off only, through simulator.ts' e2eBuildProblem) |
Copied with it |
| templates/packages/tooling/src/e2e/android-cli.test.ts | Its test | Copied with it |
| templates/packages/tooling/src/e2e/android-device-args.ts | Every adb argument list (-s <serial> first: deviceAdbArgs), androidMaestroGlobalArgs, the VIEW-intent debug link, cold launch, meminfo, /proc/net, font scale, night mode, stillScreenCommands |
Copied with it |
| templates/packages/tooling/src/e2e/android-device-args.test.ts | Its test | Copied with it |
| templates/packages/tooling/src/e2e/android-e2e-device.ts | Emulators on android-emulator-build's layer (startE2eEmulator, adbOn), readApkApp (refuses an APK that is not test/off), runMaestroAndroid (with the run's toolchain env) |
Copied with it |
| templates/packages/tooling/src/e2e/android-socket-sampler.ts | Pure: the app's uid, /proc/net/tcp, tcp6, udp, udp6 parsed, non-loopback connections of that uid |
Copied with it |
| templates/packages/tooling/src/e2e/android-socket-sampler.test.ts | Its test | Copied with it |
| templates/packages/tooling/src/e2e/sample-sockets-android.ts | The sampler process (<package> <report> <serial>), one per emulator, with the iOS sampler's status file |
Copied with it |
| templates/packages/tooling/src/e2e/android-cold-start.ts | Pure: am start -W TotalTime, the perf log's cold-start entry, the emulator baseline file |
Copied with it |
| templates/packages/tooling/src/e2e/android-cold-start.test.ts | Its test | Copied with it |
| templates/packages/tooling/src/e2e/android-memory.ts | Pure: dumpsys meminfo private dirty + swap PSS (the iOS footprint's like) against perf.memoryFootprintMbMax (150 MB), total PSS beside it as information |
Copied with it |
| templates/packages/tooling/src/e2e/android-memory.test.ts | Its test | Copied with it |
| templates/packages/tooling/src/e2e/capture-screenshots-android.ts | npm run screenshots:android: the matrix on a phone and a tablet AVD, baselines in apps/<game-id>/e2e/baselines-android/, the same 0.2% |
Copy at Android step 7 |
| templates/packages/shell/e2e/subflows/airplane-mode.yaml | Real airplane mode on Android (AIRPLANE enabled or disabled, each step under platform: Android), run by e2e:android around the offline journeys |
Copy at Android step 7 |
| templates/packages/shell/e2e/subflows/kill-app.yaml | A real process death on both platforms: killApp on iOS, stopApp (am force-stop) on Android, where killApp is am kill and spares the foreground app; every kill-and-relaunch flow runs it |
Copy in step 1, with the flows that use it |
| templates/packages/tooling/src/visual/compare-png.ts | pixelmatch comparison against a baseline | Copy in step 1 |
| templates/packages/tooling/src/audit/network-runtime-layer.ts | lsof parsing, the pids of the app's copies on the run's own simulators only (appPids(appName, udids), appProcessPattern: any bundle folder, since Maestro's clearState reinstall renames it), socket sampling; synced from the library (identical to privacy-and-network-audit's copy), do not edit here |
Copy in step 1 |
| templates/packages/tooling/src/audit/network-runtime-layer.test.ts | Its Jest test | Copied with it |
| templates/packages/tooling/src/audit/sample-sockets.ts | The sampler process the runner spawns once per simulator of the run (<AppName> <report> <udid>...: never another session's copy; synced from the library) |
Copy in step 1 |
templates/packages/shell/src/screens/debug/ |
The S15 debug kit, each file with its Jest test: network-guard.ts (synced from the library; do not edit here), simulated-connectivity.ts, simulated-clock.ts, debug-services.ts (setOffline, setDate, setPremium, createConsent, board layout, ads and seed overrides, restored from the key-value store; perfLog), debug-overrides.ts and fake-debug-store.ts, debug-link.ts (the parser), debug-save-recipe.ts, debug-save-import.ts (S15's import through the save codec), debug-tools.ts, debug-sheets.ts, debug-actions.ts, debug-perf.ts (the Performance section's contract and summary) with its Jest fake fake-debug-perf.ts, use-debug-model.ts (S15's model hook: rows, switches, importField, importSave, openFontTest, perf) |
Copy in step 1 |
templates/packages/shell/src/app/ |
debug-link-handler.ts (listen, start, the group-switch wait, importSave), debug-link-intake.ts (links queued until the navigator is ready), debug-link-routes.ts (DebugGameControls: playTo returns whether a run was on screen; resetToFirstRoute leaves a live run through the exit it is given first, and debugRouteOpener(exit) binds the test build's live-run exit for every link), create-debug-parts.ts (the composition root's one call: guard, perf log with S15's Performance actions, the feedback recorders, services, handler, early listen), debug-services-context.tsx (useDebugServices, useOptionalDebugServices, useDebugLinks), each with its test |
Copy in step 1 |
templates/packages/shell/src/services/save/sqlite-kv-debug-store-adapter.ts |
The test-only key-value store (sync expo-sqlite/kv-store) | Copy in step 1 |
templates/test/integration/save/sqlite-kv-debug-store-adapter.test.ts |
Its test on the real kv-store code over node:sqlite (flags survive a JS reload) | Copied with it |
| templates/packages/shell/e2e/subflows/debug-setup.yaml | Waits for a screen root, applies a debug QUERY, waits for WAIT_FOR (synced from the library, identical to premium-purchase's copy; do not edit here) |
Copy in step 1 |
| templates/packages/shell/e2e/subflows/assert-no-network.yaml | Scrolls to debug.network-attempts (below the fold on a phone) and asserts it is 0 |
Copy in step 1 |
| templates/packages/shell/e2e/subflows/shoot-screen.yaml | Opens screen SCREEN, waits for its root id ROOT, screenshots it |
Copy in step 1 |
| templates/packages/shell/e2e/subflows/win-and-next.yaml | Wins the level on screen (action=win-level), taps Result's Next, waits for NEXT_ROOT |
Copy with the flows that use it |
| templates/packages/shell/e2e/screenshots/matrix.yaml | The 11-screen capture flow | Copy in step 1 |
| templates/packages/shell/e2e/flows/smoke/01-first-launch.yaml | S1 → S2 → tutorial, no network | Step 3, Shell flows |
| templates/packages/shell/e2e/flows/journeys/02-core-journey-offline.yaml | Offline core journey, survives a kill | Step 3, Shell flows |
| templates/packages/shell/e2e/flows/rtl/03-language-switch.yaml | English → Persian restart keeps progress (synced from the library, identical to rtl-and-direction's copy; do not edit here) | Step 3, Shell flows |
| templates/packages/shell/e2e/flows/smoke/04-debug-performance.yaml | S15's Run save benchmark on the simulator, its p95 shown, no network (a Maestro call of its own after the other flows) | Step 3, Shell flows |
templates/apps/__GAME_ID__/e2e/flows/smoke/10-level-1.yaml |
A game's level-1 flow: one link, one move by taps, kill, resume, action=win-level, the example win's stars, then Levels shows them and level 2 opens |
Step 3, per game |
templates/apps/__GAME_ID__/e2e/flows/journeys/11-daily.yaml |
Today's daily won through S9's Play key, then the next day: streak 1, today not done | Step 3, games with modes.daily |
templates/apps/__GAME_ID__/e2e/flows/journeys/12-continue-premium.yaml |
A loss continued with the Premium continue: the same level plays again | Step 3, games with isContinueAllowed |
templates/apps/__GAME_ID__/e2e/flows/journeys/13-endless.yaml |
An endless run lost without Premium in an ads-off build: the endless result with New best at once, no continue offer, then Home's best | Step 3, games with modes.endless |
| assets/debug-link-params.json | Every debug-link parameter and its allowed values | Read by check-flows.mjs and check-e2e-setup.mjs; update with debug-link.ts and the reference table |
| assets/e2e-testids.json | The test-build-only ids (debug.network-attempts, game.board-layout, game.moves-label, game.board-frame) and who draws them, and gameFlowIds: the screen-map ids the flow templates rely on |
Read by check-flows.mjs |
| assets/screen-testids.json | The Toybox screen testID contract (synced from the library) | Look up an id in step 3; never edit here |
assets/shared.json |
Declares the shared files this skill copies in | When adding a shared file |
scripts/check-e2e-setup.mjs |
Checks installer pin, Maestro env, no uploads, no simctl openurl in the tooling, every Maestro spawn naming its device and driver port (maestro-device), the ads-off build guard (e2e-ads-off), the feedback evidence step, runner and sampler (sampler-own-simulators: one sampler per simulator of the run, never another session's copy), the runner's four steps, the S15 debug kit (network guard installed, debug services, link handler listening at once and started, the group-switch wait, flags kept across the reload, model hook), the perf layer (perf-layer: its JS half due at Shell step 7, its native half at step 8), simulators, capture settings and tolerance, sub-flows, scripts, pins, .gitignore, baseline sets (baselines/, and baselines-android/ from Android step 7); SKIP lines for S15 and matrix screens outside shell-slice.json and for each perf half before its step; Android step 7: the Android set (android-runner-missing), adb and Maestro calls naming the emulator serial (android-serial), and the Android lines of the sampler, steps, ads-off, tolerance, still-screen and script rules (not-yet-due SKIP lines before any Android file) |
Step 1 and the definition of done |
scripts/check-flows.mjs |
Checks flow places (admob-ads' ads-smoke/ included: no launchApp, geo= first, a testID step), names, headers, tags, the Open-alert guard, run commands naming --device and a driver port, id selectors against the contract (count ids such as result.stars-<n>, id patterns, ids and queries built inside sub-flows from passed values; crop-only ids fail as unreachable-testid), a game flow's stars listed in its testids.json (win-stars), the stars reaching Levels after a win (progress-after-win), one flow per game mode (mode-flows), debug queries, first step, smoke ending, quarantine, AI commands, env: shadowing, and no flows at all (flows-missing); with shell-slice.json a flow that reaches a screen outside the slice is a SKIP ... [slice] line; one-platform steps under when: platform: and killApp only under iOS (platform-guard, due at Android step 7); --syntax runs Maestro |
Step 4 and the definition of done |
scripts/check-e2e-report.mjs |
Reads junit.xml, network.txt and network-samplers.json (network-sampler: every sampler alive to the end), perf.json, feedback.json (feedback-evidence), save-benchmark.json (save-benchmark), the large-text reports and (--screenshots) summary.json (screenshot-capture-failed: a combination that captured nothing); --platform android reads reports/e2e-android/<game-id>/ (cold-start.json, memory.json with private dirty + swap) and reports/screenshots-android/; prints the evidence lines |
Steps 5-6 and the definition of done |
scripts/lib/maestro-yaml.mjs |
Zero-dependency reader for Maestro YAML with line numbers | Used by the checkers |
scripts/lib/android-e2e.mjs |
When the Android E2E set is due (any of its files or scripts exists; before that, not-yet-due SKIP lines) and its file list |
Used by check-e2e-setup.mjs and check-flows.mjs |
scripts/lib/maestro-spawns.mjs |
The maestro-device rule: every spawn of the Maestro binary in the repo tooling names --device and a driver port first (synced from the library, identical to ios-simulator-build's copy; do not edit here) |
Used by check-e2e-setup.mjs |
scripts/selftest.mjs |
Proves the three checkers pass good fixtures and catch every planted bug, including the partial-Shell suites | After changing a checker |
scripts/check-lib.mjs |
Shared script helper, synced from the library (do not edit here) | Never by hand |
tests/fixtures/ |
Good and planted-bad repos and reports for the self-test (built from the templates); check-flows-empty/, check-flows-slice/ and check-e2e-setup-slice/ hold the no-flows and shell-slice.json cases |
When adding a rule to a checker |
Related skills
ios-simulator-build- builds the Release test-variant app the flows run against.toybox-visual-parity- proves a new screen matches its Toybox design before its baseline is accepted.privacy-and-network-audit- the static network layers A-E and the release audit around layer F.performance-budgets- the perf log,useColdStartMarkand the budgets the cold-start and memory steps judge.accessibility- thea11ylarge-text flow and what to look for in its screenshots.unit-and-component-tests- Jest tests for everything a flow should not have to prove.golden-tests- data and board pixel goldens, and the gated-path policy that baselines share.toybox-screens- the screens, their testIDs and the debug screen the flows drive.git-commits-and-reporting- the Gate-Change trailer and the evidence report.
04 同仓库更多 Skills
unit-and-component-tests
Sets up Jest and writes Pocket Arcade test code - three projects, RNTL 14 async via renderWithShell, root SDK mocks, fakes, fast-check, coverage, Stryker. Use when a test needs the Shell wrapper, a mock or a fake, or Jest fails. Not for the red-green loop (tdd-workflow) or goldens (golden-tests).
typescript-and-lint-rules
Enforces Pocket Arcade's strict TypeScript 6 tsconfigs, ESLint 9 flat config, Prettier and size limits. Use when writing or splitting .ts/.tsx or fixing a tsc or lint error. Not for gate wiring (quality-gates), names (naming-conventions) or import zones (architecture-and-boundaries).
demo-skill
Builds a demo. Use when testing the pitfall checker.
demo-skill
Builds a demo. Use when testing the pitfall checker.
troubleshooting-playbook
Diagnoses and fixes Pocket Arcade failures with a catalogue of 300+ known ones (symptom, cause, fix). Use when something errors, crashes, hangs or renders wrong, or an error or log needs explaining. Not for gate setup (quality-gates) or running builds (ios-simulator-build, ios-release-testflight).
toybox-visual-parity
Proves a built Pocket Arcade screen matches its Toybox design screenshot (light/dark, en/fa) and drives the fixes: capture, element gates, sheets, sign-off. Use when any screen is built or changed, or for visual parity, design match, screenshot compare. Not for building screens (toybox-screens).