save_measurement non verifica coerenza fra quota, versione e produzione #5
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/services/measurement_service.py:216 ; src/backend/api/routers/vision.py:67-72 (stesso buco su
production_run_id)COSA: non si verifica che la quota appartenga alla versione, che il run esista, sia della stessa ricetta, sia
running.INPUT: (a) quota della ricetta A con
version_iddella ricetta B → 200. (b) misura della ricetta B dentro un run della ricetta A → 200. (c) misura su run chiuso → 200 consynced_to_csv=False, resta fuori dal CSV già emesso. (d) run in pausa accetta misure.VERIFICATO: script pytest → "SUBTASK di ricetta A su VERSIONE di ricetta B -> 200", "MISURA di ALTRA ricetta nel run -> 200", "MISURA su run CHIUSO -> 200 synced_to_csv= False".
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:09Z
ramo:
lavoro/jeeg· capacità: docker, gpu, systemdANALISI (passo 1) — ramo
lavoro/jeeg, worktree~/lavoro/TieMeasureFlowsu jeeg, lotto A1MODIFICHE: src/backend/services/measurement_service.py
save_measurement— prima dell'insert: (a) la quota deve appartenere a un task diversion_id→ altrimenti 422; (b) seproduction_run_idè dato: il run deve esistere (404), essere della stessa ricetta della versione (422), essere in stato che ammette misure: chiama la guardia esistente_require_measurabledi src/backend/services/production_service.py (o equivalente) → 409 se chiuso o in pausa. Esporre la verifica (b) come funzione riusabilevalidate_run_for_version(db, run_id, version_id)perché il lotto visione la chiamerà da vision_service.TEST: nuovi casi in src/backend/tests/ (file misure esistente): quota di ricetta A con versione di B → 422; misura di B in run di A → 422; run chiuso → 409; run in pausa → 409; caso valido → 200.
NON TOCCARE: src/backend/api/routers/vision.py e vision_service.py (lotto C1).
Soluzione
ESITO: fatto
COSA:
save_measurementverifica quota↔versione (422) e, conproduction_run_id,validate_run_for_version: run inesistente 404, altra ricetta 422, chiuso o in pausa 409. La stessa funzione è usata da vision_service.execute_task.COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a
d483fa1):7b01507PROVA:
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).