Review Gallery
One place to see every changed surface in the state that shows the change, without making test data. Two halves that share one list: a native window under Diagnostics ▸ Review Gallery… for the Mac app, and a dev-only page at /report/dev/review for the web report. Each entry renders the real view, fed fake inputs; nothing is redrawn by hand, so what you see is what ships.
1 · The Mac window
The same shape as Sidebar Lab and Keycap Gallery: a source list on the left, the specimen on the right. Selected here: the boot-failure pane from f7048124 and 4d8053c9.
Couldn’t start Bristlenose
Couldn’t start Bristlenose
Bristlenose stopped before it finished starting (code 1).
2 · An entry with many states at once
Where a change is a family of small states, the canvas lays them out side by side instead of one at a time. These are the real sidebar cells (ProjectSidebarOutline), each fed a fake study.
3 · The web page
Dev builds only (serve --dev), never in an export or a release. The same list on the left; the specimen is the real React component. Its one new tool is a fault bar: fail or hang a chosen request, so failed-read and crash states need no code edit and no killed server.
A lens crashes
4 · How it stays honest, and what it costs
| Question | Answer |
|---|---|
| How does an entry get in? | A small registry, one entry per changed surface: title, the commits, the view, and its fake states. Adding the entry is part of landing the UX change; a test fails if an entry names a view or a state that no longer exists, so the gallery cannot quietly rot. |
| Real views or drawings? | Real. The Swift window hosts the actual SwiftUI/AppKit view; the web page mounts the actual component. That is why it needs the fake-input seams below and not screenshots. |
| What’s needed first (Mac) | The window itself; new fixture states for the sidebar row and popover (provider not set up, damaged manifest, report crash, Exporting…, downloading speech model, no analysable interviews); wiring the half-built Whisper debugApply; a Keychain-refusal seed through the existing KeychainStore injection. |
| What’s needed first (web) | The dev-only page; the fault bar (a request-fault injector and a per-part crash trigger), compiled out of release and export builds. |
| What it covers | Of the 69 changes since Monday: the 19 gallery items and 4 seeds directly, and about 7 of the 26 hands items once the fault bar exists. The 20 look items stay in the review list as links. What it can’t fake honestly (a real Keychain prompt, an iCloud placeholder, two windows) stays on the hands list. |
| Who sees it | Mac: the Diagnostics menu, debug and .dmg beta builds only, like the other labs. Web: serve --dev only. |
| Review state | “Mark reviewed” is per machine and per change window; it resets when the list moves on. |
This is new tooling, not product UX, but it is architecture: a registry and two fake-input seams. That’s why it’s a mockup for your call rather than something built under the trust goal.