- sharp usa binario prebuilt (libvips embarcado) -> remove apk vips/vips-dev (camada ~400MB)
- toolchain (python3/make/g++) virtual, removido na mesma RUN
- .dockerignore exclui updates/ (196MB, servido por volume), data/, bkp/, **/node_modules
- corrige PUT 500/499 no registry (camadas grandes estouravam o limite de upload)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- clinica_id (tenant do scoreodonto, clinicas.id) como eixo de isolamento em
clinics_devices e images (+índices); clinic_name vira rótulo legível.
- Cadastro de device, socket (machine_token) e uploads (direct + legado) gravam clinica_id.
- Listagens (/images, /patients, /by-patient, /unique-clinics) filtram por clinica_id.
- /clients: lista clientes Windows ativos (inclui autenticados sem client-identify),
tempo real + polling, exibe a clínica.
- send-image marcado como legado (client real usa Direct Upload).
Inclui trabalho de dev acumulado no working tree (não havia commits desde origin/main).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>