An agent marks a change ready_for_review. A person sees the evidence, the preview, and the gate — then approves and releases in one informed click. Built on the DevLoop evidence contract; the compliance gate is visible, not bypassable.
Every storefront gets one home. It opens with the storefront's own clearance status — are the compliance-critical checks green right now? — and puts the work that needs a human first.
The review queue shows only this storefront's changes in ready_for_review. Each row reads in plain language and shows its evidence state at a glance — so you triage before you open anything.
The reviewer decides primarily from one EvidenceReport. We render it as a sealed manifest: compliance-critical checks are visually load-bearing and sit apart from advisory ones.

When every compliance-critical check passes, promotable is true: the Clearance Seal stamps CLEARED FOR RELEASE and Approve is a live, one-click action — with the proof sitting right beside it.

This is the non-negotiable. When promotable is false, Approve is structurally absent — not a greyed-out button you could wish into working. In its place: a locked plate naming the exact failing checks.

The same blocked change, end to end: the before→after preview catches the bundle route rendering before the age gate, and the manifest's compliance-critical rows turn red with a plain-language detail and a link to the crawl proof.
Reject isn't a silent bounce. It requires a typed reason, returns the change to in_progress, and writes an immutable audit entry — approver identity, reason, timestamp. Even a green change can be rejected this way.

On approval the change ships and an editable announcement draft is generated from the change summary and the feedback it closes. The reviewer edits, then publishes — to the changelog, and as a notification back to the original reporter.
A lifecycle track rides the top of every detail screen, so the reviewer always knows the stage — and the off-track outcomes are explicit.
And it degrades gracefully: when the queue is clear, the screen is an invitation, not a void.
If promotable is false, Approve is structurally unavailable — replaced by the failing compliance checks. Not discouraged. Impossible.
Submitters and reporters are opaque ids — never email. The surface shows only this storefront's changes.
Never merchant claims or legal / age / excise / price copy. That lives on the storefront, not the changelog.
Every pass / warn / fail / skip pairs color with an icon and a word. Lifecycle carries a text label and an aria description.