
# 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>` is de opslagroot waarmee de engines zijn geopend, het pad dat `StorageRoot::resolve()` retourneert: de basismap plus de namespace. Een store die onder `StorageRoot::resolve(__DIR__ . '/var/storh', 'app')` is geopend, bevindt zich onder `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
```

Alleen de basismap doorgeven (`var/storh`) laat de commando's verwijzen naar een collectie die nog niet bestaat, zodat ze een lege collectie melden in plaats van een foutmelding te geven.

`vendor/bin/storh` vereist storh 0.5.2 of later wanneer storh als afhankelijkheid is geïnstalleerd. Eerdere versies zochten alleen naar de Composer-autoloader in de eigen `vendor/`-map van het pakket en gaven een `require`-fout.

CLI drukt stabiele JSON af, zodat het vanuit cron-taken en statuscontroles voor implementaties kan worden gebruikt. De collectie is standaard `default`; de engine is standaard `doc` voor `stats`, `verify` en `reindex`, en `log` voor `compact`.

## Onderhoudsmethoden die achter de commando's zitten

Alle engines bieden de onderhoudsmethoden aan die door CLI worden aangestuurd:

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

DocStore voegt toe:

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

SegmentedLog voegt toe:

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

Voor DocStore controleert `verify()` of records correct worden geparseerd en of gelijkheids-, bereik- en samengestelde indexen overeenkomen met een volledige scan van records. `repair()` zet beschadigde recordbestanden in quarantaine onder `.storh/corrupt/` en bouwt indexen opnieuw op uit geldige records.

Voor SegmentedLog decodeert `verify()` de segmentregels en vergelijkt de huidige afgeleide statusindex met een nieuwe replay van de segmenten. `repair()` bouwt de afgeleide status opnieuw op en kapt onvolledige afsluitende regels af.

Voor Queue decodeert `verify()` elke duurzame gebeurtenis en vergelijkt het de status van wachtrij, verwerking, voltooiing, payload en claimvolgorde met een nieuwe `queue.log`-replay.
`repair()` bouwt de queuestatus opnieuw op uit het log en plaatst verlopen verwerkingstaken terug in de wachtrij.
