# Collaudo ECOBOT-3

Registro aggiornato al 25 settembre 2026. Distinguere i risultati software dalle prove
fisiche: nessuna scheda ESP8266 è stata flashata in questa sessione.

## Eseguito

- Bootstrap isolato SDK ufficiale v3.4, Python 3.9.23 e GCC 8.4 esp-2020r3.
- Build native riuscite delle varianti `d1mini_mx1919`, `esp12e_l293d`,
  `d1mini_dual_pwm`; nessun warning del codice applicativo nelle build finali.
- Test C con AddressSanitizer e UndefinedBehaviorSanitizer: separazione
  sessioni, token scaduto, barriera STOP, wrap sequenze/tempo, direzioni e
  frenata, URL malformati, impulsi servo/sirena, richieste DNS troncate.
  LeakSanitizer disabilitato perché il runner è sotto ptrace; il test C non
  alloca memoria dinamica.
- Cinque test Node del client WebUI: STOP prioritario, ACK tardivo, errori,
  osservatore senza lock e identità distinte tra schede del browser.
- Asset gzip riproducibili e verifica sintattica JavaScript WebUI/OTA.
- Dodici test JUnit Android: cinque per sessioni/ACK e sette con un peer USB
  simulato, incluse letture frammentate, scrittura/verifica, chip errato,
  memoria insufficiente, disconnessione, cancellazione e digest errato.
- Build APK debug, AAB release non firmato e lint Android completati.
- Build finale offline completata dopo l’unificazione dei comandi; firma APK
  v2, allineamento ZIP a 16 KB e SHA-256 dei firmware inclusi verificati.
- Quattro test strumentali passati su Huawei LIO-L29 / Android 10: prima schermata,
  accesso diretto alla guida, navigazione, controlli disabilitati senza robot,
  percorso USB e impossibilità di installare senza selezione/dispositivo;
  torretta e guida con due dita indipendenti, arresto al rilascio, assenza di
  scroll nella schermata comandi e tutti i controlli visibili in orizzontale.
  Il primo tentativo era impedito dallo schermo spento e dal dialogo Android
  «Utilizza USB per»; dopo riattivazione e annullamento del dialogo le prove passano.
- Verifica visiva delle schermate iniziale e «Torretta e guida» sul telefono;
  screenshot in `store/graphics/screenshots/`, con sole barre di sistema ritagliate.

Log locali in `build/*-build.log`, `build/firmware-tests.log`,
`build/android-build.log`, `build/android-final-build.log`, `build/android-device-tests.log`; report JUnit e
lint in `android/app/build/`. Questi file generati non sono tracciati.

## Firma e publisher SchoolAssistant

Successiva preparazione release del 24 settembre: APK e AAB firmati con chiave
ECOBOT propria. Build `assembleRelease`, `bundleRelease`, `testReleaseUnitTest`
e `lintRelease` riuscite: 12 test JUnit passati, lint senza errori. Verificati
firma APK v2, allineamento ZIP a 16 KB, struttura AAB con bundletool 1.18.1,
certificato e firma di ogni voce JAR. Aggiunta non firmata rifiutata nella prova negativa.

Nove test del publisher passati: prerequisiti mancanti, artefatto modificato,
idempotenza, riuso prima bozza Console, checksum remoto errato, revoca durante
upload, commit ambiguo e riconciliazione, rollout, vincolo account/report.
Queste prove Google sono simulate; le letture OAuth/permessi reali sono
riportate nel dossier Play. I nuovi log sono `build/android-signed-release-build.log`
e `build/play-publisher-tests.log`. Stato candidato: preparato, software passato.
SchoolAssistant: controllo TypeScript, 73 test applicativi e build passati
con Node 24 e Chromium del runtime locale; nessun servizio operativo riavviato.

## Verifica Google Play reale — 25 settembre 2026

- Verificata in Console l'assegnazione ECOBOT mancante o incompleta alle
  identità ACC; salvati lettura/rilascio test e lettura/rilascio produzione
  per i rispettivi publisher, conservando gli accessi Diylogic.
- Ore 00:10–00:11 CEST: OAuth 200 e lettura ECOBOT/Diylogic 204 per entrambe
  le identità. Creazione, lettura ed eliminazione edit temporanei riuscite.
- Bundle Google versione 1, SHA-256
  `5613ddc6339367142491af6fd16a04ae1c99382d465f603b7300d25053ef80eb`,
  identico al candidato firmato `1-5613ddc633936714`.
- Release `Ecobot-3-First-Version`, track `internal`, stato `completed`;
  disponibilità ai tester interni osservata nella Console autenticata.
  Track `production` senza release. Nessun upload o commit dell'assistente.
- Report locali: `build/play-preflight-after-permission-fix.json`,
  `build/play-release-after-permission-fix.json`, evidenza visiva
  `build/play-console-test-interno.png`.

Questa verifica conferma il rilascio interno effettuato dal titolare, non
l'installazione da Play o il collaudo fisico. Le prove sotto restano aperte.

## Da verificare su hardware prima della produzione

| Prova | Risultato richiesto | Stato |
| --- | --- | --- |
| USB OTG CH340 e CP210x | permesso, reset automatico, scrittura e MD5, avvio AP | Da eseguire |
| ESP-12E e BOOT manuale | rilevamento chip e avvio dopo reset | Da eseguire |
| Interruzione USB / annullamento | nessun falso successo, ripristino USB riuscito | Da eseguire |
| Rotazione/background durante USB | scrittura continua, stato visibile al ritorno | Da eseguire |
| Tre schede motori | avanti/indietro/sterzo, inversioni, frenata | Da eseguire |
| Servo e sirena simultanei | impulsi 50 Hz, angoli e frequenze, rete reattiva | Da eseguire |
| Quattro azioni | durate cannone 2 s, infrarossi 1 s, sirena 8 s, luci toggle | Da eseguire |
| NVS | parametri e nome dopo spegnimento; errore file/valori rifiutato | Da eseguire |
| Android 10, 13 e 16 | Wi-Fi locale senza Internet e con dati mobili attivi | Da eseguire con robot |
| SSID rinominato / canale cambiato | riconnessione manuale e tramite richiesta Android | Da eseguire |
| Rilascio, STOP, cambio app | arresto; nessun comando tardivo riattiva il moto | Da eseguire con misura |
| Wi-Fi perso / HTTP lento | attenuazione dopo 700 ms, arresto entro 1800 ms + ciclo | Da eseguire con misura |
| Due client, app e WebUI | un proprietario, altro bloccato; STOP globale funzionante | Da eseguire |
| Safari iOS/macOS | guida, azioni, parametri, rinomina e OTA | Da eseguire |
| OTA valido e interrotto | motori fermi, avvio nuova app oppure app precedente | Da eseguire |
| OTA scheda errata / binario corrotto | rifiuto senza cambiare partizione di boot | Da eseguire |
| AAB su traccia interna Play | installazione e stesse funzioni della build locale | Da eseguire |

Annotare telefono/Android, revisione scheda e driver USB, checksum firmware,
strumento di misura, risultato e anomalie per ogni prova. Per i primi test
motori tenere il robot sollevato; verificare prima STOP e direzioni a bassa
velocità. Una build riuscita non certifica polarità e cablaggio reali.
