Business Adjacent · Flight Log · FL-006

·reviewtube·locked

Upload freeze — silent wait is a product bug

IncidentCourseShip


Signal

Small video upload left the customer UI frozen or stuck at a dead 0%.

Wrong turn

Gate upload on IndexedDB; wait forever on Stream webhook; show “Uploading 0%” during setup.

Correction

IDB optional; live byte progress via XHR; honest phases; soft-timeout never lies about Ready; Stream self-heal on read paths.

The user does not experience “async encoding.” They experience a screen that stopped talking to them.

We traced multiple root causes: client no-ops when storage was blocked, progress that only updated after whole parts finished, UI that claimed readiness before Stream was playable, and board lists that never reconciled a missed webhook.

The fix set is a reliability stack, not a spinner. Getting ready, starting transfer, sending real percent, saving the master, making it playable — language that matches physics. Self-heal on asset GET and board so the database does not wait for a human to open the cut.

Proof