--- id: F-0004 type: framework-finding class: FRAMEWORK_LIMITATION status: open discovered: "2026-08-22" discovered_by: TD-WP-0002-T07 workplan: TD-WP-0002 task: TD-WP-0002-T07 carried_to: TD-WP-0002-T10 --- # F-0004 — The browser surface is driven without a browser ## Decision `TD-WP-0002-T07` names Playwright as the browser driver. It was not used. Instead, `src/testdriver/html.py` parses the lab's server-rendered HTML with `html.parser`, and `src/testdriver/browser.py` drives it over real HTTP. Reasons, in order of weight: 1. **The lab's surface has no JavaScript.** It is server-rendered forms. A browser engine would not change what H-001 or H-002 can be measured against — the mutations that matter are DOM restructuring, rewording and field renaming, all of which a parser faces in full. 2. **Establishing Playwright is a real cost to the operator** — installation plus a licence review, and the usual snag is the Chromium binaries the installer pulls rather than the library licence itself. Blocking the vertical spike on that was not worth it for a surface that gains nothing from it. 3. **The stack is deliberately boring.** Zero dependencies remains true. `Driver` is a Protocol, so a Playwright implementation sits alongside this one without touching the kernel, the oracles or the evidence format. ## What this costs — stated, not buried The driver cannot: - execute JavaScript, so **no single-page-application surface can be driven**; - take screenshots, so that evidence type listed in `INTENT.md` is unavailable; - read an accessibility tree, or observe visual layout at all. The third is the most consequential for the thesis. A real mechanical change often moves a control *visually* while leaving the DOM largely intact, and this driver is blind to that entire class. H-001's mutation set is therefore narrower than the hypothesis's wording implies: it tests **structural** durability, not **visual** durability. That should be said plainly whenever the H-001 result is quoted. ## Carried to T10 Two questions, neither answerable now: 1. Does a Playwright driver actually change the H-001 result, or merely widen the surface it can reach? Worth one experiment, not a rewrite. 2. Is the screenshot evidence type in `INTENT.md` load-bearing, or was it listed because screenshots are conventional in this space? If nothing has needed one by T10, that is a candidate for compression.