# Contribuire al Frasario

I contributi arrivano **solo via pull request**. Non c'è un modulo web e non
ci sarà: la barriera del PR filtra naturalmente per competenza e tiene fuori
lo spam.

## Cosa può contenere un PR

- nuove frasi, nei file giusti di `data/frasi/`;
- correzioni o miglioramenti a frasi esistenti (soprattutto alle `note`);
- promozione di una frase da `bozza` a `verificata`, con motivazione;
- correzioni a script, sito, documentazione.

Un PR di contenuto **non tocca la tassonomia**. Se ti sembra che manchi una
funzione, apri prima una issue: la tassonomia ha un tetto (45 funzioni) e si
estende solo dopo discussione.

## Da dove devono venire le frasi

Da **italiano accademico reale, pubblicato e ad accesso aperto**: archivi
IRIS degli atenei, riviste OJS italiane, DOAJ, OpenAIRE/Zenodo. Rispetta
l'opt-out per il text and data mining se una fonte lo dichiara.

Due divieti assoluti:

1. **Niente traduzioni dall'Academic Phrasebank di Manchester** (o da altre
   risorse protette). È proprietà intellettuale altrui, e produrrebbe un
   italiano calcato sull'inglese: esattamente il difetto che il progetto vuole
   curare.
2. **Niente frasi generate in blocco da un modello linguistico.** Un LLM
   produce con facilità italiano accademico verosimile che nessuno scrive
   davvero. Qualunque proposta — umana o automatica — entra solo se
   attestata nel corpus; la promozione a `verificata` richiede il cancello
   pieno documentato in `docs/metodo-fonti.md` (articoli reali distinti,
   più riviste, esemplari con riempimenti diversi, forme distinte).

## Checklist di ammissione

Una frase entra solo se supera **tutti** questi test. Copiala nel corpo del
PR e spunta ogni voce:

- [ ] **Riusabilità** — funziona in almeno tre lavori diversi dello stesso ambito.
- [ ] **Neutralità di contenuto** — è impalcatura, non sostanza; non veicola una tesi.
- [ ] **Autenticità** — l'ho vista in testi reali; non mi sembra solo plausibile.
- [ ] **Non ovvietà** — «In questo capitolo parlerò di X» non serve a nessuno.
- [ ] **Un solo mestiere** — fa una cosa sola; le frasi-tuttofare sono deboli ovunque.

E i requisiti tecnici:

- [ ] `id` conforme (`{prefisso}-{funzione-abbreviata}-{NNN}`), nel file della
      macroarea giusta, senza riusare id dismessi;
- [ ] ogni segnaposto `{X}` dichiarato in `variabili` con una descrizione;
- [ ] campo `esemplare` con la frase reale, verbatim, da cui il testo è
      ricavato e l'id dell'articolo: una bozza senza esemplare non passa la
      validazione;
- [ ] `stato: "bozza"` per le frasi nuove (la promozione a `verificata` è un
      passaggio separato e richiede occorrenze documentate in
      `data/provenienza.json`: rivista, anno, url);
- [ ] `node scripts/valida.mjs` passa;
- [ ] `node scripts/costruisci.mjs` eseguito e `data/frasario.json` aggiornato
      incluso nel PR.

## Un esempio di PR ben fatto

> **Aggiungi tre frasi per `giustificare-scelta-metodologica`**
>
> Tre formule ricorrenti nelle sezioni metodologiche di articoli di scienze
> sociali ad accesso aperto (riviste OJS italiane). Tutte in `bozza`, ambito
> `scienze-sociali`, con note d'uso. Checklist spuntata per ciascuna;
> validazione e build passano.

Piccolo, tematico, motivato, con la provenienza dichiarata. Facile da
rivedere e da accettare.

## Un esempio di PR da rifiutare

> **Aggiungi 150 frasi per tutte le funzioni**
>
> Le ho fatte generare a ChatGPT e mi sembrano buone. Ho anche aggiunto la
> funzione `motivare-scelta-titolo` che mancava.

Tre ragioni di rifiuto in tre righe: generazione in blocco (viola
l'autenticità), dimensione non rivedibile (150 frasi non si curano in un PR),
estensione della tassonomia dentro un PR di contenuto.

## Note redazionali

- Le `note` sono il valore aggiunto del progetto: scrivi quando usare la
  formula, quando no, quale errore evita. Voce piana, niente cerimonia.
- Le `varianti` sono riformulazioni equivalenti, non frasi nuove: se una
  variante ha metadati diversi (altro registro, altro ambito), è un'altra frase.
- Commit in italiano, imperativo, granulari: `aggiungi frasi per attenuare`,
  non `updates`.
