
# 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>` é a raiz de armazenamento com a qual os mecanismos foram abertos, ou seja, o caminho que
`StorageRoot::resolve()` retorna: o diretório base mais o namespace. Um armazenamento
aberto em `StorageRoot::resolve(__DIR__ . '/var/storh', 'app')` fica em
`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
```

Passar apenas o diretório base (`var/storh`) aponta os comandos para uma
coleção que ainda não existe, então eles informam uma coleção vazia em vez de falhar.

`vendor/bin/storh` precisa de storh 0.5.2 ou posterior quando storh está instalado como
uma dependência. As versões anteriores procuravam apenas o autoloader Composer no diretório `vendor/` do pacote e falhavam com um erro `require`.

CLI imprime JSON estável para uso em tarefas cron e verificações de integridade de implantação. A coleção usa `default` por padrão; o mecanismo usa `doc` para `stats`, `verify` e `reindex`, e `log` para `compact`.

## Métodos de manutenção usados pelos comandos

Todos os mecanismos expõem os métodos de manutenção que CLI aciona:

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

O DocStore adiciona:

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

O SegmentedLog adiciona:

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

Para o DocStore, `verify()` verifica se os registros são analisados corretamente e se os índices de igualdade,
intervalo e compostos correspondem a uma varredura completa dos registros. `repair()` coloca em quarentena
arquivos de registro corrompidos em `.storh/corrupt/` e recria os índices a partir de registros válidos.

Para o SegmentedLog, `verify()` decodifica as linhas dos segmentos e compara o índice de estado derivado atual com uma nova reprodução dos segmentos. `repair()` recria o estado derivado e trunca as linhas finais incompletas.

Para a fila, `verify()` decodifica cada evento durável e compara o estado de pendências,
processamento, conclusão, payload e ordem de reivindicação com uma nova reprodução de `queue.log`.
`repair()` recria o estado da fila a partir do log e recoloca na fila as tarefas em processamento cujo tempo expirou.
