Hard reload. Recording gone forever
Proctoring video streamed directly into a single S3 multipart upload. Submit called CompleteMultipartUpload. Any browser crash or hard reload before submit left every uploaded part permanently orphaned — no assembled object, no recovery path.
Evidence
$ aws s3api list-multipart-uploads --bucket proctoring-prod
UploadId : a3f9...c2d1 State : in-progress
Parts : 14 uploaded
Object : <does not exist — 404>
Root cause
A multipart upload only becomes a readable S3 object after CompleteMultipartUpload fires. Until then the parts exist in S3 storage but produce a 404 on any GET. One missed event = permanent data loss with no server-side recovery hook.
Fix
Replaced the continuous stream with independent 30-second segments, each uploaded as a standalone PutObject — a complete, immediately readable file the moment it lands. A BullMQ job runs 10 minutes after quiz end time and merges whatever segments arrived, so even a full browser crash leaves an admin-viewable recording.