Fixed on branch fix/link-mint-failure-not-role, commit 1c7f43c, deployed to edge and verified on the process: GET /api/version returns 1c7f43c.
The role rejection is a sentinel error now and the handler tells it apart. It is the one failure the person asking can act on, so it keeps its own notice; everything else takes a.fail — the same 500 handleLinkRevoke two functions below already gives for a broken write.
Correcting the issue as I filed it: this needed no new copy. I wrote that the fix should "give the second its own notice", and that was the wrong instinct. Routing an internal failure to the existing error path answers it correctly and adds nothing for anyone to read. A new sentence would have been a worse fix wearing the costume of a more thorough one — the person cannot act on a database failure, so a bespoke sentence about it buys them nothing over the generic one.
Two tests, and the second is the one that matters. The first drops the share_links table so the insert fails for real, on the same path a disk or migration fault would take. The second asserts an editor link is still refused by name — without it, a "fix" that stopped distinguishing failures in the other direction, by sending everything to the 500, would have passed the first test cleanly.
make test green including -race. Closing; not reviewed, per AGENTS.md §Review.