fix: carry response warnings to every surface, and stamp the sheet behind a refusal - #2571
Conversation
|
Size Report
Startup median (7 runs, lower is better):
|
|
No code findings at fb07951: skipped-step warnings reach the failure response and human reporters, with replay-variable scrubbing preserved. Checks are green. The Apple presentation hint is also a changed device-facing path, so fixture evidence alone leaves a validation gap: please record a live simulator refusal on a confirmed SafariViewService sheet and verify the hint and systemSurface details. The underlying sheet-interaction fix remains outside this PR. |
fb07951 to
2c78c6f
Compare
|
Rebased onto main for #2572 (same refusal path). Consequences of the rebase: the runner-side viewport-refusal hint from the first revision is dropped, honoring #2572's byte-for-byte decision for non-sparse refusals; the sparse path's surface-host hint is yours there. What survives here: |
2c78c6f to
4932e0f
Compare
|
The rebase at 4932e0f preserves the warnings channel and typed system-surface provenance; no new runtime defect found. CHANGELOG.md:25 still promises a non-sparse snapshot --raw/surface hint that this revision deliberately removes. Please correct that claim and supply the outstanding live SafariViewService refusal evidence for systemSurface. The failed iOS check is testAlertDismissDoesNotActivateAReplacementWithTheSameTitle returning ALERT_DEADLINE_EXCEEDED in unchanged native code, so it looks unrelated to this diff. It remains a separate CI merge blocker. |
|
Fixed in 1efc67c. You were right — my "one shared reader" claim was false: The field now has one parser: On the fifth fold: at |
|
The warnings change at 1efc67c looks right. Every consumer now reads through Two items from the last review are still open. CI is green and there are no conflicts. |
|
Update: the branch now conflicts with current main in |
1efc67c to
6737b0c
Compare
|
Rebased onto main at 6737b0c (took the #2590 |
6737b0c to
bd19119
Compare
|
Live SafariViewService refusal recorded at head Setup: minimal UIKit probe app (
"details": {
"reason": "invalid-viewport",
"field": "viewport",
"systemSurface": { "bundleId": "com.apple.SafariViewService", "kind": "web-auth" },
"snapshotQuality": { "state": "sparse", "backend": "private-ax", "reason": "…", "reasonCode": "requested-backend" }
}The run exposed one gap worth naming: the natural sheet refusal lands on #2572's sparse-declared branch, which carried the hint but not the structured provenance — the requested evidence could not occur anywhere else live. So |
|
At bd19119 the rebase keeps both sides in The new comment on The title still says "hint iOS viewport refusals", but that hint now lives in #2572 and this PR carries CI is green and there are no conflicts. |
bd19119 to
14c9d0b
Compare
|
Both done at 14c9d0b. |
|
Reviewed the bd19119..14c9d0b delta. The earlier findings are addressed: the SDK client now reads open warnings through One small gap remains. CI was still running at review time, with no failures. The delta is a comment rewrite and a reader swap with the same behavior, so it does not reach the smoke device paths. |
|
Reviewed at 14c9d0b. The client now reads warnings through the shared Smoke Tests failed in the iOS simulator fixture run at |
14c9d0b to
35c959f
Compare
|
At 35c959f: |
|
Retitled to match the code: the non-sparse viewport hint lives in #2572, and this PR carries the warnings channel plus |
|
Reviewed at 35c959f. One copy of the same reader is left. CI is green on 35c959f. There are no conflicts. |
35c959f to
027eae4
Compare
|
Done at 027eae4: |
|
Reviewed at 027eae4. The finding from 35c959f is fixed: screenshot warnings now go through the shared One reader still has its own copy of that rule. All 20 checks pass on 027eae4, and there are no conflicts. The next step is to settle the snapshot reader question either way. |
027eae4 to
4b15606
Compare
|
Rebased onto main ( Why not delegate: Gate status: everything I can run locally is green on |
|
Reviewed at 4b15606, as a follow-up to the review at 027eae4. The earlier finding is not fully closed. The doc at success-text.ts#L17 says every reader that projects a response record onto warnings goes through Typecheck & Package fails with TS2353 on Smoke Tests fails because the long-press canary on the live iOS fixture is not found after scrolling. The only PR change near that route, Next: fix or document the latch reader, then rerun Smoke Tests. |
…name system surfaces in refusals An optional: true Maestro step that skipped stayed a warning that the terminal never printed once a later step failed: the accumulated channel rode only on the success response, so the repro run in #2560 reported a bare failure with no trace of the skip. The engine now emits warnings on the failure event, the daemon copies them onto the failure response's error details, and the failed test result carries the same array the passed result already had; replay prints them through its facet formatter and the test reporter adds a Warnings section that renders whether tests pass or fail. A regular iOS presentation refusal from the runner now also carries the registry identity of the system surface the tree was acquired from in error details, so a capture-boundary miss under optional: true stops looking like a selector problem; the sparse-declared verdict path is owned by #2572.
A failing `replay` still printed no trace of the run's accumulated warnings: the human error renderer read message, hint, and divergence but never the error-level warnings channel, so the pass/fail asymmetry survived on that surface. It now prints each warning after the error. Round-two corrections: warnings on the divergence response are scrubbed against replay vars like message and hint already are; a failed attempt copies warnings only when non-empty, matching the passing branch; the optional-skip hint append is removed because no producer of a maestro test failure emits a hint — capture-error lineage stays with #2450 — along with the CHANGELOG claim it rested on; the failed-result copy gains its own module test, and JUnit covers a failed test's warning lines.
…ays present An empty array and an absent key said the same thing two ways, so every consumer needed both guards. The failed outcome now always carries the warnings array, like the passed outcome already did, and the result builder narrows the attempt once instead of per field. This also removes the clone the shared candidate-view formatter had grown between the CLI and MCP error renderers — the MCP error text gained the same warnings lines the CLI stderr prints.
… message reader Four call sites read the composable warnings field with their own Array.isArray filters (the daemon append, the daemon attempt outcome, the CLI success line, the CLI/MCP error text), and the PR had grown a fifth. The field has one contract now: kernel/success-text readResponseWarnings, next to readCommandMessage, with the daemon append, the attempt outcome, messageWithWarningsText, and both error renderers as its named consumers. The CLI-side reader the PR introduced is deleted, not wrapped.
|
Latch routed at 262b68a: |
4b15606 to
262b68a
Compare
|
Reviewed at 262b68a. The finding from 4b15606 is fixed: All checks pass and there are no conflicts. This is ready for human review. |
Summary
Refs #2560 (capture-routing/lineage half stays with #2450/#2485).
An
optional: trueMaestro step that skipped left a warning that vanished from human output the moment a later step failed — the repro printed a bareREPLAY_DIVERGENCEwith no trace of the 7s skip. Warnings now travel with the run whether it passes or fails:warningsarray the passing result already had; the default reporter'sWarnings:section, JUnit lines, failingreplaystderr, and MCP error text all render them.error.details.systemSurface, so a capture-boundary miss stops looking like a selector bug. Rebased over fix(apple): carry the runner's sparse verdict through a viewport refusal #2572: the sparse-declared verdict and its surface-host hint are owned there; this PR keeps the provenance plumbing and the warnings channel only.Validation
Rebased head
2c78c6f; format, lint, typecheck, unit-core+apple-runner (10377; one unrelated subprocess-contention flake inrunner-client.test.tsthat passes isolated), output-economy, maestro-compat, layering, production-exports, wire/replay-compat, command-docs, tmpdir, agent-guidance all green locally.check:affected's mutation-model lane fails identically on pristineorigin/main@775163(reproduced in a clean worktree) — pre-existing, not from this diff. No device run yet: the live SafariViewService refusal recording is still an open ask from review.