Encoding finished while the UI still said processing
Context
Video playback depends on an encoding proxy after the master file lands in object storage.
What went wrong
Webhooks lag or drop. The database still said transcoding after encoding finished, so the UI polled forever.
What we changed
I added self-heal on single-asset GET and board list: if the proxy is ready and the row is not, the next read repairs the row.
Result
Operators do not need to open every stuck card. Recovery no longer depends on perfect webhook delivery alone.