feat: add strict wait absent polling (#2236) - #2264
Merged
Merged
Conversation
|
Size Report
npm unpacked components
Startup median (7 runs, lower is better):
Top changed chunks:
Top changed packed files
|
Member
Author
|
Addressed the review findings from the PR review:
The failed Coverage lane was also investigated: its log showed provider-backed Android IME-recovery persistence failure, not a wait-absent assertion failure. The failed jobs were rerun and the current Coverage check is green. There are no submitted GitHub reviews or inline review comments currently open on this PR. The PR Preview and Size Report comments are automation/metadata only. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds strict selector-absence polling for issue #2236:
wait absent <selector> [timeoutMs]is available through the public client, CLI, daemon, and MCP metadata.readableCaptures; if no valid capture arrives, the final typed diagnostic is preserved. A deadline after valid captures reportswait_target_presentwith timeout, readable-capture, elapsed-time, match-count, and bounded first-match identity/text evidence.--scopeand--depthare rejected with typedINVALID_ARGS.gone,disappears, andwait exists ...remain rejected; recovery hints route disappearance requests towait absent.['absent', selector, timeout?]without target-v1 annotation or identity-mismatch handling. Maestro reports this form unsupported rather than mapping it to lenientnotVisible.mainhead and contains only the wait-family delta.Base SHA (lower):
ed76c9c8488b621e905618d840b0f0018ef4243bHead SHA (upper):
711920fa6e4a4318dc61ca96fdaa281e4cd73b1bCurrent delta: 50 files, 1,747 insertions, 764 deletions.
PR: #2264
Refs #2236
Validation
predicate_faileddocumentation, workflow-help preservation, wait-module/test topology, and strict Maestro rejection. The final focused wait/daemon/CLI/docs/Maestro suite passed: 10 files, 110 tests.pnpm check:affected --runpassed all runnable checks, including format, lint, typecheck, layering, DI seams, Fallow, build/package, related Vitest (474 files, 3,975 tests), integration progress, replay/wire compatibility, command docs, structural guards, Maestro conformance, and mutation model checks.git diff --check origin/main...HEADpassed.Run coveragein the provider-backed Android Settings IME-recovery test (Android test IME recovery records could not be persisted for Pixel 8). The failed log was read; failed jobs were rerun, and Coverage job100618548226passed. All current GitHub PR checks are green, including iOS, Android, Linux, macOS, Coverage, CodeQL, Bundle Size, and command-docs.F7D6F9A4-4FCC-4DD7-AC0B-3280C9319CB9reached the healthy AutomationLab surface. A mounted modal producedwait_target_presentwithreadableCaptures: 2,matches: 1, and first-match identity/text evidence; after closing it, strictwait absentsucceeded.Pixel_7_CIemulatoremulator-5556reached the healthy AutomationLab surface through Android helper0.20.11-dev/ API2. The same mounted-target and post-close strict-absence checks passed (readableCaptures: 2for the present diagnostic).checkout-form.adpassed throughagent-device teston iOS with JUnittests=1 failures=0 skipped=0,replayed=19,healed=0; authoredcheckout-form-android.adpassed on Android with JUnittests=1 failures=0 skipped=0,replayed=20,healed=0. The development server URL was discovered from Expo output rather than guessed. Both device targets ended with no local session claims, and Metro was stopped.711920fa6e4a4318dc61ca96fdaa281e4cd73b1bfound no valid in-scope findings.wait_runner_restart_exhaustedover stale target-present evidence; the missingpredicate_failedcontract is documented and covered; read-only/settle workflow guidance is restored; wait dispatch and extracted tests follow sibling topology; and the Maestro test explicitly rejectsnotVisible.Updated docs include
CHANGELOG.md, website command documentation, and ADR 0012's no-annotation exceptions. No skills were changed. Issue #2236 remains open for post-merge cleanup; this PR is open and must not be merged automatically.