---
title: "Dock for Design: accessibility review workspaces with attributed agent audits"
excerpt: "Figma and the live site hold the artifacts. Dock is the accessibility-review table where the agent's WCAG audit, color-contrast pass, screen-reader trace, and remediation rows live, with the a11y lead signing off before publish."
author: mei
category: Use Cases
date: "2026-05-30"
---

An accessibility review workspace in Dock is a table of audit rows. The agent runs the WCAG pass against a Figma frame or a staging URL, writes each finding into a row (criterion, severity, evidence link, suggested remediation), and the accessibility lead approves or rejects each row before the design ships. The canvas and the live page stay where they live. The interpretive record, who flagged what and who signed it off, lives in Dock.

Figma, Webflow, Framer, and the production codebase remain the system of record for the artifact itself: the frame, the published component, the DOM. Dock is the system of record for what the agent and the a11y lead interpret around the artifact: the audit row, the WCAG criterion cited, the screen-reader trace, the remediation status. Each row carries a pointer back (`figma_file_key`, `figma_node_id`, `webflow_collection_id`, the staging URL), the audit-agent identity, the criterion, the reviewer who approved, and the timestamp. The agent re-fetches platform state through fresh API reads when it needs to confirm a fix landed. Dock holds the persistent interpretive layer that survives across audit cycles and reviewer handoffs.

## The accessibility-review surface

| row_id | target | criterion | severity | agent_finding | evidence | remediation | reviewer | status |
|---|---|---|---|---|---|---|---|---|
| a11y-0142 | figma:pricing/hero-cta | 1.4.3 Contrast (Minimum) | AA fail | Button text #8A8A8A on #FFFFFF measures 3.4:1, below 4.5:1 | figma_node_id 14:228 | Darken token `--cta-fg` to #595959 (7.1:1) | priya@ | approved |
| a11y-0143 | staging.example.com/signup | 4.1.2 Name, Role, Value | AA fail | Custom select has no accessible name; VoiceOver reads "popup button" | trace.json | Add `aria-label="Plan tier"` to trigger | priya@ | approved |
| a11y-0144 | figma:nav/mobile-drawer | 2.1.1 Keyboard | A fail | Drawer closes on tap-outside only, no Esc handler in proto | figma_node_id 9:71 | Spec Esc dismiss in interaction notes | priya@ | rework |

Three rows, three artifacts, three criteria. The agent did not edit Figma. The agent did not push to Webflow. It wrote what it found, cited the criterion, and waited.

## One pass, end to end

The pricing redesign hits the a11y queue. The agent reads the Figma frame via the platform API, runs a contrast pass on every text-on-fill pair, and opens row a11y-0142. The finding cites [WCAG 2.2 success criterion 1.4.3](https://www.w3.org/WAI/standards-guidelines/wcag/), records the measured ratio, links the Figma node, and proposes a token change. Priya, the accessibility lead, opens the row, checks the math, approves. The approval writes her identity and timestamp into the row. The design-ops agent then picks up approved rows and applies the token fix in the Figma variables, following the handoff pattern in [Dock for Figma design ops](/blog/dock-figma-design-ops). When the same component ships through Webflow, the publish gate in [Dock for Webflow publishing](/blog/dock-webflow-publishing) blocks until every linked a11y row reads `approved` or `waived`. Nothing reaches production without a signed remediation row.

## Why the interpretive layer matters

Attribution. Six months later, when a customer reports the same contrast bug returned in a theme refactor, the audit row is still there. It names the agent that found it, the lead who approved the fix, the token that was changed, and the date. The pattern is the same one described in [agent audit and compliance](/blog/agent-audit-and-compliance): every consequential write carries an identity and a citation. Figma will not tell you that. The git log will not tell you that. The audit row will.

Handoff. Accessibility leads rotate. Agencies hand off to in-house teams. The next reviewer inherits the table, not a Slack thread. They see which criteria the previous agent applied, which severities the previous lead waived, and which rows are still open. Recurring violations stop being rediscovered every quarter.

Daily-driver experience. Designers do not want to read PDF audit reports. They want a row that says what to change, where, and who said yes. The a11y lead does not want to triage screenshots. She wants a queue. The agent does not need to remember anything between sessions: the row is the memory. According to the [WebAIM Million 2026 report](https://webaim.org/projects/million/), 95.9 percent of home pages still fail detectable WCAG conformance, with low-contrast text alone affecting 83.9 percent. The gap is not awareness, it is process. A persistent, attributed review queue is the process.

Read the full pattern in [the Dock for Design pillar](/blog/dock-for-design).

## FAQ

### How does the agent decide which findings to file as audit rows?
The agent runs the criteria configured for the workspace (WCAG 2.2 AA by default), files one row per distinct violation, and stops there. It does not edit the Figma frame, the Webflow collection, or the production code. Filing a row is a low-stakes write. Touching the artifact is a high-stakes write, governed by the [dangerous-ops contract](/blog/dangerous-ops-contract), and requires explicit approval.

### What stops the agent from auto-approving its own findings?
The reviewer column is gated by a two-key handshake: the agent that files the row cannot be the identity that approves it. This is the same pattern documented in [two-key handshakes for irreversible operations](/blog/two-key-handshakes-irreversible). For an a11y row to move from `filed` to `approved`, a human reviewer with a11y-lead role must sign, and their identity is written into the row.

### Does the agent re-run audits, or is each pass one-shot?
Each pass is a fresh API read against the current Figma file or live URL. The agent does not trust cached state. If a Figma frame changed since the last audit, the agent re-evaluates and opens new rows or closes resolved ones, citing the node ID and timestamp it read.

### Can we waive a criterion without fixing it?
Yes, with attribution. The reviewer can set status to `waived` and must add a justification. The waiver, the justifier, and the date persist in the row. Later audits surface waived rows so the team can revisit them rather than silently inheriting them.
