## Task 9: Token dispatch, deploy, seed iniziale, verifica end-to-end

**Files:** nessuno (configurazione + esecuzione).

- [ ] **Step 1: PAT GitHub + env Vercel**

Crea un PAT fine-grained (repo `alleanza-dvr`, permesso "Contents: read & write"). Su Vercel aggiungi `GITHUB_DISPATCH_TOKEN=<pat>` (+ `PUPPETEER_SKIP_DOWNLOAD=true` da Task 4). Redeploy.

- [ ] **Step 2: Push & deploy del codice app**

```bash
git push origin main
```
Attendi il deploy Vercel; verifica che `/login` risponda 200 (build ok).

- [ ] **Step 3: Seed iniziale di tutti i PDF**

Lancia il workflow con `agenzia_id = all` (o in locale `npx tsx scripts/pdf/generate.ts all` con le env). Attendi il completamento; verifica conteggio:
```bash
printf "SELECT stato, COUNT(*) FROM dvr_pdf GROUP BY stato;\n" | turso db shell alleanza-dvr-prod
```
Atteso: ~806 `ready`, 0 (o pochi tracciati) `error`.

- [ ] **Step 4: Verifica end-to-end su Vercel (Playwright)**

- Dettaglio di un'agenzia normale → "Scarica PDF" → scarica `{codice}_DVR.pdf` corretto.
- Modifica un campo del DVR (autosave) → torna al dettaglio → stato `stale` → "Aggiorna PDF" → `generating` → dopo ~1-2 min → `ready` con PDF aggiornato.
- Gemella (es. ASCOLI PICENO EST `39902`) → il PDF riflette il DVR della compagna, con nome file `39902_DVR.pdf`.

- [ ] **Step 5: Aggiorna la memoria infrastruttura**

Annota in `infrastruttura_alleanza` (memoria): `GITHUB_DISPATCH_TOKEN` su Vercel, `PUPPETEER_SKIP_DOWNLOAD=true`, i 6 secrets Actions, il workflow `generate-pdf.yml`, la convenzione chiave R2 `pdf/{codice}_DVR.pdf`.

- [ ] **Step 6: Commit finale (eventuali aggiustamenti)**

```bash
git add -A && git commit -m "PDF: configurazione finale, seed e verifica end-to-end"
git push origin main
```

---

## Note di esecuzione

- **Ordine consigliato**: 1→2→3 (logica app), 4 (generazione, verificabile in locale subito), 5→6→7 (trigger/endpoint/UI), 8→9 (Action + seed).
- **TDD**: test unitari sulle funzioni pure (`hashFingerprintInput`, `derivePdfState`, costruzione richiesta dispatch). Generazione/Action/endpoint/UI verificate con esecuzione reale (niente unit test su Puppeteer/R2/rete).
- **Sicurezza credenziali**: token e secret NON vanno committati; stanno solo su Vercel/GitHub Secrets.
