fix(canopy-store): upload validation too thin (magic bytes, filenames, scanner)
External review (2026-05-09) flagged crates/canopy-store/src/validation.rs:39 as too thin. CRAIG has more robust validation in craig-store:
- Magic-byte checks (not just MIME type — clients lie)
- Content-Disposition normalization
- Unicode filename validation (NFC normalize, reject control chars)
- AV scanner integration hook
- Periodic reconciliation: orphan-detection (DB row without object) + storage-leak detection (object without DB row)
Refs
External review (2026-05-09). CRAIG references: crates/craig-store/src/validation.rs:38, craig-store/src/scanner.rs:3.