Goal
Add a PROOF9-gated [Merge] button to the PR Status panel so the merge action enforces proof obligations before it becomes available.
Background
Follows the PR Status panel (#570). "Merge is gated on PROOF9 pass" is a core vision statement. Without a merge gate in the UI, this guarantee only exists in the CLI. The [Merge] button should be the last action in the SHIP phase.
Scope
[Merge] button (added to the PR Status panel from #570):
- Calls
POST /api/v2/pr/merge with the PR number
- Active only when both conditions are met:
- All CI checks have passed
- PROOF9
GET /api/v2/proof/status returns no open (non-waived) requirements for the current workspace
- Blocked state (either condition unmet): button is disabled with a tooltip explaining what's blocking
- PROOF9 blocking message: if open requirements are blocking, show an inline list of the blocking REQ titles with a link to the PROOF9 page
- CI blocking message: if CI is still running or failing, show "Waiting for CI checks" / "CI checks failing"
- On merge success: show confirmation banner, stop polling
Acceptance criteria
Goal
Add a PROOF9-gated [Merge] button to the PR Status panel so the merge action enforces proof obligations before it becomes available.
Background
Follows the PR Status panel (#570). "Merge is gated on PROOF9 pass" is a core vision statement. Without a merge gate in the UI, this guarantee only exists in the CLI. The [Merge] button should be the last action in the SHIP phase.
Scope
[Merge] button (added to the PR Status panel from #570):
POST /api/v2/pr/mergewith the PR numberGET /api/v2/proof/statusreturns no open (non-waived) requirements for the current workspaceAcceptance criteria
npm testpass