Uh oh!
There was an error while loading. Please reload this page.
test(cu): extend real AX provider evidence - #924
Conversation
hqhq1025
commented
Jul 13, 2026
Ready for review. CI is green and this PR adds real AppKit AX evidence with zero pixel dispatch for OpenAI and Anthropic product Runtime runs. cc @Astro-Han |
Astro-Han
left a comment
There was a problem hiding this comment.
Approved. I did not find a P0 or P1. These findings are non-blocking for this opt-in real-model harness:
P2 —
scripts/cu-real-ax-model-e2e.mjs:342-376,475-501: the runner keeps only each event type, accepts any finalcomplete, and then hard-codesloopStatus: "completed". A run that reachesstep_limitorerrorafter the expected mutation can therefore be published as completed. Keep the final stop reason and requireend_turn.P2 —
scripts/cu-real-ax-model-e2e.mjs:240-283,398-457: the multi-step check independently counts oneset_valueand oneclick_element, but it does not prove their order or that the click used the observation returned byset_value. Record request/result observation IDs and verify the chain.P2 —
scripts/cu-real-ax-model-e2e.mjs:431-450: the ambiguity scenario passes when the model observes once and stops without attemptingclick_element. That produces an ambiguity evidence report without exercising eithertarget_changedor ambiguousstale_frame; treat a safe decline as inconclusive or require an actual rejection outcome.P2 —
scripts/cu-physical-input-age.swift:4-13: the input-age probe omits.scrollWheel. Trackpad or wheel-only activity can therefore look idle and allow real AX dispatch while the user is actively scrolling.P3 —
scripts/cu-real-ax-model-e2e.mjs:190-203anddocs/computer-use-real-ax-model-e2e.md:42-47: intervention recovery is injected by the wrapper before the real backend and input probe run. The result is useful Runtime fault-injection evidence, but calling it physical-intervention evidence overstates what was tested.P3 —
packages/runtime/src/__tests__/computer-use-provider-protocol.test.ts:44-123: the protocol fixtures do not assertbody.model, the finalset_valuetool-result reinjection, or the collectedtoolResults[].isError, despite the documentation claiming those checks.P3 —
scripts/cu-real-ax-model-e2e.mjs:252-265,404-423: per-scenario mutation counts are checked only after execution. A model can dispatch repeated allowed mutations before the report fails; enforce the stated exactly-once limits before dispatch.P3 —
scripts/cu-real-ax-model-e2e-launcher.mjs:141-149: READY parsing reads field 4 asbundleIdentifier, while the monitor emits input age in field 4 and the bundle ID in field 5. The field is currently unused, but the recorded monitor identity is wrong.
Summary
Extends merged provider-evidence #913 with an external AppKit AX runner and Anthropic-compatible provider-loop coverage.
The existing #913 Desktop runner remains the canonical OpenAI L0/L1 evidence path. This follow-up adds hazards and providers that runner does not cover yet.
Real AppKit product path
The opt-in harness uses:
It launches the fixture without explicit activation, owns caffeinate/cleanup, monitors lock and fixture focus, and uses a read-only physical-input age probe. Scenario allowlists exclude coordinate, scroll, drag, type, key, and pixel fallback.
Qualifying real runs
OpenAI
gpt-5.6-solthrough the local Azure Responses bridge:Anthropic
claude-sonnet-4-6through coproxy:Dynamic structure evidence
After the model observed one stale target, an independent AX setup action inserted a duplicate semantic target. The current executor conservatively returned target_changed before identity refetch, with zero model dispatch and zero target mutation. This remains safe; the semantic-refetch ordering finding was reported on #910.
Other providers
Kimi Coding Plan and MiniMax Coding Plan complete four-stage product loops through their exact Anthropic-compatible streaming URL/auth contracts:
These are hermetic-protocol evidence because no live credentials are configured on this Mac; they are not labeled real-runtime.
Evidence/privacy fixes
Verification
git diff --checkpasses.