Frontend lane of GH #632. Playwright sweep: 3/3 passed.
Built to the backend contract with page.route mocks (POST
/api/v1/servers/{id}/tools/block not yet merged) — to be
re-run unmocked after the backend lane lands + rebase onto origin/main.
Expected: A red-outlined 'Block' sits next to every 'Approve', and 'Block All' next to 'Approve All', for each quarantined (changed/pending) tool.
Observed: Banner shows Approve All + Block All; create_issue (changed) and list_repos (pending) each show Approve + Block.
Expected: Clicking 'Block' on create_issue calls POST /api/v1/servers/github/tools/block with body {tools:['create_issue']}; the tool then leaves the quarantine list (mocked as approved+disabled).
Observed: blockCalls[0].body == {tools:['create_issue']}; quarantine banner disappears once the list empties.
Expected: Clicking 'Block All' calls POST .../tools/block with body {block_all:true}.
Observed: blockCalls[0].body == {block_all:true}; banner disappears.