- The task-scoped pickers filter On Device rows on a task, and the chat picker
routes a diffusion pick by the same field, but those rows come from the
/api/hub inventory, which never carried one: the Images and Video pickers
listed nothing on device and the routing never fired. Both cached scans and
the local listing now tag rows with the classifiers the models API already
uses, the schemas and the frontend adapter carry it through, and a row the
backend classified as a generation task is exempt from the chat-only guard
that was also dropping it.
- The local routing map was keyed by model_id while the row click passes id (a
filesystem load id for a models_dir or LM Studio entry), so the lookup missed
and the pick fell through to the chat loader. Key both.
- A staged download whose start answered "error" left its head in place, where
the effect never re-runs and onReady never fires, so the pick was stranded
until the user reselected. Clear the queue and say so.
- Every scoped pick in a repo shares the @diffusion variant, so the variant
alone cannot tell two file sets apart: restaging while the first job finished
let its completion pass for the new pick and load a checkpoint that had not
downloaded. Bind the callbacks to the repo + file set they started, and to the
staging generation.
- A rejected generate POST does not say whether it reached the backend, so an
immediately idle progress read was ambiguous and a submission that never
landed looked like a finished image. Require evidence: progress seen active,
or a gallery record that was not there before the POST.