v0.4.2 — the panel lost the race it had to win
Two symptoms, one cause: the review did not block, and the panel sat on "Opening…" forever.
The server waited 4 seconds for a panel to attach. The panel gave itself 3 to find its proposal. A first mount has to fetch a half-megabyte UI resource, boot an iframe, run React, finish the ui/initialize handshake, and only then call a tool — it lost that race every time. The grace expired, the opening call returned "nobody answered", and the agent carried on as though there had been no review.
Both budgets are 30 seconds now.
Why it was invisible
The loading branch rendered a bare "Opening …" and never read failure, so a failed claim looked exactly like a slow one — a spinner forever, with the real error sitting in state nothing displayed. It now names the step it is on (waiting for the host / claiming the proposal / attaching) and shows the error when there is one.
It also stopped retrying as soon as it had a proposal id rather than the proposal itself, so an id from the handle with a failed attach behind it left nothing retrying.
187 tests. Reinstall the .mcpb below.