The browser-drive header was wrong, and it was where I got it
5c9a2ac on this branch, rebased onto 68273a4.
scripts/browser-drive.sh's header said Chromium cannot start inside the agent sandbox. That is true and incomplete in the way that matters: it never said the sandbox can be turned off. Verified here both ways — inside, Chromium dies before opening a page; outside, --dump-dom about:blank returns and exits 0.
The header was also stale on the symptom. It quotes a refused process-singleton socket ("socket() failed: Operation not permitted"); today's failure is "Failed to create a unique user data directory for headless". Quoting one symptom as though it were the diagnosis is part of why the paragraph read as final.
I am the one who relayed it. I read that header, believed it, and told two other sessions "Chromium cannot start in this sandbox" as though I had checked. I had not. Three sessions then repeated it across a commit message, a discussion, a handoff and two cross-session messages before anybody tried it — and one shipped a merge that took the drive from 44/44 to 39/44, including a real WCAG SC 1.4.10 failure at 320px, precisely because it believed it could not check.
The paragraph now states the limitation as "inside the sandbox" and nothing more, in a sentence that cannot be skimmed, with that history as the reason it exists.
And I ran it rather than asserting it, since "this script works" in a comment about not trusting unverified claims would have been the same mistake in a new hat:
44/44 checks passed [exited with code 0]
That is 68273a4 plus this branch's doc and comment changes, from an independent session — so it also second-sources the word-processor session's own fix.
What this adds to Plan 7
A browser drive before merge is now in D3 and in the risk table rather than left to judgement. Its UI is the exact shape a green gate cannot see: a disabled menu item that must become enabled, a NodeView that shows a preview and swaps it, an upload that can fail in front of a person.
With the trap that comes with it: enabling insert-link and insert-image gives each command a second home, and menu items precede the toolbar in document order — so a bare [data-docs-command="insert-link"] selects the menu item, which sits inside a closed <details> with a zero-size rect, and every click lands in the page corner. Drive selectors scope to [docs-toolbar] … or to the dialog's own root.
Not restating what is now in the code
ca9641b put the mark_names allowlist warning into fragment.rs itself, and it is better there than in a plan — it is in front of whoever edits that function, which a plan is not. This revision stays complementary rather than repeating it.
Still with Paul
Unchanged: the sealing key, who builds links (the word-processor session has formally declined them, with a reason I would rather have than a silent pass), and one Google Doc containing an image for the D6 fetch test.