Releases: The-Wordlab/Android-UI-Analyser
Release list
v0.30.0
Added
- A built-in Playwright-backed
webplatform reuses AUA's semanticanalyze, stable selectors,
actions, screenshots, waits, flows, maps and sessions for HTTP(S) pages. DOM test ids and HTML
ids becomeresource_id; only viewport-intersecting nodes satisfy presence checks. aua browserand matching MCP tools add browser diagnostics, cookies/web storage and cache
controls, offline/throttling, scoped CORS, context proxy, HAR record/replay, request mocks,
session reset, popup/tab/frame inspection, and Playwright traces. URL path/query is now the
shared map surface, and goal cleanup restores the browser session baseline.
v0.29.0
Added
aua app uninstall <app-id> --yesand MCPappwithaction=uninstall, confirmed=true
remove an installed app through the selected platform adapter on Android and iOS.- iOS simulator app data: SQLite discovery, read-only WAL-aware queries, schema inspection,
confirmed data mutations and backup/restore; configured feature-flag deeplinks with UserDefaults
verification;.plistpreference setup flows with journalled restoration at session cleanup.
Fixed
- Outcome judges now bind delayed-result criteria to the action that completes the contract,
such as returning after background work, without accepting unrelated later actions as proof. - iOS presence checks and
scroll-tonow exclude off-screen accessibility nodes retained by
SwiftUI, matching the viewport used byanalyze. - iOS restart now launches an already-stopped app instead of aborting on simctl's multiline
"found nothing to terminate" response. - Automatic cleanup no longer warns about a different platform on every command or reports
failed cleanup as a successful reset. Pending cleanup remains visible inteardown status.
v0.28.0
Added
-
The experimental real-app controller can opt into
voice-input, exposing a
speak_into_microphoneaction that injects synthetic speech while holding or toggling the
app's record control. Voice scenarios no longer record emulator silence and misreport the
app's correct "nothing heard" response as a product failure. -
Real-app controller results now warn when the current screen belongs to another package,
helping the controller return to the app under test without blocking legitimate system flows
such as document pickers.
Fixed
-
Outcome judges now verify action-result criteria only from the frame produced by that action.
A later recovery action reaching the expected screen can no longer hide the original failure. -
aua record stopno longer fails a recording whose screen never changed at all. A wholly
static window makesscreenrecordemit a single frame, so its media length is exactly 0.0s,
and the aggregate "captured nothing at all" guard fired underneath the per-segment rule that
already excuses stillness: an 8.02s idle recording exited 3 withrecording_coverage_failed
while holding a valid 37 KB MP4. A partly idle window passed and a wholly idle one did not.
Zero media now fails only where nostatic_screen_no_framesgap accounts for it. No segments,
a missing supervisor completion, an unreadable or unfinished segment, a non-zero recorder exit,
and stretches where the encoder was not running all still fail.
v0.27.5
Fixed
- Release validation no longer assumes a second passive-read retry can be scheduled inside a
150 ms wall deadline on a loaded macOS runner; deterministic coverage still verifies retries,
strict deadline reuse, and that read failures never prove UI absence.
v0.27.3
Fixed
-
Android text-clear recovery no longer multiplies AdbKeyboard clear-broadcast retries through
reconnects. It allows one semantic refocus of a verified editable field and one accessibility
clear retry, then requires empty-field proof. Replace-input fallback never clears a second time
through IME send; changed/unknown focus or an unverified clear fails without fallback typing. -
Public MCP long-press exposes its existing fresh semantic selector path. Real-app compact tap
and long-press retain ID-first guidance but also allow one observed text/resource-ID/description
selector and a bounded occurrence index for duplicate rows. Ambiguous selections remain refused;
coordinates, first-match guessing and selector/ID combinations are not exposed by the controller. -
Finishing an unattended session now retires its registered teardown watchdog after the
exact owned virtual-target boot stops and before lease release. An old boot's unreplayable
undo records remain available for deliberate recovery without an orphan polling process;
unverified watchdog termination remains a cleanup failure. Child watchdogs are also reaped.
v0.27.2
Fixed
- Release qualification uses deterministic judge-budget clocks and only announces signal-test
readiness after cleanup protection is active, removing macOS CI races without changing runtime
deadlines, cancellation, signal forwarding or cost accounting.
v0.27.0
Fixed
-
Compact real-app controllers retain editable-field, resource-ID and window semantics across
post-action observations, plus input verification/submission status. Sending guidance now
distinguishes an IME submit action or actual app Send control from keyboard Enter and
text-selection controls, avoiding draft/retype loops without automatically sending content. -
A confirmed pre-dispatch selector miss can recover without invalidating an evidence-valid
scenario: it requires AUA's no-action refusal with a fresh observation, zero unknown outcomes
and a later matching host terminal claim. Such journals never produce a replay candidate.
Caller-owned terminal claims are not mistaken for failed cleanup; uncertain actions, missing
claims and actual cleanup failures remain blocking. -
Judge evidence selection now preserves observed screen families, selection/checkpoint
changes and post-restart provenance instead of silently truncating to eight text frames.
Four bounded images prioritize a same-screen state pair and omit redundant final captures;
host-owned image/ref/action mappings make lifecycle evidence attributable. -
Added a price-capped, data-collection-denied open GPT-5.6 Luna vision/tool fallback profile
with reasoning disabled. A saved-evidence audit validated two consistent structured votes
while preserving an unavailable independent-system fact as unverified; no device acceptance
is implied by this audit and vote timeouts remain unchanged. -
Judge replies with oversized optional
satisfied/unsatisfiedsummaries now retain only
the schema-bounded prefix, with content-free normalization diagnostics. Every item must
already be valid; required fields, verdicts and criterion identities/results/evidence
remain strict and unchanged. -
Optional primary-flow preview/export failures now produce a sanitized QA warning and no
replay candidate, without rewriting product evidence or falsely marking cleanup failed.
Corrupt/incomplete execution journals and actual lifecycle cleanup failures remain blocking. -
An explicit forced-tool capability rejection no longer consumes the relaxed answer's time
allowance. The relaxed request receives up to 45 seconds, still capped by the unchanged
absolute vote deadline, with renewed-budget diagnostics and normal cancellation handling. -
After a provider forces relaxed tool choice, judges may recover a single strict JSON object
from message content (optionally one JSON fence), under the same compact schema and evidence
validation. Prose/ambiguous output is rejected, native calls take precedence, and sanitized
schema-repair diagnostics explain failures without retaining private model text. -
Judge tool replies identify contract bullets by compact zero-based indexes instead of
repeating long criterion strings. The host validates identities and restores exact authored
labels in source order; duplicates/out-of-range values require repair, and omissions stay unverified. -
Reasoning-only judge responses advance immediately even when providers label them normal
completions. Remaining routes share the vote deadline fairly, and judges request a separate
2048-token reasoning budget without changing controller profiles. Reported upstream charges
count toward spend limits and totals when the provider's top-level cost is zero. -
Judge requests now share a 45-second route deadline across transport retries/backoff and schema
repairs, with a 90-second deadline per vote. Stalled routes advance promptly; cancellation
preserves cleanup and result artifacts, and requests without usage mark reported cost incomplete. -
Real-app judging keeps routing retries separate from each model's schema-repair budget,
escalates reasoning-only exhaustion, and normalizes unambiguous criterion formatting while
leaving missing evidence unverified. Failed judgement spend remains in report totals. Safe
primary-flow previews may accompany an unverified evidence gap without promoting the verdict. -
The real-app harness supports opt-in private database setup proof through its existing
read-only database API. A device-clock boundary and SQL-level expected-label allowlist keep
stale evidence and private fields out of reports; final revalidation revokes obsolete proof. -
A failed provision claim retains its exact boot identity for a same-worker retry. When the
fallback acquires that same target, unattended session cleanup retires the original boot;
replacement boots and different worker, owner, or cache scopes are never adopted. -
Explicit teardown discard can archive a lost target's undo records while its own process-bound
lease is still alive, allowing cleanup and release without reconnecting to the missing target.
Other owners and sibling worker scopes remain protected. -
The real-app harness can prove setup from a current-run log mark with whitespace-tolerant
regular expressions and latest-value comparison, without exposing captured log fields. It
rechecks before cleanup so later state changes cannot inherit an earlier positive proof. -
Opt-in primary-flow export previews the exact clean controller action suffix into the run's
output directory. Incomplete or unsaveable journals cannot produce a passing export, and
observation-only runs never borrow setup actions or write global flow memory. -
The real-app harness offers a separate forbidden-foreground-package guard: installed sibling
apps are allowed, but setup, controller, and final evidence entering a forbidden app aborts the
run independently of model judgment. The existing installed-package exclusion remains available.
v0.26.1
Fixed
- The cross-process lock-order regression test now flushes child-process queue events before it
signals completion, avoiding a Linux CI race that could block an otherwise valid release.
v0.25.0
Added
- The experimental real-app controller has an opt-in
async-ui-waitcapability. Its bounded
wait_for_ui_conditiontool starts one durable AUA predicate job, polls it in the harness with
no paid model turns, returns the completed observation and cancels the job if supervision ends.
Fixed
- Ordered controller fallbacks now reject abnormal or malformed model-response envelopes before
any device dispatch, and continue on the next model after one rung exhausts protocol/schema
repairs. Rejected assistant/tool feedback stays in the shared conversation and uncertain device
actions are never replayed.
v0.24.1
Fixed
back-gesture-and-analyzenow dispatches through a warm AUA daemon instead of returning
unknown_command;v0.24.0did not publish because release CI caught the missing branch.