# a11y-loop benchmark: baseline vs. skilled generation (2026-10) The same six UI components, built by the same model with and without the a11y-loop skill, three runs per condition. Every file was then checked by three engines: a11y-loop itself, IBM Equal Access, and Lighthouse. This is **not a controlled study.** It is a small, repeated comparison from one model family. Read it for the shape of the effect, not for a precise effect size. The previous run is kept unchanged as [benchmark-results-2026-07.md](benchmark-results-2026-07.md). Its files now live under `outputs/2026-07/`, so the paths quoted inside it point one level higher than they used to. ## What changed since 2026-07 - **Three runs per condition, not one**, so the tables show min and max as well as means. - **Two engines that are not a11y-loop.** IBM Equal Access has its own rule engine. Lighthouse runs axe-core, the same rule engine a11y-loop uses, under its own configuration. So only IBM is an independent rules engine. Lighthouse cross-checks the harness, not the rules. - **A clean baseline.** A probe showed that Claude Code subagents started from inside this repository can read its `AGENTS.md` and the project's memory index, both of which talk about accessibility. The as-designed baseline was therefore not a no-guidance condition. Both conditions were re-run from an empty directory outside the repository, and **those clean runs are the headline arms.** The contaminated runs are reported alongside them, because the difference is itself a finding. See [outputs/2026-10/contamination-probe.md](outputs/2026-10/contamination-probe.md). - **A model review** of two converged files, labelled for what it is. ## Method **Components.** A signup form, a pricing section, a customer-stories gallery, a header with a mobile drawer, a newsletter modal, and a small dashboard. These are the same six task descriptions as 2026-07, word for word. **Model.** Claude Sonnet 5.5 (`claude-sonnet-5-5`) in both conditions, in a fresh session per run. **Arms.** The 2026-10 runs produced 72 HTML files across four arms. | Arm | Harness | Context | Runs × files | Output | |---|---|---|---|---| | **baseline** (headline) | `claude -p --model sonnet`, Claude Code 2.1.303, started in an empty directory outside the repo | no project file, no memory index, a11y-loop plugin disabled | 3 × 6 | `outputs/2026-10/baseline/run-N/` | | **skilled** (headline) | same | same, plus the prompt below | 3 × 6 | `outputs/2026-10/skilled/run-N/` | | agent-tool baseline | Claude Code Agent tool, `model: "sonnet"` | inherits this repo's `AGENTS.md` and memory index | 3 × 6 | `outputs/2026-10/agent-tool/baseline/run-N/` | | agent-tool skilled | same | same, plus the prompt below | 3 × 6 | `outputs/2026-10/agent-tool/skilled/run-N/` | **Baseline prompt, verbatim.** Only the directory changed between runs. The words accessibility, a11y, WCAG and ARIA do not appear in it. It is the 2026-07 baseline prompt unchanged. > You are a web developer knocking out six small front-end deliverables for a > startup's marketing site. Work quickly and pragmatically, the way you'd > normally write this kind of code. Each deliverable is ONE self-contained HTML > file (inline CSS in a `