The three layers
┌──────────────────────────── BEHAVIOR ────────────────────────────┐
│ test (oracle) workflow (function) tool (MCP) │
├──────────────────────── DETERMINISM (the standard) ──────────────┤
│ flow → plan.json · bindings/ · resolver · relocalization │
│ checkpoints · audit · provenance · conformance suites │
├──────────────────────────── SURFACE ─────────────────────────────┤
│ snapshot(refs) · act(ref) · read · check · session │
│ Playwright │ BiDi │ Appium │ UIA │ AX │ HTTP │ WebMCP │
└──────────────────────────────────────────────────────────────────┘
model calls: compile residue · record grounding · heal · never at replay
The surface is one published interface, and each platform reaches it through an adapter: take a snapshot with stable references, act by reference, read, check, hold session state. Adapters exist for Playwright, WebDriver BiDi, Appium, Windows UI Automation, macOS Accessibility, HTTP, a process/terminal and Linux AT-SPI. An adapter existing is not evidence that it works: AT-SPI is implemented and unvalidated — nothing here has driven it against a live accessibility bus. What each adapter has actually been driven through is the support matrix — an adapter's existence is not evidence that it works. Nothing above the surface knows a locator, a protocol or a platform.
The determinism layer is the standard the project publishes: the step intermediate representation, the plan, the bindings store with fingerprints, the resolver, model-free relocalization, provenance, checkpoints, the audit log, and the conformance suites that hold adapters and foreign runtimes to those artifacts.
The behaviour layer runs one plan three ways: as a test, as a typed function with guards and checkpoints, and as a deterministic tool an agent calls.
The principles behind the shape
- Artifacts, not sessions. Every model decision is a committed, diffable file. Replay reads files only.
- The surface is the only way down.
- The determinism layer is the standard. Schemas, suites and provenance are published; adapters and runtimes are interchangeable against them.
- Testing is a behaviour, not the identity. Guards, checkpoints, abort policy, typed signatures and audit are in the contract from the first schema version.
- Adopt the runner, do not replace it. Web tests run inside Playwright Test; the core stays runner-agnostic for everything else.
- Pieces adoptable alone. Bindings and healing work in a plain Playwright project with no flow language.
- Fail at authoring, not at replay. Ambiguity, unbound targets and type
errors are rejected by
compileorrecord. - No platform, no fork, no transport. Orchestration is external; browsers and protocols are used, not replaced.
The design documents are the source of truth: HLD for the components and decisions, LLD for the interfaces.