
# CLI

```bash
vendor/bin/storh stats <root> [collection] [doc|log|queue]
vendor/bin/storh verify <root> [collection] [doc|log|queue]
vendor/bin/storh compact <root> [collection] [doc|log]
vendor/bin/storh reindex <root> [collection]
```

`<root>` è la radice di archiviazione con cui sono stati aperti i motori: è il percorso
restituito da `StorageRoot::resolve()`, cioè la directory di base più lo spazio dei nomi. Un archivio
aperto in `StorageRoot::resolve(__DIR__ . '/var/storh', 'app')` si trova in
`var/storh/app`:

```bash
vendor/bin/storh stats var/storh/app pages doc
vendor/bin/storh verify var/storh/app events log
vendor/bin/storh compact var/storh/app events log
vendor/bin/storh reindex var/storh/app pages
```

Passando solo la directory di base (`var/storh`), i comandi puntano a una raccolta
che non esiste ancora, quindi mostrano una raccolta vuota invece di generare un errore.

`vendor/bin/storh` richiede 0.5.2 storh o versione successiva se storh è installato come dipendenza. Le versioni precedenti cercavano solo l'autoloader Composer nella directory `vendor/` del pacchetto e generavano un errore `require`.

CLI stampa dati JSON stabili, utilizzabili nei job cron e nei controlli di integrità del deployment. La raccolta predefinita è `default`; il motore predefinito è `doc` per `stats`, `verify` e `reindex`, e `log` per `compact`.

## Metodi di manutenzione utilizzati dai comandi

Tutti i motori espongono i metodi di manutenzione utilizzati da CLI:

```php
$store->stats();
$store->health();
$store->verify();
$store->repair();
```

DocStore aggiunge:

```php
$docs->reindex();
$docs->compact(); // no-op report for API symmetry
```

SegmentedLog aggiunge:

```php
$log->compact();
$log->recover();
$log->state_index();
```

Per DocStore, `verify()` verifica che i record vengano analizzati correttamente e che gli indici di uguaglianza, intervallo e composti corrispondano a una scansione completa dei record. `repair()` mette in quarantena i file di record corrotti in `.storh/corrupt/` e ricostruisce gli indici a partire dai record validi.

Per SegmentedLog, `verify()` decodifica le righe dei segmenti e confronta l'indice dello stato derivato attuale con una nuova riproduzione dei segmenti. `repair()` ricostruisce lo stato derivato e tronca le righe finali incomplete.

Per Queue, `verify()` decodifica ogni evento persistente e confronta lo stato degli elementi in attesa, in elaborazione e completati, dei payload e dell'ordine di acquisizione con una nuova riproduzione di `queue.log`. `repair()` ricostruisce lo stato della coda dal log e rimette in coda i job in elaborazione scaduti.
