Round 39 review findings (2 P1 + 1 P2):
1. routes/datasets.py: validate raw multipart filename before sanitize so
smuggled control chars (NUL, newline) are rejected at the same boundary
as the JSON path in seed.py. Previously _sanitize_filename stripped the
control chars first, letting raw inputs slip past the validator.
2. routes/inference.py: extend RuntimeError -> 503 mapping in /images/load
to classify "Another GPU workload is mid-handoff" as retryable, so the
backend-surfaced phrasing matches the route-level 503 already returned
from _raise_if_helper_advisor_busy.
3. core/inference/diffusion.py: redact hf_ tokens in the local-path branch
of _display_repo_id so a leaf directory named hf_<token> cannot leak
into UI labels or structured logs.