Skip to content

5 Collaudo DevTools

Valentino Aglianó edited this page May 27, 2026 · 28 revisions

🔥 Capitolo 4: La Prova del Battesimo di Fuoco (Debug & Log)

Il collaudo e la manutenzione del motore Panzer v7 all'interno delle infrastrutture della Pubblica Amministrazione richiedono un monitoraggio rigoroso tramite la console dei moduli di sviluppo del browser (F12 / DevTools) applicando un approccio Zero Trust.

Warning

➡️ Falsi Positivi in Debug: Quando i DevTools di Chrome sono aperti con l'opzione "Disable cache" attiva, il Service Worker potrebbe ignorare le logiche di caching del Bunker Mode. Disattiva l'opzione per i test reali offline.
⚠️ Configurazione: getNetworkProfile richiede monitoraggio RTT. Non disabilitare le API di rete.

Caution

🛑 Variabile [ encryptionKey ]: non portare nel codice questa variabile a null altrimenti scattano le protezioni...


📊 Tassonomia dei Log di Logistica e Storage

Durante le sessioni di ispezione attiva, l'operatore tecnico deve fare riferimento alla seguente mappatura semantica delle stringhe generate nativamente dal Service Worker nei log di console:

🔹Log
Log del Sistema in Console Livello Significato Operativo e Innesco Codice
🟢 SW: Fetching from Network -> SUCCESS La rete risponde entro i timeout del profilo attivo. Rilascio immediato al frontend.
⚙️ SW: Background Caching Execution... ASYNC Esecuzione asincrona di isValidBlob e cifratura senza bloccare il thread dell'utente.
📦🛡️ [Bunker-Decrypted] Serviced: OFFLINE Subentro del Bunker. Risorsa core estratta, decifrata in AES-GCM 256-bit e servita.
🗄️⚠️ SW: Accesso al Vault momentaneamente posticipato WARNING Scattato blocco hardware o latenza di I/O. Il Vault si congela temporaneamente senza purga.
❌ SW: Errore decriptazione placeholder: ERROR Eccezione nella gestione dei fallback crittografici. Intercettato e deviato su asset in chiaro.
🗄️🚨 SW: COMPROMISSIONE RILEVATA! CRITICAL Fallimento del Canary Check o chiave master sparita/corrotta. Avvio immediato della purga atomica.

📊 Mappa Visiva dei Log di Console

graph LR
    subgraph DevTools ["Ispezione Console F12"]
        L1["🟢 SW: Fetching from Network"]
        L2["⚙️ SW: Background Caching"]
        L3["📦🛡️  Bunker-Decrypted  Serviced"]
        L4["🗄️⚠️ SW: Accesso Posticipato"]
        L5["❌ SW: Errore Decriptazione"]
        L6["🗄️🚨 SW: COMPROMISSIONE RILEVATA"]
    end

    subgraph Provenienza ["Infrastruttura Client / Server"]
        Server["☁️ Server Remoto"]
        Cache["💾 Cache Locale"]
        Bunker["📦🛡️ CONFIG.cacheName"]
        Lock["🔒 VAULT_TEMPORARILY_LOCKED"]
        Plain["📄 Asset d'Emergenza in Chiaro"]
        Wipe["🗄️🔥 Purga Atomica Totale"]
    end

    L1 --> Server
    L2 --> Cache
    L3 --> Bunker
    L4 --> Lock
    L5 --> Plain
    L6 --> Wipe

    style L1 fill:#e2f0d9,stroke:#385723,color:#000
    style L3 fill:#fff2cc,stroke:#d6b656,color:#000
    style L4 fill:#fff2cc,stroke:#b25900,color:#000
    style L5 fill:#fce4d6,stroke:#c00000,color:#000
    style L6 fill:#fce4d6,stroke:#c00000,color:#000
Loading

📦 Identificazione dei Magazzini di Memoria

🔹📦🛡️ (Bunker), (mappato in `CONFIG.cacheName`)
Indica operazioni di lettura, scrittura o ripristino di un asset di sistema core. Questa zona è protetta da cifratura hardware-assisted AES-GCM, isolata e vitale per il funzionamento offline. Il frontend riceve queste risorse marchiate dall'header personalizzato:
`X-PWA-Source: Bunker-Decrypted`
🔹📦🔓 (Magazzino), (mappato in `CONFIG.userCacheName`)
Indica la gestione delle risorse utente sussidiarie. È un'area di storage dinamica, volatile, non cifrata e sacrificabile in caso di emergenza, vincolata al ciclo di vita di `CONFIG.userCacheTTL`.

🚨 Gestione delle Emergenze e Stati Critici

In presenza di anomalie hardware sul client o di degrado severo dei canali di comunicazione, la console registrerà i seguenti comportamenti automatici di sicurezza:

🔹Scattato `QuotaExceededError` (Memoria Piena)
Causa: Il dispositivo client ha esaurito lo spazio disco. Durante il download o la cifratura degli asset pesanti la scrittura fallisce.
Azione: Poiché il test del canarino eseguito all'avvio in RAM ha già dovuto convalidare l'integrità del Vault, il sistema interrompe la sincronizzazione in modo pulito. Nessuna purga viene avviata, preservando l'integrità dei file già archiviati.
🔹`VAULT_SECURITY_BREACH_INTEGRITY` / `VAULT_EMPTY_TEMPORARY` (Purga Atomica)
Causa: Rilevata alterazione strutturale dei byte della chiave master, fallimento del test crittografico di decrittazione sul Canary Data, oppure totale e inspiegabile assenza del record della chiave da IndexedDB a Service Worker già inizializzato.
Azione del software (Tabula Rasa & Reset): Il Service Worker attiva il protocollo distruttivo immediato. Esegue una cancellazione radicale di tutte le cache (`CONFIG.cacheName` e `CONFIG.userCacheName`), rasa al suolo l'intera struttura di IndexedDB (`PWA_Vault`), azzera le variabili in RAM ed emette un segnale broadcast.
sequenceDiagram
    autonumber
    participant DB as 🗄️ IndexedDB (PWA_Vault)
    participant SW as ⚙️ Service Worker (sw.js)
    participant CA as 💾 Caches (Bunker/Magazzino)
    participant FE as 🖥️ Frontend (Finestre Aperte)

    Note over SW: deepVaultValidation(): Fallimento Canarino o Chiave Rimossa
    SW->>CA: Svuotamento istantaneo di tutte le Cache (Destroy_ALL_Caches)
    SW->>DB: deleteDatabase('PWA_Vault')
    SW->>SW: Azzeramento RAM (encryptionKey = null)
    SW->>FE: postMessage ('VAULT_COMPROMISED_AND_CLEANED')
    Note over FE: Intercettazione segnale e window.location.reload()
Loading
🔹Effetto Nuova Installazione:
Il browser si ritrova davanti a una tabula rasa assoluta e avvia un ciclo di re-installazione ex-novo. Se la comunicazione diretta con il frontend dovesse fallire durante la crisi, l'effetto si concretizza in modo deterministico alla primissima riapertura o aggiornamento manuale dell'applicazione da parte dell'utente, costringendo il sistema a ripartire da uno stato nativo pulito e a riscaricare tutti gli asset core integri direttamente dal server d'origine. Nel caso limite in cui la rete sia totalmente assente e il re-fetch fallisca, il motore si isolerà definitivamente nello stato logico protetto `VAULT_LOCKED_NO_KEY`, dirottando l'erogazione verso `CONFIG.fallbackImage` o stampando la pagina d'emergenza HTML 503.

🛠️ Protocollo di Collaudo Operativo

Chiunque può testare la reattività e l'affidabilità del sistema seguendo questa batteria di test guidati direttamente dai DevTools del browser.

🔹1. Test di Stabilità Asincrona (Cold Start)
Verifica che il riavvio forzato del motore non provochi perdite di dati o falsi positivi.
1. Apri i DevTools (`F12`) -> scheda Application -> Service Workers.
2. Clicca sul pulsante Stop (il pallino verde diventerà bianco, svuotando la RAM del Worker).
3. Torna sulla pagina e premi `F5` per ricaricare.
4. Risultato atteso: Il Service Worker si riavvia, rileva `lastVaultCheck = 0`, esegue immediatamente `deepVaultValidation()`, estrae la chiave intatta dal disco e convalida il canarino. L'applicazione si avvia normalmente senza alcun errore crittografico.
🔹2. Test di Isolamento per Spazio Pieno (Quota Exceeded)
Verifica che la saturazione della memoria non inneschi per errore la purga.
1. Nei DevTools, vai sulla scheda Application -> menu Storage (Archiviazione).
2. Spunta la casella "Simulate custom storage quota" e imposta il limite a 1 MB.
3. Svuota la cache e ricarica la pagina (`F5`) per forzare la sincronizzazione `performSync`.
4. Risultato atteso: La scrittura dei file pesanti fallisce generando un'eccezione, ma la console mostra che il Vault è stato promosso come integro. Nessun log di purga compare, le vecchie cache non vengono toccate.
🔹3. Test di Violazione per Chiave Rimossa
Verifica la reazione del sistema se la chiave master viene rimossa dal disco.
1. Nei DevTools, vai su Application -> IndexedDB -> `PWA_Vault` -> `keys`.
2. Seleziona il record della riga `master_key` e premi il tasto Canc sulla tastiera per eliminarlo.
3. Spostati su **Service Workers**, clicca su **Stop** per scaricare la RAM, e ricarica la pagina con `F5`.
4. Risultato atteso: Al riavvio, il sistema rileva l'assenza della chiave (`VAULT_EMPTY_TEMPORARY`), attiva all'istante la purga e pialla completamente il Cache Storage.
🔹4. Test di Violazione per Chiave Corrotta (Iniezione di Codice)
Verifica la reazione se i byte della chiave vengono manipolati dall'esterno. Poiché la chiave è protetta nativamente in sandbox hardware/software con `extractable: false`, per simulare la corruzione è necessario iniettare un oggetto sostitutivo fasullo tramite console.


1. Nei DevTools, posizionati sulla scheda Console.
2. Sblocco del Browser (Protezione Self-XSS): Se la console blocca l'incolla, digita manualmente a schermo la stringa `consenti incolla` (o `allow pasting` se il browser è in inglese) e premi Invio.
3. Copia e incolla il seguente script d'iniezione e premi Invio:
let req = indexedDB.open("PWA_Vault", 1);
req.onsuccess = function(e) {
    let db = e.target.result;
    let tx = db.transaction("keys", "readwrite");
    let putReq = tx.objectStore("keys").put({ finta_chiave: "dati_corrotti_12345" }, "master_key");
    putReq.onsuccess = function() {
        console.log("🔥 Chiave corrotta iniettata con successo nel DB!");
        db.close();
    };
};

Per forzare la verifica delle routine di rete, si raccomanda di configurare il pannello Network dei DevTools emulando profili di connessione degradati (es. Fast 3G o Slow 3G). Questo permette di validare visivamente il corretto funzionamento della routine getNetworkProfile, l'estrazione dei limiti da CONFIG.networkResilient.profiles e lo scatto automatico dei relativi timeout dinamici.

Tip

SIMULAZIONE DEL TOTAL BLACKOUT NEI TEST DI COLLAUDO: Nel pannello Application -> Service Workers dei DevTools, spunta la casella "Offline" e monitora i log. Se il sistema è a regime, vedrai comparire esclusivamente stringhe con il marcatore 📦🛡️ [Bunker-Decrypted], a testimonianza del fatto che la PWA sta girando in totale isolamento dal server e decifrando le risorse al volo via Web Crypto API.

↩ Torna alla Home

🗂️ Indice Rapido Wiki


LOGO

Clone this wiki locally