docs: la scaletta di collaudo, in ordine e con i numeri già scelti

Tredici punti su quindici sono in esercizio e nessuno li ha percorsi. Finora il
collaudo era «provare le ricette COLLAUDO-A e B», che è un invito a scoprire da
soli in che ordine e con quali valori — cioè a perdere mezza giornata prima di
misurare qualcosa di utile.

Ordinata perché ogni prova prepari la successiva, e perché le due che vanno fatte
adesso vengano prima: il layout, che si vede solo da un monitor largo, e le
richieste di rete, ora che la Content-Security-Policy è appena entrata in vigore.

Due dettagli verificati sul codice prima di scriverla, perché mandavano a caccia
di pulsanti inesistenti: il timer non parte finché non si preme «Avvio
Produzione», che compare solo dopo il primo ciclo confermato — il primo pezzo è
attrezzaggio, non produzione; e una quota già presa si rimisura cliccandola in
alto, che è la via d'uscita dal blocco fuori tolleranza senza chiamare nessuno.

Detto anche cosa la scaletta non copre, incluso il fatto che su una VPS pubblica
staccare la rete non prova niente: si guarda dove vanno le richieste, e il giro
vero si fa in reparto.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Adriano Dal Pastro
2026-07-28 22:08:40 +00:00
parent 2101b9b2c9
commit e0f32fe8a9
2 changed files with 192 additions and 0 deletions
+191
View File
@@ -0,0 +1,191 @@
# Scaletta di collaudo — V3.0.0
Tredici dei quindici punti del 28/07 sono in esercizio e **nessuno li ha ancora
percorsi**. Questa è la scaletta per farlo: ordinata in modo che ogni prova prepari
la successiva, e scritta perché si possa spuntare riga per riga.
Per ogni riga: cosa fare, e **come si vede che è giusto**. Se qualcosa non torna,
annotare il testo esatto dell'eventuale errore in console — non «dava errore».
Totale stimato: **circa 90 minuti**, di cui 30 sul solo punto 3 (il timer, che si
misura aspettando).
---
## 0 · Preparazione (5 min)
| | Cosa | Verifica |
|---|---|---|
| 0.1 | Aprire il sito e fare **ricarica forzata** (`Ctrl+Shift+R`) | CSS e JS sono in cache per 7 giorni: senza questo si collauda la versione di ieri |
| 0.2 | Aprire la **console del browser** (`F12`) e lasciarla aperta per tutto il collaudo | Molte prove si leggono lì, non a schermo |
| 0.3 | Verificare che esistano le ricette `COLLAUDO-A` e `COLLAUDO-B` | Sono in `/measure/select`. Se una sessione precedente le ha sporcate: `docker compose exec server uv run python /tmp/seed_collaudo.py --replace` (cancella anche le misure fatte su di esse) |
**Credenziali del capoturno:** `capoturno` / `Collaudo2026!` — da cambiare prima di
qualunque uso reale.
**Le ricette:**
- **COLLAUDO-A** — lotto obbligatorio, digitazione ammessa, intervallo **2 minuti**.
Cinque task: nota → misura (2 quote) → nota → misura (1 quota) → nota.
- **COLLAUDO-B** — lotto **e** seriale obbligatori, **solo calibro**, una quota.
**Le quote e i valori da usare** (tutte con nominale al centro):
| Quota | Task | Nominale | Conforme | Attenzione | Fuori tolleranza |
|---|---|---|---|---|---|
| 1 · Diametro esterno | A, misura 1 | 10.00 | `10.00` | `10.30` | `12.00` |
| 2 · Spessore parete | A, misura 1 | 25.00 | `25.00` | `25.30` | `27.00` |
| 3 · Lunghezza totale | A, misura 2 | 100.00 | `100.00` | `100.70` | `105.00` |
---
## 1 · Layout — punto 14 (10 min) · **da monitor da scrivania**
Va fatto **prima** e **non dal tablet**: in verticale su un tablet quasi tutte le
larghezze coincidono e il difetto non si vede. Serve uno schermo largo.
| | Cosa | Verifica |
|---|---|---|
| 1.1 | Percorrere Ricette → apri una ricetta → Task → Disegno → Anteprima, e tornare indietro | Il blocco di contenuto **non cambia larghezza** fra una schermata e l'altra |
| 1.2 | Su ognuna, guardare il bordo sinistro del contenuto e quello della barra in alto | Sono **allineati**: il contenuto sta dentro la stessa cornice della navbar |
| 1.3 | Passare da una pagina lunga (che scorre) a una corta (che non scorre) | Niente **salta di lato** di qualche pixel: lo spazio della barra di scorrimento è riservato sempre |
| 1.4 | Entrare in un task di misura e uscirne | Stesso controllo: nessuno spostamento orizzontale |
| 1.5 | Admin → Utenti, Stazioni, Impostazioni; poi il proprio Profilo | Utenti e Stazioni sono larghe, Impostazioni e Profilo strette — ma con **gli stessi margini esterni** |
| 1.6 | **Dal tablet**, entrare in un task di misura | Il piede con «Fine ciclo misura» e il tastierino è visibile **senza scorrere**, anche quando la barra dell'indirizzo compare e sparisce |
---
## 2 · Niente arriva dalla rete — punto 12 (15 min)
Da fare **adesso**, perché la Content-Security-Policy è appena entrata in vigore: se
una libreria avesse bisogno di un permesso non concesso, il sintomo compare ora.
> **Attenzione al metodo.** Il sistema è oggi su una VPS pubblica: staccare la rete
> significherebbe perdere anche il server, quindi non prova niente. La prova
> equivalente e più diretta è guardare **dove vanno le richieste**. Il giro a rete
> davvero staccata si fa in reparto, sull'installazione on-premise.
| | Cosa | Verifica |
|---|---|---|
| 2.1 | Console → scheda **Rete**, spuntare «Disabilita cache», ricaricare | Ordinando per dominio compare **un solo dominio**: `tieflow.tielogic.xyz`. Nessun `cdn`, `jsdelivr`, `cloudflare`, `googleapis`, `plot.ly` |
| 2.2 | Ripetere su: login, selezione ricetta, esecuzione task, editor annotazioni (`/maker`), dashboard statistiche | Sempre un dominio solo. La dashboard è quella che carica Plotly, l'editor quella che carica Fabric |
| 2.3 | Aprire un task che ha un **disegno PDF** allegato | Il disegno si vede. È la prova del *worker* di PDF.js: se cercasse la rete, tutto sembrerebbe a posto fino a questo momento |
| 2.4 | Con la console aperta su ogni pagina del giro | **Zero** messaggi che iniziano con `Refused to load…` o `…violates the following Content Security Policy directive`. Se ce n'è uno, copiarlo per intero: dice quale permesso manca |
| 2.5 | Generare un **report PDF** dalle statistiche | Il PDF esce. È generato sul server, non nel browser, ma vale la pena vederlo funzionare nel giro completo |
---
## 3 · Le regole della ricetta — punti 8 e 9 (10 min) · **COLLAUDO-B**
| | Cosa | Verifica |
|---|---|---|
| 3.1 | `/measure/select`, **senza** compilare lotto e seriale | Sulla scheda di COLLAUDO-B il pulsante è spento e dice **«Compila prima: lotto, seriale»** |
| 3.2 | Compilare **solo** il lotto | Il pulsante resta spento e ora chiede solo il **seriale** |
| 3.3 | Provare ad andare a mano su `/measure/start/<id>` di COLLAUDO-B senza seriale | Rimanda alla selezione con il messaggio «Compila prima:». La regola non si aggira dall'indirizzo |
| 3.4 | Compilare entrambi e avviare | Entra nel task |
| 3.5 | Guardare il tastierino | I tasti numerici **non ci sono affatto** — non sono grigi, non ci sono. Restano «cancella» e «conferma» |
| 3.6 | Con un **calibro USB** collegato, prendere una lettura | Il valore entra e si salva |
| 3.7 | *(facoltativo, per chi vuole la prova dura)* Provare a salvare un valore digitato aggirando lo schermo | Il server risponde **422**: la regola vive lì, non nella pagina |
---
## 4 · Il primo ciclo e l'avvio produzione — punti 10 e 11 (10 min) · **COLLAUDO-A**
> Da qui in avanti si lavora su COLLAUDO-A. **Il timer non parte subito**: prima si
> fa un ciclo completo, poi compare «Avvio Produzione». È voluto — il primo pezzo è
> l'attrezzaggio, non produzione.
| | Cosa | Verifica |
|---|---|---|
| 4.1 | Selezione ricetta → COLLAUDO-A → lotto `LOT-TEST-01`**AVVIA IN SEQUENZA** | Si apre **il primo task** (la nota «Preparazione del pezzo»), **non** l'elenco dei task |
| 4.2 | Leggere la nota | «a sinistra» è in **grassetto**, le righe vanno a capo e la riga vuota si vede (punto 11) |
| 4.3 | Guardare i due pulsanti in alto a destra | Sono **«Lista task»** e **«Completato»**. Su una nota «Completato» è attivo |
| 4.4 | Premere «Completato» | Passa al task 2, «Misura 1 — diametro e spessore» |
| 4.5 | Guardare il pulsante in basso a destra | **«Mancano 2 quote»**, grigio e non cliccabile |
| 4.6 | Misurare la quota 1 con `10.00` e confermare | Verde (conforme). Il pulsante in basso ora dice **«Manca 1 quota»** |
| 4.7 | **Prova chiave del punto 10**: premere «Lista task» adesso, a metà | Nel'elenco il task «Misura 1» porta **«Incompiuto 1/2»** con il bordo ambra. Gli altri non dicono niente |
| 4.8 | Premere **«Visualizza singolo TASK»** su quel task | Ci si torna dentro, con la quota già presa |
| 4.9 | Misurare la quota 2 con `25.00` | Il pulsante in basso diventa blu: **«Fine ciclo misura»** |
| 4.10 | Premerlo | Compare il verde **«Task successivo»** (non un secondo «Completato») |
| 4.11 | Guardare sotto il piede della pagina | Compare il pulsante verde **«Avvio Produzione»** |
| 4.12 | Premere «Avvio Produzione» | Parte il conto alla rovescia da **2 minuti**. Da qui in avanti compaiono «Fermo linea» e «Fine produzione» |
---
## 5 · Il fuori tolleranza — punto 5 (15 min)
La parte più importante del collaudo: fino a ieri questo gate era una modale che si
poteva chiudere.
| | Cosa | Verifica |
|---|---|---|
| 5.1 | Tornare su «Misura 1». Cliccare la **quota 1** in alto per rimisurarla, e inserire `12.00` | Si salva ed è **rossa**. La misura sbagliata resta a registro: è un dato, non un errore da nascondere |
| 5.2 | Provare a passare alla **quota 2** e salvare un valore | **Rifiutato.** Compare l'avviso che serve l'autorizzazione |
| 5.3 | Guardare «Completato» in alto | È **spento**, e passandoci sopra dice «Serve l'autorizzazione del capoturno» |
| 5.4 | **Ricaricare la pagina** (`F5`) | Il blocco **è ancora lì**. Ricaricare non è una via d'uscita |
| 5.5 | **La via d'uscita senza capoturno**: cliccare di nuovo la quota 1 e rimisurarla con `10.00` | Il blocco **si scioglie**. È voluto: il calibro scivola, il pezzo si riposiziona, e chiamare il capoturno per questo sarebbe assurdo |
| 5.6 | Rifarlo: quota 1 con `12.00`, e stavolta **autorizzare** con `capoturno` / `Collaudo2026!` | Il blocco si scioglie e la misura resta segnata come autorizzata |
| 5.7 | Provare ad autorizzare con una password sbagliata | Rifiutato, e il blocco **resta** |
| 5.8 | Provare ad autorizzare con un utente **senza** ruolo Supervisor (es. l'operatore stesso) | Rifiutato: non basta essere collegati, serve il ruolo |
| 5.9 | Rimettere `10.00` sulla quota 1 e `25.00` sulla 2, chiudere il ciclo | Si prosegue normalmente |
---
## 6 · Il ciclo di misura — punto 3 (30 min, quasi tutti di attesa)
| | Cosa | Verifica |
|---|---|---|
| 6.1 | Con il conto alla rovescia in corso, **cambiare task** | Il tempo residuo **prosegue**, non riparte da 2 minuti |
| 6.2 | **Ricaricare la pagina** (`F5`) | Idem: il tempo è lo stesso. Vive sul server, non nella pagina |
| 6.3 | Fermarsi su una **nota** e lasciare scadere l'intervallo | A ~5 secondi dalla scadenza compare l'avviso e **suona il cicalino** |
| 6.4 | Non toccare niente | Alla scadenza si viene portati **al primo task di misura** della ricetta, non a quello dove si era |
| 6.5 | Fare un ciclo completo: misura 1 (2 quote) → nota → **misura 2** (quota 3, `100.00`) → «Fine ciclo misura» | Chiudendo il ciclo **sull'ultimo task di misura** l'intervallo **riparte da 2 minuti** |
| 6.6 | Ripetere ma chiudendo il ciclo sulla **prima** misura | L'intervallo **non** riparte: il ciclo si chiude solo sull'ultimo task di misura |
| 6.7 | **La prova più delicata**: stare **dentro** un task di misura, con una quota già presa e una da prendere, e lasciare scadere l'intervallo | **Non** si viene spostati. Il conteggio diventa **rosso** e prosegue **oltre lo zero**, mostrando il ritardo. Chi sta misurando va lasciato finire |
| 6.8 | Usare **«Rimisura»** dopo aver completato le quote | Registra una seconda lettura dello stesso pezzo **senza** far ripartire l'intervallo. Girare il pezzo e rimisurare non è un pezzo nuovo |
---
## 7 · Fermo linea e fine produzione — punto 6 (10 min)
| | Cosa | Verifica |
|---|---|---|
| 7.1 | Dentro un task di misura, premere **«Fermo linea»** → credenziali capoturno | Il conto alla rovescia **si ferma** |
| 7.2 | Ricaricare la pagina | È ancora fermo: lo stato è sul server |
| 7.3 | Premere **«Ripresa»** → credenziali | Riparte |
| 7.4 | Premere **«Fine produzione»** → credenziali | La produzione si chiude |
| 7.5 | Sul server: `docker compose exec server ls uploads/statistics/` | C'è un file `production_<id>_<data>.csv` |
| 7.6 | Aprire il file | Contiene **tutte** le misure della produzione, compresi i `12.00`. Sulla riga autorizzata le colonne `authorised_by` e `authorised_at` sono **valorizzate**: il file mostra il guasto **e** la decisione |
| 7.7 | Aprire il file in Excel | Le accentate si leggono, il separatore è quello configurato |
---
## 8 · La statistica resta separata — punto 15 (5 min)
| | Cosa | Verifica |
|---|---|---|
| 8.1 | Collegarsi con un utente che ha **solo** il ruolo MeasurementTec | In barra **non c'è** la voce Statistiche |
| 8.2 | Percorrere tutto il flusso operatore guardando ogni schermata | Nessun collegamento porta alla statistica, in nessun punto |
| 8.3 | Andare a mano su `/statistics/dashboard` | **403**: il ruolo non basta |
| 8.4 | Verificare che le misure ci siano comunque | Con un utente Metrologist, le misure appena fatte compaiono in dashboard. Si registra sempre, si consulta a parte |
---
## Cosa annotare
Per ogni riga che non torna:
1. **Numero della riga** di questa scaletta.
2. **Cosa è successo** invece di quello che c'è scritto.
3. Se c'è un errore in console, il **testo esatto**, per intero.
4. Se è un problema di aspetto, uno **screenshot** e su **quale schermo** (tablet o
monitor, e in che orientamento) — per il punto 14 è l'informazione che manca.
## Cosa questa scaletta non copre
- Il **punto 4** (numero di tentativi prima del capoturno) non è implementato: è
fermo sulle risposte del cliente (D-6, D-7, D-9).
- Il **cicalino** è il suono del browser. Se serva una colonnina luminosa è D-5.
- Il giro a **rete davvero staccata** si fa in reparto, sull'installazione
on-premise: qui si prova l'equivalente (nessuna richiesta esce dal dominio).
- Il **carico** con venti tablet insieme non è mai stato misurato.
+1
View File
@@ -20,6 +20,7 @@ Indice della documentazione del progetto.
| [`DEPLOYMENT.md`](DEPLOYMENT.md) | Guida deploy su VPS (Hostinger/Tielogic con Traefik + Let's Encrypt). |
| [`USER_GUIDE.md`](USER_GUIDE.md) | Manuale utente (operatore, maker, metrologist, admin). |
| [`I18N_SETUP.md`](I18N_SETUP.md) | Setup e workflow traduzioni (Flask-Babel + Alpine.js). |
| [`COLLAUDO.md`](COLLAUDO.md) | **Scaletta di collaudo V3.0.0**: cosa provare, in che ordine, con quali valori, e come si vede che è giusto. |
## Piani dettagliati TDD (rev04) — storici