fix: training idempotency ID check, File-vs-Path Optional/Union coercion, reject HTTP URLs
- Add missing ID mismatch guard to PUT /trainings/{id} (parity with PUT /predictions/{id})
- Extend detect_file_fields to unwrap Optional[File], File | None, Optional[list[File]]
- Reject http:// URLs in ParseWheelValue and schemagen ResolveBinary (HTTPS required)
- Add regression tests for all three fixes