bench(canvas): no-DOM HTML5-canvas vision-ladder qualification (accepted)#181
Merged
Conversation
…ted) 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
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NyCHrzA1psrKMFfroYbzaM
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds
benchmark/canvas_ladder/— the first live proof of the vision-only resolution ladder over a genuine no-accessible-DOM HTML5<canvas>, the class Citrix Workspace-web presents. Drives the unmodifiedRecorder → compile_recording → Replayerover a noVNC/TigerVNC canvas with no structural backend, against a Dockerized clinic kiosk (reused from therdp_ladderfixture, PR #177) + an independent document oracle.This is Part 1 of the no-DOM/Citrix validation in
~/oa/src/.private/rdp_citrix_validation_2026_07_20.md(§8, the fastest $0 zero-gate canvas proof). Part 2 (a Citrix-Workspace-window pixel backend) is stacked on top.Honest label
no-DOM HTML5-canvas class — NOT Citrix ICA/HDX. It reproduces the canvas surface class (server-side rendering, compression, scaling, latency, and — the load-bearing part — no accessible DOM inside the canvas) via VNC/noVNC. It has no HDX codecs, no ICA compression, and no Citrix-Workspace-client input path. Real ICA/HDX needs a Citrix entitlement (CVAD/DaaS trial or design partner); we do not fake Citrix evidence.
results.json—accepted: true(three regimes)Together the drift regimes prove the real property: under remote-display drift the system either resolves correctly or halts — it never silently writes the wrong thing; the healthy pass proves it is not merely always-halting.
Why this reaches a clean acceptance where #177 did not
PR #177 (
benchmark/rdp_ladder) is a partial contract — its healthy effect was never confirmed (typing did not land through the RDP client focus path), so its "halt under drift" was likely a broken-flow false positive. Here the healthy path genuinely works (Playwright keyboard forwards through noVNC to the Tk field; the oracle confirmsMRN A1001\tfollowup in two weeks), so the drift regimes are meaningful.CI / tests
tests/e2e/test_canvas_nodom_ladder_e2e.py(OAFLOW_CANVAS_LADDER_E2E=1) builds the fixture, runs the harness, assertsaccepted.canvas-nodom-ladderworkflow (drafted; not a per-PR required gate — it drives a real browser over a VNC round-trip, minutes not seconds).License posture
Fixture apt-installs noVNC (MPL-2.0) / websockify (LGPL-3) / TigerVNC (GPL-2.0) as external apps run at test time in a repo-only image; nothing is vendored into or shipped by the wheel/sdist (
benchmark/excluded). Consistent with AGENTS.md License Hygiene.🤖 Generated with Claude Code