mobile-debug-mcp 0.33.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/mcp-builder/SKILL.md +44 -64
- package/.agents/skills/mcp-builder/references/build-flags.md +44 -43
- package/.agents/skills/mcp-builder/references/diagnostics-schema.md +4 -1
- package/.agents/skills/mcp-builder/references/toolchain-details.md +49 -62
- package/.agents/skills/spec-review/references/spec-review-checklist.md +7 -0
- package/.agents/skills/test-authoring/SKILL.md +7 -6
- package/.agents/skills/test-authoring/references/repo-test-layout.md +3 -1
- package/.agents/skills/test-authoring/references/test-authoring-workflow.md +16 -7
- package/.agents/skills/test-authoring/references/test-quality-checklist.md +2 -1
- package/.github/copilot-instructions.md +14 -36
- package/.github/workflows/ci.yml +23 -2
- package/AGENTS.md +12 -3
- package/CONTRIBUTING.md +79 -0
- package/README.md +158 -124
- package/agent-plugin/.claude-plugin/plugin.json +2 -2
- package/agent-plugin/.codex-plugin/plugin.json +1 -1
- package/agent-plugin/.cursor-plugin/plugin.json +2 -2
- package/agent-plugin/.mcp.json +1 -1
- package/agent-plugin/README.md +20 -6
- package/agent-plugin/mcp.json +1 -1
- package/agent-plugin/plugin.json +1 -1
- package/agent-plugin/skills/mobile-debug-mcp/SKILL.md +113 -4
- package/dist/contracts/execution-controls.js +24 -0
- package/dist/contracts/selector.js +8 -0
- package/dist/contracts/target.js +15 -0
- package/dist/contracts/ui.js +1 -0
- package/dist/debugger/android.js +79 -0
- package/dist/debugger/diagnostics.js +54 -0
- package/dist/debugger/guard.js +30 -0
- package/dist/debugger/protocol.js +33 -0
- package/dist/debugger/sessions.js +304 -0
- package/dist/debugger/worker.js +176 -0
- package/dist/interact/adjustment/adjustment-context.js +41 -0
- package/dist/interact/adjustment/adjustment-gestures.js +55 -0
- package/dist/interact/adjustment/adjustment-plan.js +18 -0
- package/dist/interact/adjustment/adjustment-resolution.js +127 -0
- package/dist/interact/adjustment/adjustment-result.js +19 -0
- package/dist/interact/adjustment/adjustment-semantic.js +64 -0
- package/dist/interact/adjustment/adjustment-verification.js +35 -0
- package/dist/interact/adjustment/adjustment.js +52 -0
- package/dist/interact/adjustment/control-geometry.js +87 -0
- package/dist/interact/adjustment/control-values.js +136 -0
- package/dist/interact/adjustment/slider-labels.js +84 -0
- package/dist/interact/assertions/screen-assertion.js +37 -0
- package/dist/interact/assertions/state-assertion-context.js +35 -0
- package/dist/interact/assertions/state-assertion.js +76 -0
- package/dist/interact/assertions/state-comparison.js +141 -0
- package/dist/interact/assertions/visibility-assertion.js +34 -0
- package/dist/interact/conditional-action.js +12 -7
- package/dist/interact/index.js +65 -3074
- package/dist/interact/input-service.js +1 -0
- package/dist/interact/interaction-trace.js +21 -0
- package/dist/interact/model.js +1 -0
- package/dist/interact/observation.js +1 -0
- package/dist/interact/targeting/candidate-ancestor.js +58 -0
- package/dist/interact/targeting/candidate-result.js +23 -0
- package/dist/interact/targeting/candidate-scoring.js +50 -0
- package/dist/interact/targeting/element-helpers.js +216 -0
- package/dist/interact/targeting/find-element.js +65 -0
- package/dist/interact/targeting/nearby-control.js +56 -0
- package/dist/interact/targeting/resolved-elements.js +21 -0
- package/dist/interact/targeting/tap-target.js +17 -0
- package/dist/interact/targeting/target-scope.js +104 -0
- package/dist/interact/waits/legacy-log-wait.js +38 -0
- package/dist/interact/waits/legacy-wait-observations.js +103 -0
- package/dist/interact/waits/legacy-wait-state.js +34 -0
- package/dist/interact/waits/legacy-wait.js +48 -0
- package/dist/interact/waits/screen-wait.js +49 -0
- package/dist/interact/waits/ui-change-helpers.js +157 -0
- package/dist/interact/waits/ui-change-state.js +18 -0
- package/dist/interact/waits/ui-change-wait.js +77 -0
- package/dist/interact/waits/ui-wait-condition.js +56 -0
- package/dist/interact/waits/ui-wait-state.js +38 -0
- package/dist/interact/waits/ui-wait.js +106 -0
- package/dist/manage/android.js +55 -51
- package/dist/manage/index.js +38 -75
- package/dist/manage/ios/build-types.js +1 -0
- package/dist/manage/ios/build.js +210 -0
- package/dist/manage/ios/project-discovery.js +29 -0
- package/dist/manage/ios/scheme.js +18 -0
- package/dist/manage/ios.js +42 -256
- package/dist/observe/android/context.js +1 -0
- package/dist/observe/android/current-screen.js +55 -0
- package/dist/observe/android/fingerprint.js +13 -0
- package/dist/observe/android/log-stream.js +132 -0
- package/dist/observe/android/logs.js +107 -0
- package/dist/observe/android/screenshot.js +70 -0
- package/dist/observe/android/ui-tree.js +107 -0
- package/dist/observe/android.js +16 -520
- package/dist/observe/evidence.js +122 -76
- package/dist/observe/index.js +16 -263
- package/dist/observe/ios/context.js +16 -0
- package/dist/observe/ios/fingerprint.js +12 -0
- package/dist/observe/ios/log-stream.js +105 -0
- package/dist/observe/ios/logs.js +168 -0
- package/dist/observe/ios/screenshot.js +22 -0
- package/dist/observe/ios/ui-elements.js +241 -0
- package/dist/observe/ios/ui-tree.js +137 -0
- package/dist/observe/ios.js +17 -715
- package/dist/observe/logs/model.js +1 -0
- package/dist/{network → observe/network}/index.js +2 -2
- package/dist/observe/readiness-service.js +13 -2
- package/dist/observe/readiness.js +44 -18
- package/dist/observe/screenshot-encoding.js +41 -0
- package/dist/observe/snapshot-collection.js +79 -0
- package/dist/observe/snapshot-logs.js +30 -0
- package/dist/observe/snapshot-metadata.js +43 -31
- package/dist/observe/snapshot-semantic.js +115 -0
- package/dist/observe/system-trace-android.js +135 -0
- package/dist/observe/system-trace.js +294 -0
- package/dist/runtime/action-results.js +270 -0
- package/dist/runtime/clock.js +4 -0
- package/dist/server/common.js +1 -256
- package/dist/server/definitions/assert.js +162 -0
- package/dist/server/definitions/diagnostic.js +118 -0
- package/dist/server/definitions/input.js +274 -0
- package/dist/server/definitions/manage.js +194 -0
- package/dist/server/definitions/observe.js +149 -0
- package/dist/server/definitions/target.js +138 -0
- package/dist/server/definitions/wait.js +105 -0
- package/dist/server/handlers/action-execution.js +163 -0
- package/dist/server/handlers/correlation.js +23 -0
- package/dist/server/handlers/debugger-handlers.js +48 -0
- package/dist/server/handlers/debugger-response.js +9 -0
- package/dist/server/handlers/diagnostic.js +69 -0
- package/dist/server/handlers/handler-types.js +1 -0
- package/dist/server/handlers/input.js +154 -0
- package/dist/server/handlers/interact.js +113 -0
- package/dist/server/handlers/journey-assertions.js +35 -0
- package/dist/server/handlers/journey.js +147 -0
- package/dist/server/handlers/manage.js +119 -0
- package/dist/server/handlers/observe.js +95 -0
- package/dist/server/handlers/payload.js +4 -0
- package/dist/server/handlers/tool-handlers.js +160 -0
- package/dist/server/schemas/condition-schema.js +2 -0
- package/dist/server/schemas/debugger-schema.js +47 -0
- package/dist/server/{journey-schema.js → schemas/journey-schema.js} +8 -22
- package/dist/server/schemas/system-trace-schema.js +17 -0
- package/dist/server/tool-definitions.js +62 -1134
- package/dist/server-core.js +4 -4
- package/dist/server.js +34 -0
- package/dist/system/android-status.js +101 -0
- package/dist/system/android.js +37 -27
- package/dist/system/index.js +13 -438
- package/dist/system/ios-status.js +132 -0
- package/dist/system/ios.js +11 -8
- package/dist/system/model.js +1 -0
- package/dist/system/probes.js +105 -0
- package/dist/system/status-summary.js +43 -0
- package/dist/system/unsupported-status.js +52 -0
- package/dist/utils/android/commands.js +89 -0
- package/dist/utils/android/gradle.js +139 -0
- package/dist/utils/android/logs.js +103 -0
- package/dist/utils/android/ui-tree.js +233 -0
- package/dist/utils/android/utils.js +6 -564
- package/dist/utils/cli/idb/idb-helper.js +4 -6
- package/dist/utils/cli/idb/install-idb.js +13 -9
- package/dist/utils/cli/ios/preflight-ios.js +42 -38
- package/dist/utils/exec.js +2 -0
- package/dist/utils/ios/utils.js +45 -46
- package/dist/utils/java.js +75 -57
- package/dist/utils/operation-budget.js +2 -0
- package/dist/utils/resolve-device.js +6 -2
- package/dist/utils/ui/index.js +26 -26
- package/docs/CHANGELOG.md +48 -0
- package/docs/README.md +38 -0
- package/docs/benchmarks/README.md +18 -0
- package/docs/benchmarks/interaction-latency/README.md +14 -0
- package/docs/benchmarks/interaction-latency/final.md +4 -1
- package/docs/benchmarks/interaction-latency/ios-validation.md +2 -0
- package/docs/benchmarks/ui-tree-performance/README.md +24 -16
- package/docs/benchmarks/ui-tree-performance/comparison.md +11 -10
- package/docs/code-structure.md +118 -0
- package/docs/specs/001-state-verification/spec.md +16 -14
- package/docs/specs/002-richer-element-identity/spec.md +12 -10
- package/docs/specs/003-wait-and-synchronization-reliability/spec.md +12 -10
- package/docs/specs/004-action-verification-routing/spec.md +3 -3
- package/docs/specs/005-unified-action-execution-and-verification-model/spec.md +2 -0
- package/docs/specs/006-runtime-action-instrumentation-and-binding-layer/spec.md +2 -0
- package/docs/specs/007-actionability-resolution-and-executable-target-selection/spec.md +3 -1
- package/docs/specs/008-adjustable-control-support-and-semantic-value-manipulation/spec.md +3 -4
- package/docs/specs/009-semantic-control-modeling-for-custom-and-composite-controls/spec.md +2 -0
- package/docs/specs/010-verification-stabilization-and-temporal-convergence/spec.md +2 -2
- package/docs/specs/011-recovery-and-replanning-for-failed-or-ambiguous-interaction-flows/spec.md +2 -2
- package/docs/specs/011.1-recovery-contract-types-and-runtime-wiring-spec/spec.md +2 -0
- package/docs/specs/012-action-trace-and-xecution-observability/spec.md +2 -3
- package/docs/specs/013-wait-and-synchronization-reliability/spec.md +19 -19
- package/docs/specs/014-actionability-resolution/spec.md +20 -18
- package/docs/specs/015-adjustable-control-support/spec.md +17 -15
- package/docs/specs/016-environment-tools/spec.md +20 -20
- package/docs/specs/018-interaction-latency-and-batched-journeys/spec.md +2 -0
- package/docs/specs/019-ui-tree-observation-performance/spec.md +3 -1
- package/docs/specs/020-conditional-actions/intent.md +5 -3
- package/docs/specs/020-conditional-actions/plan.md +8 -9
- package/docs/specs/020-conditional-actions/spec.md +4 -2
- package/docs/specs/021-app-readiness-signals/intent.md +4 -2
- package/docs/specs/021-app-readiness-signals/plan.md +7 -6
- package/docs/specs/021-app-readiness-signals/spec.md +3 -1
- package/docs/specs/022-correlated-evidence/intent.md +4 -4
- package/docs/specs/022-correlated-evidence/plan.md +10 -11
- package/docs/specs/022-correlated-evidence/spec.md +3 -1
- package/docs/specs/023-android-system-traces/device-evidence.json +38 -0
- package/docs/specs/023-android-system-traces/emulator-recheck.json +38 -0
- package/docs/specs/023-android-system-traces/intent.md +41 -0
- package/docs/specs/023-android-system-traces/plan.md +115 -0
- package/docs/specs/023-android-system-traces/spec.md +122 -0
- package/docs/specs/024-android-heap-dump-capture/intent.md +41 -0
- package/docs/specs/025-android-runtime-debugger/intent.md +41 -0
- package/docs/specs/025-android-runtime-debugger/plan.md +106 -0
- package/docs/specs/025-android-runtime-debugger/spec.md +183 -0
- package/docs/specs/026-code-structure-and-quality-gates/health-plan.md +88 -0
- package/docs/specs/026-code-structure-and-quality-gates/intent.md +47 -0
- package/docs/specs/026-code-structure-and-quality-gates/plan.md +191 -0
- package/docs/specs/026-code-structure-and-quality-gates/spec.md +138 -0
- package/docs/specs/026-code-structure-and-quality-gates/verification-final.json +200 -0
- package/docs/specs/026-code-structure-and-quality-gates/verification-thin-facade.json +154 -0
- package/docs/specs/026-code-structure-and-quality-gates/verification.json +136 -0
- package/docs/specs/027-debugger-failure-diagnostics/intent.md +43 -0
- package/docs/specs/027-debugger-failure-diagnostics/plan.md +86 -0
- package/docs/specs/027-debugger-failure-diagnostics/spec.md +133 -0
- package/docs/specs/028-compact-debugger-responses/intent.md +41 -0
- package/docs/specs/028-compact-debugger-responses/plan.md +112 -0
- package/docs/specs/028-compact-debugger-responses/spec.md +108 -0
- package/docs/specs/029-kotlin-locals-validation/report.md +119 -0
- package/docs/specs/030-android-coroutine-validation/evidence.json +475 -0
- package/docs/specs/030-android-coroutine-validation/intent.md +47 -0
- package/docs/specs/030-android-coroutine-validation/plan.md +147 -0
- package/docs/specs/030-android-coroutine-validation/report.md +240 -0
- package/docs/specs/030-android-coroutine-validation/spec.md +107 -0
- package/docs/tools/TOOLS.md +31 -16
- package/docs/tools/{evidence.md → correlated-evidence.md} +14 -3
- package/docs/tools/debugger.md +180 -0
- package/docs/tools/interact.md +42 -20
- package/docs/tools/manage.md +25 -44
- package/docs/tools/observe.md +64 -25
- package/docs/tools/system-traces.md +134 -0
- package/docs/tools/system.md +12 -5
- package/package.json +11 -8
- package/scripts/architecture-graph.mjs +69 -0
- package/scripts/check-architecture.mjs +47 -0
- package/scripts/code-quality-baseline.json +1 -0
- package/scripts/code-quality.mjs +161 -0
- package/src/contracts/execution-controls.ts +26 -0
- package/src/contracts/selector.ts +17 -0
- package/src/contracts/target.ts +19 -0
- package/src/contracts/ui.ts +94 -0
- package/src/debugger/android.ts +66 -0
- package/src/debugger/diagnostics.ts +43 -0
- package/src/debugger/guard.ts +31 -0
- package/src/debugger/java/DebuggerWorker.java +166 -0
- package/src/debugger/protocol.ts +37 -0
- package/src/debugger/sessions.ts +327 -0
- package/src/debugger/worker.ts +135 -0
- package/src/interact/adjustment/adjustment-context.ts +83 -0
- package/src/interact/adjustment/adjustment-gestures.ts +48 -0
- package/src/interact/adjustment/adjustment-plan.ts +23 -0
- package/src/interact/adjustment/adjustment-resolution.ts +104 -0
- package/src/interact/adjustment/adjustment-result.ts +34 -0
- package/src/interact/adjustment/adjustment-semantic.ts +53 -0
- package/src/interact/adjustment/adjustment-verification.ts +60 -0
- package/src/interact/adjustment/adjustment.ts +49 -0
- package/src/interact/adjustment/control-geometry.ts +120 -0
- package/src/interact/adjustment/control-values.ts +141 -0
- package/src/interact/adjustment/slider-labels.ts +84 -0
- package/src/interact/assertions/screen-assertion.ts +39 -0
- package/src/interact/assertions/state-assertion-context.ts +48 -0
- package/src/interact/assertions/state-assertion.ts +64 -0
- package/src/interact/assertions/state-comparison.ts +168 -0
- package/src/interact/assertions/visibility-assertion.ts +41 -0
- package/src/interact/conditional-action.ts +18 -12
- package/src/interact/index.ts +76 -3491
- package/src/interact/input-service.ts +11 -0
- package/src/interact/interaction-trace.ts +36 -0
- package/src/interact/model.ts +109 -0
- package/src/interact/observation.ts +7 -0
- package/src/interact/targeting/candidate-ancestor.ts +49 -0
- package/src/interact/targeting/candidate-result.ts +24 -0
- package/src/interact/targeting/candidate-scoring.ts +42 -0
- package/src/interact/targeting/element-helpers.ts +243 -0
- package/src/interact/targeting/find-element.ts +47 -0
- package/src/interact/targeting/nearby-control.ts +46 -0
- package/src/interact/targeting/resolved-elements.ts +20 -0
- package/src/interact/targeting/tap-target.ts +22 -0
- package/src/interact/targeting/target-scope.ts +121 -0
- package/src/interact/waits/legacy-log-wait.ts +30 -0
- package/src/interact/waits/legacy-wait-observations.ts +55 -0
- package/src/interact/waits/legacy-wait-state.ts +48 -0
- package/src/interact/waits/legacy-wait.ts +34 -0
- package/src/interact/waits/screen-wait.ts +37 -0
- package/src/interact/waits/ui-change-helpers.ts +184 -0
- package/src/interact/waits/ui-change-state.ts +26 -0
- package/src/interact/waits/ui-change-wait.ts +59 -0
- package/src/interact/waits/ui-wait-condition.ts +52 -0
- package/src/interact/waits/ui-wait-state.ts +55 -0
- package/src/interact/waits/ui-wait.ts +84 -0
- package/src/manage/android.ts +56 -50
- package/src/manage/index.ts +63 -93
- package/src/manage/ios/build-types.ts +14 -0
- package/src/manage/ios/build.ts +230 -0
- package/src/manage/ios/project-discovery.ts +26 -0
- package/src/manage/ios/scheme.ts +16 -0
- package/src/manage/ios.ts +65 -298
- package/src/observe/android/context.ts +1 -0
- package/src/observe/android/current-screen.ts +63 -0
- package/src/observe/android/fingerprint.ts +13 -0
- package/src/observe/android/log-stream.ts +127 -0
- package/src/observe/android/logs.ts +110 -0
- package/src/observe/android/screenshot.ts +79 -0
- package/src/observe/android/ui-tree.ts +113 -0
- package/src/observe/android.ts +17 -531
- package/src/observe/evidence.ts +130 -71
- package/src/observe/index.ts +24 -286
- package/src/observe/ios/context.ts +22 -0
- package/src/observe/ios/fingerprint.ts +12 -0
- package/src/observe/ios/log-stream.ts +103 -0
- package/src/observe/ios/logs.ts +179 -0
- package/src/observe/ios/screenshot.ts +26 -0
- package/src/observe/ios/ui-elements.ts +266 -0
- package/src/observe/ios/ui-tree.ts +143 -0
- package/src/observe/ios.ts +18 -749
- package/src/observe/logs/model.ts +11 -0
- package/src/{network → observe/network}/index.ts +2 -2
- package/src/observe/readiness-service.ts +10 -3
- package/src/observe/readiness.ts +49 -22
- package/src/observe/screenshot-encoding.ts +32 -0
- package/src/observe/snapshot-collection.ts +69 -0
- package/src/observe/snapshot-logs.ts +26 -0
- package/src/observe/snapshot-metadata.ts +51 -31
- package/src/observe/snapshot-semantic.ts +153 -0
- package/src/observe/system-trace-android.ts +133 -0
- package/src/observe/system-trace.ts +227 -0
- package/src/runtime/action-results.ts +376 -0
- package/src/runtime/clock.ts +9 -0
- package/src/server/common.ts +9 -359
- package/src/server/definitions/assert.ts +164 -0
- package/src/server/definitions/diagnostic.ts +120 -0
- package/src/server/definitions/input.ts +276 -0
- package/src/server/definitions/manage.ts +196 -0
- package/src/server/definitions/observe.ts +151 -0
- package/src/server/definitions/target.ts +140 -0
- package/src/server/definitions/wait.ts +107 -0
- package/src/server/handlers/action-execution.ts +164 -0
- package/src/server/handlers/correlation.ts +20 -0
- package/src/server/handlers/debugger-handlers.ts +39 -0
- package/src/server/handlers/debugger-response.ts +7 -0
- package/src/server/handlers/diagnostic.ts +79 -0
- package/src/server/handlers/handler-types.ts +7 -0
- package/src/server/handlers/input.ts +173 -0
- package/src/server/handlers/interact.ts +135 -0
- package/src/server/handlers/journey-assertions.ts +39 -0
- package/src/server/handlers/journey.ts +132 -0
- package/src/server/handlers/manage.ts +141 -0
- package/src/server/handlers/observe.ts +116 -0
- package/src/server/handlers/payload.ts +36 -0
- package/src/server/handlers/tool-handlers.ts +159 -0
- package/src/server/schemas/condition-schema.ts +2 -0
- package/src/server/schemas/debugger-schema.ts +43 -0
- package/src/server/{journey-schema.ts → schemas/journey-schema.ts} +8 -22
- package/src/server/schemas/system-trace-schema.ts +17 -0
- package/src/server/tool-definitions.ts +69 -1140
- package/src/server-core.ts +4 -4
- package/src/server.ts +25 -1
- package/src/system/android-status.ts +124 -0
- package/src/system/android.ts +33 -21
- package/src/system/index.ts +21 -523
- package/src/system/ios-status.ts +147 -0
- package/src/system/ios.ts +14 -10
- package/src/system/model.ts +41 -0
- package/src/system/probes.ts +114 -0
- package/src/system/status-summary.ts +47 -0
- package/src/system/unsupported-status.ts +55 -0
- package/src/types.ts +16 -106
- package/src/utils/android/commands.ts +81 -0
- package/src/utils/android/gradle.ts +132 -0
- package/src/utils/android/logs.ts +103 -0
- package/src/utils/android/ui-tree.ts +239 -0
- package/src/utils/android/utils.ts +16 -556
- package/src/utils/cli/idb/check-idb.ts +4 -4
- package/src/utils/cli/idb/idb-helper.ts +6 -8
- package/src/utils/cli/idb/install-idb.ts +15 -9
- package/src/utils/cli/ios/preflight-ios.ts +39 -31
- package/src/utils/cli/ios/run-ios-ui-tree-tap.ts +4 -4
- package/src/utils/exec.ts +2 -0
- package/src/utils/ios/utils.ts +57 -61
- package/src/utils/java.ts +71 -51
- package/src/utils/operation-budget.ts +2 -0
- package/src/utils/resolve-device.ts +11 -6
- package/src/utils/ui/index.ts +28 -28
- package/test/device/automated/debugger/coroutine-lifecycle.ts +27 -0
- package/test/device/automated/debugger/coroutine-support.ts +140 -0
- package/test/device/automated/debugger/coroutine.android.test.ts +169 -0
- package/test/device/automated/debugger/kotlin.android.test.ts +127 -0
- package/test/device/automated/debugger/runtime.android.test.ts +219 -0
- package/test/device/automated/interact/interaction.android.test.ts +56 -0
- package/test/device/automated/observe/system-trace.smoke.ts +104 -0
- package/test/device/manual/interact/modul8_selector_tap.manual.ts +1 -1
- package/test/fixtures/contracts/tool-definitions.json +3536 -0
- package/test/fixtures/coroutine-app/MainActivity.kt +100 -0
- package/test/fixtures/coroutine-app/README.md +48 -0
- package/test/fixtures/coroutine-app/build.ts +35 -0
- package/test/fixtures/debugger-app/MainActivity.java +67 -0
- package/test/fixtures/debugger-app/MainActivity.kt +32 -0
- package/test/fixtures/debugger-app/NoLocals.java +7 -0
- package/test/fixtures/debugger-app/README.md +65 -0
- package/test/fixtures/debugger-app/build.ts +39 -0
- package/test/fixtures/latency-journey-app/README.md +2 -0
- package/test/fixtures/readiness-app/README.md +2 -0
- package/test/helpers/perfetto.ts +59 -0
- package/test/unit/debugger/coroutine-lifecycle.test.ts +43 -0
- package/test/unit/debugger/diagnostic-sessions.test.ts +67 -0
- package/test/unit/debugger/diagnostics.test.ts +80 -0
- package/test/unit/debugger/guards.test.ts +50 -0
- package/test/unit/debugger/native.test.ts +33 -0
- package/test/unit/debugger/preparation.test.ts +32 -0
- package/test/unit/debugger/protocol.test.ts +15 -0
- package/test/unit/debugger/sessions.test.ts +83 -0
- package/test/unit/interact/adjustment_service.test.ts +42 -0
- package/test/unit/interact/adjustment_verification.test.ts +35 -0
- package/test/unit/interact/clock_dependencies.test.ts +63 -0
- package/test/unit/interact/element_helpers.test.ts +19 -0
- package/test/unit/interact/legacy_wait_service.test.ts +17 -0
- package/test/unit/interact/state_comparison.test.ts +20 -0
- package/test/unit/interact/target_scope.test.ts +35 -0
- package/test/unit/network/get_network_activity.test.ts +1 -1
- package/test/unit/observe/readiness.test.ts +3 -1
- package/test/unit/observe/screenshot-encoding.test.ts +30 -0
- package/test/unit/observe/snapshot-logs.test.ts +14 -0
- package/test/unit/observe/system-trace-android.test.ts +52 -0
- package/test/unit/observe/system-trace.test.ts +166 -0
- package/test/unit/quality/architecture.test.ts +60 -0
- package/test/unit/quality/code-quality.test.ts +58 -0
- package/test/unit/quality/interaction_boundaries.test.ts +24 -0
- package/test/unit/server/conditional_actions.test.ts +1 -1
- package/test/unit/server/conditional_schema.test.ts +2 -2
- package/test/unit/server/debugger-response.test.ts +63 -0
- package/test/unit/server/system-trace.test.ts +64 -0
- package/test/unit/server/tool_definitions_parity.test.ts +8 -0
- package/dist/server/tool-handlers.js +0 -893
- package/docs/ROADMAP.md +0 -646
- package/docs/benchmarks/ui-tree-performance/bridge-probe.json +0 -29
- package/docs/benchmarks/ui-tree-performance/initial-baseline.json +0 -59560
- package/docs/specs/baseline-spec-v0.md +0 -312
- package/docs/specs/mcp-tooling-spec-v1.md +0 -446
- package/src/server/tool-handlers.ts +0 -923
- /package/dist/{server/condition-schema.js → contracts/condition.js} +0 -0
- /package/dist/server/{readiness-schema.js → schemas/readiness-schema.js} +0 -0
- /package/src/{server/condition-schema.ts → contracts/condition.ts} +0 -0
- /package/src/server/{readiness-schema.ts → schemas/readiness-schema.ts} +0 -0
|
@@ -1,446 +0,0 @@
|
|
|
1
|
-
# MCP Tooling Specification — Spec v1 (Refined)
|
|
2
|
-
|
|
3
|
-
## 1. Scope
|
|
4
|
-
|
|
5
|
-
This specification defines the runtime contract for MCP tools used to interact with mobile applications.
|
|
6
|
-
|
|
7
|
-
It standardizes:
|
|
8
|
-
|
|
9
|
-
- action execution semantics
|
|
10
|
-
- verification model
|
|
11
|
-
- failure handling
|
|
12
|
-
- response shape constraints
|
|
13
|
-
|
|
14
|
-
This spec is incremental and aligned with the current implementation. It does not introduce new tools or require architectural redesign.
|
|
15
|
-
|
|
16
|
-
## 2. Core Model
|
|
17
|
-
|
|
18
|
-
The system is based on a strict separation:
|
|
19
|
-
|
|
20
|
-
- Action tools perform execution
|
|
21
|
-
- Verification tools determine outcome
|
|
22
|
-
- `wait_for_*` tools resolve and synchronize
|
|
23
|
-
- Observation tools inspect state
|
|
24
|
-
|
|
25
|
-
## 3. Execution Model
|
|
26
|
-
|
|
27
|
-
Canonical flow for verifiable interactions:
|
|
28
|
-
|
|
29
|
-
`RESOLVE -> ACT -> WAIT (optional) -> EXPECT`
|
|
30
|
-
|
|
31
|
-
This flow applies when outcome verification is required.
|
|
32
|
-
|
|
33
|
-
It does not apply to:
|
|
34
|
-
|
|
35
|
-
- pure inspection tools
|
|
36
|
-
- observation-only flows
|
|
37
|
-
- non-verifiable or exploratory actions
|
|
38
|
-
|
|
39
|
-
Outcome-specific guidance:
|
|
40
|
-
|
|
41
|
-
- visible navigation expected -> `wait_for_screen_change` (optional) -> `expect_screen`
|
|
42
|
-
- local UI change expected -> `wait_for_ui` (optional) -> `expect_element_visible`
|
|
43
|
-
- readable element state expected -> `wait_for_ui` (optional) -> `expect_state`
|
|
44
|
-
- backend/API activity expected without a visible UI change -> compare `get_screen_fingerprint` before/after, then call `classify_action_outcome` with the runtime `action_type`; collect `get_network_activity` only if the result remains ambiguous
|
|
45
|
-
|
|
46
|
-
For backend/API activity, `wait_for_screen_change` is not the right verification tool unless a visible transition is also expected.
|
|
47
|
-
|
|
48
|
-
## 4. Action Tools
|
|
49
|
-
|
|
50
|
-
### 4.1 Definition
|
|
51
|
-
|
|
52
|
-
Action tools mutate application state.
|
|
53
|
-
|
|
54
|
-
Includes:
|
|
55
|
-
`start_app`, `restart_app`, `tap`, `tap_element`, `swipe`, `scroll_to_element`, `type_text`, `press_back`, `adjust_control`
|
|
56
|
-
|
|
57
|
-
### 4.2 Required Semantics
|
|
58
|
-
|
|
59
|
-
- `success` MUST represent execution success only
|
|
60
|
-
- execution success means the platform command was dispatched without error
|
|
61
|
-
- `success` MUST NOT imply outcome success
|
|
62
|
-
|
|
63
|
-
### 4.3 Action Envelope
|
|
64
|
-
|
|
65
|
-
MUST be returned in this structure:
|
|
66
|
-
|
|
67
|
-
```ts
|
|
68
|
-
{
|
|
69
|
-
action_id: string,
|
|
70
|
-
timestamp: string,
|
|
71
|
-
action_type: string,
|
|
72
|
-
lifecycle_state?: 'pending_verification' | 'failed',
|
|
73
|
-
source_module?: 'server' | 'interact',
|
|
74
|
-
target: {
|
|
75
|
-
selector: object,
|
|
76
|
-
resolved: object | null
|
|
77
|
-
},
|
|
78
|
-
success: boolean,
|
|
79
|
-
ui_fingerprint_before: string | null,
|
|
80
|
-
ui_fingerprint_after: string | null,
|
|
81
|
-
failure_code?: string,
|
|
82
|
-
retryable?: boolean,
|
|
83
|
-
trace: {
|
|
84
|
-
action_id: string,
|
|
85
|
-
steps: Array<{
|
|
86
|
-
stage: 'resolve' | 'execute' | 'verify' | 'stabilize' | 'recover',
|
|
87
|
-
timestamp: number,
|
|
88
|
-
result: 'success' | 'failure' | 'retry',
|
|
89
|
-
attempt_index: number,
|
|
90
|
-
cycle_id?: number,
|
|
91
|
-
metadata?: Record<string, unknown>
|
|
92
|
-
}>,
|
|
93
|
-
final_outcome: 'success' | 'failure',
|
|
94
|
-
attempts: number
|
|
95
|
-
},
|
|
96
|
-
recovery?: {
|
|
97
|
-
failure_class: string,
|
|
98
|
-
runtime_code: string,
|
|
99
|
-
recovery_strategy?: string,
|
|
100
|
-
recovery_attempts: number,
|
|
101
|
-
max_recovery_attempts: number,
|
|
102
|
-
retry_depth: number,
|
|
103
|
-
max_retry_depth: number,
|
|
104
|
-
is_terminal: boolean,
|
|
105
|
-
retry_allowed?: boolean
|
|
106
|
-
},
|
|
107
|
-
device?: DeviceInfo,
|
|
108
|
-
details?: object
|
|
109
|
-
}
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
Rules:
|
|
113
|
-
|
|
114
|
-
- `success` is at the top level, not nested
|
|
115
|
-
- `target` contains only selection and resolution context
|
|
116
|
-
- `lifecycle_state` reflects the post-dispatch runtime state
|
|
117
|
-
- `source_module` identifies where the envelope was produced
|
|
118
|
-
- fingerprints represent observed pre/post UI state on a best-effort basis
|
|
119
|
-
- `failure_code` is optional but MUST be used when a structured mapping exists
|
|
120
|
-
- `trace` is required and carries the observable execution path
|
|
121
|
-
- `recovery` MAY be attached to failed actions to carry typed recovery metadata
|
|
122
|
-
|
|
123
|
-
### 4.4 Allowed Deviations
|
|
124
|
-
|
|
125
|
-
Explicit temporary exceptions:
|
|
126
|
-
|
|
127
|
-
- `install_app`, `terminate_app`, `reset_app_data` do not use this envelope
|
|
128
|
-
- `scroll_to_element` may temporarily retain outcome-based success semantics
|
|
129
|
-
- partial `failure_code` coverage is allowed
|
|
130
|
-
- detail richness may vary across tools
|
|
131
|
-
|
|
132
|
-
## 5. Verification Tools
|
|
133
|
-
|
|
134
|
-
### 5.1 Definition
|
|
135
|
-
|
|
136
|
-
Verification tools determine whether the intended outcome occurred.
|
|
137
|
-
|
|
138
|
-
Primary:
|
|
139
|
-
|
|
140
|
-
- `expect_screen`
|
|
141
|
-
- `expect_element_visible`
|
|
142
|
-
- `expect_state`
|
|
143
|
-
|
|
144
|
-
### 5.2 Required Semantics
|
|
145
|
-
|
|
146
|
-
- MUST return `success` as a boolean
|
|
147
|
-
- `success` MUST represent outcome truth
|
|
148
|
-
- MUST be binary and deterministic
|
|
149
|
-
|
|
150
|
-
Optional fields do not affect `success`:
|
|
151
|
-
`observed`, `expected`, `comparison`, `reason`, `confidence`
|
|
152
|
-
|
|
153
|
-
### 5.3 Authoritative Role
|
|
154
|
-
|
|
155
|
-
Verification tools are the only authoritative source of outcome truth.
|
|
156
|
-
|
|
157
|
-
Action tools MUST NOT be used to infer outcome success.
|
|
158
|
-
|
|
159
|
-
### 5.4 Applicability Rules
|
|
160
|
-
|
|
161
|
-
An `expect_*` tool is applicable when:
|
|
162
|
-
|
|
163
|
-
- expected destination screen is known -> `expect_screen`
|
|
164
|
-
- expected UI element state is known -> `expect_element_visible`
|
|
165
|
-
- expected readable state property is known -> `expect_state`
|
|
166
|
-
- outcome is explicitly defined or testable
|
|
167
|
-
|
|
168
|
-
Rules:
|
|
169
|
-
|
|
170
|
-
- `wait_for_*` MAY be used before `expect_*` for synchronization
|
|
171
|
-
- `wait_for_*` MUST NOT replace `expect_*` when an applicable `expect_*` tool exists
|
|
172
|
-
- when no applicable `expect_*` tool exists, `expect_*` MAY be skipped
|
|
173
|
-
|
|
174
|
-
## 6. wait_for_* Tools
|
|
175
|
-
|
|
176
|
-
### 6.1 Definition
|
|
177
|
-
|
|
178
|
-
`wait_for_*` tools provide deterministic resolution and synchronization.
|
|
179
|
-
|
|
180
|
-
Examples:
|
|
181
|
-
|
|
182
|
-
- `wait_for_ui`
|
|
183
|
-
- `wait_for_screen_change`
|
|
184
|
-
- `wait_for_ui_change`
|
|
185
|
-
|
|
186
|
-
### 6.2 Rules
|
|
187
|
-
|
|
188
|
-
- MAY resolve UI elements
|
|
189
|
-
- MAY synchronize UI/system state
|
|
190
|
-
- MUST NOT be treated as final verification when `expect_*` is applicable
|
|
191
|
-
|
|
192
|
-
### 6.3 Semantics
|
|
193
|
-
|
|
194
|
-
- `success` indicates condition met or resolution succeeded
|
|
195
|
-
- `success` does NOT indicate outcome correctness
|
|
196
|
-
|
|
197
|
-
### 6.4 `wait_for_ui_change`
|
|
198
|
-
|
|
199
|
-
`wait_for_ui_change` synchronizes on observable in-place UI mutation.
|
|
200
|
-
|
|
201
|
-
Inputs:
|
|
202
|
-
|
|
203
|
-
- `platform?: "android" | "ios"`
|
|
204
|
-
- `deviceId?: string`
|
|
205
|
-
- `timeout_ms?: number`
|
|
206
|
-
- `stability_window_ms?: number` (default: `300`)
|
|
207
|
-
- `expected_change?: "hierarchy_diff" | "text_change" | "state_change"`
|
|
208
|
-
|
|
209
|
-
Required semantics:
|
|
210
|
-
|
|
211
|
-
- success means a qualifying UI mutation was observed and remained stable for a full `stability_window_ms`
|
|
212
|
-
- stabilization MUST reset whenever a synchronization-relevant mutation is observed
|
|
213
|
-
- the stabilization window MUST be measured from the most recent qualifying mutation
|
|
214
|
-
- the implementation MUST treat as synchronization-relevant: element addition or removal, visibility changes, enabled-state changes, navigation transitions, text or content-description changes, subtree structure mutation, and semantic accessibility tree mutation
|
|
215
|
-
- the implementation MUST NOT treat as synchronization-relevant: animation frame updates, layout-only jitter, opacity-only visual transitions, and non-semantic rendering updates
|
|
216
|
-
- partial convergence MUST NOT be reported as success
|
|
217
|
-
- timeout MAY return the last observed state, but MUST NOT report stable convergence
|
|
218
|
-
|
|
219
|
-
Guidance:
|
|
220
|
-
|
|
221
|
-
- prefer `wait_for_screen_change` for navigation transitions
|
|
222
|
-
- prefer `wait_for_ui_change` for in-place updates and recomposition-style changes
|
|
223
|
-
- follow with `expect_*` when the expected final state is known
|
|
224
|
-
|
|
225
|
-
## 7. Failure Semantics
|
|
226
|
-
|
|
227
|
-
### 7.1 Canonical Codes
|
|
228
|
-
|
|
229
|
-
- `ELEMENT_NOT_FOUND`
|
|
230
|
-
- `ELEMENT_NOT_INTERACTABLE`
|
|
231
|
-
- `TIMEOUT`
|
|
232
|
-
- `NAVIGATION_NO_CHANGE`
|
|
233
|
-
- `AMBIGUOUS_TARGET`
|
|
234
|
-
- `STALE_REFERENCE`
|
|
235
|
-
- `UNKNOWN`
|
|
236
|
-
|
|
237
|
-
### 7.2 Rules
|
|
238
|
-
|
|
239
|
-
- `failure_code` MUST be used when a structured mapping exists
|
|
240
|
-
- `failure_code` MUST NOT be replaced by string errors
|
|
241
|
-
- string errors MAY exist for diagnostics only
|
|
242
|
-
- not all tools must emit all codes
|
|
243
|
-
|
|
244
|
-
### 7.3 Scope
|
|
245
|
-
|
|
246
|
-
Applies to:
|
|
247
|
-
|
|
248
|
-
- action tools
|
|
249
|
-
- verification tools
|
|
250
|
-
- `wait_for_ui`-style tools
|
|
251
|
-
|
|
252
|
-
## 8. Response Shape
|
|
253
|
-
|
|
254
|
-
### 8.1 Default
|
|
255
|
-
|
|
256
|
-
All responses MUST be a single JSON text block.
|
|
257
|
-
|
|
258
|
-
### 8.2 Allowed Exceptions
|
|
259
|
-
|
|
260
|
-
Multi-block responses are allowed only for:
|
|
261
|
-
|
|
262
|
-
- `get_logs`
|
|
263
|
-
- `capture_screenshot`
|
|
264
|
-
- `build_and_install`
|
|
265
|
-
|
|
266
|
-
### 8.3 Errors
|
|
267
|
-
|
|
268
|
-
All handler/runtime errors MUST be JSON-wrapped.
|
|
269
|
-
|
|
270
|
-
String-only errors are not allowed, including fallback handler errors.
|
|
271
|
-
|
|
272
|
-
Note: string diagnostics may still appear inside structured JSON payloads where explicitly defined by a tool.
|
|
273
|
-
|
|
274
|
-
## 9. Observation Tools (Extended Semantics)
|
|
275
|
-
|
|
276
|
-
Observation tools inspect application state without mutating it.
|
|
277
|
-
|
|
278
|
-
Examples:
|
|
279
|
-
|
|
280
|
-
- `capture_debug_snapshot`
|
|
281
|
-
- `get_screen_fingerprint`
|
|
282
|
-
- `get_network_activity`
|
|
283
|
-
- `get_logs`
|
|
284
|
-
|
|
285
|
-
### 9.1 Snapshot Response Model
|
|
286
|
-
|
|
287
|
-
`capture_debug_snapshot` MUST return a dual-layer response:
|
|
288
|
-
|
|
289
|
-
- `raw`: required object
|
|
290
|
-
- `semantic`: optional object
|
|
291
|
-
|
|
292
|
-
The raw layer is authoritative and MUST remain unchanged from the underlying observation data. It is the source of truth and MUST NOT be interpreted or rewritten.
|
|
293
|
-
|
|
294
|
-
The semantic layer is derived, best-effort, and MUST be generated exclusively from the raw layer.
|
|
295
|
-
|
|
296
|
-
Raw layer contents include:
|
|
297
|
-
|
|
298
|
-
- UI hierarchy or accessibility tree
|
|
299
|
-
- normalized readable element state where exposed by the platform
|
|
300
|
-
- platform-native identity hints such as stable identifiers, roles, and test tags
|
|
301
|
-
- semantic control metadata when derivable from the raw tree, including `semantic_role`, `supported_actions`, `adjustable`, and `state_shape`
|
|
302
|
-
- snapshot metadata such as `snapshot_revision` and `captured_at_ms`
|
|
303
|
-
- `loading_state` when a reliable loading signal is detectable
|
|
304
|
-
- screenshot when available
|
|
305
|
-
- element-level attributes
|
|
306
|
-
- logs and fingerprint/activity observations
|
|
307
|
-
- raw error fields when partial collection fails
|
|
308
|
-
|
|
309
|
-
Semantic layer shape when present:
|
|
310
|
-
|
|
311
|
-
```ts
|
|
312
|
-
{
|
|
313
|
-
screen: string | null,
|
|
314
|
-
signals: Record<string, string | number | boolean> | null,
|
|
315
|
-
actions_available: string[] | null,
|
|
316
|
-
confidence: number,
|
|
317
|
-
warnings: string[]
|
|
318
|
-
}
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
Rules:
|
|
322
|
-
|
|
323
|
-
- `confidence` MUST be between 0 and 1
|
|
324
|
-
- `warnings` MUST be present when `semantic` is present
|
|
325
|
-
- `semantic` MAY be omitted entirely when derivation is not reliable
|
|
326
|
-
- `semantic` MUST be treated as unreliable if it conflicts with raw data
|
|
327
|
-
- `actions_available` are hints only and MUST NOT be treated as guaranteed executable actions
|
|
328
|
-
|
|
329
|
-
### 9.2 Agent Usage Contract
|
|
330
|
-
|
|
331
|
-
Agents SHOULD use `semantic` for primary decision-making when present.
|
|
332
|
-
|
|
333
|
-
Agents MUST fall back to `raw` when:
|
|
334
|
-
|
|
335
|
-
- `semantic` is missing
|
|
336
|
-
- `confidence < 0.7`
|
|
337
|
-
- `warnings` is non-empty
|
|
338
|
-
- semantic output conflicts with expected state or raw data
|
|
339
|
-
|
|
340
|
-
`semantic` is for planning only and MUST NOT be used for verification.
|
|
341
|
-
|
|
342
|
-
### 9.3 Relationship to Classification
|
|
343
|
-
|
|
344
|
-
Semantic signals MAY be used as input to `classify_action_outcome`.
|
|
345
|
-
|
|
346
|
-
Semantic output MUST NOT replace classification or verification.
|
|
347
|
-
|
|
348
|
-
Classification remains a supplementary, post-action interpretation mechanism.
|
|
349
|
-
|
|
350
|
-
### 9.4 Semantic Control Metadata
|
|
351
|
-
|
|
352
|
-
When present, semantic control metadata MAY include:
|
|
353
|
-
|
|
354
|
-
```ts
|
|
355
|
-
{
|
|
356
|
-
semantic_role?: 'slider' | 'stepper' | 'dropdown' | 'segmented_control' | 'custom_adjustable' | 'composite_control' | null,
|
|
357
|
-
supported_actions?: string[] | null,
|
|
358
|
-
adjustable?: boolean | null,
|
|
359
|
-
state_shape?: 'continuous' | 'discrete' | 'semantic' | null
|
|
360
|
-
}
|
|
361
|
-
```
|
|
362
|
-
|
|
363
|
-
Rules:
|
|
364
|
-
|
|
365
|
-
- semantic control metadata is derived and best-effort
|
|
366
|
-
- raw platform roles and state remain authoritative on conflict
|
|
367
|
-
- `adjustable` MAY be inferred from platform traits when no known role matches
|
|
368
|
-
- `state_shape` MUST respect known control roles before value-based heuristics
|
|
369
|
-
- `supported_actions` are hints only and MUST NOT be treated as guaranteed executable actions
|
|
370
|
-
|
|
371
|
-
## 10. Classification
|
|
372
|
-
|
|
373
|
-
Tool: `classify_action_outcome`
|
|
374
|
-
|
|
375
|
-
Rules:
|
|
376
|
-
|
|
377
|
-
- MAY use UI, action, network, and log signals
|
|
378
|
-
- MUST be deterministic
|
|
379
|
-
- MUST NOT replace `expect_*` tools
|
|
380
|
-
- MUST be treated as a supplementary signal only
|
|
381
|
-
- SHOULD be used with `get_network_activity` only when the outcome is still ambiguous after routing by `action_type`
|
|
382
|
-
|
|
383
|
-
It is not a verification mechanism.
|
|
384
|
-
|
|
385
|
-
## 11. Execution Patterns
|
|
386
|
-
|
|
387
|
-
Canonical pattern:
|
|
388
|
-
|
|
389
|
-
`wait_for_ui -> tap_element -> wait_for_screen_change (optional) -> expect_screen`
|
|
390
|
-
|
|
391
|
-
For in-place UI mutations, agents SHOULD prefer:
|
|
392
|
-
|
|
393
|
-
`wait_for_ui_change -> expect_element_visible / expect_state`
|
|
394
|
-
|
|
395
|
-
Interpretation:
|
|
396
|
-
|
|
397
|
-
- `tap_element.success` = executed
|
|
398
|
-
- `wait_for_screen_change.success` = UI changed
|
|
399
|
-
- `wait_for_ui_change.success` = in-place UI mutation observed and stable
|
|
400
|
-
- `expect_screen.success` = correct outcome verified
|
|
401
|
-
|
|
402
|
-
## 12. Known Deviations
|
|
403
|
-
|
|
404
|
-
Explicitly allowed:
|
|
405
|
-
|
|
406
|
-
- `install_app`, `terminate_app`, `reset_app_data` not using envelope
|
|
407
|
-
- `build_and_install` streaming NDJSON
|
|
408
|
-
- platform-specific tools
|
|
409
|
-
- partial failure coverage
|
|
410
|
-
- `scroll_to_element` outcome-based success (temporary exception)
|
|
411
|
-
- extended runtime fields in `list_devices`
|
|
412
|
-
|
|
413
|
-
## 13. Migration Rules
|
|
414
|
-
|
|
415
|
-
Must change now:
|
|
416
|
-
|
|
417
|
-
- uncaught errors must be JSON-wrapped
|
|
418
|
-
|
|
419
|
-
Should align when touched:
|
|
420
|
-
|
|
421
|
-
- `tap`, `swipe`, `type_text`, `press_back`
|
|
422
|
-
- `start_app`, `restart_app`
|
|
423
|
-
- `scroll_to_element`
|
|
424
|
-
- `wait_for_ui`
|
|
425
|
-
- `capture_debug_snapshot`
|
|
426
|
-
|
|
427
|
-
No change required:
|
|
428
|
-
|
|
429
|
-
- `tap_element`
|
|
430
|
-
- `expect_screen`
|
|
431
|
-
- `expect_element_visible`
|
|
432
|
-
- `wait_for_screen_change`
|
|
433
|
-
|
|
434
|
-
## 14. Guiding Principles
|
|
435
|
-
|
|
436
|
-
- Actions execute
|
|
437
|
-
- Verification proves
|
|
438
|
-
- Waiting synchronizes
|
|
439
|
-
- Classification assists
|
|
440
|
-
|
|
441
|
-
## Final Definition
|
|
442
|
-
|
|
443
|
-
Action success equals execution success.
|
|
444
|
-
Outcome success equals verification success.
|
|
445
|
-
|
|
446
|
-
Verification tools are authoritative when the expected outcome is defined.
|