Review fixes for the staged LoRA import (#221):
- The metadata files are listed and fingerprinted again right before the
replace transaction, so a file changed, removed or added while the
downloads ran aborts the import with nothing deleted (System job:
plan-changed, Review again; legacy scan: an error frame in its own
words). The tests now change real files behind a held download.
- A legacy scan whose page closes stops staging before its next LoRA and
keeps its records hold until staging has stopped; CivitAI images are
written to a temp file beside the cache entry and moved in place, so a
half-written image is never seen as cached.
- Start refuses with plan-changed when the integration was turned off or
moved to another install since the review.
- A failed job keeps the skipped count and the names of the LoRAs that
could not be prepared.
- The replace binds the category instead of one parameter per prompt
(SQLite's variable limit), /lora/status says whether a detected install
can be used, and the legacy scan logs expected refusals as warnings.