docs: apre v2.5 "Audit" e rimette in pari roadmap e requisiti

La roadmap era ferma al 2026-08-08 e diceva ancora "nessuna fase aperta" mentre
v2.5 era gia' partita e Phase 27 era a meta'; REQUIREMENTS.md era ancora quello
di v2.4. STATE.md invece era corretto — segno che aggiornare solo quello non
basta. Da qui la divisione dei ruoli, ora esplicita in testa a ogni file:

- STATE.md        orientamento breve (99 righe): dove sta cosa, come funziona il
                  motore, i blocchi vivi. Niente narrativa.
- ROADMAP.md      tutte le fasi 1->30, con lo stato di ciascuna
- REQUIREMENTS.md i 25 requisiti di v2.5 (AUD-01..25) e il backlog
- STATUS.md       l'unica narrativa lunga: lezioni e note tecniche

v2.4 chiusa e archiviata in milestones/v2.4-REQUIREMENTS.md.

Decisione nuova: il documento di restituzione usa il design system dell'area
admin ("Quiet Luxury"), non una tipografia sua — token semantici, Plus Jakarta
Sans, Geist Mono per metriche e date, StatusBadge per gli impatti. Sostituisce
la deroga tipografica prevista dal piano. I font sono gia' self-hostati da
next/font/google, quindi la CSP font-src 'self' e' soddisfatta senza lavoro, e
il documento non aggiunge debito a DEBT-01 perche' nasce gia' a token.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-18 17:48:46 +02:00
parent 24213e7251
commit 8000d562dc
5 changed files with 278 additions and 104 deletions
+47 -5
View File
@@ -1,6 +1,6 @@
# ClientHub (IAMCAVALLI) — Status
_Ultimo aggiornamento: 2026-08-08_
_Ultimo aggiornamento: 2026-08-18_
Questo è **l'unico documento narrativo** del progetto: a che punto siamo, cosa manca,
cosa abbiamo imparato. `.planning/STATE.md` è il digest che leggono i comandi
@@ -11,17 +11,43 @@ cosa abbiamo imparato. `.planning/STATE.md` è il digest che leggono i comandi
In produzione su `hub.iamcavalli.net` (Coolify/Hetzner, deploy automatico su push a
`main` via Gitea). Build verde, `npm audit` pulito.
Milestone **v2.4 "Post-vendita"** — Phase 13 e Phase 26 consegnate e in produzione.
Nessun lavoro in sospeso non committato.
Milestone **v2.5 "Audit"** in corso — Phase 27 a metà. In produzione c'è **solo lo
schema** dell'audit: nessuna pagina, né admin né pubblica.
| Milestone | Fasi | Stato |
|---|---|---|
| v2.4 Post-vendita | 13, 26 | 🔨 in corso — consegnato tutto ciò che era pianificato |
| v2.5 Audit | 2730 | 🔨 in corso — Phase 27 ~50% |
| v2.4 Post-vendita | 13, 26 | ✅ chiusa 2026-08-08, entrambe in produzione |
| v2.3 Email & Accesso | 2325 | ✅ shipped 2026-07-29, verificata E2E |
| v2.2 Sales Loop | 1822 | ✅ shipped 2026-06-20 |
| v2.1 Offer Studio + CRM | 11, 12, 14 | ✅ chiusa per reset 2026-06-19 |
| v1.0 + v2.0 | 110 | ✅ shipped giugno 2026 |
## In corso
### v2.5 — Audit (Phases 2730)
Il servizio di analisi sito (tre livelli: **Radiografia / Prima-Dopo / Rotta**) diventa
un documento privato su `/audit/[slug]`, generato da un motore multi-agente e rifinito a
mano prima della consegna. I tre livelli sono **configurazioni di un unico documento**:
i blocchi non pertinenti non esistono nel DOM.
Fatto finora (Phase 27, ~50%):
- **[prod 2026-08-18] Schema.** Migration `0017_audits.sql`, 7 tabelle additive, più
`checklist_items` seminata con 264 voci. Nessuna UI le legge ancora.
- **[non pushato] Le fonti del motore.** `src/lib/audit/sources/` — PageSpeed, CrUX,
Wayback, RDAP, robots/sitemap/JSON-LD, header. Provate sul campo su giojello.com:
giro completo in 73 s, tutte e cinque hanno risposto.
Manca: agent + sintetizzatore + pipeline, storage immagini, editor admin, pagina
pubblica. Dettaglio in [`.planning/ROADMAP.md`](.planning/ROADMAP.md) e
[`.planning/REQUIREMENTS.md`](.planning/REQUIREMENTS.md).
⚠️ **I due piani della milestone stanno in `~/.claude/plans/`, fuori dal repo**
(`…woolly-puddle.md` per il documento, `…radiant-valley.md` per il motore). Senza quei
file la milestone non è ricostruibile.
## Fatto
### v2.4 — Post-vendita
@@ -105,6 +131,21 @@ cui si ricasca.
`/api/v1/applications/<uuid>/envs`: mandare solo `key`, `value`, `is_preview`.
- **Playwright non funziona contro `npm run dev`**: la CSP blocca `eval` e i client
component non si idratano. Serve il build di produzione.
- **Le API di Google cambiano forma sotto i piedi, e in silenzio.** Scrivendo
`src/lib/audit/sources/` due estrazioni dedotte dalla documentazione hanno restituito
valori vuoti *senza errore*: `largest-contentful-paint-element` non esiste più (ora è
`lcp-breakdown-insight`, con `subpart`/`duration` e senza percentuali) e
`configSettings.screenEmulation` non esiste affatto nelle risposte pubbliche. Trovate
solo perché le fonti sono state fatte girare su un sito vero prima di costruirci sopra.
**Ogni estrazione da un'API di terzi va vista funzionare, non dedotta dai docs.**
- **Laboratorio e campo misurano cose diverse, e la differenza *è* il risultato.** Su
giojello.com Lighthouse dà `server-response-time` **7 ms** e CrUX dà TTFB p75 **3.553
ms con l'1% di visite nel verde**: il server risponde in fretta al datacenter Google e
lento a tutti gli altri. Due numeri con lo stesso nome verrebbero fusi in uno — da qui
`risposta_server_ms` invece di `ttfb_ms`.
- **I punteggi PageSpeed ballano fra un giro e l'altro**: performance mobile 52 e poi 64
sullo stesso sito a 30 minuti di distanza. Nei documenti consegnati un punteggio va
sempre con la sua data, mai presentato come una costante del sito.
## Note tecniche
@@ -141,7 +182,8 @@ cui si ricasca.
| src/app/admin/projects/project-actions.ts | `importOfferIntoProject`, `setProjectOfferLifecycle`, piani pagamento |
| src/components/admin/tabs/OffersTab.tsx | Tab Offerte + comandi ciclo di vita |
| src/lib/admin-queries.ts / client-view.ts | I due layer separati: admin vs proiezioni client-safe |
| src/db/migrations/ | 0011 (email/phone), 0012 (offer_type), 0015 (OTP), 0016 (ciclo di vita) |
| src/lib/audit/sources/ | Le 5 fonti del motore audit (nessun LLM) — `fetch` espone anche gli helper di rete condivisi |
| src/db/migrations/ | 0011 (email/phone), 0012 (offer_type), 0015 (OTP), 0016 (ciclo di vita), 0017 (audit) |
## Dove sta il resto