fix(maestro): measure settle outcomes directly - #2155
Conversation
Size Report
npm unpacked components
Startup median (7 runs, lower is better):
Top changed chunks:
Top changed packed files
|
|
Reviewed exact head |
Code quality reviewThe direction is right: a duration proxy that folds in target resolution and dispatch cannot distinguish a slow tap from a stability loop that never latched. But three properties make the replacement detector weaker than the proxy it replaces, and one of them I was able to demonstrate rather than argue. 1. The new invariant is vacuously satisfiable; the old one was not
So the sole bug-class-4 detector (
This is precisely the failure mode the sibling scenario already documents from #1300 — "outcome parity cannot see a retry: a tap that never re-taps passes just the same, which is how this scenario spent its first two runs proving nothing" ( Suggest pairing the bound with a proof-of-life invariant on the same scenario: 2. Three of four settle sites are instrumented; the missing one is the default path
That is not a marginal caller. Per ADR-0015 This is also why the flow had to grow Two ways out: instrument 3. The increment has no coverage anywhereEvery The pure evaluator is well tested against synthetic traces, but nothing tests that the runtime ever writes a non-zero value. Combined with the PR body noting the iOS device attempt was blocked, the write path is right now verified by nothing — no unit test, no device run. A port-level test driving 4.
|
|
Addressed in 7f5df7f.
The device-backed differential and iOS Smoke remain GitHub-authoritative. The new exact-head CI run is pending; I am not treating this as merge-ready until those lanes report. |
|
Reviewed exact head
Residual merge-readiness evidence: the device-backed Conformance Differential workflow runs on |
|
Summary
Replace the differential settle detector’s tap-duration proxy with the stability loop’s own outcome. The
settle-after-tapflow now exercises the retry/settle path and fails only when that loop exhausts its budget.This removes the cold-simulator false failure where target resolution and dispatch made a healthy tap exceed the settle timeout.
Validation
pnpm test:maestro-compatpnpm maestro:conformancepnpm check:affected --runThe device-backed differential remains GitHub-authoritative. A local iOS attempt was blocked by a pre-existing simulator-session claim, which was closed after the check.
15 files changed; scope is limited to Maestro settle outcome instrumentation, its differential flow, and trace coverage.