Skip to content

bench(canvas): no-DOM HTML5-canvas vision-ladder qualification (accepted)#181

Merged
abrichr merged 2 commits into
mainfrom
feat/canvas-ladder-nodom-20260720
Jul 20, 2026
Merged

bench(canvas): no-DOM HTML5-canvas vision-ladder qualification (accepted)#181
abrichr merged 2 commits into
mainfrom
feat/canvas-ladder-nodom-20260720

Conversation

@abrichr

@abrichr abrichr commented Jul 20, 2026

Copy link
Copy Markdown
Member

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 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.

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.jsonaccepted: true (three regimes)

Regime Asserts Result
healthy record→compile→replay succeeds, 0 model calls, visual rungs only (template ×3, structural never used), write independently confirmed by the oracle
moderate (legible) drift resolves to the correct target (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)

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 confirms MRN A1001\tfollowup in two weeks), so the drift regimes are meaningful.

CI / tests

  • Env-gated e2e tests/e2e/test_canvas_nodom_ladder_e2e.py (OAFLOW_CANVAS_LADDER_E2E=1) builds the fixture, runs the harness, asserts accepted.
  • Nightly canvas-nodom-ladder workflow (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

…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
@abrichr
abrichr merged commit 194b65a into main Jul 20, 2026
13 of 15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant