---
name: prepara
description: Prepara l'ambiente di lavoro prima di iniziare — checklist per l'umano, vincoli per la macchina. Invoca prima di lavorare su codice, query, specifiche.
---

# /prepara — Preparazione sessione di lavoro

Questo skill prepara l'ambiente prima di iniziare a lavorare. Produce doppio vincolo:
- Checklist per l'umano (domande operative)
- Ambiente configurato per la macchina (file con vincoli e lente cognitiva)

## Istruzioni

### Fase 1 — Lettura dati

Leggi questi file con il tool Read:
1. `cognitive_iteration_kit/data/schema/tassonomia_driver.json`
2. `cognitive_iteration_kit/data/schema/tassonomia_bias.json`
3. `cognitive_iteration_kit/data/schema/checklist_produttivo.json`

### Fase 2 — Selezione driver e ruolo

Chiedi all'utente in conversazione:

**Domanda 1:** "Quale driver per questa sessione?"
- produttivo (codice, query, specifiche, artefatti operativi)
- conversazionale (ragionamento, analisi, discussione) — *non ancora disponibile*
- office_supporto (email, riassunti, documenti) — *non ancora disponibile*
- agentico (pianificazione, esecuzione concatenata) — *non ancora disponibile*

Se l'utente sceglie un driver diverso da `produttivo`, rispondi: "Questo driver sarà disponibile in una fetta successiva. Per ora è attivo solo il driver produttivo." e richiedi.

**Domanda 2:** "Quale ruolo?"
- tecnico_codice (query, script, specifica implementativa)
- integrativo (fusione fonti, mappatura) — *non ancora disponibile*
- linguistico (traduzione, analisi terminologica) — *non ancora disponibile*

Se l'utente sceglie un ruolo diverso da `tecnico_codice`, rispondi: "Questo ruolo sarà disponibile in una fetta successiva. Per ora è attivo solo tecnico_codice." e richiedi.

### Fase 3 — Checklist interattiva

Poni le domande dalla checklist una alla volta, in conversazione normale. Per ogni domanda, attendi la risposta dell'utente prima di procedere alla successiva.

Leggi le domande da `checklist_produttivo.json -> ruoli -> tecnico_codice -> domande`.

Per la domanda con `tipo: "scelta"` (tipo_lavoro), presenta le opzioni: fix / refactor / feature / query.

Per le domande con `tipo: "testo_opzionale"`, se l'utente non risponde o dice "nessuna", registra "nessuna".

Per la domanda con `tipo: "scelta_opzionale"` (genera_spec), presenta le opzioni e il default. Se l'utente non risponde, usa il default.

Raccogli tutte le risposte.

### Fase 4 — Costruzione lente cognitiva

Dai file letti in Fase 1, estrai:

**Bias probabili:**
- Percorso: `tassonomia_driver.json -> driver -> produttivo -> ruoli -> tecnico_codice -> bias_probabili`
- Per ogni bias key, cerca la formula in: `tassonomia_bias.json -> famiglie -> [cerca in tutte le famiglie] -> bias -> [bias_key] -> formula`

**Operatori preferenziali:**
- Percorso: `tassonomia_driver.json -> driver -> produttivo -> ruoli -> tecnico_codice -> operatori_preferenziali`
- Per ogni operatore key, cerca l'effetto in: `tassonomia_driver.json -> operatori -> lista -> [operatore_key] -> effetto`

**Regole:**
- Percorso: `checklist_produttivo.json -> ruoli -> tecnico_codice -> regole`

### Fase 5 — Generazione artefatti

#### 5a. Scrivi vincoli_sessione.md

Usa il tool Write per creare il file `vincoli_sessione.md` nella root del progetto. Se esiste già, sovrascrivilo.

Contenuto (sostituisci i placeholder con i dati raccolti):

```
# Vincoli sessione — [data di oggi, formato YYYY-MM-DD]

## Stato sessione
stato: LAVORO
ultimo_skill: /prepara
timestamp: [data e ora corrente, formato YYYY-MM-DDTHH:MM]

## Contesto
- Driver: produttivo
- Ruolo: tecnico_codice
- Tipo lavoro: [risposta tipo_lavoro]
- Progetto: [nome della directory di lavoro corrente]

## Oggetto
[risposta oggetto]

## Output atteso
[risposta output_atteso]

## Vincoli non negoziabili
[risposta vincoli]

## Off limits
[risposta off_limits]

## Versione base
[risposta versione_base, oppure "nessuna"]

---
<!-- Sezione macchina — lente cognitiva attiva -->
## Lente cognitiva

### Bias probabili per questo driver+ruolo
[per ogni bias: "- [bias_key]: [formula da tassonomia_bias.json]"]

### Operatori preferenziali
[per ogni operatore: "- [operatore_key]: [effetto da tassonomia_driver.json]"]

### Regole
[per ogni regola dalla checklist: "- [regola]"]
```

#### 5b. Aggiorna CLAUDE.md

Usa il tool Read per leggere CLAUDE.md nella root del progetto.

Cerca i marker `<!-- PREPARA:BEGIN -->` e `<!-- PREPARA:END -->`.

**Se i marker esistono:** usa Edit per sostituire tutto il contenuto tra i due marker (inclusi i marker stessi) con il nuovo blocco.

**Se i marker NON esistono:** usa Edit per appendere il blocco in fondo al file.

Blocco da iniettare:

```
<!-- PREPARA:BEGIN -->
## Vincoli sessione attiva

Sessione preparata con /prepara il [data di oggi].
Driver: produttivo / tecnico_codice / [tipo_lavoro].
Vincoli completi in: vincoli_sessione.md

Regole attive:
[per ogni regola dalla checklist: "- [regola]"]
- Bias da sorvegliare: [lista bias_key separati da virgola]
- Operatori da usare: [lista operatore_key separati da virgola]

Dispositivi attivi:
- Ancoraggio: [se spec generata: "openspec/specs/[nome]/spec.md" | altrimenti: "non attivo"]
- Delta: [se git attivo: "git diff main..HEAD --stat" | altrimenti: "non attivo"]
<!-- PREPARA:END -->
```

#### 5c. Deposita in iteration_log.json (opzionale)

Usa il tool Read per leggere `cognitive_iteration_kit/data/iteration_log.json`.

Cerca nelle entries una entry dove `tipo` == `"preparazione"` AND `driver` == `"produttivo"`.

**Se nessuna trovata:** aggiungi una nuova entry all'array `entries`:

```json
{
  "id": "iter_[NNN]",
  "timestamp": "[data di oggi, YYYY-MM-DD]",
  "tipo": "preparazione",
  "driver": "produttivo",
  "descrizione": "Attivato /prepara per tecnico_codice su [nome progetto]. Vincoli fissati, lente iniettata.",
  "operatore_usato": "fissa_oggetto_e_vincoli",
  "esito": "ambiente preparato",
  "bias_rilevato": null,
  "termine_stabilizzato": null
}
```

Dove NNN = numero totale di entries esistenti + 1, zero-padded a 3 cifre.

**Se già trovata:** non depositare nulla.

#### 5d. Genera spec formale OpenSpec (dispositivo di ancoraggio)

Questa fase si esegue SOLO se:
1. L'utente ha risposto "si" alla domanda `genera_spec`
2. OpenSpec CLI è disponibile (verifica con Bash: `npx @fission-ai/openspec --version 2>/dev/null`)

**Se entrambe le condizioni sono vere:**

1. Deriva un nome kebab-case dall'oggetto del lavoro (es. "Integrazione dispositivi in /prepara" → `integrazione-dispositivi-prepara`)

2. Verifica se esiste già `openspec/specs/[nome-kebab]/spec.md`. Se esiste, salta la generazione e mostra: "Spec esistente trovata: openspec/specs/[nome-kebab]/spec.md"

3. Se non esiste, crea la directory e il file `openspec/specs/[nome-kebab]/spec.md` con questo formato:

```
## Purpose

[risposta oggetto] — Driver produttivo / tecnico_codice / [tipo_lavoro]

## Requirements

[Per ogni vincolo non negoziabile, genera un requisito:]

### Requirement: [vincolo sintetizzato in 5-8 parole]
The system SHALL [riformulazione del vincolo in forma normativa].

#### Scenario: [scenario derivato dal vincolo]
- **WHEN** [condizione derivata dal contesto]
- **THEN** [risultato atteso derivato dall'output_atteso]

## Off Limits

[risposta off_limits — lista delle aree non toccabili]

## Traceability

- Fonte: vincoli_sessione.md generato il [data di oggi]
- Driver: produttivo / tecnico_codice / [tipo_lavoro]
- Oggetto: [risposta oggetto]
```

4. Registra il path della spec generata per il riepilogo finale.

**Se una delle condizioni è falsa:** salta silenziosamente, senza errori o messaggi.

#### 5e. Verifica stato git (preparazione dispositivo delta)

Questa fase prepara il dispositivo di verifica delta per la fine della sessione.

Verifica con Bash: `git rev-parse --is-inside-work-tree 2>/dev/null`

**Se git è disponibile:**
1. Registra il branch corrente: `git branch --show-current`
2. Registra se esiste il branch main: `git rev-parse --verify main 2>/dev/null`
3. Annota nel riepilogo: "Dispositivo delta attivo — verifica post-lavoro disponibile con: git diff main..HEAD --stat"

**Se git non è disponibile:** salta silenziosamente.

### Fase 6 — Riepilogo

Mostra all'utente:

```
Ambiente preparato. Vincoli fissati.

- Driver: produttivo / tecnico_codice / [tipo_lavoro]
- Oggetto: [oggetto, prime 80 caratteri]
- Vincoli in: vincoli_sessione.md
- CLAUDE.md aggiornato con blocco vincoli sessione
- Bias sotto sorveglianza: [lista bias]
- Operatori attivi: [lista operatori]

Dispositivi:
- Ancoraggio: [se spec generata: "openspec/specs/[nome]/spec.md" | se saltata: "non attivo (OpenSpec non disponibile o non richiesto)"]
- Delta: [se git attivo: "attivo — verifica con: git diff main..HEAD --stat" | se no git: "non attivo (git non inizializzato)"]
```
