# DPass 61I4 — Diagnostica protetta della conferma dei lotti

## Perche questo intervento
Il log ricevuto termina con `ACK_MISMATCH`. L'esportazione `c.sql` mostra
il lotto locale 6 con 100 ricevuti, 99 inseriti, 1 rifiutato e ACK pending.
Non contiene la prima tabella con lo stato della connessione, ne il corpo
della risposta remota. Non permette di sapere quale campo non coincide.

La 61I3 elimina lo stop automatico sui record rifiutati; non elimina e non
puo eliminare la verifica di coerenza della conferma. Il client considera
valida la risposta HTTP 200 JSON con success=true e schema_version=1.0,
poi il servizio verifica UUID, stato e contatori con confronto anche dei tipi.
Un errore ACK_MISMATCH disabilita il collegamento nel codice esistente.
Il cron ordinario seleziona soltanto collegamenti abilitati.

## Cosa aggiunge
Una sola modifica applicativa: se la risposta fallisce i controlli esistenti,
registra `metadata.ack_mismatch` sul lotto con:
- data/ora dell'osservazione;
- stato dell'ACK inviato;
- campi differenti;
- valori di protocollo attesi/ricevuti, tipo del valore e corrispondenza.

Non salva corpo HTTP, token, errori remoti liberi, elenchi di ID, targhe o
nominativi. L'UUID remoto e rappresentato come uguale/diverso, non copiato.
Valori inattesi potenzialmente sensibili sono oscurati. Contatori ammessi
alla stampa sono numeri limitati a 0..1000 o stringhe numeriche brevi.

La patch NON cambia i criteri con cui una conferma viene accettata.
Non converte "99" in 99 e non considera `partial` equivalente a `confirmed`.
Non inventa la risposta osservata: quelle differenze sono soltanto casi di test.
Non cancella dati, non promuove il record errato, non riabilita collegamenti.
Il lotto rimane pending finche non viene gestito dalle regole gia esistenti.
La diagnostica precedente resta disponibile anche se una successiva risposta
coerente conferma il lotto: leggere SEMPRE stato e data dell'osservazione.
Se la scrittura della diagnostica fallisce, resta il blocco ACK_MISMATCH.

## Applicazione locale
ZIP in C:\Users\massi\Downloads; progetto ~/progetti/dpass.

```bash
(
  set -e
  cd ~/progetti/dpass
  PATCH_DIR="$(mktemp -d /tmp/dpass_patch_61I4.XXXXXX)"
  unzip -q /mnt/c/Users/massi/Downloads/dpass_patch_61I4_diagnostica_conferma_lotto.zip -d "$PATCH_DIR"
  bash "$PATCH_DIR/apply_patch.sh" "$PWD"
)
```

La base richiesta e l'importatore della 61I3 e i relativi prerequisiti:
verificati tramite hash, non marcatori di moduli estranei. Non forzare un
conflitto. Backup dei file, test isolati, marcatore e rollback previsti.
Nessuna migrazione, SQL di modifica, Composer, NPM o pulizia cache.
L'installer non chiama il webservice e non legge il database applicativo.
Non fare il collaudo reale sul locale con il token della produzione.

## Verifica e ripristino installer
```bash
php /percorso/estratto/install.php check "$HOME/progetti/dpass"
php /percorso/estratto/install.php rollback "$HOME/progetti/dpass"
```
Il rollback ripristina soltanto file compatibili con il backup; non cancella
metadata diagnostici eventualmente registrati in un DB. Vedere il piano produzione.

## Dopo il rilascio
Seguire PRODUZIONE_CPANEL.md. Il prossimo tentativo puo ancora restituire
ACK_MISMATCH: in questo caso serve esportare il confronto redatto tramite
leggi_confronto_ack_61I4.sql, non reiterare le riabilitazioni.
Questa e una patch diagnostica, NON una soluzione confermata al contratto remoto.
