← Dev log
EduQate·data integrity·2026-07-14

A new upload path that quietly dropped a feature

Moving from multipart upload to a presigned S3 PUT bypassed the thumbnailer, so every new upload stored thumbnails_json: null with no error.

Built, and nothing used it

Shipped, typechecked, dependency-injected, unreachable. Nothing ever called it.

The Rust thumbnailer was only ever called from the old multipart upload endpoint. The path the app actually uses now — presigned URL, client PUTs straight to S3, backend registers the record afterward — never touched it. Every gallery photo, logo and cover uploaded through the real flow got thumbnails_json: null forever, with no error, because the handler that registers the record genuinely has no access to the bytes in-process anymore. They went straight to storage by design, and the "download it back and thumbnail it" step never got added when the new path replaced the old one.

Added an object-download method to the storage service and wired the same best-effort thumbnailing into the presigned handler. When a new path replaces an old one for real usage, check that everything the old one did carried over, not just the primary thing — replacements get reviewed against "does the core thing work," not "does it do everything its predecessor did."