A job running in the workspace refuses the legacy record-changing requests,
and a corrupt config.json refuses a settings save. The legacy pages now
name the reason instead of hiding it:
- LoRA import: the busy and failure frames carry status and progress, and
the admin modal handles type "error": it shows the message, notifies and
closes, instead of staying on "Initializing..." at 0%.
- Legacy batch auto-tag: a refusal by another job is a 200 stream with one
error frame ({type, status, message}), which both pages already render;
a second batch keeps its exact JSON 409.
- Gallery cache clear: a refused server clear shows the reason and stops
before the success toast and the "Not generated" reset.
- Admin settings save and maintenance show the reply's error ("config.json
cannot be read...", "Scan for metadata already running") instead of
"Failed to save settings" or "HTTP 409: Conflict".
- Tests cover the read-only /maintenance branch: a read-only selection runs
during a scan as a read hold; a mixed or default selection is refused.