Artifact uploads (PLC .projectarchive, firmware images, mobile packages) larger
than axum's 2 MiB default request-body limit were rejected, and the wizard
swallowed the error (`let _ = upload_target_artifact`), so the target was created
with no artifact — every scan then showed "blocked, no artifact provided".
- agent: DefaultBodyLimit::max(512 MiB) on the API router (multipart upload route).
- dashboard: DefaultBodyLimit::max(512 MiB) on the axum app serving the upload
server function (the browser→dashboard hop).
- wizard: surface upload failures in the error banner instead of ignoring them.
Found live: a 9.9 MB CODESYS .projectarchive failed to attach (a 1.7 KB .st worked).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>