Files
clienthub/.claude/skills/audit/SKILL.md
T
simone 817a8cd5d1 chore(claude): architettura base .claude — skill preventivo e audit, hook di guardia, piani nel repo
La cartella aveva dentro solo rules/ e i settings: nessun posto dove mettere una
skill, un hook o un piano. Ora ha lo scheletro completo e un .claude/CLAUDE.md che
spiega cosa va dove — non duplica CLAUDE.md di progetto, che resta quello che comanda.

Due skill locali (le altre restano globali in ~/.claude/skills/):
- /preventivo — la catena agent.ts → schema.ts → assemble.ts → ProposalDeck e i tre
  modi di romperla, di cui uno solo fa rumore. Nessun prompt di generazione qui
  dentro: quello vive in agent.ts ed e' l'unico. Porta check-profilo.sh.
- /audit — guida scripts/audit-fonti.ts, nuovo, che mette in moto le cinque fonti di
  src/lib/audit/sources/, in prod dal 2026-08-19 ma mai chiamate da nessuno. Provate
  su giojello.com: 5 su 5, 42,7 s, PageSpeed mobile 58 / desktop 93.

Due hook, provati a mano (6 casi il primo, 5 il secondo):
- guardia-migration.sh BLOCCA l'SQL distruttivo sulle entita' protette — il vincolo
  Data Safety (LOCKED) fatto rispettare dalla macchina invece che dalla memoria.
- guardia-token.sh AVVISA sulle classi Tailwind grezze. Non blocca: con ~450
  occorrenze di debito, bloccare lo renderebbe un ostacolo da disattivare.

I tre piani di v2.5 entrano nel repo: stavano solo in ~/.claude/plans/ e STATE.md
avvertiva che senza quelli la milestone non era ricostruibile. Passati al setaccio
per credenziali prima di committarli.

Corretta in rules/memory-discipline.md la chiave della memoria persistente: e'
…-Vault-IAMCAVALLI-hub, non quella del workspace. Sedici file stavano nella prima,
la regola indicava la seconda.

Impeccable resta abilitato solo a livello globale: fuori da settings.json locale.

Nessun tocco al prodotto. Build e lint verdi, lint identico al baseline.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-26 16:09:14 +02:00

78 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: audit
description: Far girare le fonti di rilevazione dell'audit sito di ClientHub su un URL e capire cosa e' stato misurato e cosa no. Da usare quando si lavora al motore audit v2.5, quando serve una rilevazione su un sito reale, quando si vuole sapere se una fonte risponde, o prima di scrivere qualsiasi pezzo del documento di audit.
---
# Audit — le rilevazioni, e cosa vale come misura
Il motore v2.5 **non e' scritto**. Quello che esiste, e che questa skill mette in moto,
sono le fonti di rilevazione: nessun LLM, nessun database, nessun browser headless.
## Due attrezzi, due domande diverse
| Comando | Cosa fa | Quando |
|---|---|---|
| `npx tsx scripts/audit-fonti.ts <url>` | Le **cinque fonti** di `src/lib/audit/sources/` — pagine, CrUX, PageSpeed, storico Wayback, segnali. Puramente meccanico | «Cosa si riesce a misurare su questo sito?» |
| `npx tsx scripts/spike-audit.ts <url>` | Verifica le **264 voci di checklist** con Sonnet 5, poi sintetizza con Opus 5. Volutamente **isolato** da `src/`: non importa nulla, non tocca il DB | «Cosa c'e' che non va, in parole?» |
Opzioni comuni: `--profilo=servizi|ecommerce`, `--no-psi` (salta PageSpeed, che da solo
vale meta' del tempo). Riferimento misurato il 2026-08-26 su `giojello.com`: cinque fonti
su cinque, **42,7 s** in tutto, PageSpeed 34,2 s. Se una fonte tace, **quella e' la notizia**
va riportata, non aggirata.
`PAGESPEED_API_KEY` viene letta dall'ambiente o da `.env.local`. Senza, PageSpeed e CrUX
rispondono a vuoto **senza errore**: lo script lo dice in testa, leggerlo.
Il grezzo finisce in `audit-fonti-<dominio>.json` (gitignorato). E' li' che ogni numero del
documento dovra' essere rintracciabile.
## Le tre regole che il motore erediterà
Non sono preferenze. Sono gia' costate, e stanno per esteso in `STATUS.md` § Lezioni operative.
1. **Un numero entra solo se e' stato misurato.** Rintracciabile nel grezzo, e nel motore in
`audit_runs.raw`. Nessun numero dedotto, arrotondato o ricordato.
2. **Laboratorio e campo non si fondono — la differenza *e'* il risultato.** Su giojello.com
Lighthouse dava `server-response-time` **7 ms** e CrUX TTFB p75 **3.553 ms con l'1% 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 solo — per questo il campo si chiama
`risposta_server_ms` e non `ttfb_ms`.
3. **Un punteggio va sempre con la sua data.** Performance mobile 52, poi 64 sullo stesso sito
mezz'ora dopo. Mai presentato come una costante del sito.
E una regola di metodo che vale per ogni fonte nuova: **ogni estrazione da un'API di terzi va
vista funzionare, non dedotta dai docs.** Scrivendo `sources/`, due estrazioni prese dalla
documentazione hanno restituito valori vuoti *senza errore*`largest-contentful-paint-element`
non esiste piu' e `configSettings.screenEmulation` non esiste affatto nelle risposte pubbliche.
Trovate solo perche' le fonti sono state fatte girare su un sito vero.
## Perche' niente browser headless
Misurato il 2026-08-17 sul VPS: **1,5 GB di RAM liberi su 3,8**, Chromium ne prende 500 MB1 GB
→ OOM kill sui servizi con dati reali. Verificato il 2026-08-18 che non serve comunque: 153 voci
si verificano sul DOM renderizzato che PageSpeed restituisce, e lo screenshot buono e'
`final-screenshot`, non `fullPageScreenshot`.
## Lo stato di v2.5, per non ripartire dal posto sbagliato
**In pausa dal 2026-08-19** per scelta: prima le modifiche all'hub, poi il motore.
| Pezzo | Dove | Stato |
|---|---|---|
| Schema, 7 tabelle + rubrica 264 voci | `0017_audits.sql`, `checklist_items` | in produzione |
| Le cinque fonti | `src/lib/audit/sources/` | **in prod ma inerti**: nessuna route le chiama |
| Agent, sintetizzatore, pipeline, editor, pagina | `src/lib/audit/`, `src/app/{admin/audit,audit}` | **da scrivere** |
I piani stanno in [`../../plans/`](../../plans/): `v2.5-audit-documento.md` (i tre livelli
Radiografia / Prima-Dopo / Rotta come configurazioni di **un unico** documento) e
`v2.5-audit-motore.md` (raccolta in parallelo → quattro sub-agent → sintetizzatore che
**incrocia** le osservazioni in massimo 10 finding).
## L'agente, quando lo progetteremo
Va in `.claude/agents/audit-*.md`, non qui. Non esiste ancora e non va abbozzato: il design
dei quattro sub-agent cambiera' scrivendo il motore. Quando nascera' eredita le tre regole
qui sopra — sono il perimetro, non il contorno.