Repository navigation
feat(interaction)!: remove target-readiness waits - #3599
Conversation
Size Report
Startup median (7 runs, lower is better):
|
There was a problem hiding this comment.
All reported issues were addressed across 59 files
Reply with feedback, questions, or to request a fix.
View guided diff | Turn on auto-fix | Re-trigger cubic
|
|
Commit 20fb8a6 has one problem to fix before merge. The change itself is a clean deletion, and I found no smaller design.
Is there a smaller shape than this? I looked and found none. Routing the removed key through Not blocking, and you can take or leave these: I reviewed 20fb8a6. The newer head 3105851 only updates wording, comments and the press test for the six inline threads, and it does not touch the CI is still running: 14 of 22 checks are queued or in progress at 20fb8a6, and none has failed. Integration and Coverage exercise the changed replay and interaction routes, so they matter once they report. There are no conflicts. I did not open the hosted Android and iOS run logs. They ran on f22ddb7, before the sparse-refusal restore, the Before merge, please declare |
|
The code has one problem to fix before merge, and the 22 checks at 3105851 are green. I found no other defect in this change. Main refused Not blocking, and you can take or leave these: the PR removes the only producer of The six cubic-dev-ai threads are fixed at 3105851, so you can resolve them: docs wording in client-api.md, dispatched assertion in press-selector-resolution.test.ts, replay-e2e.md wording, test-utils comment, promotedTarget wording and moving-target-gate.ts mention. On evidence, I did not run the MCP path for an unknown key, so whether MCP strict schemas reject or drop Before merge, |
The sparse-capture refusal existed only inside the readiness poll. Moving it into the shared failure path widened it to every live selector action, so restore the one-attempt behaviour and drop the capture_sparse reason that no longer has a producer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ait used budgetFrom, captureDeadline, rideOut, signal and phase have no remaining production caller after the readiness wait's removal. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…solution Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n guidance Removing the option let readFieldInput and the tap writers drop it silently, so a released caller's press became a one-attempt press with no signal. Declare it retired at the common input row and refuse it in the click, press and longpress writers that the Node client reaches directly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3105851 to
40a5cb0
Compare
|
Addressed the review of 3105851 at
Gate: |
|
The PR is ready at 40a5cb0. The silent drop of Not blocking, and you can take or leave these: The six inline threads from cubic-dev-ai no longer apply, so you can resolve them: #3599 (comment) (client-api.md no longer says the target is resolved once), #3599 (comment) (the press test asserts I did not run the tests. I judged the regression coverage from the diff and the earlier writers at 3105851. An older client (v0.21.19-21) that sends |
|
Merged main in at e419d18.
|
|
The earlier review of 40a5cb0 was clean, and I checked the new head e419d18 against it. All six inline comments from the earlier review are fixed at this head, and the code looks right. Required evidence is in place: the live Android and iOS runs, but those ran on the pre-rebase source f22ddb7. The merge changes no PR-side behavior (it removes one import in resolution.ts), so I am not asking for a re-run. I did not run typecheck or tests on the merged head. I judged the merge resolution from the diffs and grep only. Smoke Tests is still queued, so there is no CI result yet. Its replay and interaction route overlaps the press, click and longpress resolution change in this PR, so it is the check that matters here. The next step before merge is for Smoke Tests to finish green. After merge, #3607 removes the leftover readiness forwarding. One question on simplicity. The retired-key refusal is enforced twice: in the common input row (MCP, CLI and batch), and again by hand in the click, press and longpress Node-client writers, because the Node client goes from prepareDaemonCommandRequest straight to the writer. Node fill or swipe calls with readinessTimeoutMs still drop the key silently, although the PR body says every command refuses it. Could the Node projection seam (prepareDaemonCommandRequest) refuse every key whose COMMON_INPUT_AUDIENCE kind is 'retired' in one place, and could the row reuse retiredField's check? That would replace the three per-writer guards and the copied hasOwn and throw. Otherwise, should the PR body narrow the claim to press, click and longpress? The six earlier cubic-dev-ai threads are fixed at this head, so the author can resolve them: client-api.md wording #3599 (comment), the dispatched assertion in press-selector-resolution.test.ts #3599 (comment), replay-e2e.md wording #3599 (comment), the test-utils clock comment #3599 (comment), the promotedTarget doc #3599 (comment), and the consumer list in interaction-snapshot-capture.ts #3599 (comment). |
…ction seam The Node client reaches daemon writers without readFieldInput, so per-writer guards covered only click, press and longpress. Refuse every retired common key in prepareDaemonCommandRequest instead, and share one refusal between retiredField and the common row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Took the design point from the review of e419d18, at
Gate: |
Summary
Removes the replay target-readiness wait, per the #3077 decision: the audited hosted evidence showed no rescue on either platform. Replayed
press/click/longpressno longer poll for a missing target; post-gesture and scroll observation are unchanged. Scripts that need to wait use an explicit step:Breaking for Node clients that passed
readinessTimeoutMs(shipped in v0.21.19). The key is now retired: the Node client (at its projection seam) and MCP/CLI input (through the common row) refuse it on every command withINVALID_ARGSand "add an explicit wait for the target" instead of dropping it silently. Also removed: thecapture_sparserefusal (only the poll produced it; replay now reportsselector_not_foundon an empty tree, like live commands) and fiveobserveUntiloptions only the wait used. 62 files, 533+/2,106−; the gross budget is waived for removals. Leftover result forwarding is tracked in #3607.Closes #3077
Validation
Head
1f26100da, with main merged at562e798d1.pnpm check:affected --base origin/main --run: pass (685 files / 5,151 tests).f22ddb765: Android full fixtures plus six replays (87 actions, first attempt, zero healing); iOS diagnostic six replays (47 actions). A later app-switcher fixture failure is outside the corpus and occurs without this change.🤖 Generated with Claude Code