Soluzione
ESITO: fatto
COSA: numpad.js: toggleSign() funziona a display vuoto; - e + dell'HID impostano il segno in modo assoluto. Prova originale rilanciata: -1.25⏎ → −1.25. Test…
Soluzione
ESITO: fatto
COSA: I dati Jinja dentro x-data passano da `
Soluzione
ESITO: fatto
COSA: Con un admin presente reset-db, seed, manage-user, change-user-password, init-db rispondono 403 salvo SETUP_ALLOW_AFTER_INIT=true. Password confrontata…
Soluzione
ESITO: fatto
COSA: Il secchio «login» del rate limit copre anche /api/measurements/{id}/authorise, `/api/production-runs/{id}/pause
Soluzione
ESITO: fatto
COSA: _client_ip prende l'elemento di X-Forwarded-For a -TRUSTED_PROXY_COUNT da destra (default 1; 0 ignora gli header). I limiti sono divisi per WEB_CONCURRENCY…
Soluzione
ESITO: fatto
COSA: Nuova migrazione 000_base_schema.py con lo schema pre-001 esplicito, no-op se recipes esiste; la 001 ora discende da 000_base. init-db e reset-db fanno…
Soluzione
ESITO: fatto
COSA: save_measurement verifica quota↔versione (422) e, con production_run_id, validate_run_for_version: run inesistente 404, altra ricetta 422, chiuso o in…
Soluzione
ESITO: fatto
COSA: Copy-on-write esteso a update/delete di task e quote e a create_subtask (_task_for_write, _subtask_for_write in src/backend/api/routers/tasks.py): una…