zeno-mobile-runner 0.1.3 → 0.2.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 (115) hide show
  1. package/CHANGELOG.md +192 -2
  2. package/FEATURES.md +50 -7
  3. package/README.md +168 -120
  4. package/build.zig.zon +3 -3
  5. package/clients/README.md +60 -3
  6. package/clients/go/README.md +12 -0
  7. package/clients/go/zmr/client.go +142 -0
  8. package/clients/kotlin/README.md +18 -1
  9. package/clients/kotlin/build.gradle.kts +1 -1
  10. package/clients/kotlin/src/main/kotlin/dev/zmr/ZmrClient.kt +76 -1
  11. package/clients/python/README.md +19 -0
  12. package/clients/python/pyproject.toml +1 -1
  13. package/clients/python/zmr_client.py +33 -0
  14. package/clients/rust/Cargo.lock +1 -1
  15. package/clients/rust/Cargo.toml +1 -1
  16. package/clients/rust/README.md +25 -1
  17. package/clients/rust/src/lib.rs +201 -0
  18. package/clients/swift/README.md +18 -0
  19. package/clients/swift/Sources/ZMRClient/ZMRClient.swift +82 -0
  20. package/clients/typescript/README.md +16 -0
  21. package/clients/typescript/index.d.ts +12 -0
  22. package/clients/typescript/index.mjs +16 -0
  23. package/clients/typescript/package.json +1 -1
  24. package/docs/agent-discovery.md +151 -22
  25. package/docs/ai-agents.md +99 -11
  26. package/docs/benchmarking.md +49 -3
  27. package/docs/benchmarks/2026-06-09-android-workflow.md +73 -0
  28. package/docs/benchmarks/2026-06-09-android-workflow.results.jsonl +20 -0
  29. package/docs/benchmarks/2026-06-09-framework-baseline-status.md +32 -0
  30. package/docs/benchmarks/2026-06-09-ios-appium-comparison.md +115 -0
  31. package/docs/benchmarks/2026-06-09-ios-appium-comparison.results.jsonl +40 -0
  32. package/docs/benchmarks/2026-06-09-ios-demo.md +90 -0
  33. package/docs/benchmarks/2026-06-09-ios-demo.results.jsonl +20 -0
  34. package/docs/benchmarks/2026-06-09-ios-maestro-comparison.md +128 -0
  35. package/docs/benchmarks/2026-06-09-ios-maestro-comparison.results.jsonl +40 -0
  36. package/docs/benchmarks/2026-06-09-ios-workflow-comparison.md +143 -0
  37. package/docs/benchmarks/2026-06-09-ios-workflow-comparison.results.jsonl +40 -0
  38. package/docs/benchmarks/2026-06-09-ios-xctest-floor.md +106 -0
  39. package/docs/benchmarks/2026-06-09-ios-xctest-floor.results.jsonl +40 -0
  40. package/docs/benchmarks/README.md +36 -0
  41. package/docs/benchmarks/benchmark-lab-v1.json +155 -0
  42. package/docs/benchmarks/benchmark-lab-v1.md +95 -0
  43. package/docs/clients.md +26 -6
  44. package/docs/demo.md +40 -1
  45. package/docs/expo-smoke.md +8 -8
  46. package/docs/frameworks.md +10 -0
  47. package/docs/install.md +3 -2
  48. package/docs/npm.md +100 -4
  49. package/docs/production-readiness.md +123 -0
  50. package/docs/protocol-fixtures/core-session.responses.jsonl +1 -1
  51. package/docs/protocol.md +215 -16
  52. package/docs/scenario-authoring.md +18 -0
  53. package/docs/trace-privacy.md +9 -0
  54. package/docs/troubleshooting.md +7 -1
  55. package/examples/android-workflow.json +79 -0
  56. package/examples/ios-shim-workflow.json +79 -0
  57. package/examples/react-native-expo-workflow.json +75 -0
  58. package/npm/agents.mjs +16 -0
  59. package/npm/commands.mjs +9 -5
  60. package/package.json +6 -1
  61. package/prebuilds/darwin-arm64/zmr +0 -0
  62. package/prebuilds/darwin-x64/zmr +0 -0
  63. package/prebuilds/linux-arm64/zmr +0 -0
  64. package/prebuilds/linux-x64/zmr +0 -0
  65. package/schemas/README.md +4 -0
  66. package/schemas/discover-output.schema.json +83 -0
  67. package/schemas/draft-output.schema.json +58 -0
  68. package/schemas/explore-output.schema.json +94 -0
  69. package/schemas/inspect-output.schema.json +88 -0
  70. package/schemas/run-output.schema.json +2 -0
  71. package/scripts/benchmark-lab.py +253 -0
  72. package/scripts/create-android-demo-app.sh +324 -29
  73. package/scripts/create-ios-demo-app.sh +174 -7
  74. package/scripts/create-react-native-expo-demo-app.sh +727 -0
  75. package/scripts/demo.sh +3 -0
  76. package/scripts/install-ios-shim.sh +2 -2
  77. package/scripts/release-readiness.py +43 -0
  78. package/scripts/run-android-pilot.sh +35 -9
  79. package/scripts/run-ios-pilot.sh +11 -4
  80. package/shims/ios/ZMRShim.swift +10 -0
  81. package/shims/ios/ZMRShimUITestCase.swift +42 -0
  82. package/shims/ios/protocol.md +1 -0
  83. package/skills/zmr-mobile-testing/SKILL.md +28 -3
  84. package/src/cli_discover.zig +239 -0
  85. package/src/cli_draft.zig +924 -0
  86. package/src/cli_explore.zig +136 -0
  87. package/src/cli_import.zig +31 -15
  88. package/src/cli_inspect.zig +310 -0
  89. package/src/cli_output.zig +26 -2
  90. package/src/cli_run.zig +28 -0
  91. package/src/cli_trace.zig +45 -15
  92. package/src/cli_validate.zig +12 -6
  93. package/src/errors.zig +9 -0
  94. package/src/ios.zig +49 -12
  95. package/src/ios_shim.zig +36 -2
  96. package/src/json_rpc_methods.zig +85 -11
  97. package/src/json_rpc_params.zig +8 -0
  98. package/src/json_rpc_protocol.zig +1 -1
  99. package/src/json_rpc_trace.zig +112 -0
  100. package/src/main.zig +27 -2
  101. package/src/mcp.zig +209 -6
  102. package/src/mcp_protocol.zig +29 -1
  103. package/src/mcp_trace.zig +126 -4
  104. package/src/report.zig +186 -0
  105. package/src/runner.zig +26 -4
  106. package/src/runner_actions.zig +10 -0
  107. package/src/runner_diagnostics.zig +31 -1
  108. package/src/runner_events.zig +70 -7
  109. package/src/runner_native.zig +17 -1
  110. package/src/runner_waits.zig +82 -19
  111. package/src/scaffold.zig +28 -12
  112. package/src/scenario.zig +32 -4
  113. package/src/schema_registry.zig +4 -0
  114. package/src/version.zig +1 -1
  115. package/viewer/app.js +23 -3
package/CHANGELOG.md CHANGED
@@ -4,6 +4,196 @@ All notable changes to Zeno Mobile Runner are tracked here.
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## 0.2.0 (2026-06-10)
8
+
9
+ ### Added
10
+
11
+ - Added a public-safe iOS simulator benchmark evidence pack with 20 repeated
12
+ runs of the generated iOS smoke scenario.
13
+ - Added a public-safe iOS simulator baseline runner benchmark comparison on the
14
+ same generated demo app.
15
+ - Added a second public-safe iOS baseline comparison plus a native shim floor
16
+ evidence pack for the generated demo app.
17
+ - Added a richer public-safe iOS workflow benchmark pack covering profile
18
+ entry, catalog selection, save, review, and final-state assertion on the
19
+ generated demo app.
20
+ - Added the first Android workflow benchmark pack for the generated demo app,
21
+ covering 20 repeated UIAutomator-path ZMR runs.
22
+ - Added a generated React Native/Expo benchmark fixture with stable `testID`
23
+ values, accessibility labels, deep-link setup, and Android/iOS ZMR workflow
24
+ scenarios.
25
+ - The trace viewer loads a served bundle directly from
26
+ `viewer/index.html?bundle=<url>`, so CI artifact links and shared triage can
27
+ open a trace without manual file selection.
28
+ - The iOS XCTest shim cold-build timeout is tunable with the
29
+ `ZMR_IOS_SHIM_TIMEOUT_MS` environment variable for slower CI hardware.
30
+ - Added a nightly `device-smoke` GitHub Actions workflow that runs the public
31
+ demo apps on a real Android emulator and iOS simulator and uploads traces,
32
+ reports, and redacted bundles as evidence artifacts.
33
+ - Added real captured screenshots under `docs/assets/` (trace viewer, device
34
+ screens, CLI failure-diagnosis loop, HTML report) plus
35
+ `scripts/capture-screenshots.sh` to regenerate them from fresh demo runs.
36
+ The assets ship in the repository only, not in the npm package.
37
+ - Added Mermaid architecture, verification-loop, trace-lifecycle, and
38
+ trace-to-test diagrams to the README and core docs, and rewrote the README
39
+ around the AI-coding-agent verification workflow.
40
+
41
+ ### Fixed
42
+
43
+ - `zmr validate`, `zmr report`, `zmr export`, and `zmr import` now accept
44
+ flags before positional arguments, matching the documented command forms,
45
+ and unknown-flag errors print a help hint.
46
+ - Generated Android demo scenarios clear app state before launching so
47
+ repeated runs no longer fail on leftover screens from a previous session.
48
+
49
+ - Fixed generated iOS shim one-shot log file creation on macOS by using a
50
+ portable `mktemp` template with `XXXXXX` at the end.
51
+ - Skipped the slow iOS system-open confirmation probe for simulator custom URL
52
+ schemes while keeping it for universal web links.
53
+
54
+ ## 0.1.8 (2026-06-06)
55
+
56
+ ### Changed
57
+
58
+ - `zmr-release-readiness --target production` now enforces an
59
+ `agent workflow smoke` gate, satisfied by the local release gate or
60
+ structured MCP/JSON-RPC, trace, discovery, validation, and redacted-export
61
+ evidence.
62
+
63
+ ## 0.1.7 (2026-06-06)
64
+
65
+ ### Added
66
+
67
+ - Added MCP `assert_visible`, `assert_not_visible`, and `assert_healthy` tools
68
+ so MCP agents can use assertion-grade checks without dropping to JSON-RPC.
69
+ - Added MCP `erase_text`, `hide_keyboard`, `wait_not_visible`, `wait_any`, and
70
+ `scroll_until_visible` tools so agents can cover common mobile flow control
71
+ without dropping to JSON-RPC.
72
+ - Added MCP `install_app`, `launch_app`, `stop_app`, `clear_state`, and
73
+ `swipe` tools so MCP agents can run full app lifecycle and gesture flows.
74
+ - Added MCP `open_link`, unscoped `type`, and `press_back` trace events so
75
+ trace-backed discovery sees full simple action sessions from MCP agents.
76
+ - Added MCP `trace_events` cursor metadata so MCP agents get `afterSeq`,
77
+ `nextSeq`, and `latestSeq` parity with JSON-RPC trace polling.
78
+ - Added JSON-RPC `trace.explain` and MCP `trace_explain` so live agents can
79
+ get the same failure summary, diagnostics, and next commands as
80
+ `zmr explain --json` without leaving the session.
81
+ - Added TypeScript, Python, Go, Rust, Swift, and Kotlin trace explanation helpers
82
+ so reference clients can call JSON-RPC `trace.explain` directly.
83
+ - Added `zmr explore --from-trace <trace-dir> --out <scenario.json> --goal
84
+ <goal> --include-actions --validate --json` as a review-first CLI
85
+ exploration handoff for agents. It reuses trace-backed discovery, carries the
86
+ goal in JSON, and returns explicit guardrails instead of claiming autonomous
87
+ crawling.
88
+ - Added JSON-RPC `trace.explore` and MCP `trace_explore` so live agents can
89
+ generate the same goal-carrying, review-required scenario draft without
90
+ leaving the active traced session.
91
+ - Added TypeScript `exploreTrace()`, Python `explore_trace()`, Go
92
+ `ExploreTrace()`, Rust `explore_trace()`, Swift `exploreTrace()`, and Kotlin
93
+ `exploreTrace()` helpers for the new JSON-RPC exploration method.
94
+ - Added trace discovery auditing: `trace.discover` records a `trace.discover` event
95
+ for JSON-RPC and MCP agent sessions so generated scenario candidates are
96
+ visible in the trace.
97
+ - Added `zmr draft --from-trace <trace-dir> --out <scenario.json> --json` for
98
+ trace-backed, review-first scenario drafting. The command reads the latest
99
+ semantic snapshot artifact and writes a conservative surface-smoke scenario
100
+ with `launch`, `snapshot`, and stable `assertVisible` checks only.
101
+ - Added `zmr draft --include-actions` so agent sessions can turn supported
102
+ successful trace actions into reviewable replay drafts while unsupported
103
+ events are skipped with warnings instead of guessed.
104
+ - Added `zmr discover --from-trace <trace-dir> --out <scenario.json>
105
+ --include-actions --validate --json` as the first-class trace-to-test handoff
106
+ for agents. It reuses the review-first draft engine, can validate the
107
+ generated scenario before returning, and reports `mode: "discover"` for
108
+ tooling.
109
+ - Added JSON-RPC `trace.discover` and MCP `trace_discover` so live agents can
110
+ generate the same trace-backed scenario candidate without shelling out to the
111
+ CLI after a session.
112
+ - Added JSON-RPC `scenario.validate` and MCP `scenario_validate` so agents can
113
+ validate generated or edited scenario files in-band before running them.
114
+ - Added TypeScript `discoverTrace()` and Python `discover_trace()` helpers for
115
+ the new JSON-RPC discovery method.
116
+ - Added TypeScript `validateScenario()` and Python `validate_scenario()`
117
+ helpers for in-band scenario validation.
118
+ - Added Go `DiscoverTrace()` and `ValidateScenario()` helpers so Go agents can
119
+ use the same trace-to-test and validation loop without raw JSON-RPC calls.
120
+ - Added Rust `discover_trace()` and `validate_scenario()` helpers so Rust
121
+ agents and host-side harnesses can use the same trace-to-test and validation
122
+ loop without raw JSON-RPC calls.
123
+ - Added Swift `discoverTrace()` and `validateScenario()` helpers so macOS
124
+ host-side agents can use the same trace-to-test and validation loop without
125
+ raw JSON-RPC calls.
126
+ - Added Kotlin `discoverTrace()` and `validateScenario()` helpers plus an
127
+ always-run source parity test so Kotlin host-side agents keep the same
128
+ trace-to-test and validation entry points even on machines without Gradle.
129
+ - Added a trace-backed discovery handoff to traced `zmr run --json`
130
+ `nextCommands`, so agents can generate a reviewable replay scenario directly
131
+ from a run summary.
132
+ - Added `zmr run --discover-out <scenario.json> --json` so traced runs can
133
+ write and validate the reviewable replay scenario before returning the run
134
+ summary.
135
+ - Added replay coverage metadata to `zmr draft --json`, `zmr discover --json`,
136
+ and embedded run discovery output so agents can see how many trace actions
137
+ became replay steps and how many were skipped.
138
+ - Added coordinate-complete `ui.swipe` trace replay so JSON-RPC sessions and
139
+ traced `zmr run` flows can carry swipes into generated replay scenarios
140
+ without guessing missing coordinates.
141
+ - Added traced `pressBack` replay parity for `zmr run`, so generated replay
142
+ scenarios preserve back-navigation steps from ordinary scenario runs.
143
+ - Added direction and timeout preserving `scrollUntilVisible` trace replay so
144
+ generated scenarios keep the original scroll intent from traced runs and
145
+ live agent sessions.
146
+ - Added selector and timeout preserving wait replay so trace-backed discovery
147
+ keeps successful `waitVisible`, `waitNotVisible`, and matched `waitAny`
148
+ steps from ordinary scenario runs.
149
+ - Added timeout context to native selector wait trace events and timeout
150
+ diagnostics, so real-device shim traces carry the same timing evidence as
151
+ snapshot-backed waits.
152
+ - Added replay metadata for successful `assertNoneVisible` and timed
153
+ `assertHealthy` trace events, so generated replay scenarios preserve
154
+ assertion intent instead of dropping those checks.
155
+ - Added selector and timeout preserving `assertVisible` and `assertNotVisible`
156
+ replay so trace-backed discovery keeps assertion intent distinct from waits.
157
+ - Added `zmr report --junit <report.xml>` so trace directories and benchmark
158
+ result directories can produce CI-friendly JUnit XML alongside HTML reports.
159
+ - Updated generated app report and reliability scripts to write `junit.xml`
160
+ beside `report.html` by default.
161
+ - Updated Android and iOS pilot wrappers to emit `junit.xml` beside every
162
+ generated `report.html`.
163
+ - Updated CI and tagged release workflows to retain generated run evidence as
164
+ GitHub Actions artifacts: CI keeps traces, coverage output, and the built
165
+ `zmr` binary for 14 days, while releases keep the generated `dist/` bundle
166
+ for 30 days.
167
+ - Updated artifact upload workflow steps to a Node 24-compatible
168
+ `actions/upload-artifact` major so CI stays ahead of GitHub Actions runtime
169
+ deprecations.
170
+ - Added `schemas/draft-output.schema.json` and included it in `zmr schemas
171
+ --json`.
172
+ - Added `schemas/discover-output.schema.json` and included it in `zmr schemas
173
+ --json`.
174
+
175
+ ## 0.1.6 (2026-06-05)
176
+
177
+ ### Added
178
+
179
+ - Added `zmr inspect --json` as a read-only app and agent handoff command. It
180
+ reports app-local config status, `.zmr/AGENTS.md` presence, configured
181
+ Android/iOS smoke scenarios, safe next commands, and explicit claim limits
182
+ without launching devices or writing tests.
183
+ - Added `schemas/inspect-output.schema.json` and included it in `zmr schemas
184
+ --json` for generated clients and agent tooling.
185
+
186
+ ### Changed
187
+
188
+ - Tagged release workflow now uses npm trusted publishing instead of a
189
+ long-lived `NPM_TOKEN` secret.
190
+ - Fixed the tagged release publish step so npm receives the generated local
191
+ tarball instead of interpreting the path as a GitHub package spec.
192
+ - Updated the tagged release workflow to Node 24 so npm trusted publishing can
193
+ use the GitHub Actions OIDC identity with a current npm CLI.
194
+ - Added a public production-readiness checklist that ties release, framework,
195
+ reliability, trace privacy, and agent workflow claims to concrete evidence.
196
+
7
197
  ## 0.1.3 (2026-06-03)
8
198
 
9
199
  ### Fixed
@@ -329,8 +519,8 @@ All notable changes to Zeno Mobile Runner are tracked here.
329
519
  - Tagged release workflow now publishes GitHub artifact attestation for release
330
520
  archives and metadata.
331
521
  - Tagged release workflow now builds the npm tarball, attests it, uploads it
332
- with the release assets, and publishes with npm provenance when `NPM_TOKEN`
333
- is configured.
522
+ with the release assets, and can publish with npm provenance from supported
523
+ CI.
334
524
  - Release manifests and checksum verification now include generated npm
335
525
  tarballs when present.
336
526
  - Native selector wait timeouts now capture one final snapshot when possible,
package/FEATURES.md CHANGED
@@ -22,7 +22,8 @@ state, and writes deterministic traces. It does not embed an LLM.
22
22
 
23
23
  - npm-first installation with `zeno-mobile-runner` as a dev dependency.
24
24
  - `npx zmr-wizard` scaffolds `.zmr/config.json`, Android and iOS smoke
25
- scenarios, optional app package scripts, and `traces/` gitignore rules.
25
+ scenarios, optional app package scripts, HTML/JUnit report scripts, and
26
+ `traces/` gitignore rules.
26
27
  - `zmr init --app` provides the same app-local bootstrap for source and archive
27
28
  installs.
28
29
  - `.zmr/config.json` is schema validated, auto-discovered from app checkouts,
@@ -34,14 +35,44 @@ state, and writes deterministic traces. It does not embed an LLM.
34
35
 
35
36
  - JSON-RPC v1 over newline-delimited stdio or localhost TCP.
36
37
  - MCP stdio server with mobile-native tools for AI agents, including semantic
37
- snapshots, selector actions, waits, trace polling, and trace export.
38
+ snapshots, selector actions, waits, assertions, trace polling, trace
39
+ exploration, trace discovery, and trace export.
38
40
  - `runner.capabilities`, `device.list`, `session.create`,
39
41
  `observe.snapshot`, `observe.semanticSnapshot`, UI actions, waits,
40
- assertions, live trace events, and redacted trace export.
42
+ assertions, scenario validation, live trace events, trace-backed exploration,
43
+ trace-backed discovery, and redacted trace export.
41
44
  - TypeScript, Python, Go, Rust, Swift, and Kotlin reference clients.
42
45
  - Machine-readable CLI output for `zmr version --json`, `zmr schemas --json`,
43
- `zmr doctor --json`, `zmr devices --json`, `zmr validate --json`,
46
+ `zmr inspect --json`, `zmr doctor --json`, `zmr devices --json`,
47
+ `zmr discover --json`, `zmr draft --json`, `zmr validate --json`,
44
48
  `zmr run --json`, and `zmr explain --json`.
49
+ - Traced `zmr run --json` output includes executable follow-up commands for
50
+ reports, failure explanation, trace-backed scenario discovery, and redacted
51
+ export.
52
+ - `zmr run --discover-out <scenario.json> --json` can generate and validate a
53
+ reviewable replay scenario from the trace immediately after the run.
54
+ - `zmr explore --from-trace --goal ... --json` gives CLI agents a
55
+ goal-carrying, review-first exploration handoff with explicit guardrails,
56
+ replay coverage, validation, and deterministic next commands.
57
+ - JSON-RPC `trace.explore` and MCP `trace_explore` expose the same
58
+ goal-carrying, review-required trace exploration from active traced sessions.
59
+ - `zmr discover --from-trace` turns a traced agent session into a reviewable
60
+ scenario candidate and can validate the generated scenario before returning.
61
+ - `zmr draft --from-trace` turns a traced semantic snapshot into a reviewable
62
+ surface-smoke scenario with conservative `assertVisible` checks.
63
+ - `zmr draft --include-actions` can turn supported successful trace actions
64
+ into a replay draft while warning instead of guessing unsupported events.
65
+ Wait replay preserves selectors and timeouts when the trace records them.
66
+ Native selector wait traces include timeout context for successful waits and
67
+ timeout diagnostics.
68
+ Assertion replay preserves `assertVisible` and `assertNotVisible` selectors
69
+ and timeouts, `assertNoneVisible` selector arrays, and `assertHealthy`
70
+ timeouts when the trace records them.
71
+ Selector scroll replay preserves direction and timeout when the trace records
72
+ them.
73
+ - Draft and discover JSON include `replay` coverage metadata so agents can
74
+ compare trace action events considered for replay, generated replay steps,
75
+ and skipped events.
45
76
  - Public JSON Schemas for scenarios, snapshots, semantic snapshots, action
46
77
  results, trace events, protocol messages, setup diagnostics, and release
47
78
  manifests.
@@ -58,6 +89,8 @@ state, and writes deterministic traces. It does not embed an LLM.
58
89
  - Wait and retry behavior around transient observation failures.
59
90
  - Import helper for a documented subset of common mobile-flow YAML commands
60
91
  into native `.zmr/*.json` scenarios.
92
+ - Trace-backed draft helper for generating reviewable surface and replay
93
+ scenarios from observed UI state and successful supported trace actions.
61
94
 
62
95
  ## Traces And Diagnostics
63
96
 
@@ -68,6 +101,10 @@ state, and writes deterministic traces. It does not embed an LLM.
68
101
  selected node details, payloads, artifact links, and snapshot replay
69
102
  controls.
70
103
  - `zmr explain` summarizes failed traces for humans and agents.
104
+ - `zmr report --junit <report.xml>` writes CI-friendly JUnit XML for trace
105
+ directories and benchmark result directories.
106
+ - Android and iOS pilot wrappers emit `junit.xml` next to generated HTML
107
+ reports, so CI can collect the same artifacts used by app-local scripts.
71
108
  - Redacted `.zmrtrace` export can replace or omit screenshots, omit screen
72
109
  recordings, and redact common secrets plus app-configured denylist fields.
73
110
 
@@ -75,6 +112,8 @@ state, and writes deterministic traces. It does not embed an LLM.
75
112
 
76
113
  - `zmr-benchmark` repeats ZMR scenarios with pass-rate, failure-count, and p95
77
114
  duration gates.
115
+ - Benchmark directories can be rendered as both HTML and JUnit XML artifacts
116
+ with `zmr report`.
78
117
  - `zmr-benchmark-command` records normalized rows for app-local baseline
79
118
  commands without hardcoding another tool.
80
119
  - `zmr-compare-benchmarks` compares candidate and baseline rows into generic
@@ -89,17 +128,21 @@ state, and writes deterministic traces. It does not embed an LLM.
89
128
  - Release archive builder with checksums, SPDX SBOM, third-party notices,
90
129
  generated Homebrew formula, and `RELEASE_MANIFEST.json`.
91
130
  - npm package tarball generation with bundled prebuilt binaries.
92
- - `zmr-release-readiness` checks repeated app/device evidence for teams that
93
- want a machine-readable readiness summary.
131
+ - `zmr-release-readiness` checks repeated app/device evidence and the
132
+ agent workflow smoke for teams that want a machine-readable readiness
133
+ summary.
94
134
  - Tagged release workflow with artifact attestation and optional npm
95
135
  provenance publishing.
136
+ - CI workflow retains run traces, coverage output, and built runner artifacts
137
+ for 14 days; tagged release workflow retains the generated `dist/` bundle
138
+ for 30 days.
96
139
  - Security, contribution, trace privacy, troubleshooting, protocol versioning,
97
140
  app integration, benchmarking, and npm packaging docs.
98
141
  - Reusable agent skill under `skills/zmr-mobile-testing/`.
99
142
 
100
143
  ## Current Limitations
101
144
 
102
- - Current release status is `0.1.3`, a public developer preview rather than
145
+ - Current release status is `0.2.0`, a public developer preview rather than
103
146
  a production-stable `1.0.0`.
104
147
  - Physical iOS log capture is still simulator-first. Physical iOS screenshots
105
148
  are available when the XCTest/XCUIAutomation shim is configured.