Quote e task con misure si modificano e cancellano sul posto: lo storico cambia tolleranze #4
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
GRAVITÀ: alta
FILE: src/backend/api/routers/tasks.py:353 (update_subtask), :382 (delete_subtask), :263 (update_task), :286 (delete_task)
COSA: controllano solo
is_current, nonversion_has_measurements. Il copy-on-write esiste solo increate_taskeupdate_recipe. Ipass_failstorici non corrispondono più ai limiti; SPC ed export usano i limiti nuovi.INPUT: misura 10.0 su nominale 10 (pass), poi
PUT /api/subtasks/1 {"utl":9,"ltl":8}→ 200, versioni restano [1].DELETE /api/subtasks/1con misure → 204.VERIFICATO: script pytest su SQLite → "PUT subtask con misure -> 200", "VERSIONI dopo modifica: [1]", "DELETE subtask con misure -> 204".
PRESUNTO: su MySQL il DELETE dà IntegrityError → 500 (FK
measurements.subtask_idsenza ondelete).TEST:
src/backend/tests/test_tasks.pynon ha casi con misure presenti.ORIGINE: revisione fable del 21/09/2026 su ramo
V3.0.0, commit8cc5e82. Documento completo:_output/2026-09-21-TieMeasureFlow-revisione.mdsu Wasabi.⚡ jeeg — preso in carico 2026-09-21T20:22:07Z
ramo:
lavoro/jeeg· capacità: docker, gpu, systemdANALISI (passo 1) — ramo
lavoro/jeeg, worktree~/lavoro/TieMeasureFlowsu jeeg, lotto A1MODIFICHE: src/backend/api/routers/tasks.py — in
update_task,delete_task,update_subtask,delete_subtask(ecreate_subtaskse manca): dopo_ensure_version_is_current, se la versione ha misure (riusa l'helperversion_has_measurementsgià usato dacreate_task/update_recipein src/backend/services/recipe_service.py) applica lo stesso copy-on-write dicreate_task: crea la nuova versione, ritrova nella copia il task/la quota corrispondente (stessa posizione/ordine) e applica lì modifica o cancellazione. La versione con misure resta intatta. Se il copy-on-write non è riusabile senza riscrivere recipe_service, ripiego accettabile: 409 con detail «version has measurements: create a new version».TEST: src/backend/tests/test_tasks.py — PUT e DELETE di quota e di task con misure presenti: la versione vecchia conserva limiti e quote, le misure restano legate alla versione vecchia, esiste una versione nuova corrente con la modifica.
NON TOCCARE: il comportamento su versioni senza misure (modifica sul posto).
Soluzione
ESITO: fatto
COSA: Copy-on-write esteso a update/delete di task e quote e a create_subtask (
_task_for_write,_subtask_for_writein src/backend/api/routers/tasks.py): una versione con misure non si tocca più, la modifica atterra sulla copia nella nuova versione. L'editor (templates/maker/task_editor.html) ricarica la pagina quando il backend risponde 409 o restituisce id diversi, perché dopo il copy-on-write gli id in memoria sono vecchi. Il sospetto MissingGreenlet in create_task non è riproducibile: resta il test di guardia.COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a
d483fa1): b27d56d; 2b00f83;77d95fdPROVA:
uv run --extra server --extra client --extra dev pytest -q→ 622 passed, 4 skipped (erano 391); visione su Python 3.13 → 16 passed (erano 8).