Skip to content
Back to skills

Prisma Review

ASecurity

Use when conducting a systematic literature review using the PRISMA methodology. Triggers on: systematic review, literature review, PRISMA, database search strategy, inclusion/exclusion criteria, deduplication, screening, evidence synthesis. Bundled MCP servers: semantic-scholar, eric, openaire, core, doaj, zenodo, arxiv, pubmed.

  • 2 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 29, 2026
researchpythongoshellbashapidatabasebackendperformance

Works with

  • claude code
  • terminal
  • api
  • mcp

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned October 7, 2026

npx -y skills add giovannifrontera/academic-research-prisma-wiki-rag --skill prisma-review --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Prisma Review?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Prisma Review
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/giovannifrontera-prisma-review/badge)](https://www.skillsdirectory.com/skills/giovannifrontera-prisma-review)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: prisma-review
description: Use when conducting a systematic literature review using the PRISMA methodology. Triggers on: systematic review, literature review, PRISMA, database search strategy, inclusion/exclusion criteria, deduplication, screening, evidence synthesis. Bundled MCP servers: semantic-scholar, eric, openaire, core, doaj, zenodo, arxiv, pubmed.
---

# PRISMA Systematic Review

**Percorsi e interprete:** risolvi `<PLUGIN_ROOT>` dalla posizione di questa skill installata (`skills/<nome>/SKILL.md`, due directory sopra). Sostituisci i segnaposto con path assoluti reali e usa `python` dal venv attivo su Windows/Linux. I dati restano nella cartella review; vedi [setup e modelli](../../docs/models-and-setup.md).


## Overview

PRISMA (Preferred Reporting Items for Systematic Reviews and Meta-Analyses) è la metodologia standard per review sistematiche riproducibili. Questa skill guida l'intero workflow in modo **interattivo**: ogni fase richiede conferma dell'utente prima di procedere.

**Regola fondamentale:** non passare mai alla fase successiva senza approvazione esplicita dell'utente.

**Rappresentazione a terminale:** mostra dati e processi in forma visiva leggibile nel terminale:
- conteggi, confronti tra banche dati, criteri ed esclusioni per motivo → tabelle Markdown;
- flusso PRISMA (identificazione → screening → eligibility → inclusi) → diagramma a blocchi in ASCII con i numeri di ogni passaggio;
- sequenza delle fasi e stato di avanzamento → elenco numerato o schema a frecce.
Il testo discorsivo resta per spiegazioni e decisioni; non mettere in tabella ciò che si dice in una frase.

---

## Persistenza dello Stato — File Obbligatori

Per evitare perdita di contesto tra sessioni, mantieni **quattro file distinti** nella cartella di lavoro. Ogni file viene aggiornato alla fine della fase corrispondente, **prima** di procedere. Il report finale si genera leggendo questi file, non dalla memoria della sessione.

In uno studio sigillato aggiorna anche `phases` in `.project-state.json` con `study_workspace.py phase` (tabella in `pipeline-ricerca`, Stage 0): `prisma` → `in_progress` in Fase 0 e `done` in Fase 6, `rag` in Fase 5, `export` all'export Word.

### 1. `prisma_state.json` — stato operativo della sessione
Tiene traccia di: query usate, numeri per fase, criteri, configurazione. Struttura:
```json
{
  "progetto": "nome_cartella",
  "data_avvio": "AAAA-MM-GG",
  "ricercatore": "nome",
  "pico": {"P": "", "I": "", "C": "", "O": ""},
  "configurazione": {"anni": "", "database": [], "lingua": [], "tipo_pub": "", "min_citazioni": null},
  "wiki_workspace": null,
  "fase_corrente": 0,
  "fase1": {"risultati_per_db": {}, "totale_lordo": 0, "stream2_pdf": 0},
  "fase2": {"totale_lordo": 0, "duplicati": 0, "esclusi_filtri": 0, "totale_screening": 0},
  "fase3": {"valutati": 0, "esclusi": {}, "inclusi": 0},
  "fase4": {"paper_inclusi": []}
}
```

### 2. `prisma_log.md` — log metodologico ufficiale
Alimenta la sezione metodologica del paper. Aggiornato progressivamente a ogni fase:
```markdown
# PRISMA Log — [nome_progetto]
**Data avvio**: AAAA-MM-GG  **Ricercatore**: [nome]

## Domanda di ricerca
[domanda principale + sub-domande]

## Framework PICO
| P | I | C | O |

## Configurazione ricerca
| Parametro | Valore |

## FASE 1 — IDENTIFICAZIONE
**Data**: AAAA-MM-GG
| Database | Query esatta | Risultati lordi |

## FASE 2 — SCREENING
| Totale lordo | Duplicati | Esclusi filtri | Dopo screening |

## FASE 3 — ELIGIBILITY
[criteri + ogni esclusione motivata]

## FASE 4 — INCLUSION
[tabella paper inclusi con campi estesi]

## Diagramma PRISMA
[diagramma di flusso con numeri reali]

## Note metodologiche
[limitazioni dei database, anomalie, decisioni non standard]
```

### 3. `prisma_synthesis.md` — note di sintesi tematica in costruzione
Creato alla Fase 4, aggiornato progressivamente man mano che si analizza ogni paper. Struttura:
```markdown
# Sintesi tematica — [nome_progetto]

## Temi emergenti
[tema 1, tema 2, ... aggiornati a ogni paper analizzato]

## Convergenze e divergenze
[cosa confermano più studi, cosa è controverso]

## Risposta provvisoria alle domande di ricerca
[aggiornata dopo ogni paper — anche parziale e non definitiva]

## Gap della letteratura
[cosa non è stato studiato, limitazioni trasversali]

## Note per la discussione
[osservazioni metodologiche, bias rilevati]

---
## OUTPUT PER PILOT STUDY — Sezione dedicata al handoff verso educational-pilot-design

### Effect size aggregati
| Outcome | N studi | Effect size medio (d/η²) | Range | IC 95% | Qualità evidenza |
|---|---|---|---|---|---|
| [outcome 1] | | | | | forte/moderata/debole |

> Usa questi valori come stima a priori nella power analysis del pilot (G*Power).
> Se la qualità è debole, usa d = 0.5 come valore conservativo.

### Framework teorici dominanti
[Elenca i framework più ricorrenti tra gli studi inclusi, con frequenza]
> Usa il framework più frequente come punto di partenza per la Fase 1 del pilot.

### Strumenti di misura più usati
| Strumento | N studi che lo usano | Outcome misurato | Note validazione italiana |
|---|---|---|---|
| [MSLQ / TAM / ...] | | | |

> Usa questa tabella nella Fase 3 del pilot per scegliere gli strumenti.

### RQ non ancora investigate nella letteratura
[Elenca le domande di ricerca che nessuno studio ha risposto, o che hanno ricevuto solo evidenza debole]
> Queste sono le RQ candidate per il pilot study.

### Gap di popolazione
[Es. "Nessuno studio su studenti di scuola secondaria italiana", "Studi solo su università USA"]
> Questo gap giustifica la scelta del campione nel pilot.

### Durata tipica degli interventi
[Range osservato: min–max settimane; mediana]
> Usa questo dato per pianificare la timeline realistica del pilot (Fase 4 educational-pilot-design).
```

### 4. `prisma_bibliography.md` — bibliografia annotata completa
Creato alla Fase 4, contiene per ogni paper incluso una scheda con annotazione critica:
```markdown
# Bibliografia annotata — [nome_progetto]

## [N]. Autore/i (Anno). Titolo. *Rivista/Fonte*. DOI/URL

**Tipo studio**: [RCT / quasi-sperimentale / qualitativo / review / ...]
**Campione**: [N partecipanti, contesto]
**Metodologia**: [metodo principale usato]
**Contributo principale**: [una o due frasi su cosa aggiunge alla letteratura]
**Limitazioni dichiarate**: [limitazioni riportate dagli autori]
**Rilevanza per la review**: [perché è stato incluso, quale domanda di ricerca aiuta a rispondere]
```

---

## Ripresa di sessione (priorità assoluta all'avvio)

**Prima di qualsiasi azione**, controlla se esiste già `prisma_state.json` nella cartella di lavoro:
- Se esiste → leggilo, identifica `fase_corrente` e l'ultimo paper processato in `fase4.paper_inclusi`
- Comunica all'utente: *"Ho riletto lo stato. Eravamo alla Fase [N], paper [X/Y]. Confermo di riprendere da lì?"*
- Non rieseguire mai fasi già completate senza esplicita richiesta
- Se `prisma_state.json` non esiste → è una sessione nuova, avvia Fase 0

---

## PRISMA Flow

```
[SETUP]          →  Raccolta parametri + PDF manuali + wiki workspace → crea file di persistenza
       ↓
[Identification] →  Stream 1: Query MCP database → raw_*.json
                    Stream 2: extract_pdf_metadata.py → raw_pdf_manual.json (PRISMA 2020)
                    Pre-search: wiki query per conoscenza pre-esistente
       ↓
[Screening]      →  scripts/prisma_screening.py (incluso): raw_*.json + pdf_manual → dedup cross-stream → filtri concordati → screening_prisma.json
       ↓
[Eligibility]    →  Criteri su abstract → esclusioni motivate → aggiorna file
       ↓
[Inclusion]      →  Estrazione dati → eligibility_prisma.json → checkpoint ogni 10
       ↓
[RAG Build]      →  hybrid_rag.py index-prisma + index-pdf pdf_inclusi/
       ↓
[Report]         →  hybrid_rag.py query → scrive sezione per sezione → export wiki
```

---

## FASE 0 — Setup interattivo (OBBLIGATORIO)

**Prima di qualsiasi ricerca**, poni queste domande nell'ordine indicato.

### 0.0 — Cartella di lavoro
> "Come vuoi chiamare la cartella per questa ricerca PRISMA? (es. `review_chatbot_metacognizione`)"

Crea la cartella. Salva **tutti** i file generati al suo interno. Inizializza subito `prisma_state.json` con i valori vuoti e crea `prisma_log.md` con l'intestazione.

### 0.1 — Domanda di ricerca
> "Qual è la tua domanda di ricerca? Se vuoi, possiamo strutturarla con il framework PICO:
> - **P**opolazione/Problema
> - **I**ntervento/Fenomeno
> - **C**omparison (opzionale)
> - **O**utcome atteso"

Se la domanda è ampia, aiuta l'utente a scomporla in **sub-domande** (es. RQ1, RQ2). Queste guideranno le query e la sintesi.

### 0.2 — Parametri temporali
> "Quale range di anni vuoi coprire? (es. 2015–2025)"

### 0.3 — Ambito disciplinare
> "In quale ambito disciplinare ti muovi? (es. educazione, psicologia, informatica, neuroscienze, salute — o una combinazione)"

| Ambito | Database prioritari |
|--------|-------------------|
| Educazione / pedagogia | ERIC, Semantic Scholar, OpenAIRE |
| Psicologia / neuroscienze | PubMed, Semantic Scholar |
| AI / informatica / ed-tech | arXiv, Semantic Scholar |
| Fonti italiane / europee | `openaire` (IT filter), `core`, `doaj` |
| Preprint e dataset | `zenodo`, `arxiv` |
| Interdisciplinare | tutti |

### 0.4 — Tipo di pubblicazione
> "Vuoi includere solo articoli peer-reviewed, o anche preprint, report, tesi?"

### 0.5 — Lingua
> "Quali lingue accetti? (default: solo inglese)"

### 0.6 — Soglia citazioni (opzionale)
> "Vuoi escludere paper con poche citazioni? (es. min. 5 — lascia vuoto per nessun filtro)"

> ⚠️ **Recency bias:** La soglia citazioni introduce un bias sistematico verso paper più datati. Paper pubblicati negli ultimi 2 anni (es. post-2022) hanno meno tempo per accumular citazioni anche se di alta qualità. Se usi una soglia, avverti l'utente e documenta questa limitazione nelle "Note metodologiche" del report finale. Alternativa consigliata: usare la soglia solo per i paper con più di 3 anni dalla pubblicazione.

### 0.7 — PDF trovati manualmente (PRISMA 2020 Stream 2)

> "Hai trovato manualmente articoli rilevanti che vuoi includere nella review? (es. PDF scaricati da riviste, grey literature, referenze di altri paper, contatti personali con autori)"

Se sì:
1. Chiedi di creare la cartella `pdf_manuali/` nella cartella di lavoro e inserire i PDF
2. Risolvi `scripts/extract_pdf_metadata.py` relativamente a questa skill installata; eseguilo direttamente dalla cartella review.
3. Esegui:
   ```bash
   python "<PLUGIN_ROOT>/skills/prisma-review/scripts/extract_pdf_metadata.py" "pdf_manuali/"
   ```
4. Lo script crea `raw_pdf_manual.json` con titolo, DOI, anno, abstract per ogni PDF
5. Chiedi all'utente di **verificare e integrare** il file generato (autori mancanti, PDF scannerizzati senza testo, abstract non trovati)
6. Conta i record validi e aggiorna `prisma_state.json` con `fase1.stream2_pdf`

> ⚠️ **PDF scannerizzati (solo immagine):** pdfplumber non estrae testo. Lo script segnala questi file — i metadati vanno inseriti manualmente in `raw_pdf_manual.json`. Non escluderli silenziosamente.

> ⚠️ **Deduplicazione cross-stream:** un PDF manuale potrebbe duplicare un record già presente nei database. Lo script di Fase 2 gestirà questa deduplicazione automaticamente per DOI e titolo normalizzato.

### 0.8 — Wiki System (OpenClaw)

> **CWD:** i comandi usano il path assoluto dello script nel plugin risolto; funzionano dalla directory review. `--workspace` identifica la directory dati wiki separata.

Se la directory di lavoro corrente si trova dentro uno studio sigillato (rilevabile tramite `containing_study_root` di `scripts/study_paths.py`, cioè esiste un `.project-state.json` risalendo l'albero), imposta automaticamente `wiki_workspace = <project_root>/wiki-memory` e **non chiedere nulla all'utente** — il workspace wiki è già parte dello studio sigillato.

Altrimenti (nessuno studio sigillato rilevato — flusso legacy invariato):

> "Stai usando il sistema wiki OpenClaw per questa ricerca? Se sì, indica il percorso assoluto della cartella wiki workspace (es. `C:/Users/nome/wiki-data/ricerca` o il path configurato in `wiki.config.json`)"

Se sì:
- Salva il percorso in `prisma_state.json` come `wiki_workspace`
- Verifica che il path esista eseguendo: `python "<PLUGIN_ROOT>/wiki/scripts/wiki.py" query --workspace "[path]" --q "test" --k 1`
- Se funziona, informa: *"Wiki connesso. Lo userò per: (1) cercare conoscenza pre-esistente prima delle query PRISMA, (2) esportare i paper inclusi dopo la Fase 4, (3) esportare la sintesi dopo la Fase 6."*
- Se non funziona, documenta `wiki_workspace: null` e procedi senza integrazione wiki

### 0.8b — Riepilogo e conferma
```
CONFIGURAZIONE REVIEW
─────────────────────────────────────
Domanda:     [domanda + sub-domande RQ1/RQ2/...]
PICO:        P=[...] I=[...] C=[...] O=[...]
Anni:        [da] – [a]
Ambito:      [disciplina]
Database:    [lista]
Tipo pub.:   [peer-reviewed / preprint / tutti]
Lingua:      [lingue]
Min cit.:    [N o nessuna]
─────────────────────────────────────
```
Chiedi conferma. Poi aggiorna `prisma_state.json` e `prisma_log.md`.

---

## FASE 1 — Identification

### 1.0 — Pre-search wiki context (se wiki_workspace è configurato)

Prima di formulare le query per i database, interroga il wiki per surfaceare conoscenza già presente sul tema:

```bash
python "<PLUGIN_ROOT>/wiki/scripts/wiki.py" query --workspace "[wiki_workspace]" --q "[domanda di ricerca principale]" --k 5
```

Se il wiki restituisce pagine rilevanti (rilevanza > 0.4):
- Usa la conoscenza esistente per **affinare le stringhe di ricerca** (es. aggiungere sinonimi già noti, escludere termini già valutati)
- Annota in `prisma_log.md` sotto "Note metodologiche": *"Conoscenza pre-esistente nel wiki: [sintesi breve delle pagine trovate]"*
- Questo **non sostituisce** la ricerca sistematica — è solo un orientamento iniziale per costruire query più precise

Se il wiki non ha pagine rilevanti: procedi normalmente, il wiki verrà popolato al termine della review.

### 1.1 — Query database (Stream 1)

Costruisci le query adattando i parametri. Per gli otto server inclusi usa `output_format="json"`. Il filtro minimo citazioni, se richiesto, va applicato dopo il recupero: Semantic Scholar non espone `min_citation_count`.

| Database | Tool MCP | Parametri chiave |
|----------|----------|-----------------|
| `semantic-scholar` | `semantic_scholar_search` (anteprima) / **`semantic_scholar_export`** (download completo su file, endpoint bulk, sintassi booleana) | `query`, `year_from`, `year_to`, `fields_of_study` (stringa), `limit`, `output_format="json"`; export: `output_path`; stessa query booleana (AND/OR/NOT) delle altre banche dati, tradotta automaticamente |
| `arxiv` | `arxiv_search` (anteprima) / **`arxiv_export`** (download completo su file) | `query` (termini semplici uniti in AND; sintassi `ti:`/`abs:`/`au:` accettata), `category` (es. `cs.CY`), `year_from`, `year_to`, `rows` (max 100), `offset` — attendere ~3 s tra chiamate |
| `pubmed` | `pubmed_search` (anteprima) / **`pubmed_export`** (download completo su file, max 9.999) | `query` con tag `[tiab]`/`[mh]`, `year_from`, `year_to`, `article_type`, `rows` (max 200), `offset` — chiave NCBI opzionale (`/plugin configure`) |
| `eric` | `eric_advanced_search` (anteprima) / **`eric_export`** (download completo su file) | `query`, `rows` (max 200), `start`, `year_from`, `year_to`, `education_level`, `pub_type`, `language`, `title_only` |
| `openaire` | `openaire_search` (anteprima) / **`openaire_export`** (download completo su file) | `query`, `year_from`, `year_to`, `country="IT"` per fonti italiane |
| `core` | `core_search` (anteprima) / **`core_export`** (download completo su file) | `query`, `year_from`, `year_to`, `language="it"`; export: `output_path`, `max_records` — chiave CORE gratuita consigliata (`/plugin configure`) |
| `doaj` | `doaj_search_articles` (anteprima) / **`doaj_export`** (download completo su file) | `query`, `year_from`, `year_to`, `country_publisher="IT"` per riviste italiane |
| `zenodo` | `zenodo_search` (anteprima) / **`zenodo_export`** (download completo su file) | `query`, `year_from`, `year_to`, `resource_type="publication"` |

**Regole per le query (precisione del corpus):**
- Termini outcome **specifici**, mai generici da soli: `"academic performance"`, `"student performance"`, `"academic achievement"`, `"learning outcomes"` — non `performance` o `achievement` da soli, che trovano anche la *performance del modello* AI.
- Ogni banca dati riceve **tutti i blocchi di concetti** (popolazione, intervento, contesto, outcome). OpenAIRE accetta al massimo 4 operatori per blocco: il server invia da sé ogni blocco AND come ricerca separata; solo se un singolo blocco supera 4 operatori (troppi sinonimi) riduci i sinonimi o dividi quel blocco in sotto-query, **mantenendo il blocco outcome** in ognuna.
- **CORE:** anni e lingua passano dai parametri del tool, che li inseriscono nella query (l'API v3 ignora i filtri separati). Non combinare `title:` e `abstract:` in OR: l'API restituisce conteggi incoerenti (più del testo completo). Usa la ricerca standard o `title:` da solo.
- Prima di scaricare, confronta i conteggi (`*_count`) con quelli attesi: un totale di ordini di grandezza sopra gli altri database indica una query troppo larga.

### ⚠️ MCP server non disponibile — gestione errori

Se un tool MCP restituisce errore o non risponde durante FASE 1:
1. **Registra 0 risultati** per quel database nella tabella FASE 1
2. **Annota in `prisma_log.md`**: "Database [nome] non disponibile in questa sessione — escluso dal corpus"
3. **Continua con gli altri database** — non bloccare il workflow
4. **Caso speciale chiave API mancante**: se l'errore contiene `no API key configured` (CORE, Semantic Scholar, PubMed), **prima di escludere il database fermati e chiedi all'utente** di registrare la chiave gratuita (link nel messaggio), inserirla con `/plugin configure academic-research-prisma-wiki-rag` e riavviare Claude Code; poi rilancia la query. Non chiedere mai di incollare la chiave in chat. Se l'utente preferisce proseguire senza, applica i punti 1–3.
5. **Caso speciale `arxiv`**: se fallisce, valuta se i paper arxiv rilevanti sono già stati recuperati da `semantic-scholar` (che indicizza preprint arxiv). Se no, nota l'esclusione nella sezione Limitazioni del report finale.

> `arxiv` è il server con maggiore instabilità storica. Se `claude mcp list` mostra `arxiv: ✗ Failed`, non avviare la query — documenta e prosegui.

### ⚠️ ERIC — Usare sempre `rows=200` + paginazione (non il default 10)

Il tool MCP `eric_advanced_search` ha default `rows=10`. **Usare sempre `rows=200`** e iterare con `start` per coprire il corpus completo.

**Parametri chiave del tool MCP:**
| Parametro | Valore consigliato | Note |
|-----------|-------------------|------|
| `rows` | 200 | Max per call — NON lasciare il default 10 |
| `start` | 0, 200, 400, ... | Paginazione per corpus > 200 |
| `year_from` / `year_to` | es. 2020 / 2026 | Range anni nativo — no workaround OR |
| `education_level` | `"Secondary Education"` | Filtro fondamentale per RQ su secondaria |
| `pub_type` | `"Journal Articles"` | Filtra per tipo di pubblicazione |
| `title_only` | `True` | Query molto precisa solo sul titolo |

**Sintassi query**: AND, OR, NOT (maiuscolo). Stemming automatico (no asterischi).

**Strategia operativa ERIC (segui questo ordine):**

1. **Prima call esplorativa**: lancia con `rows=200`, `education_level` dal PICO, `year_from`/`year_to` → annota il totale restituito
2. **Se corpus ≤ 1.000**: pagina con il MCP tool (`start=0`, `200`, `400`, ...) — completamente gestibile
3. **Se corpus > 1.000 e ≤ 2.000**: pagina con HTTP API diretta (`rows=2000`, una sola call)
4. **Se corpus > 2.000**: usa HTTP API con `rows=2000` + `start` iterativo, oppure aggiungi filtri (`education_level`, `pub_type`) per ridurre il corpus prima di scaricare

**Esempio call ottimale per review su secondaria:**
```python
# MCP tool — usa sempre questi parametri minimi
eric_advanced_search(
    query="chatbot metacognition self-regulated learning",
    education_level="Secondary Education",
    year_from=2020,
    year_to=2026,
    rows=200,
    start=0  # poi incrementa: 200, 400, ...
)
```

**API HTTP diretta** (alternativa per corpus > 2.000 risultati):
- Endpoint: `https://api.ies.ed.gov/eric/`
- `rows` max: **2000** per call (vs 200 del MCP)
- Parametri: `search=`, `format=json`, `rows=`, `start=`, `fields=`
- Nessuna API key richiesta
- **Limitazione**: range anni non supportato nativamente → usare `(pubyear:2020 OR pubyear:2021 OR ...)`
- Rate limit: max 2–3 req/sec → `time.sleep(0.5)` tra le pagine

**Fine paginazione ERIC:** continua a paginare con `start=0, 200, 400...` finché il tool restituisce **meno di `rows` elementi** — quel è il segnale che hai raggiunto la fine del corpus. Se ricevi esattamente `rows=200` risultati, pagina ancora.

**IMPORTANTE:** Registra i **totali lordi** senza pre-filtri. Il giudizio di pertinenza appartiene alle fasi successive.

```
FASE 1 — RISULTATI IDENTIFICAZIONE (totali lordi)
────────────────────────────────────────────────────
Database         | Query usata              | Risultati lordi
─────────────────|──────────────────────────|────────────────
semantic-scholar | [query]                  | N
arxiv            | [query]                  | N
pubmed           | [query]                  | N
eric             | [query]                  | N
openaire         | [query] [country=IT]     | N
core             | [query]                  | N
doaj             | [query] [IT]             | N
zenodo           | [query]                  | N
────────────────────────────────────────────────────────────
TOTALE LORDO                                | N
```

### 1.3 — Salvataggio JSON per database (OBBLIGATORIO — prima di proseguire)

**Subito dopo aver ricevuto i risultati da ogni database**, salva i record grezzi in file JSON separati nella cartella di lavoro:

```
raw_semantic_scholar.json   ← lista di oggetti dal MCP semantic-scholar
raw_arxiv.json              ← lista di oggetti dal MCP arxiv
raw_pubmed.json             ← lista di oggetti dal MCP pubmed
raw_eric.json               ← lista di oggetti dal MCP eric
raw_openaire.json           ← lista di oggetti dal MCP openaire
raw_core.json               ← lista di oggetti dal MCP core
raw_doaj.json               ← lista di oggetti dal MCP doaj
raw_zenodo.json             ← lista di oggetti dal MCP zenodo
```

**Tutte le banche dati: usa sempre i tool di export** — `core_export`, `semantic_scholar_export`, `pubmed_export`, `eric_export`, `openaire_export`, `doaj_export`, `zenodo_export`, `arxiv_export`, ognuno con `output_path="raw_<db>.json"` e gli stessi filtri del tool di ricerca: scaricano tutte le pagine e scrivono direttamente il file, restituendo solo i conteggi (`total`, `downloaded`, `complete`, `error`). **Non scrivere script che chiamano direttamente le API delle banche dati** (i server gestiscono sintassi, limiti e paginazione; per CORE, Semantic Scholar e PubMed la chiave configurata con `/plugin configure` arriva solo al server MCP, non alla shell, e uno script riceverebbe 429). Non paginare nemmeno i tool di ricerca per il download completo: i record passerebbero dalla conversazione. Se `complete` è `false`, riporta nel log `downloaded`/`total` ed `error` (o il limite di 9.999 per PubMed, `capped`). `semantic_scholar_search` è una ricerca per rilevanza (max 1.000, niente booleani): per il download PRISMA usa sempre `semantic_scholar_export`, che accetta la stessa query booleana (AND/OR/NOT) delle altre banche dati e la traduce da sé.

**Perché è critico:** Lo script di deduplicazione in Fase 2 legge questi file. Se non esistono, la Fase 2 non può partire e il corpus andrà perso al termine della sessione.

**Contratto macchina:** i tool search inclusi, con `output_format="json"`, restituiscono un envelope JSON `{records: [...], total: ..., ...}`. Decodifica il JSON e salva la lista `records` senza ricostruirla dal Markdown. Conserva totale dichiarato, pagine/offset, query, data e limiti nel log; il totale remoto non equivale ai record effettivamente scaricati. Accumula tutte le pagine recuperate prima di deduplicare.

OpenAIRE restituisce record normalizzati completi (titolo, DOI, anno, abstract, autori e altri campi disponibili); gli altri server conservano i record API grezzi. Per CORE usa i record già estratti in `records`; DOAJ conserva i wrapper contenenti `bibjson`, Zenodo i record con `metadata`. arXiv e PubMed restituiscono record normalizzati completi (abstract incluso); arXiv espone anche `fulltext_url` al PDF aperto. Non salvare testo formattato come record e non inventare metadati mancanti.

**Come salvare con Python:**
```python
import json
# Esempio per Semantic Scholar — ripeti per ogni DB
records_ss = [...]  # risultati dal MCP tool
with open("raw_semantic_scholar.json", "w", encoding="utf-8") as f:
    json.dump(records_ss, f, ensure_ascii=False, indent=2)
```

Aggiorna `prisma_state.json` (sezione `fase1`) e `prisma_log.md` (sezione FASE 1) con la tabella e le query esatte.

### 1.5 — Stream 2: record da fonti manuali (PRISMA 2020)

Se `raw_pdf_manual.json` esiste nella cartella di lavoro, riportalo nel log separatamente dal Stream 1:

```
FASE 1 — STREAM 2 (altre fonti)
────────────────────────────────────────────────────
Fonte                    | N record
─────────────────────────|──────────────────────────
PDF trovati manualmente  | N  ← da raw_pdf_manual.json
Grey literature          | N  ← se applicabile
Referenze di altri paper | N  ← se applicabile
────────────────────────────────────────────────────
TOTALE STREAM 2          | N
```

Aggiorna `prisma_state.json` con `fase1.stream2_pdf`. Il diagramma di flusso PRISMA 2020 nel report finale riporterà i due stream separatamente (Stream 1: database, Stream 2: altre fonti).

Chiedi:
> "I numeri ti sembrano ragionevoli? Vuoi affinare qualche query prima di procedere?"

---

## FASE 2 — Screening

### 2.1 — Deduplicazione e filtri (script incluso — non scriverne uno nuovo)

**Usa lo script del plugin `scripts/prisma_screening.py` (in questa skill). Non scrivere né modificare script di screening nella cartella di lavoro**: lo script incluso è testato e deterministico, così i numeri PRISMA sono riproducibili.

1. **Censimento** delle lingue e dei tipi dichiarati, senza scrivere nulla:
   ```
   python "<PLUGIN_ROOT>/skills/prisma-review/scripts/prisma_screening.py" --dir "<cartella prisma>" --census
   ```
2. **Traduci i filtri concordati in Fase 0 in opzioni** e mostra all'utente il comando prima di eseguirlo:
   - anni → `--year-from` / `--year-to`
   - lingue → `--languages en,it` (codici ISO 639-1)
   - tipi da escludere → `--exclude-types "thesis,Books,..."` con le etichette **esatte** del censimento (un record è escluso solo se *tutti* i suoi tipi dichiarati sono nella lista: "Book, Conference" resta)
   - solo peer-reviewed → `--peer-reviewed-only` (usa lo stato dichiarato, oggi solo ERIC)
   - arXiv solo se pubblicato → `--arxiv-published-only` (DOI, journal-ref o presenza in un'altra banca dati)
   - studio sigillato → `--pdf-inbox "<project_root>/<paths.sources>/pdf-inbox"` per scaricare i PDF open access (`local_pdf_path` nei record). L'inbox contiene candidati, anche studi che la Fase 3 escluderà: in Fase 5 copia in `<paths.sources>/pdf-inclusi` solo i PDF degli inclusi
3. **Esegui** e riporta il riepilogo. Lo script scrive `screening_prisma.json` (record mantenuti), `screening_excluded.json` (con `exclusion_reason`) e `screening_summary.json`.

Regole fisse, da non aggirare:
- La lingua e il tipo si valutano **solo se dichiarati** nel record. I record senza lingua dichiarata restano dentro e si valutano nello screening di Fase 3: **non inferire la lingua** da titolo o abstract.
- Nessun criterio di esclusione che l'utente non abbia concordato. Se un filtro richiesto non è supportato dallo script, chiedi all'utente: applicalo a mano in Fase 3 e documentalo nel log.
- Deduplicazione: DOI normalizzato, poi titolo normalizzato (lettere e cifre di qualsiasi alfabeto). I record uniti conservano tutte le fonti in `source_dbs`.

```
FASE 2 — SCREENING
────────────────────────────────────────
Totale lordo scaricato:        N
- Duplicati rimossi:          -N
────────────────────────────────────────
TOTALE dopo deduplicazione:    N
- Esclusi per anno:           -N
- Esclusi per altri filtri:   -N
────────────────────────────────────────
TOTALE dopo screening:         N
```

Aggiorna `prisma_state.json` (sezione `fase2`) e `prisma_log.md` (sezione FASE 2).

> ⚠️ **Corpus zero:** se `TOTALE dopo screening = 0`, **interrompi il workflow**. Non procedere alla Fase 3 con corpus vuoto. Avvisa l'utente e chiedi di: (1) rivedere i criteri di esclusione applicati, (2) ampliare le query di ricerca, (3) estendere il range di anni. Documenta nel `prisma_log.md` il motivo dell'arresto.

Chiedi:
> "Vuoi rivedere qualche categoria di esclusione o possiamo passare alla Fase 3?"

---

## FASE 3 — Eligibility

> ⚠️ **Limite pratico importante:** In questa fase si lavora esclusivamente sugli **abstract** disponibili nel JSON prodotto dalla Fase 2. I full-text sono disponibili solo per i PDF open access scaricati in Fase 2 (`local_pdf_path` nei record) e per i PDF forniti dal ricercatore: usali per i casi dubbi, ma il giudizio standard resta sull'abstract. L'etichetta "full-text" nella terminologia PRISMA si riferisce allo standard metodologico (idealmente dovresti leggere il testo completo); nella pratica di questa skill, la valutazione avviene sull'abstract. Documenta questa limitazione nella sezione "Note metodologiche" del `prisma_log.md`.

### 3.1 — Definizione criteri (PRIMA di leggere)

```
CRITERI DI INCLUSIONE:
- [ ] Studia specificamente [popolazione da PICO]
- [ ] Misura [outcome da PICO]
- [ ] Periodo: [anni]  Lingua: [lingue]
- [ ] [criteri aggiuntivi]

CRITERI DI ESCLUSIONE:
- [ ] Solo abstract senza full-text
- [ ] Campione N < [soglia]
- [ ] Non misura l'outcome di interesse
- [ ] [criteri aggiuntivi]
```

### 3.2 — Revisione paper con annotazione

> ⚠️ **Paper senza abstract:** Per atti di convegno, paper pre-2000 o record incompleti, l'abstract può essere assente. In questo caso: (1) valuta su titolo + autori + rivista/contesto; (2) se l'informazione è insufficiente per decidere, classifica come "abstract non disponibile — escluso per impossibilità di verifica criteri" e documenta nel `prisma_log.md`; (3) per il RAG, indicizza comunque usando titolo + tutti i campi estratti disponibili — un chunk parziale è meglio di nessun chunk.

> ⚠️ **Confirmation bias:** Applica i criteri in modo simmetrico. Non escludere paper che contraddicono l'ipotesi iniziale applicando criteri più severi rispetto ai paper che la confermano. Per ogni esclusione, documenta il criterio specifico violato — questo rende la decisione verificabile.

Per ogni paper **escluso** documenta il motivo nel `prisma_log.md` con il criterio esatto violato (es. "escluso: campione N < 20, criterio C3"). Per ogni paper **incluso**, annota già qui i punti salienti (metodologia, campione, risultati chiave) — serviranno per il RAG e la sintesi.

```
FASE 3 — ELIGIBILITY
────────────────────────────────────────
Full-text valutati:            N
- Esclusi (no full-text):     -N
- Esclusi (popolazione):      -N
- Esclusi (outcome):          -N
- Esclusi (altro: [motivo]):  -N
────────────────────────────────────────
TOTALE paper eleggibili:       N
```

Aggiorna `prisma_state.json` (sezione `fase3`) e `prisma_log.md` (sezione FASE 3).

Chiedi:
> "Vuoi procedere con l'estrazione dati da questi N paper?"

---

## FASE 4 — Inclusion ed Estrazione Dati

### 4.1 — Tabella di estrazione

Chiedi all'utente quali campi aggiuntivi vuole, poi costruisci la tabella con questi campi obbligatori:

```
| # | Autore/Anno | Titolo | DOI | N campione | Paese/Contesto | Livello scolastico | Design studio | Framework teorico | Tipo tecnologia | Durata intervento | Strumenti di misura | Outcome misurato | Effect Size (d/η²/r) | IC 95% | p-value | Risultati chiave | Qualità studio | Limitazioni | RQ risposta |
```

**Campi critici per il pilot study — non omettere:**
- **Framework teorico**: es. SRL/Zimmerman, SDT, TAM/UTAUT, Cognitive Load Theory
- **Tipo tecnologia**: es. chatbot, ITS, app mobile, LMS, VR
- **Durata intervento**: in settimane o ore totali
- **Strumenti di misura**: elenca tutti gli strumenti usati (es. MSLQ, TAM, NASA-TLX, test ad hoc)
- **Effect Size**: estrai d di Cohen, η², r o Hedges' g — se non riportato esplicitamente, calcola da F, t o χ² quando possibile
- **IC 95%**: intervalli di confidenza dell'effect size se disponibili
- **Qualità studio**: valuta con un punteggio sintetico (vedi 4.1b)

Il campo **RQ risposta** indica quale sub-domanda (RQ1, RQ2...) il paper aiuta a rispondere.

### 4.1b — Quality Assessment (obbligatorio)

Per ogni paper incluso, assegna un punteggio di qualità sintetico usando questi criteri:

| Criterio | Sì (1) | No (0) |
|---|---|---|
| Campione randomizzato o gruppi equivalenti al baseline | | |
| N ≥ 30 per gruppo | | |
| Misure validate (non ad hoc) | | |
| Effect size riportato | | |
| Follow-up o misure ripetute | | |
| Limitazioni dichiarate dagli autori | | |

**Punteggio totale /6** → registra nella colonna "Qualità studio" della tabella.
- 5–6: evidenza forte
- 3–4: evidenza moderata
- 0–2: evidenza debole (segnala all'utente — peso ridotto nella sintesi)

**Per studi qualitativi** (interviste, focus group, etnografia): usa i criteri CASP (Critical Appraisal Skills Programme) semplificati:

| Criterio CASP | Sì (1) | No (0) |
|---|---|---|
| Obiettivo chiaramente formulato | | |
| Metodo qualitativo appropriato alla domanda | | |
| Partecipanti selezionati in modo giustificato | | |
| Raccolta dati sistematica (es. traccia intervista documentata) | | |
| Analisi rigorosa (es. saturazione tematica, triangolazione) | | |
| Riflessività del ricercatore dichiarata | | |

**Punteggio CASP /6** → stessa scala (5–6 forte, 3–4 moderata, 0–2 debole). Registra nella stessa colonna "Qualità studio" con indicazione *(CASP)*.

### 4.2 — Aggiornamento progressivo dei file (dopo OGNI paper)

Per **ogni paper incluso**, aggiorna subito (non alla fine):

1. **`prisma_state.json`** — aggiungi l'oggetto paper nella lista `fase4.paper_inclusi`:
   ```json
   { "n": 1, "autore_anno": "Smith 2022", "doi": "...", "qualita": 4, "rq": "RQ1" }
   ```
2. **`prisma_synthesis.md`** — aggiungi il contributo del paper ai temi emergenti e alla risposta provvisoria
3. **`prisma_bibliography.md`** — aggiungi la scheda bibliografica annotata

### 4.2b — Checkpoint ogni 10 paper (anti-saturazione contesto)

Dopo ogni 10 paper processati, esegui questo controllo:
```
CHECKPOINT Fase 4 — Paper [N1]–[N2]
─────────────────────────────────────────────
Paper processati finora: [N]
File aggiornati: prisma_state.json ✓ / prisma_synthesis.md ✓ / prisma_bibliography.md ✓
Sezione "OUTPUT PER PILOT STUDY" aggiornata: ✓
  → Effect size aggregati: [ultimo valore calcolato o "in accumulo"]
  → Framework dominante finora: [es. SRL/Zimmerman]
  → Strumenti più usati finora: [lista parziale]
Temi emergenti finora: [lista breve]
Risposta provvisoria RQ1: [frase]
Risposta provvisoria RQ2: [frase]
─────────────────────────────────────────────
Confermi di proseguire con i prossimi 10 paper?
```
Aspetta conferma utente prima di continuare.

> ⚠️ **La sezione "OUTPUT PER PILOT STUDY" di `prisma_synthesis.md` è il meccanismo di handoff verso `educational-pilot-design`.** Aggiornarla paper per paper (o almeno a ogni checkpoint) è obbligatorio — se viene lasciata vuota, la skill `educational-pilot-design` non riceve le informazioni bibliografiche e deve chiederle manualmente. Questo garantisce che i file siano salvati anche se la sessione si interrompe.

### 4.3 — Salvataggio finale ed export `eligibility_prisma.json`

Aggiorna `prisma_state.json` (sezione `fase4`) e `prisma_log.md` (sezione FASE 4) con la tabella completa.

**Crea `eligibility_prisma.json`** (o `extraction_table.json` — entrambi i nomi sono accettati da `hybrid-rag`) — lista JSON con i record completi dei soli paper inclusi. Questo è il file ottimale per il RAG (ha abstract + tutti i campi estratti). Struttura di ogni oggetto:

```json
{
  "titolo": "...", "autori": "...", "anno": "2022", "doi": "...", "source_db": "...",
  "abstract": "...",
  "design_studio": "...", "framework_teorico": "...", "tipo_tecnologia": "...",
  "campione": "...", "durata_intervento": "...", "strumenti_misura": "...",
  "outcome": "...", "effect_size": "d=0.61", "ic_95": "[0.23, 0.99]",
  "qualita_studio": "4", "risultati_chiave": "...", "limitazioni": "...",
  "rq_risposta": "RQ1", "annotazione": "..."
}
```

Per l'abstract: recuperalo da `screening_prisma.json` cercando per DOI o titolo normalizzato. Se non disponibile, usa quello annotato in `prisma_bibliography.md`.

Chiedi:
> "L'estrazione è completa. Vuoi procedere con la costruzione del database RAG per generare il report finale?"

---

## FASE 5 — Costruzione del Database RAG (OBBLIGATORIO)

Il RAG è il meccanismo principale per generare il report finale senza saturare il contesto. **Non è opzionale**: con più di 10 paper inclusi è indispensabile.

**Usa la skill `hybrid-rag`** tramite il tool `Skill` di Claude Code (sostituisce il vecchio `build_rag_db.py`):

1. Invoca la skill `hybrid-rag`.
2. Esegui il template dalla skill installata con path assoluto, dalla directory review.
3. Indicizza solo `eligibility_prisma.json` dopo conferma umana. Se manca, completa eligibility: **mai usare screening non filtrato come fallback**.
   ```text
   python "<PLUGIN_ROOT>/skills/hybrid-rag/hybrid_rag_template.py" choose-backend --backend qdrant
   python "<PLUGIN_ROOT>/skills/hybrid-rag/hybrid_rag_template.py" choose-model --model bge-m3
   python "<PLUGIN_ROOT>/skills/hybrid-rag/hybrid_rag_template.py" init
   python "<PLUGIN_ROOT>/skills/hybrid-rag/hybrid_rag_template.py" index-prisma "eligibility_prisma.json"
   ```
4. Copia in `pdf_inclusi/` solo i PDF degli studi inclusi. Nel log registra nome file, DOI/ID, decisione eligibility, motivazione, revisore umano e data. L inbox `pdf_manuali/` contiene anche candidati esclusi e non va indicizzata in blocco.
   ```text
   python "<PLUGIN_ROOT>/skills/hybrid-rag/hybrid_rag_template.py" index-pdf "pdf_inclusi/"
   ```
   Conserva linee guida e materiali di contesto in un indice separato; non sono evidenza inclusa. Se esiste un vecchio indice contaminato, ricostruiscilo dal corpus approvato: upsert non rimuove gli esclusi.

5. Verifica con: `python "<PLUGIN_ROOT>/skills/hybrid-rag/hybrid_rag_template.py" status`

Al termine conferma il numero di documenti indicizzati e chiedi:
> "Il RAG è pronto con N documenti. Vuoi procedere con la generazione del report finale?"

---

## FASE 6 — Generazione Report Finale dal RAG

**Il report finale si costruisce interrogando il RAG**, non dalla memoria della sessione. Per ogni sezione, formula una query specifica, recupera i chunk rilevanti, e scrivi la sezione basandoti su quelli. Questo approccio:
- evita la saturazione del contesto con decine di paper
- garantisce che ogni affermazione sia ancorata a fonti recuperate
- permette di riprendere la generazione in sessioni successive

> ⛔ **Guardrail anti-allucinazione (OBBLIGATORIO):** Cita **solo ed esclusivamente** paper presenti nel RAG. Non citare mai paper dalla propria memoria di pretraining, da ricerche precedenti, o che non hai recuperato tramite query RAG in questa sessione. Se la letteratura è insufficiente per una domanda, dichiaralo esplicitamente: *"Non vi sono studi nel corpus incluso che rispondano a questa domanda."*

### 6.0 — Query del RAG per ogni sezione del report

Usa `hybrid_rag.py` (generato dalla skill `hybrid-rag` in Fase 5) per interrogare il RAG:

```bash
python "<PLUGIN_ROOT>/skills/hybrid-rag/hybrid_rag_template.py" query "self-regulated learning chatbot secondary school" --n 5
python "<PLUGIN_ROOT>/skills/hybrid-rag/hybrid_rag_template.py" query "effect size metacognition AI" --n 5
python "<PLUGIN_ROOT>/skills/hybrid-rag/hybrid_rag_template.py" query "limitations future research chatbot education" --n 5
```

I risultati vengono mostrati in Markdown direttamente in conversazione. Usa i chunk recuperati come base per scrivere ogni sezione del report — non citare mai paper non recuperati dal RAG.

### Struttura del report finale (`report_finale.md`)

#### 1. Introduzione e Domanda di Ricerca
*Leggi da:* `prisma_log.md` (sezione domanda + PICO)
- Contestualizza il problema
- Formula esplicitamente le domande di ricerca (RQ1, RQ2, ...)
- Giustifica la scelta della revisione sistematica come metodo

#### 2. Metodologia
*Leggi da:* `prisma_log.md` (fasi 1–3) + `prisma_state.json`
- Database consultati e date di ricerca
- Stringhe di ricerca esatte per ogni database
- Criteri di inclusione/esclusione
- Procedura di screening e deduplicazione
- Diagramma di flusso PRISMA con numeri reali

#### 3. Risultati — Caratteristiche degli Studi Inclusi
*Query RAG:* `"study design, sample size, methodology, context"` → recupera tutti i paper
- Tabella riassuntiva dei paper inclusi (da Fase 4)
- Distribuzione per anno, paese, design metodologico
- Panoramica delle popolazioni e contesti studiati

#### 4. Sintesi tematica e Risposta alle Domande di Ricerca
*Leggi da:* `prisma_synthesis.md` come base + Query RAG tematiche

Questa è la sezione più importante del report. Per ogni domanda di ricerca (RQ1, RQ2, ...):

a) Formula query RAG specifiche per quella domanda di ricerca
b) Recupera i chunk rilevanti
c) Scrivi una risposta argomentata che:
   - Citi esplicitamente i paper che supportano ogni affermazione (es. "Smith et al., 2022 mostrano che...")
   - Evidenzi **convergenze**: cosa confermano più studi indipendenti
   - Evidenzi **divergenze e contraddizioni**: cosa è ancora controverso e perché
   - Formuli la risposta in modo onesto, anche quando non è univoca: "I risultati suggeriscono X, ma con importanti limitazioni..."
   - Distingua tra evidenze forti (più studi convergenti, campioni ampi) ed evidenze deboli (studi singoli, campioni ridotti)
   - Non ometta i risultati negativi o i fallimenti degli interventi studiati

**Regola critica:** non affermare nulla di non supportato dai paper recuperati. Se la letteratura non fornisce una risposta chiara, dichiararlo esplicitamente come gap.

#### 5. Discussione
*Query RAG:* `"limitations, future research, implications"` + `prisma_synthesis.md`
- Interpretazione complessiva dei risultati
- Implicazioni teoriche e pratiche
- Limitazioni della review (bias di pubblicazione, copertura dei database, lingue escluse)
- Direzioni per la ricerca futura

#### 6. Conclusioni
- Risposta sintetica alle domande di ricerca originali
- Contributo della review alla letteratura
- Raccomandazioni operative (se pertinenti)

#### 7. Implicazioni per la ricerca futura e handoff al pilot study
*Leggi da:* sezione "OUTPUT PER PILOT STUDY" di `prisma_synthesis.md`

Questa sezione trasforma la review in input operativo per un futuro studio empirico. Struttura:

- **Effect size atteso:** riporta il valore medio ponderato dagli studi inclusi (o d = 0.5 se evidenza debole), con motivazione. Questo è l'input diretto per la power analysis del pilot.
- **Framework teorico raccomandato:** il framework più supportato dalla letteratura inclusa.
- **Strumenti di misura raccomandati:** i 2-3 strumenti più usati negli studi di qualità ≥ 3/6, con nota sulla disponibilità di versioni italiane validate.
- **RQ candidate per il pilot:** le domande ancora aperte o coperte solo da evidenza debole.
- **Campione raccomandato:** fascia d'età, livello scolastico e contesto geografico meno studiati.
- **Durata realistica dell'intervento:** basata sulla mediana degli studi inclusi.

> **Nota:** Se si prevede di proseguire con la skill `educational-pilot-design`, questa sezione è il documento di handoff. Condividerla nella Fase 1 di quella skill permette di saltare la raccolta manuale delle informazioni bibliografiche.

#### 8. Riferimenti bibliografici annotati
*Leggi da:* `prisma_bibliography.md`

Includi la lista completa di tutti i paper inclusi, in formato bibliografico standard (APA o quello richiesto dall'utente), ciascuno seguito dalla propria annotazione critica breve. Esempio:

```
Smith, J., Brown, A., & Lee, K. (2022). Effects of chatbots on student metacognition.
*Computers & Education*, 180, 104423. https://doi.org/10.1016/j.compedu.2022.104423

> **Tipo**: quasi-sperimentale | **Campione**: 120 studenti scuola secondaria (USA)
> **Contributo**: Prima valutazione controllata dell'impatto di chatbot conversazionali
> sulla metacognizione degli studenti; effetti positivi sul self-monitoring.
> **Limitazioni**: campione convenience, durata intervento breve (4 settimane).
```

---

## Export in Word

Al termine, proponi:
> "Vuoi convertire il report in un file Word (.docx)? Posso farlo con pandoc."

Se l'utente accetta, invoca la skill **`pandoc-export`** tramite il tool `Skill` di Claude Code.

---

## Export al Wiki OpenClaw (se wiki_workspace è configurato)

> **Cartella di progetto `<PROJ>`:** leggi `projects.<nome>.path` in `<wiki_workspace>/wiki.config.json` e usala in tutti i path qui sotto. In uno studio sigillato è `wiki-works/<slug-dello-studio>`; nella wiki predefinita è `wiki-works/ricerca`. Non usare `wiki-works/ricerca` in uno studio sigillato: le pagine finirebbero fuori dal progetto dello studio.

Dopo la generazione del report finale, esporta la conoscenza nel wiki per **persistenza a lungo termine**: le sessioni future potranno interrogare il wiki prima di avviare una nuova ricerca (Fase 1.0), trovando già sintetizzato il lavoro svolto.

### A — Paper inclusi → Entity pages (esegui dopo Fase 4)

Per ogni paper in `eligibility_prisma.json`, crea un file `<slug>.md.tmp` sotto `wiki_workspace/<PROJ>/entities/`. Template:

```markdown
# [Autore/i Cognome (Anno)] — [Titolo breve]

**Tipo studio:** [RCT / quasi-sperimentale / qualitativo / review]
**Campione:** [N partecipanti, contesto, paese]
**Framework teorico:** [es. SRL, TAM, UDL]
**Outcome principale:** [variabile dipendente e risultato]
**Effect size:** [d/η²/r = X, IC 95%]
**Qualità studio:** [N/6 — forte/moderata/debole]
**DOI:** [doi]
**Fonte PRISMA:** [nome_progetto]
**RQ risposta:** [RQ1 / RQ2 / ...]

## Contributo principale
[2-3 frasi: cosa aggiunge alla letteratura]

## Limitazioni
[limitazioni dichiarate dagli autori]

## Annotazione critica
[perché è stato incluso, rilevanza per la review]
```

Poi esegui:
```bash
python "<PLUGIN_ROOT>/wiki/scripts/wiki.py" ingest --workspace "[wiki_workspace]" --pages "[lista path .md.tmp relativi al workspace separati da virgola]" --log "prisma-entities | [nome_progetto]"
```

> ⚠️ **Batch processing:** con molti paper, raggruppa in batch da 10 file per evitare argomenti troppo lunghi nella command line.

### B — Sintesi → Synthesis page (esegui dopo Fase 6)

Crea `<PROJ>/synthesis/<slug>.md.tmp` sotto `wiki_workspace` da `prisma_synthesis.md` (non nella radice della review):

```markdown
# Sintesi PRISMA — [Domanda di ricerca principale]

**Progetto:** [nome_progetto]  **Data:** [AAAA-MM-GG]  **N paper inclusi:** [N]
**Database:** [lista]  **Anni coperti:** [da–a]

## Risposta alle domande di ricerca
[RQ1: ...] [RQ2: ...]

## Convergenze principali (≥3 studi)
[temi supportati da più studi indipendenti]

## Divergenze e gap
[cosa è ancora controverso, cosa non è stato studiato]

## Effect size aggregati
| Outcome | N studi | ES medio | Qualità evidenza |

## Framework teorici dominanti
[lista con frequenza]

## Implicazioni per ricerca futura
[RQ candidate per pilot, campioni sotto-studiati, strumenti consigliati]
```

Poi esegui:
```bash
python "<PLUGIN_ROOT>/wiki/scripts/wiki.py" ingest --workspace "[wiki_workspace]" --pages "<PROJ>/synthesis/<slug>.md.tmp" --log "prisma-synthesis | [nome_progetto]"
```

**Valuta §promotion:** se la sintesi è cross-dominio o citabile in ≥2 contesti diversi, promuovila da `<PROJ>/` a `wiki/` secondo i criteri del `wiki-core`.

---

## Errori da evitare

| Errore | Fix |
|--------|-----|
| PDF manuali non contati nel diagramma PRISMA | Usare sempre lo Stream 2 separato (Fase 1.5) — PRISMA 2020 richiede due stream distinti |
| PDF scannerizzati ignorati silenziosamente | Lo script segnala i file senza testo — compilare manualmente in `raw_pdf_manual.json` |
| Wiki export saltato per mancanza di tempo | Anche un batch parziale di entity pages ha valore — ogni paper esportato è conoscenza persistente |
| Wiki export fatto senza verifica del path | Testare sempre `wiki_workspace` con una query di prova prima di procedere con l'ingest |
| Saltare il Setup | Completare sempre Fase 0 prima |
| Non creare i file di persistenza subito | Creare `prisma_state.json` e `prisma_log.md` dopo la Fase 0 |
| Criteri di inclusione definiti dopo la lettura | Definire PRIMA di Fase 3 — evita bias di conferma |
| Pre-filtrare in Fase 1 come "rilevante" | Fase 1 = totali lordi; screening è Fase 2 |
| Non aggiornare i file a ogni fase | Aggiornamento progressivo — non a posteriori |
| Aggiornare `prisma_synthesis.md` solo alla fine | Aggiornare paper per paper durante la Fase 4 |
| RAG con solo abstract | Il RAG deve avere documenti ricchi (tutti i campi estratti) |
| Usare `prisma_state.json` per index-prisma | Ha solo dati minimi (no abstract) — usare `eligibility_prisma.json` (Fase 4) con i soli studi inclusi e la relativa provenienza umana |
| Generare il report dalla memoria della sessione | Usare sempre il RAG + i file di persistenza |
| Affermare risposte univoche non supportate | Dichiarare convergenze, divergenze e gap in modo onesto |
| Omettere la bibliografia annotata | Ogni paper incluso ha la sua scheda in `prisma_bibliography.md` |
| Ignorare duplicati cross-database | Controlla DOI e titolo normalizzato |
| Non estrarre effect size | Estrarre sempre d/η²/r dalla tabella risultati; se mancante, calcolare da F o t |
| Omettere quality assessment | Ogni paper incluso deve avere punteggio /6 — distingue evidenza forte da debole |
| Non compilare la sezione "OUTPUT PER PILOT STUDY" | Questa sezione è il handoff verso educational-pilot-design — deve essere completa prima di avviare il pilot |
| Effect size medio calcolato senza pesare la qualità | Calcola media ponderata escludendo gli studi con qualità ≤ 2/6 |
| Usare ERIC con `rows` default (10) | Specificare sempre `rows=200` + paginazione con `start` per coprire il corpus |
| Non sapere quando fermare la paginazione ERIC | Fermati quando il tool restituisce < `rows` elementi — quella è la fine del corpus |
| Non filtrare per `education_level` in ERIC | Usare `"Secondary Education"` (o altro livello da PICO) per ridurre il corpus fin dalla Fase 1 |
| Paper senza abstract esclusi senza documentazione | Classifica come "abstract non disponibile" e documenta nel log — non ignorare silenziosamente |
| Range anni in ERIC API HTTP con trattino | L'API HTTP non supporta range: usare `(pubyear:2020 OR pubyear:2021 OR ...)` — il tool MCP supporta `year_from`/`year_to` nativamente |
| Passare alla fase successiva senza ok utente | Aspetta sempre conferma esplicita |
| Non salvare JSON grezzi dopo Fase 1 | Salva immediatamente `raw_*.json` per ogni DB — lo script Fase 2 li richiede |
| MCP server non risponde durante Fase 1 | Registra 0 risultati, annota in `prisma_log.md`, continua con gli altri DB — non bloccare il workflow |
| Usare arxiv senza verificare la connessione | Arxiv ha instabilità storica — controlla `claude mcp list` prima; se ✗ Failed, documenta e usa semantic-scholar come fallback (indicizza anche i preprint arxiv) |
| Citare paper non nel RAG nel report finale | Solo paper recuperati tramite `python "<PLUGIN_ROOT>/skills/hybrid-rag/hybrid_rag_template.py" query "..."` possono essere citati — mai dalla memoria del modello |
| Soglia citazioni senza disclaimer recency | Avverti sempre che paper post-2022 sono penalizzati ingiustamente; documenta nella metodologia |
| Esclusioni Fase 3 senza criterio esplicito | Ogni esclusione deve citare il criterio violato per nome (es. "C3: campione < 20") |
| Aggiornare `prisma_state.json` solo alla fine Fase 4 | Aggiornare dopo ogni singolo paper — il checkpoint ogni 10 paper garantisce la persistenza |

Files in this skill

  • SKILL.md49.2 KB
  • scripts/extract_pdf_metadata.py5.6 KB
  • scripts/fetch_fulltext.py2.6 KB
  • scripts/test_fetch_fulltext.py3.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.