Files
clienthub/.claude/skills/preventivo/check-profilo.sh
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

50 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# Preflight: src/lib/proposal/profile.ts contiene dati placeholder?
#
# profile.ts e' uno SNAPSHOT: finisce dentro proposals.content al momento della
# generazione e ci resta. Un placeholder spedito una volta non si corregge piu'
# modificando il file — va rigenerato il preventivo.
#
# exit 0 = pulito · exit 1 = placeholder trovati
set -uo pipefail
ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)
F="$ROOT/src/lib/proposal/profile.ts"
[ -f "$F" ] || { echo "profile.ts non trovato in $F" >&2; exit 1; }
# Ogni riga: etichetta|regex. Sono i segni concreti di "da riempire".
PATTERNS=(
'testimonianza segnaposto|→ Aggiungere'
'nome cliente finto|"Cliente [0-9]"'
'ruolo generico|role: "Professione"'
'campo da compilare|// → '
'dominio sbagliato (il brand e iamcavalli.net)|iamcavalli\.com'
)
TROVATI=0
for p in "${PATTERNS[@]}"; do
ETICHETTA="${p%%|*}"; RE="${p#*|}"
N=$(grep -cE "$RE" "$F" || true)
if [ "$N" -gt 0 ]; then
printf ' ✗ %-48s %s occorrenz%s\n' "$ETICHETTA" "$N" "$([ "$N" = 1 ] && echo a || echo e)"
TROVATI=$((TROVATI + N))
fi
done
if [ "$TROVATI" -gt 0 ]; then
cat >&2 <<'MSG'
BLOCCO — profile.ts spedisce dati placeholder in ogni preventivo generato.
Non si riempiono a occhio: i numeri divulgabili stanno in brand/prove.md, che oggi
e' ancora `stato: scheletro-intervista`. Finche' non sono verificati, la mossa giusta
non e' inventare — e' non renderizzare il blocco.
Regola: ../../../.claude/rules/lingua-e-tono.md — «un numero affermato con sicurezza e
mai verificato e' il modo piu' veloce per bruciare la credibilita' che il tono costruisce».
MSG
exit 1
fi
echo " ✓ profile.ts pulito"