Closes issue #28 (Metal Gear's item 3: run issue #164's performance sat queued 30+ minutes with no word why).
The placement pass already knew: for issue #164 the API's waiting said no runner can take it: earth-1 does not hold image 0ba25243a7c5; plex-1 does not hold image 0ba25243a7c5. It just wasn't shown where people look.
oh run viewandoh run watchprintwaiting: …under a queued job.- The run page opens that job's panel, so the reason is visible without a click.
- The job's check summary carries the reason whenever it changes, so a proposal's checks say why they're stuck instead of "waiting for a runner".
- Test:
a_job_no_runner_can_take_says_why(API, page, check). Hub gate green (163 tests, clippy, fmt).
Independent of proposal #131.