Files
CRAPP/docs
davideandClaude Opus 5 f687322c3f Vieta l'autovoto, allinea la doc al codice e toglie tre riletture.
Rilettura completa della documentazione confrontata con il codice. Dove la doc
diceva il falso l'ho corretta; dove aveva ragione lei ho corretto il codice.

Autovoto (la doc aveva ragione)

- migration m12_niente_autovoto: vincoli mvp_no_autovoto e badge_social_no_autovoto,
  gli stessi che pagelle_voti ha dalla v1.0. Le righe che li violano vengono
  cancellate prima dell'ALTER, altrimenti fallisce; in locale non ce n'erano.
  M11 garantisce solo che il voto sia firmato con il proprio votante_id, non che il
  votato sia un altro: eleggersi MVP restava a un POST di distanza.
- VotazioneMvp non mostra più il votante nell'elenco, come già faceva VotoSocial.

Test che guardavano la colonna sbagliata

- scritture.test.ts verificava che aggiornato_il si muovesse, chiamandolo "quello che
  alimenta la serie di conferme". È l'opposto: la serie usa risposto_il, che il trigger
  di M9 deve tenere fermo. Ora il test prova a riscriverlo e controlla che il database
  abbia tenuto la prima risposta; prima passava anche senza trigger.
- destinatariSollecito() esce dalla route sollecita-presenze e diventa una funzione pura
  in presenze.ts, con i suoi test — stesso trattamento di avvisiPalloniEvento.

Tre riletture in meno

- giocatori-squadra, scout-store e avatar-store usavano invalidateQueries dove il dato
  scritto era già noto: ora setQueryData, come il resto dell'app. Resta scout-live, dove
  il lock può averlo vinto un altro dispositivo.

Documentazione riallineata

- presenze.md, badge.md, mvp.md: i limiti su RLS aperta e route non autenticata erano
  superati da M11 e DD-024;
- serie-presenze.md: il filtro è e.data < oggi, non <=, e l'evento di oggi non conta
  (conterebbe come assenza per tutti); aggiunta la tabella risposto_il/aggiornato_il;
- ARCHITECTURE.md ed EFFICIENZA_CLOUD.md: una sola eccezione a setQueryData;
- DATABASE.md: i vincoli delle tre tabelle di voto;
- PROJECT_STATE.md: fermo a M9, ora arriva a M12.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-06 19:30:49 +02:00
..

Documentazione CrAPP

Indice della documentazione ufficiale del progetto. Ogni file risponde a una domanda precisa: se l'informazione che cerchi non è nel file indicato, probabilmente non esiste ancora e va prima documentata (vedi DD-002).

Dove sta cosa

Documento Risponde a
VISION.md Perché esiste CrAPP, quali principi deve rispettare una funzionalità
ROADMAP.md Cosa è fatto e cosa è previsto, versione per versione
ARCHITECTURE.md Com'è fatta l'app: stack, struttura del codice, flusso di sviluppo
DATABASE.md Quali tabelle esistono, a cosa servono, chi le usa
DESIGN_DECISIONS.md Perché abbiamo scelto così, cosa abbiamo escluso e quando riaprire la scelta
PORTABILITA.md Cosa lega l'app a un fornitore e cosa no, come spostarla su server proprio
EFFICIENZA_CLOUD.md Come tenere basso il consumo cloud: cache, query, push
TODO.md A cosa si sta lavorando adesso
CHANGELOG.md Cosa è cambiato e quando
modules/ Specifica funzionale di ogni modulo, una per file

Le regole vincolanti per gli assistenti AI stanno in AGENTS.md; lo stato corrente del lavoro in PROJECT_STATE.md.

Ordine di lettura

Prima di modificare il codice, nell'ordine: questo indice → VISION.mdROADMAP.mdARCHITECTURE.mdDATABASE.mdDESIGN_DECISIONS.mdTODO.md → il documento del modulo interessato in modules/.

Regole di manutenzione

Ogni informazione ha una sola casa, per evitare che le copie divergano:

  • l'elenco delle funzionalità (fatte e previste) sta solo in ROADMAP.md;
  • CHANGELOG.md registra quando qualcosa è stato rilasciato, non ripete l'elenco;
  • TODO.md contiene solo il lavoro in corso o imminente, e rimanda alla roadmap;
  • lo schema del database sta solo in DATABASE.md, allineato alle migration in supabase/migrations/: una tabella nuova si documenta nella stessa modifica che la crea;
  • le motivazioni stanno solo in DESIGN_DECISIONS.md, in voci DD-XXX; per aggiungerne una si copia _template-dd.md.

Convenzioni di scrittura: un solo titolo # per file (le sezioni interne partono da ##), niente --- come riempitivo tra i paragrafi, tabelle al posto degli elenchi ripetitivi.