By: Michael Lynch <git@mtlynch.io>
Introduce littlemoments.UploadPath; validate inline instead of via Processable types Replace uploads.ProcessableImage/ProcessableVideo with inline validate-then-process calls in ProcessImage/ProcessVideo: those types only ever proved validation happened before a *separate* caller processed the file, but now validation and processing happen in one call, so nothing outside the function observes the intermediate value. Replace the zero-validation littlemoments.VideoUploadPath and the plain string used for image paths with one shared, validated littlemoments.UploadPath type (rejects empty and "/"), threading it from handlers/upload.go's copyToTempFile through to convert.ExtractPreviewFrameFromVideo, which now takes the path and duration directly instead of via a convert.ProcessableVideo interface.
| Time to Start | Worker time | Duration | Time to finish | Idle | |
| Config | 1s | 3s | 3s | 4s | 1s |
| Eval | 6s | 20s | 20s | 26s | 1s |
| Build | 23s | 5m59s | 2m13s | 2m36s | 0s |
| Suite | 1s | 6m23s | 2m34s | 2m36s | 2s |