bench(rdp): governed real-protocol vision-ladder qualification harness#177
Conversation
…ted) (#181) * bench(canvas): no-DOM HTML5-canvas vision-ladder qualification (accepted) Adds `benchmark/canvas_ladder/` — a live proof of the vision-only resolution ladder over a genuine no-accessible-DOM HTML5 `<canvas>`, the class Citrix Workspace-*web* presents. Drives the UNMODIFIED Recorder -> compile_recording -> Replayer over a noVNC/TigerVNC canvas with NO structural backend, against a Dockerized clinic kiosk (reused from the rdp_ladder fixture, PR #177) + an independent document oracle. HONEST LABEL: no-DOM HTML5-canvas class — NOT Citrix ICA/HDX (no HDX codecs, no ICA compression, no Workspace-client input path). See README + the design note ~/oa/src/.private/rdp_citrix_validation_2026_07_20.md. results.json is `accepted: true` across three regimes: * healthy: record->compile->replay succeeds, ZERO model calls, VISUAL rungs only (template x3, structural never used), write independently confirmed; * moderate (legible) drift: resolves to the CORRECT target via ocr+geometry — never a silent WRONG write (robustness, not over-halt); * severe (illegible) drift: HALTS with no write and no model call — no blind coordinate replay, the anti-silent-wrong-action guarantee. Unlike PR #177 (partial: healthy effect unconfirmed), the healthy path here is clean — keyboard forwards through noVNC to the field and the oracle confirms the write. Adds an env-gated e2e (`OAFLOW_CANVAS_LADDER_E2E=1`) and a nightly `canvas-nodom-ladder` workflow (drafted, not a per-PR gate). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NyCHrzA1psrKMFfroYbzaM * style: ruff format the canvas-ladder e2e wrapper Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NyCHrzA1psrKMFfroYbzaM --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
5c4529b to
9e5434d
Compare
|
Reviewed/rebased code-only head: Local non-injecting gates passed: 148 focused tests (2 opt-in Docker skips), Ruff 0.15.22 lint/format, strict safety mypy, claims, release consistency, shell/diff checks, and actual wheel+sdist license-boundary validation. No Docker fixture, VM/cloud resource, GUI, or input-injection run was started. The committed v1 result remains honestly |
9e5434d to
092ffbc
Compare
|
Follow-up live-state refresh: Local non-injecting gates passed on the new base: 209 focused/resolver tests (2 opt-in Docker skips), Ruff 0.15.22 lint/format, strict safety mypy, claims, release consistency, shell/diff checks, and actual wheel+sdist license-boundary validation. No Docker fixture, VM/cloud resource, GUI, or input-injection run was started. The committed v1 result remains honestly |
092ffbc to
411cd37
Compare
|
Second live-state refresh: Local non-injecting gates passed on the new base: 209 focused/resolver tests (2 opt-in Docker skips), Ruff 0.15.22 lint/format, strict safety mypy, claims, release consistency, shell/diff checks, and actual wheel+sdist license-boundary validation. No Docker fixture, VM/cloud resource, GUI, or input-injection run was started. The committed v1 result remains honestly |
|
Reproducibility follow-up on exact head
Code-only revalidation passed: actionlint, 209 focused/resolver tests with 2 opt-in Docker skips, claims/release/diff/shell gates, fresh wheel+sdist build, and actual-archive license/source-boundary validation. No Docker build, fixture, VM/cloud resource, GUI, or input-injection run was started. The exact amd64 Docker build plus 3 healthy + 3 drift qualification remains the manually authorized external workflow gate; it was not dispatched. Keep draft. |
|
Qualification-trigger follow-up at exact head GitHub cannot dispatch a new The checkout explicitly selects the PR head instead of GitHub's synthetic merge ref, and the harness records This push triggers both normal CI and the amd64 GitHub-hosted RDP qualification. Keep draft while they run; no PR number is hardcoded and no manual workflow was dispatched. |
…l contract)
Adds benchmark/rdp_ladder: the missing live proof for the vision-only resolution
ladder (template -> template_global -> ocr -> geometry) on a real no-DOM RDP
PIXEL surface — distinct from benchmark/rdp (transport+input only) and the
UIA/AX structural proofs. Drives the unmodified Recorder -> compile_recording ->
Replayer over a genuine RDP round-trip with no structural backend, plus a
Dockerized kiosk fixture and an independent document oracle.
First run (results.json) is HONEST/PARTIAL — accepted:false:
proven: zero model calls on healthy replay; visual rungs only (structural
never used); no silent write under injected DPI/theme/JPEG drift.
NOT yet: healthy effect independently confirmed; clean safe-halt under drift.
Caveats (in results.json): real RDP-transported pixels + input, but NOT Citrix
ICA/HDX, NOT the aardwolf transport, and drift is simulated-on-a-real-session
(not WAN capture). Landing as WIP so the harness isn't lost; follow-up to reach
a clean acceptance + wire the docker CI job.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NyCHrzA1psrKMFfroYbzaM
0b46905 to
8305a34
Compare
What
Adds a governed, repeatable qualification harness for OpenAdapt's vision-only
resolution ladder on a synthetic Tk workflow carried through a real FreeRDP
client/server round trip. The surface exposes no DOM, UIA, or other structural
backend, so healthy replay must resolve from recorded visual evidence.
Exact base:
d952c363d1910f1699c1a4690002879b1990d743Exact evidence head:
8a54a9003148f899867527802fc2d456ea2e5f87Accepted evidence
GitHub Actions run
29978847851,attempt 2, executed the exact 3-healthy/3-drift contract at mechanism commit
6031fde559b942a1d8b1a560d8b6cee8a6bfc800. Its sanitized artifact is committedas
benchmark/rdp_ladder/results.jsonwith SHA-2563b946dd098c4a4c2ca56c1ab531a2eaeeb37804aa10c440e576f7196a03ae37c.Result:
DocumentHashVerifier, andthe separate exact-content host oracle all confirmed.
and model calls.
The final authoritative run for the evidence-only head is
29979396980.It passed the same 6/6 contract at exact head
8a54a900…; its immutableartifact SHA-256 is
5247ac89ef004fb8873169b7a6ac62ad5eb765a37989c81f871f11fdc5f7f88d.Safety and reproducibility contract
The harness:
origin/mainmerge-base;
and acknowledged resets;
and requires exactly one new document;
host read;
diagnostics; and
The narrowly path-filtered pull-request workflow runs when this harness or its
exact compiler/policy/runtime dependencies change.
workflow_dispatchremainsavailable for explicit reruns. Action revisions and the fixture base image are
pinned.
Validation
built wheel and sdist.
8a54a900…: all required checks passed,including unit/coverage, browser E2E, wheel validation, lint/type, docs,
claims, PHI, Windows mock, and Linux AT-SPI.
Scope boundary
This is bounded evidence for a synthetic Tk task over real
FreeRDP-transported pixels and input. It exercises the production visual
resolver plus governed identity, policy, postcondition, and effect contracts.
It is not a Citrix ICA/HDX qualification, a Windows application qualification,
an aardwolf transport qualification, or WAN-captured drift. Those are separate
substrates and evidence sets.