Files
Adriano e4eb4cd932 docs: refresh stato + roadmap with smoke-test findings; fix sort syntax
STATO_PROGETTO.md
- Bumped snapshot date to 2026-04-27.
- Added "Hardening post-restructure (smoke test 2026-04-26)" section
  recording the four runtime regressions surfaced by the local smoke
  test (env_file path, missing Station import, UPLOAD_DIR default,
  apostrophe-in-translation in Alpine), plus the recipe-assignment
  modal UX rework and the new node-based JS syntax test guard.
- Added "Smoke test status" section listing the verified end-to-end
  flow (MySQL up, alembic, seed, login, admin pages, MeasurementTec
  workflow, hot reload).
- Bumped frontend test count 44 → 46 to reflect
  test_template_js_syntax.py.

ROADMAP.md
- Added a tech-debt entry for the user-reported task_complete
  riepilogo rendering anomaly (still under investigation: the curl
  fetch returns the table populated, but the user reports an empty
  body in the browser).
- Added a tech-debt entry for the still-pending Docker container
  smoke test of the new uv-based Dockerfiles.

src/frontend/flask_app/templates/measure/task_complete.html
- Replaced sort(attribute='task_info.order_index,subtask.marker_number')
  with two chained stable sorts. Jinja's sort filter does not accept a
  comma-separated multi-attribute string; the previous form sorted on
  a non-existent attribute and only worked by accident because the
  API already returned rows in the desired order.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 13:10:58 +02:00

5.4 KiB

Roadmap TieMeasureFlow — V2.0.0 → V1.1.0 (rev04 / M1 demo cliente)

Aggiornare ad ogni Fase chiusa.

Riferimenti

Strategia: due milestone

Milestone Scope Obiettivo
M1 — Demo cliente Fasi 1-5 + deploy "demo" Sistema testabile end-to-end col cliente per raccogliere feedback
M2 — Produzione Fasi 6-7 + correzioni post-feedback + GAIA live Rollout su tablet/PC reali

Stato Fasi (M1)

Fase Scope Stato Branch / Commit
1 Stazioni + identità per-tablet COMPLETATA V2.0.0 (merge ea8e468 da feature/rev04-phase1-stations)
2 Ruolo Capoturno (Supervisor) + override token breve Da iniziare
3 Editor ricetta a blocchi (preparation + measurement) Da iniziare
4 Workflow operatore (retry/timer/autologout/avvio produzione) Da iniziare
5 (M1) ImportOnlyGaiaClient + UI import dati cliente reali Da iniziare
Deploy M1 VPS demo (compose + Traefik + LE, no registry) Da iniziare

Stato Fasi (M2)

Fase Scope Stato
5 (M2) GAIA reale (protocollo TBD, polling, comandi produzione) Bloccata da decisioni cliente (D-0.1, D-0.2)
6 Deploy B industriale (registry privato + Watchtower + STATION_ID per-tablet + CI release) Pianificata
7 Hardening, security review, E2E sito pilota, docs aggiornati, i18n delta Pianificata

Decisioni aperte (bloccanti per M2 / future fasi)

Da: master plan §0 "Precondizioni e Decisioni Aperte". Da risolvere col cliente prima della Fase 5/6.

ID Decisione Stato Bloccante per
D-0.1 Protocollo integrazione GAIA (REST / DB shared / OPC-UA / file) Aperta Fase 5 reale (M2)
D-0.2 Credenziali e rete GAIA (VPN / firewall / whitelist IP) Aperta Fase 5 reale (M2)
D-0.3 Target hardware "tablet" (Windows / Linux industriale / Android) Aperta Fase 6 (deploy B)
D-0.4 Cicalino/luce avviso (audio HTML5 / hardware USB / entrambi) Rimandata a M2 Fase 4 finale
D-0.5 Parametri runtime modificabili vs versione immutabile Aperta (raccomandato B: separare volatili) Fase 3
D-0.6 Auth capoturno durante override (modale / PIN / RFID) Aperta Fase 2
D-0.7 Timeout auto-logout Risolta
D-0.8 Naming ruolo capoturno Proposta: Supervisor Fase 2
D-0.9 Tag versione immagine docker Proposta: SemVer + latest Fase 6
D-0.10 Registry esposto su Internet o solo VPN Proposta: solo VPN cliente Fase 6

Tech debt da chiudere

Item Priorità Note
3 test backend pre-esistenti rotti (test_recipes, test_tasks) Media Investigare prima di Fase 3 (toccano recipe + task router).
1 test client pre-esistente rotto (test_save_measurement_proxy) Bassa Probabilmente CSRF/payload. Risolvere con Fase 4.
Pagina task_complete riepilogo: utente segnala riga vuota in alcuni scenari Media Da debuggare (rendering corretto via curl ma utente vede vuoto in browser, possibile interazione con sessione lot/serial).
.env rename a convenzione spec (SERVICE_NAME, SERVICE_DOMAIN, API_KEY) Bassa Rinviato (impatto deploy).
Header X-API-Key rename a X-Api-Key Bassa Vedere se M2 lo richiede.
Envelope risposta {success,data,error} Bassa Eventuale API v2 in M2.
Dockerfile.frontend: pybabel compile via uv run non testato in build reale Alta Verificare al primo docker compose build.
Smoke test in container Docker (non solo locale uvicorn+gunicorn) Alta Validare che i Dockerfile riscritti con uv buildino e girino correttamente prima di chiudere V2.0.0.

Open per scelta utente prima della prossima sessione

  1. Quale fase iniziare adesso? Opzioni: Fase 2 (Supervisor — sblocca workflow), Fase 3 (block editor — independente), Fase 5 (import GAIA dati reali — sblocca demo).
  2. Revisione decisioni aperte col cliente — D-0.1 / D-0.2 / D-0.3 / D-0.6 prima di pianificare Fase 5 e 6.
  3. Smoke test Docker della nuova struttura V2.0.0 (docker compose -f docker-compose.dev.yml up --build) per validare i Dockerfile riscritti.
  4. Test di carico (k6/locust) a 20 VU su /measure/save-measurement per validare la scalatura worker (capacità annunciata: 20-30 tablet contemporanei).

Stima tempi residui M1 (post-Fase 1)

Task Stima full-time
Fase 2 — Supervisor + override 1 settimana
Fase 3 — Block editor 1.5 settimane
Fase 4 — Workflow operatore 2 settimane
Fase 5 (M1) — Import-only GAIA 1 settimana
Deploy M1 demo 0.5 settimane
Totale M1 residuo ~6 settimane

Stima tempi M2 (dopo feedback)

Task Stima
Aggiustamenti post-feedback variabile (1-2 sett.)
Fase 5 reale GAIA 1-2 settimane
Fase 6 deploy B 1 settimana
Fase 7 hardening 1-2 settimane
Totale M2 ~4-7 settimane

Totale fino a produzione: ~10-13 settimane full-time da oggi (2026-04-25), assumendo decisioni aperte risolte in tempo utile.