Skip to content

v0.20.1

Choose a tag to compare

@thymikee thymikee released this 27 Jul 14:34

Highlights

This release expands platform coverage and makes recorded workflows safer and more reliable.

  • Amazon Vega OS TV support — control apps in the Vega Virtual Device with discovery, lifecycle commands, navigation, and the complete TV remote surface.
  • Broader physical iOS support — xctrace-only devices can now use XCTest-backed app automation through usbmux, including interactions, snapshots, and screenshots.
  • Secret-safe replay recordingfill --record-as <VAR> sends the real value to the app while storing only a ${VAR} placeholder in the recorded .ad script.
  • Stronger replay verification — recorded wait landmarks now retain element identity, preventing same-label elements on changed screens from producing false-positive replays.
  • More resilient replay startup — bounded retries handle transient sparse captures while an app is launching, without masking permanent transport failures.
  • Smarter device selection — replay can select the simulator containing the requested app and better preserves authored platform and deep-link intent.
  • Better recovery guidance — off-screen interaction errors now recommend a direction, bounded movement, and selector-based retries.
  • iOS system UI guidance — new help covers SpringBoard and simulator widget add, edit, and removal workflows.
  • Improved diagnostics — richer, sanitized session-event details make automation failures easier to investigate.
  • Stronger release confidence — substantially expanded registry-derived iOS simulator coverage, replay scenarios, architecture gates, and help-conformance checks.

Compatibility note

Legacy recorded gesture forms containing removed duration or velocity positionals now fail during .ad parsing with migration guidance. Convert timed movement to gesture pan or use the current canonical gesture syntax.

What's Changed

  • fix(android): stamp status-bar chrome during the walk instead of reconstructing it downstream (#1319) by @thymikee in #1359
  • fix(apple): parse parenthesized xctrace physical device format by @devin-ai-integration[bot] in #1360
  • Generalize subprocess stub tests to support multiple platforms by @thymikee in #1362
  • chore: remove dead code and tune fallow's dead-code rules by @thymikee in #1363
  • chore: remove dead type re-exports, prune stale suppressions, gate unused-types by @thymikee in #1364
  • chore: remove verified dead code and migration scaffolding (~700 LOC) by @thymikee in #1367
  • test: serialize client-metro and harden the unit suite against ambient daemon env by @thymikee in #1365
  • chore(deps): resolve dependabot alerts by @thymikee in #1372
  • refactor(cli): decompose runCli into explicit phase functions by @thymikee in #1373
  • refactor(interaction): resolve the CapturedSnapshot name collision by @thymikee in #1371
  • refactor(commands): derive pass-through command bindings with a generic BoundOf helper by @thymikee in #1368
  • fix: select iOS simulator by installed app by @thymikee in #1376
  • fix(android): preserve fixed siblings after snapshot filtering by @thymikee in #1378
  • feat(events): enrich session event details by @szdziedzic in #1379
  • fix: report bundle sizes with two decimal MB precision by @thymikee in #1382
  • fix(interaction): direction-named, selector-first off-screen recovery hints (#1366) by @thymikee in #1374
  • fix(daemon): explicit abort message on uncommitted repair close by @jibin7jose in #1383
  • feat(replay): recorded landmark identity for wait, is coverage — read-only step identity (#1349) by @thymikee in #1381
  • fix(daemon): keep an active replay session's daemon alive over the CLI path by @thymikee in #1390
  • feat: parameterize sensitive recorded inputs by @thymikee in #1369
  • feat: add WebView accessibility lab by @thymikee in #1397
  • fix(cli): compact stale device status by @thymikee in #1388
  • docs: restructure AGENTS.md and CONTEXT.md for progressive disclosure by @thymikee in #1402
  • fix(replay): preserve cwd scope for opened sessions by @Bortlesboat in #1401
  • feat: add first-class Vega VVD TV support by @thymikee in #1396
  • docs(adr): rules-first ADR restructure + ADR 0017 proposal (unified event journal) by @thymikee in #1399
  • feat(apple): injectable Apple runner transport seam for provider interactors by @thymikee in #1389
  • fix(gestures): fail pre-removal gesture forms at .ad parse time (#1216) by @thymikee in #1393
  • refactor(boundaries): put shared contracts below their consumers, gate the result by @thymikee in #1405
  • feat: strengthen agent help benchmarks by @thymikee in #1404
  • fix: select app-bearing simulator for replay by @thymikee in #1387
  • fix: support xctrace-only iOS physical devices by @thymikee in #1375
  • fix(replay): bounded retry on pre-dispatch capture racing app launch (#1385) by @thymikee in #1386
  • feat(scripts): dependency-graph report over the layering gate's model by @thymikee in #1410
  • feat(bench): renderer-pinned samples, topic-coverage gate, error-recovery quizzes; trim skillgym to agentic checks by @thymikee in #1411
  • docs: architecture principles mapped to enforcing gates and open ledgers by @thymikee in #1428
  • docs: bless the works-today iOS SpringBoard/widget workflow (#1296 PR A) by @thymikee in #1395
  • fix: update vulnerable dependencies by @thymikee in #1434

New Contributors

Full Changelog: v0.20.0...v0.20.1