v0.8.0
Two seams, both for distributions that lift the defaults.
Multipart reaches per-user buckets
MultipartUpload.supported? asked a service for a client and a bucket. A service that resolves a different bucket per blob key has neither, so every upload it handled stayed on the single PUT path at roughly 5 GB. Nothing failed, which is what made it easy to miss.
Such a service can now answer multipart_service_for(key) and return the one bucket that key lives in. abort_abandoned! still takes a single bucket, so a service fronting many has to call it per bucket rather than passing itself.
The per-file limit is separate from the delivery total
max_send_size_for was read in two places that mean different things. Api::V1::DirectUploadsController, User#reserve_blob! and GoogleDriveImportJob check one file; DeliveryRevision and Collection check files.sum(&:byte_size). Before multipart both were bounded by the same physical wall, so conflating them cost nothing. Now that the wall is gone, one large file and twenty smaller ones summing to the same total are different things.
Campsend::Policy#max_file_size_for(user) returns max_send_size_for(user), so one file can still fill a delivery and nothing changes unless you override it.
Full changelog: v0.7.0...v0.8.0