Produzioni: nessun ruolo né legame con la stazione; ricetta non assegnata misurabile via barcode #24

Closed
opened 2026-09-21 20:14:48 +00:00 by Adriano · 3 comments
Owner

GRAVITÀ: media
FILE: src/backend/api/routers/production.py:46-163 ; src/backend/services/production_service.py:179 ; src/frontend/flask_app/blueprints/measure.py:390-408, 188-225, 269
COSA: gli endpoint dei run chiedono solo get_current_user. open_run non verifica StationRecipeAssignment né recipe.active. Lato Flask il filtro per stazione vale solo per l'elenco: barcode, /measure/start/<id>, /measure/execute/<id> accettano qualunque ricetta.
INPUT: Maker senza MeasurementTec apre un run su stazione a cui la ricetta non è assegnata.
VERIFICATO: script pytest → "RUN aperto da Maker (no MeasurementTec, ricetta non assegnata alla stazione) -> 201".

ORIGINE: revisione fable del 21/09/2026 su ramo V3.0.0, commit 8cc5e82. Documento completo: _output/2026-09-21-TieMeasureFlow-revisione.md su Wasabi.

GRAVITÀ: media FILE: src/backend/api/routers/production.py:46-163 ; src/backend/services/production_service.py:179 ; src/frontend/flask_app/blueprints/measure.py:390-408, 188-225, 269 COSA: gli endpoint dei run chiedono solo `get_current_user`. `open_run` non verifica `StationRecipeAssignment` né `recipe.active`. Lato Flask il filtro per stazione vale solo per l'elenco: barcode, `/measure/start/<id>`, `/measure/execute/<id>` accettano qualunque ricetta. INPUT: Maker senza MeasurementTec apre un run su stazione a cui la ricetta non è assegnata. VERIFICATO: script pytest → "RUN aperto da Maker (no MeasurementTec, ricetta non assegnata alla stazione) -> 201". ORIGINE: revisione fable del 21/09/2026 su ramo `V3.0.0`, commit 8cc5e82. Documento completo: `_output/2026-09-21-TieMeasureFlow-revisione.md` su Wasabi.
Adriano added the bug label 2026-09-21 20:14:48 +00:00
Adriano added the assegnata:jeeg label 2026-09-21 20:23:03 +00:00
Author
Owner

⚡ jeeg — preso in carico 2026-09-21T20:23:03Z
ramo: lavoro/jeeg · capacità: docker, gpu, systemd

⚡ jeeg — **preso in carico** 2026-09-21T20:23:03Z ramo: `lavoro/jeeg` · capacità: docker, gpu, systemd
Author
Owner

ANALISI (passo 1) — ramo lavoro/jeeg, worktree ~/lavoro/TieMeasureFlow su jeeg, lotto A1+B2

MODIFICHE backend (lotto A1): src/backend/api/routers/production.py — aprire/avanzare/pausa/ripresa/chiusura richiedono ruolo MeasurementTec o Supervisor o admin (usa i require_* esistenti in auth/dipendenze). src/backend/services/production_service.py open_run — rifiuta 422/409 se la ricetta non è active o, quando la stazione ha assegnazioni (StationRecipeAssignment), se la ricetta non è fra quelle assegnate. Una stazione senza alcuna assegnazione resta libera (comportamento attuale del filtro elenco: verificalo in station_service e replica la stessa regola).
MODIFICHE frontend (lotto B2): src/frontend/flask_app/blueprints/measure.py — lookup_barcode, start_sequence, task_execute: applica lo stesso filtro per stazione dell'elenco; ricetta non assegnata → 403/messaggio «ricetta non assegnata a questa stazione».
TEST: backend: Maker senza MeasurementTec → 403; ricetta non assegnata → rifiuto; assegnata → 201. frontend: src/frontend/flask_app/tests/test_measure_station_filter.py — barcode e start di ricetta non assegnata rifiutati.

ANALISI (passo 1) — ramo `lavoro/jeeg`, worktree `~/lavoro/TieMeasureFlow` su jeeg, lotto A1+B2 MODIFICHE backend (lotto A1): src/backend/api/routers/production.py — aprire/avanzare/pausa/ripresa/chiusura richiedono ruolo MeasurementTec o Supervisor o admin (usa i `require_*` esistenti in auth/dipendenze). src/backend/services/production_service.py `open_run` — rifiuta 422/409 se la ricetta non è `active` o, quando la stazione ha assegnazioni (`StationRecipeAssignment`), se la ricetta non è fra quelle assegnate. Una stazione senza alcuna assegnazione resta libera (comportamento attuale del filtro elenco: verificalo in station_service e replica la stessa regola). MODIFICHE frontend (lotto B2): src/frontend/flask_app/blueprints/measure.py — `lookup_barcode`, `start_sequence`, `task_execute`: applica lo stesso filtro per stazione dell'elenco; ricetta non assegnata → 403/messaggio «ricetta non assegnata a questa stazione». TEST: backend: Maker senza MeasurementTec → 403; ricetta non assegnata → rifiuto; assegnata → 201. frontend: src/frontend/flask_app/tests/test_measure_station_filter.py — barcode e start di ricetta non assegnata rifiutati.
Author
Owner

Soluzione

ESITO: fatto
COSA: Backend: aprire/avanzare/pausa/ripresa/chiusura richiedono MeasurementTec, Supervisor o admin; open_run rifiuta ricetta non attiva o non assegnata alla stazione. Frontend: barcode, start e task_execute applicano il filtro di stazione (403). Prova originale rilanciata: run aperto da Maker → 403.
COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a d483fa1): bfe66a5; befdce5
PROVA: 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).

**Soluzione** ESITO: fatto COSA: Backend: aprire/avanzare/pausa/ripresa/chiusura richiedono MeasurementTec, Supervisor o admin; `open_run` rifiuta ricetta non attiva o non assegnata alla stazione. Frontend: barcode, start e task_execute applicano il filtro di stazione (403). Prova originale rilanciata: run aperto da Maker → 403. COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a d483fa1): bfe66a5; befdce5 PROVA: `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).
Adriano removed the assegnata:jeeg label 2026-09-21 21:56:29 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Adriano/TieMeasureFlow#24