
# 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>` est la racine de stockage avec laquelle les moteurs ont été ouverts : il s'agit du chemin renvoyé par `StorageRoot::resolve()`, composé du répertoire de base et de l'espace de noms. Un magasin ouvert sous `StorageRoot::resolve(__DIR__ . '/var/storh', 'app')` se trouve sous
`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
```

Passer uniquement le répertoire de base (`var/storh`) indique aux commandes une collection qui n'existe pas encore. Elles signalent donc une collection vide au lieu d'échouer.

`vendor/bin/storh` nécessite storh 0.5.2 ou une version ultérieure lorsque storh est installé comme dépendance. Les versions précédentes recherchaient uniquement l'autoloader Composer dans le répertoire `vendor/` propre au paquet et échouaient avec une erreur `require`.

CLI affiche un JSON stable et peut donc être utilisé dans les tâches cron et les contrôles de disponibilité après déploiement. La collection par défaut est `default` ; le moteur par défaut est `doc` pour `stats`, `verify` et `reindex`, et `log` pour `compact`.

## Méthodes de maintenance utilisées par les commandes

Tous les moteurs exposent les méthodes de maintenance pilotées par CLI :

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

DocStore ajoute :

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

SegmentedLog ajoute :

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

Pour DocStore, `verify()` vérifie que les enregistrements sont correctement analysés et que les index d'égalité, de plage et composés correspondent à un balayage complet des enregistrements. `repair()` place en quarantaine les fichiers d'enregistrement corrompus sous `.storh/corrupt/` et reconstruit les index à partir des enregistrements valides.

Pour SegmentedLog, `verify()` décode les lignes des segments et compare l'index d'état dérivé actuel à une nouvelle relecture des segments. `repair()` reconstruit l'état dérivé et tronque les lignes finales incomplètes.

Pour Queue, `verify()` décode chaque événement durable et compare les états en attente, en cours de traitement et terminés, ainsi que les données utiles et l'ordre des revendications, à une nouvelle relecture `queue.log`. `repair()` reconstruit l'état de la file à partir du journal et remet en file les tâches en cours dont le délai a expiré.
