test(cu): extend real AX provider evidence - #924
Conversation
|
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.