mobile-debug-mcp 0.36.0 → 0.37.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.
Files changed (171) hide show
  1. package/README.md +10 -0
  2. package/agent-plugin/.antigravity-plugin/plugin.json +1 -1
  3. package/agent-plugin/.claude-plugin/plugin.json +2 -2
  4. package/agent-plugin/.codex-plugin/plugin.json +1 -1
  5. package/agent-plugin/.cursor-plugin/plugin.json +2 -2
  6. package/agent-plugin/.mcp.json +1 -1
  7. package/agent-plugin/cursor/.cursor-plugin/plugin.json +2 -2
  8. package/agent-plugin/cursor/skills/mobile-debug-mcp/SKILL.md +10 -2
  9. package/agent-plugin/mcp.json +1 -1
  10. package/agent-plugin/mcp_config.json +1 -1
  11. package/agent-plugin/plugin.json +1 -1
  12. package/agent-plugin/skills/mobile-debug-mcp/SKILL.md +10 -2
  13. package/dist/contracts/device-readiness.js +1 -0
  14. package/dist/interact/waits/ui-change-wait.js +9 -2
  15. package/dist/interact/waits/ui-wait.js +7 -3
  16. package/dist/manage/index.js +3 -0
  17. package/dist/observe/device-readiness.js +116 -0
  18. package/dist/observe/evidence.js +31 -0
  19. package/dist/observe/ios-trace/sessions.js +5 -3
  20. package/dist/observe/readiness-service.js +21 -9
  21. package/dist/observe/readiness.js +30 -0
  22. package/dist/observe/screenshot-encoding.js +4 -0
  23. package/dist/observe/snapshot-collection.js +7 -2
  24. package/dist/server/definitions/manage.js +3 -2
  25. package/dist/server/handlers/action-execution.js +23 -14
  26. package/dist/server/handlers/compact-interaction.js +106 -0
  27. package/dist/server/handlers/compact-state.js +47 -0
  28. package/dist/server/handlers/input.js +2 -0
  29. package/dist/server/handlers/interact.js +2 -0
  30. package/dist/server/handlers/interaction-diagnostics.js +62 -0
  31. package/dist/server/handlers/journey.js +18 -20
  32. package/dist/server/handlers/observe.js +2 -1
  33. package/dist/server/handlers/tool-handlers.js +9 -5
  34. package/dist/server/schemas/interaction-diagnostics.js +9 -0
  35. package/dist/server/tool-definitions.js +9 -4
  36. package/dist/server-core.js +5 -2
  37. package/dist/server.js +1 -1
  38. package/dist/system/android.js +19 -15
  39. package/dist/system/index.js +2 -1
  40. package/dist/utils/android/utils.js +7 -16
  41. package/dist/utils/app-installation.js +77 -0
  42. package/dist/utils/benchmark-metrics.js +43 -0
  43. package/dist/utils/exec.js +4 -0
  44. package/dist/utils/ios/utils.js +4 -11
  45. package/dist/utils/resolve-device.js +3 -2
  46. package/dist/utils/timing.js +3 -3
  47. package/docs/CHANGELOG.md +25 -0
  48. package/docs/benchmarks/README.md +1 -0
  49. package/docs/benchmarks/end-to-end-latency/README.md +98 -0
  50. package/docs/benchmarks/end-to-end-latency/android-snapshot-pair.json +6532 -0
  51. package/docs/benchmarks/end-to-end-latency/android-snapshot-pair.md +30 -0
  52. package/docs/benchmarks/end-to-end-latency/baseline-attempt-1.json +15901 -0
  53. package/docs/benchmarks/end-to-end-latency/baseline-attempt-1.md +14 -0
  54. package/docs/benchmarks/end-to-end-latency/baseline.json +233843 -0
  55. package/docs/benchmarks/end-to-end-latency/baseline.md +21 -0
  56. package/docs/benchmarks/end-to-end-latency/investigation.md +128 -0
  57. package/docs/benchmarks/end-to-end-latency/ios-smoke.json +84 -0
  58. package/docs/benchmarks/end-to-end-latency/ios-smoke.md +9 -0
  59. package/docs/benchmarks/end-to-end-latency/smoke.json +19601 -0
  60. package/docs/benchmarks/end-to-end-latency/smoke.md +21 -0
  61. package/docs/specs/031-ios-system-traces/plan.md +28 -0
  62. package/docs/specs/033-device-readiness-blockers/android-evidence.json +437 -0
  63. package/docs/specs/033-device-readiness-blockers/android-physical-evidence.json +28 -0
  64. package/docs/specs/033-device-readiness-blockers/android-physical-power-evidence.json +29 -0
  65. package/docs/specs/033-device-readiness-blockers/intent.md +41 -0
  66. package/docs/specs/033-device-readiness-blockers/ios-investigation.md +55 -0
  67. package/docs/specs/033-device-readiness-blockers/ios-probe-evidence.json +24 -0
  68. package/docs/specs/033-device-readiness-blockers/ios-tool-evidence.json +73 -0
  69. package/docs/specs/033-device-readiness-blockers/plan.md +249 -0
  70. package/docs/specs/033-device-readiness-blockers/spec.md +134 -0
  71. package/docs/specs/034-app-installation-status/intent.md +41 -0
  72. package/docs/specs/034-app-installation-status/native-evidence.json +654 -0
  73. package/docs/specs/034-app-installation-status/plan.md +73 -0
  74. package/docs/specs/034-app-installation-status/spec.md +114 -0
  75. package/docs/specs/035-compact-interaction-results/baseline.md +45 -0
  76. package/docs/specs/035-compact-interaction-results/intent.md +38 -0
  77. package/docs/specs/035-compact-interaction-results/plan.md +43 -0
  78. package/docs/specs/035-compact-interaction-results/spec.md +118 -0
  79. package/docs/specs/035-compact-interaction-results/verification.md +111 -0
  80. package/docs/specs/036-end-to-end-interaction-latency/android-snapshot-amendment.md +60 -0
  81. package/docs/specs/036-end-to-end-interaction-latency/android-snapshot-plan.md +32 -0
  82. package/docs/specs/036-end-to-end-interaction-latency/intent.md +37 -0
  83. package/docs/specs/036-end-to-end-interaction-latency/plan.md +59 -0
  84. package/docs/specs/036-end-to-end-interaction-latency/spec.md +126 -0
  85. package/docs/specs/036-end-to-end-interaction-latency/verification.md +87 -0
  86. package/docs/tools/TOOLS.md +1 -0
  87. package/docs/tools/compact-interactions.md +56 -0
  88. package/docs/tools/correlated-evidence.md +6 -0
  89. package/docs/tools/interact.md +17 -8
  90. package/docs/tools/manage.md +10 -2
  91. package/docs/tools/observe.md +42 -2
  92. package/docs/tools/system.md +6 -0
  93. package/package.json +1 -1
  94. package/src/contracts/device-readiness.ts +8 -0
  95. package/src/interact/waits/ui-change-wait.ts +7 -2
  96. package/src/interact/waits/ui-wait.ts +6 -3
  97. package/src/manage/index.ts +2 -0
  98. package/src/observe/device-readiness.ts +96 -0
  99. package/src/observe/evidence.ts +30 -1
  100. package/src/observe/ios-trace/sessions.ts +4 -2
  101. package/src/observe/readiness-service.ts +21 -9
  102. package/src/observe/readiness.ts +33 -0
  103. package/src/observe/screenshot-encoding.ts +4 -0
  104. package/src/observe/snapshot-collection.ts +7 -2
  105. package/src/server/common.ts +2 -2
  106. package/src/server/definitions/manage.ts +3 -2
  107. package/src/server/handlers/action-execution.ts +22 -14
  108. package/src/server/handlers/compact-interaction.ts +91 -0
  109. package/src/server/handlers/compact-state.ts +43 -0
  110. package/src/server/handlers/input.ts +2 -0
  111. package/src/server/handlers/interact.ts +2 -0
  112. package/src/server/handlers/interaction-diagnostics.ts +50 -0
  113. package/src/server/handlers/journey.ts +15 -17
  114. package/src/server/handlers/observe.ts +2 -1
  115. package/src/server/handlers/payload.ts +2 -1
  116. package/src/server/handlers/tool-handlers.ts +9 -5
  117. package/src/server/schemas/interaction-diagnostics.ts +10 -0
  118. package/src/server/tool-definitions.ts +8 -4
  119. package/src/server-core.ts +5 -2
  120. package/src/server.ts +1 -1
  121. package/src/system/android.ts +18 -11
  122. package/src/system/index.ts +2 -1
  123. package/src/types.ts +2 -0
  124. package/src/utils/android/utils.ts +8 -10
  125. package/src/utils/app-installation.ts +73 -0
  126. package/src/utils/benchmark-metrics.ts +42 -0
  127. package/src/utils/exec.ts +5 -0
  128. package/src/utils/ios/utils.ts +4 -10
  129. package/src/utils/resolve-device.ts +4 -2
  130. package/src/utils/timing.ts +3 -2
  131. package/test/device/automated/debugger/runtime.android.test.ts +5 -0
  132. package/test/device/automated/debugger/runtime.ios.test.ts +7 -1
  133. package/test/device/automated/interact/compact-results.smoke.ts +58 -0
  134. package/test/device/automated/latency/end-to-end-environment.ts +61 -0
  135. package/test/device/automated/latency/end-to-end-report.ts +90 -0
  136. package/test/device/automated/latency/end-to-end-session.ts +98 -0
  137. package/test/device/automated/latency/end-to-end.ts +149 -0
  138. package/test/device/automated/latency/owned-transport.ts +81 -0
  139. package/test/device/automated/latency/snapshot-pair.ts +143 -0
  140. package/test/device/automated/latency-ios/benchmark.ts +126 -0
  141. package/test/device/automated/observe/correlated-evidence.smoke.ts +7 -5
  142. package/test/device/automated/observe/device-readiness-cleanup.ts +14 -0
  143. package/test/device/automated/observe/device-readiness.android.smoke.ts +78 -0
  144. package/test/device/automated/observe/ios-system-trace.smoke.ts +2 -2
  145. package/test/device/automated/observe/system-trace.smoke.ts +2 -2
  146. package/test/fixtures/contracts/tool-definitions.json +51 -15
  147. package/test/fixtures/latency-journey-app/build.ts +3 -3
  148. package/test/unit/debugger/handle-guards.test.ts +2 -1
  149. package/test/unit/interact/ui-change-readiness-interruption.test.ts +37 -0
  150. package/test/unit/observe/capture_debug_snapshot.test.ts +66 -12
  151. package/test/unit/observe/device-readiness-cleanup.test.ts +24 -0
  152. package/test/unit/observe/device-readiness.test.ts +97 -0
  153. package/test/unit/observe/ios-trace-sessions.test.ts +23 -0
  154. package/test/unit/observe/readiness-retained-blockers.test.ts +40 -0
  155. package/test/unit/server/compact-interaction.test.ts +87 -0
  156. package/test/unit/server/compact-journey-evidence.test.ts +40 -0
  157. package/test/unit/server/compact-review-regressions.test.ts +78 -0
  158. package/test/unit/server/conditional_actions.test.ts +7 -3
  159. package/test/unit/server/correlated-evidence.test.ts +18 -6
  160. package/test/unit/server/end-to-end-report.test.ts +46 -0
  161. package/test/unit/server/input-device-readiness.test.ts +55 -0
  162. package/test/unit/server/interaction-diagnostics.test.ts +45 -0
  163. package/test/unit/server/owned-benchmark-transport.test.ts +32 -0
  164. package/test/unit/server/readiness-retained-deadline.test.ts +32 -0
  165. package/test/unit/server/readiness.test.ts +24 -1
  166. package/test/unit/server/run_journey.test.ts +2 -1
  167. package/test/unit/server/selector_tap_target.test.ts +2 -1
  168. package/test/unit/server/system-trace.test.ts +6 -4
  169. package/test/unit/utils/app-installation.test.ts +78 -0
  170. package/test/unit/utils/benchmark-metrics.test.ts +36 -0
  171. package/test/unit/utils/resolve_device.test.ts +11 -0
@@ -0,0 +1,21 @@
1
+ # End-to-end latency baseline
2
+
3
+ Status: stopped. Build: 3e70e4207b228d002450f4d99f2ad2511d9df0b33c936aec4eeaf271603c34c6.
4
+
5
+ | Case | Successful/measured | p50 ms | p95 ms | Failures | Warm-up failures |
6
+ | --- | ---: | ---: | ---: | ---: | ---: |
7
+ | standalone | 9/10 | 128948.9 | 134774.9 | 1 | 0 |
8
+ | full-debug | 9/10 | 76711.6 | 82366.9 | 1 | 0 |
9
+ | full-compact | 9/9 | 74612.0 | 172254.9 | 0 | 1 |
10
+ | light-debug | 9/9 | 58121.4 | 59386.7 | 0 | 1 |
11
+ | light-compact | 9/9 | 45517.9 | 46738.0 | 0 | 1 |
12
+ | screenshot-on | 9/9 | 552.2 | 993.9 | 0 | 0 |
13
+ | screenshot-off | 9/9 | 598.4 | 944.2 | 0 | 0 |
14
+ | tree-on | 9/9 | 2647.6 | 3044.8 | 0 | 0 |
15
+ | tree-off | 9/9 | 2629.9 | 3869.1 | 0 | 0 |
16
+ | snapshot-on | 9/9 | 4185.3 | 4538.8 | 0 | 0 |
17
+ | snapshot-off | 9/9 | 4067.6 | 4594.6 | 0 | 0 |
18
+
19
+ See baseline.json for exact source/build hashes, environment, phase durations, attempt order, inclusive components and failure records. Percentiles use the successful measured count shown for each case. With 1–19 successful samples, nearest-rank p95 is the sample maximum. Zero successful samples yield no percentiles. Failed attempts are excluded from percentiles, retained in raw data, and fail the run.
20
+
21
+ Intervals can overlap; component sums are not an additive latency budget. Client-minus-handler includes scheduling, transport and uninstrumented work. Handler residual excludes the union of recorded spans. Tree acquisition/parse/retry events are separate nested diagnostics. Application work inside requests remains included. Startup, fixture builds/resets and external validation are excluded from steady-state round trips. SDK wire serialization is not isolated.
@@ -0,0 +1,128 @@
1
+ # Investigation findings — ticket #100
2
+
3
+ The follow-up [paired snapshot comparison](android-snapshot-pair.md) measures
4
+ the implemented Android tree reuse on a separate, complete focused run.
5
+ The sections below describe the original broad investigation.
6
+
7
+ ## Status and evidence boundary
8
+
9
+ The measurement harness is implemented; Android performance acceptance remains
10
+ **partial / failed**, not a completed ten-attempt baseline. The final Android
11
+ run stopped when the owned emulator became unresponsive and exited with code
12
+ 139. Its log recorded graphics-buffer errors and QEMU main/CPU-thread hangs.
13
+ The cause of the emulator exit has not been established. No runtime optimization
14
+ or speedup claim is made.
15
+
16
+ The run completed nine successful measured attempts per case. The tenth
17
+ standalone attempt timed out; the following full/debug attempt failed during
18
+ reset, leaving nine attempts unrun. Three earlier warm-up journey failures are
19
+ also retained. Both owned MCP server groups exited; fixture force-stop could not
20
+ be confirmed after the emulator disappeared. There is no running owned Android
21
+ emulator left to clean up. Source/build/harness hashes were unchanged during the
22
+ run. See [raw baseline](baseline.json), [generated summary](baseline.md), and
23
+ [failed first warm-up run](baseline-attempt-1.json).
24
+
25
+ The first run also lost its emulator and produced no measured samples. It is
26
+ kept separately. The second run cold-booted the same Pixel_9_Pro AVD with
27
+ `-port 5554 -no-window -no-snapshot-save`; display 720x1600 and density 240 were
28
+ already configured and were not changed by the harness. Android 16/API 36,
29
+ emulator/adb/Java/Node versions and all identity hashes are in the raw report.
30
+ The original development smoke is separate and is not performance evidence.
31
+
32
+ ## Provisional Android round trips
33
+
34
+ Times are milliseconds. Standalone flow time is the sum of 19 complete SDK
35
+ request/response intervals; client orchestration and metric-drain gaps are
36
+ outside that sum. A journey is one complete SDK call. Failed attempts are omitted
37
+ from percentiles and retained in the attempt/failure records. With nine successful
38
+ samples, nearest-rank p95 is the largest successful observation; it is a
39
+ preliminary tail estimate. The missing tenth samples must not be silently filled.
40
+
41
+ | Case | Successful/measured attempts | p50 ms | p95 ms | Measured failures | Warm-up failures |
42
+ | --- | ---: | ---: | ---: | ---: | ---: |
43
+ | standalone | 9/10 | 128948.9 | 134774.9 | 1 | 0 |
44
+ | full-debug | 9/10 | 76711.6 | 82366.9 | 1 | 0 |
45
+ | full-compact | 9/9 | 74612.0 | 172254.9 | 0 | 1 |
46
+ | light-debug | 9/9 | 58121.4 | 59386.7 | 0 | 1 |
47
+ | light-compact | 9/9 | 45517.9 | 46738.0 | 0 | 1 |
48
+ | screenshot-on | 9/9 | 552.2 | 993.9 | 0 | 0 |
49
+ | screenshot-off | 9/9 | 598.4 | 944.2 | 0 | 0 |
50
+ | tree-on | 9/9 | 2647.6 | 3044.8 | 0 | 0 |
51
+ | tree-off | 9/9 | 2629.9 | 3869.1 | 0 | 0 |
52
+ | snapshot-on | 9/9 | 4185.3 | 4538.8 | 0 | 0 |
53
+ | snapshot-off | 9/9 | 4067.6 | 4594.6 | 0 | 0 |
54
+
55
+ ## Measured costs and negative findings
56
+
57
+ - Successful standalone/full-debug/full-compact/light-debug/light-compact flows
58
+ use 44/32/32/25/19 physical tree reads respectively. Physical acquisition is
59
+ around two seconds per successful read; XML parsing is below a millisecond.
60
+ Metadata and display queries are separate recorded costs. These statements
61
+ describe this emulator and workload, not all devices or applications.
62
+ - Full compact output is much smaller than debug output while physical-read
63
+ counts are equal. Client-minus-handler time is only milliseconds in these
64
+ successful samples; it includes transport, scheduling and uninstrumented work.
65
+ Together with the recorded construction spans, this does not justify treating
66
+ serialization or transport as the primary bottleneck.
67
+ - Light/compact already shares a tap's post-observation with the following
68
+ assertion. Its six fewer reads than light/debug are existing behavior, not an
69
+ optimization implemented by this ticket. Every comparison retains all six
70
+ destination assertions.
71
+ - Screenshot-free/log-free snapshots execute two tree acquisitions. In the nine
72
+ successful measured snapshot calls, 36 physical reads include 18 failed reads
73
+ followed by recovery. A successful tool outcome therefore does not imply every
74
+ underlying acquisition attempt succeeded. All timing/retry events are retained.
75
+ [Snapshot collection](../../../src/observe/snapshot-collection.ts) starts
76
+ fingerprint and tree work concurrently, and the
77
+ [Android fingerprint path](../../../src/observe/android/fingerprint.ts) obtains
78
+ its own tree. This supports a focused future investigation of one declared
79
+ observation transaction shared by those consumers. It does not establish the
80
+ gain or correctness of an unimplemented candidate.
81
+ - Instrumented/uninstrumented observation pairs quantify combined probe and
82
+ device/order variability. Signed paired differences are in the JSON. They are
83
+ not an isolated causal overhead estimate, and may be negative.
84
+
85
+ Inclusive component spans overlap; never sum them into an additive budget.
86
+ Handler residual subtracts their interval union, but assertion/verification spans
87
+ include their nested acquisition work. Component summaries total recorded spans
88
+ per request; zero means no span of that stage was recorded, not proof that all
89
+ possible work in that category cost zero. SDK wire serialization is not separately
90
+ profiled. Device-side application work remains inside request durations.
91
+
92
+ Fixture build/install, reset/readiness preparation and server connection are
93
+ separate phases. The fixture uses offline SDK tools rather than Gradle. External
94
+ unit/device-suite execution is outside MCP request percentiles; its total duration
95
+ was not separately benchmarked. Early warm-ups overlapped local unit validation;
96
+ measured attempts began after that validation completed.
97
+
98
+ ## Reliability and next steps
99
+
100
+ Warm-up failures were light/debug assertion `assert-3` (`ASSERTION_TIMEOUT`),
101
+ full/compact `tap-2` (`ELEMENT_NOT_FOUND`), and light/compact `tap-2`
102
+ (`ACTION_TIMEOUT`). Metrics alone do not establish their root cause. Graphics
103
+ errors were observed, but causality is unproven. They must not be labelled
104
+ pre-existing code failures or instrumentation regressions without a controlled
105
+ reproduction.
106
+
107
+ Obtain a stable emulator and rerun the unchanged protocol to finish the required
108
+ sample count before accepting an optimization comparison. Investigate the
109
+ snapshot acquisition/retry bottleneck in an accepted specification amendment;
110
+ retain freshness, device scope, stabilization, deadlines and cleanup. Do not
111
+ introduce cross-request caching or reduce assertions. No candidate comparison has
112
+ run, so there is no evidence of an optimization gain.
113
+
114
+ ## iOS
115
+
116
+ Standalone observation measurement was blocked on an isolated iPhone 17 Pro
117
+ running iOS 27.2 (24B8117). The local server's Settings readiness assertion
118
+ timed out after about 32.6 seconds and produced zero measured samples. A
119
+ subsequent screenshot showed a blank Settings content area. The accessibility
120
+ call reported its idb prerequisite unavailable, and `idb list-targets --json`
121
+ failed even though the repository resolver found fb-idb 1.1.7 through its
122
+ fallback. The direct companion listing later succeeded, so the cause of the
123
+ CLI capability failure remains unresolved. Both owned MCP servers exited and
124
+ the temporary simulator was removed. See the [smoke record](ios-smoke.json)
125
+ and [verification evidence](../../specs/036-end-to-end-interaction-latency/verification.md).
126
+
127
+ The shared static/network fixture belongs to #89. Equivalent iOS journeys
128
+ remain blocked pending that fixture and a working observation path.
@@ -0,0 +1,84 @@
1
+ {
2
+ "status": "stopped",
3
+ "outcome": "fail",
4
+ "started_at": "2026-11-06T22:10:40.973Z",
5
+ "performance_evidence": false,
6
+ "smoke": true,
7
+ "warmups": 0,
8
+ "measured_attempts_per_case": 1,
9
+ "source_and_build_unchanged": true,
10
+ "identity": {
11
+ "source": "23f6dba770c958b983ed18c93033c5c5ccd6b48c1437f43128f3cffab49cbc54",
12
+ "build": "3e70e4207b228d002450f4d99f2ad2511d9df0b33c936aec4eeaf271603c34c6",
13
+ "shared_harness": "50eb0a3d4130ef669edcc7206e553daebd618158429f2ce44440f05ec411eb08",
14
+ "ios_harness": "9d11071ef7ddf444c25b5c50745ead5d522b552c4fe186b844521604554a334f"
15
+ },
16
+ "metadata": {
17
+ "platform": "ios",
18
+ "model": "Ticket 100 Latency Verification",
19
+ "runtime": "com.apple.CoreSimulator.SimRuntime.iOS-27-2",
20
+ "os": "27.2",
21
+ "runtime_build": "24B8117",
22
+ "screen": "Settings root; English required; caller-provided isolated simulator",
23
+ "node": "v23.11.0",
24
+ "host": {
25
+ "platform": "darwin",
26
+ "release": "27.2.0",
27
+ "arch": "arm64"
28
+ },
29
+ "package_version": "0.36.0",
30
+ "commit": "d3ec701d05b4034acc7eaedc92b7e8903d33ca3b",
31
+ "working_tree": "M docs/CHANGELOG.md\n M docs/benchmarks/README.md\n M src/interact/waits/ui-wait.ts\n M src/observe/device-readiness.ts\n M src/observe/screenshot-encoding.ts\n M src/server-core.ts\n M src/server/handlers/journey.ts\n M src/server/handlers/observe.ts\n M src/utils/exec.ts\n M src/utils/timing.ts\n M test/fixtures/latency-journey-app/build.ts\n?? docs/benchmarks/end-to-end-latency/README.md\n?? docs/benchmarks/end-to-end-latency/baseline-attempt-1.json\n?? docs/benchmarks/end-to-end-latency/baseline-attempt-1.md\n?? docs/benchmarks/end-to-end-latency/baseline.json\n?? docs/benchmarks/end-to-end-latency/baseline.md\n?? docs/benchmarks/end-to-end-latency/smoke.json\n?? docs/benchmarks/end-to-end-latency/smoke.md\n?? docs/specs/036-end-to-end-interaction-latency/intent.md\n?? docs/specs/036-end-to-end-interaction-latency/plan.md\n?? docs/specs/036-end-to-end-interaction-latency/spec.md\n?? docs/specs/036-end-to-end-interaction-latency/verification.md\n?? src/utils/benchmark-metrics.ts\n?? test/device/automated/latency-ios/benchmark.ts\n?? test/device/automated/latency/end-to-end-environment.ts\n?? test/device/automated/latency/end-to-end-report.ts\n?? test/device/automated/latency/end-to-end-session.ts\n?? test/device/automated/latency/end-to-end.ts\n?? test/device/automated/latency/owned-transport.ts\n?? test/unit/server/end-to-end-report.test.ts\n?? test/unit/server/owned-benchmark-transport.test.ts\n?? test/unit/utils/benchmark-metrics.test.ts",
32
+ "tool_versions": {
33
+ "xcode": "Xcode 27.2\nBuild version 27B52",
34
+ "idb": "1.1.7"
35
+ },
36
+ "timeouts": {
37
+ "setup_ms": 30000,
38
+ "call_ms": 300000,
39
+ "readiness_ms": 30000
40
+ },
41
+ "journey": "blocked: shared #89 static/network fixture unavailable",
42
+ "physical_ios": "excluded"
43
+ },
44
+ "phases": [
45
+ {
46
+ "phase": "launch_settings",
47
+ "elapsed_ms": 11292.166041,
48
+ "success": true
49
+ },
50
+ {
51
+ "phase": "server_startup_metrics_true",
52
+ "elapsed_ms": 3046.3670420000017,
53
+ "success": true
54
+ },
55
+ {
56
+ "phase": "stable_screen_assertion_metrics_true",
57
+ "elapsed_ms": 32576.230541999998,
58
+ "success": false
59
+ }
60
+ ],
61
+ "fatal": "PREREQUISITE_FAILED",
62
+ "cleanup": {
63
+ "servers": true,
64
+ "settings": true
65
+ },
66
+ "unrun_attempts": 6,
67
+ "invocation": "IOS_LATENCY_DEVICE_ID=[simulator] npx tsx test/device/automated/latency-ios/benchmark.ts --smoke",
68
+ "summaries": {},
69
+ "observation_overhead": {
70
+ "screenshot": {
71
+ "paired_on_minus_off_ms": null,
72
+ "interpretation": "Includes device/order variability; not an isolated causal overhead estimate"
73
+ },
74
+ "tree": {
75
+ "paired_on_minus_off_ms": null,
76
+ "interpretation": "Includes device/order variability; not an isolated causal overhead estimate"
77
+ },
78
+ "snapshot": {
79
+ "paired_on_minus_off_ms": null,
80
+ "interpretation": "Includes device/order variability; not an isolated causal overhead estimate"
81
+ }
82
+ },
83
+ "attempts": []
84
+ }
@@ -0,0 +1,9 @@
1
+ # iOS standalone observation smoke (not performance evidence)
2
+
3
+ Status: stopped; outcome: fail. Intended screen: Settings root on an isolated simulator. No fixture journey or physical iOS claim.
4
+
5
+ | Case | Successful/measured | p50 ms | p95 ms | Failures | Warm-up failures |
6
+ | --- | ---: | ---: | ---: | ---: | ---: |
7
+
8
+
9
+ See ios-smoke.json for environment/build identity, all attempts, phase timings and inclusive timing diagnostics. Readiness failed before sampling, so no percentiles were calculated. Failed attempts stay visible and fail the run. Probe comparisons include device variability; nested intervals cannot be summed. Application work remains in round trips. The shared #89 fixture remains required for equivalent static/network journeys.