Move to… and board dragging are limited to the user's own private boards, and only the user's projects take drops.
The deleted-board check asks the server afresh whenever a project loads instead of trusting earlier answers.
Projects loaded into the editor drop selections, auto-add and queued targets naming boards the server reports gone.
GET /boards/{id} answers 404 only for a missing board; placement reads a board back before reporting it unmoved.
Board lists refresh after a rollback, the project cover skips empty boards, and focus follows a moved board's row.
Board rows drag onto the open project, the Library or another project; project counts include the inbox.
Deleting a project clears open projects' references to its boards; imports refresh board lists once boards are placed.
An unanswered project create is settled by reading it back; restores pool uploads across boards and report placement.
Only ModelLoader checks a cold load against edits of its record before caching it.
The registry now rejects any other class at registration, and the load service
refuses one supplied by a custom registry.
Mark formats that install but fail on load as L, keep R for install-time refusals, and mark unrecognized files ✗.
Gemma-4 installs only as a folder with its config and tokenizer; quantized VAEs are not refused everywhere.
Upgrade docs to astro 7 and Starlight 0.42 (adding @astrojs/markdown-remark) and sharp 0.35.
Bump webv1's vite, nanoid, jsondiffpatch, react-router-dom, react-use and concurrently, and override vulnerable rollup 4.
Refresh vulnerable transitive packages in the api, webv1, webv2 and docs lockfiles.
Merge main while preserving project and Library destinations alongside sparse gallery paging.
Update the combined browser fixture and retain main performance measurements.
Add pinned PiD 1.5 starters for FLUX.1 and FLUX.2 (bf16 and int8) and pin the Qwen-Image ones to the same commit.
Calibrate the decode working-memory estimate to the device-level peak, per allocator, so the cache evicts enough.
Show the PiD Decode mode in Generate for every PiD base, not only SDXL.
Cold loads wait for in-progress edits of their model before reading its record, and the check under the
lock only consults in-memory edit state; edits report whether they changed how the model loads, so renames
no longer reject loads. Also retry a load whose files moved with its record, and always emit model_load_complete.
Add Main_GGUF_ErnieImage_Config and a GGUF loader; identification rests on the keys, since the published files name another architecture in their header.
Move unpack_ggml_at_load into the GGUF package as its second caller; the ERNIE node accepts GGUF as a single file and the denoise reserves its dequantization transient.
Add unsloth Q4_K_M and Q8_0 starters for ERNIE-Image and ERNIE-Image Turbo, pinned to their commits.
New Model Format Support page lists which formats load, are refused or do not exist for every main model, text encoder, VAE and adapter family.
Model Families links to it from its quantized-formats section, and the new-model checklist asks to keep it current.
The settings UI numbers devices after the iGPU is hidden, so hiding it only while device and generation_devices were auto renumbered saved choices on the next start.
Naming an integrated GPU beside a discrete one under Windows ROCm is now refused with a reason instead of crashing at the first kernel.
The probe takes the answer as soon as the child prints it, gives up after 60 s, and warns with the reason when it cannot answer.
Move #9669's load fingerprint into model_load_common.load_settings_changed (path resolved against models_path for the fence) and keep reidentify's cache drop inside its record_edit bracket.
board.json may name at most 1000 boards: the reader refuses more, export and duplicate refuse before any request, so a few kilobytes of empty boards can no longer ask the importer for an unbounded number of creates and moves.
A name no board has gets a create row under the open project and under the Library, so the choice is made where the board will show; Enter with no matches still creates in the project.
Each tier's "+" now opens a create dialog, started from whatever is typed, instead of focusing the search field and remembering a tier; a failed create keeps the dialog and its name, and the board create action reports its outcome.