
# 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>` adalah root penyimpanan yang digunakan saat membuka mesin, yaitu jalur
yang dikembalikan oleh `StorageRoot::resolve()`: direktori dasar ditambah namespace. Store
yang dibuka di bawah `StorageRoot::resolve(__DIR__ . '/var/storh', 'app')` berada di bawah
`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
```

Memberikan direktori dasar saja (`var/storh`) akan mengarahkan perintah ke
koleksi yang belum ada, sehingga perintah melaporkan koleksi kosong alih-alih gagal.

`vendor/bin/storh` memerlukan storh 0.5.2 atau yang lebih baru saat storh dipasang sebagai
dependensi. Versi sebelumnya hanya mencari autoloader Composer di direktori `vendor/` milik
paket sendiri dan gagal dengan kesalahan `require`.

CLI mencetak JSON yang stabil agar dapat digunakan dalam tugas cron dan pemeriksaan
kesehatan deployment. Koleksi bawaan adalah `default`; mesin bawaan adalah
`doc` untuk `stats`, `verify`, dan `reindex`, serta `log` untuk `compact`.

## Metode pemeliharaan yang digunakan oleh perintah

Semua mesin menyediakan metode pemeliharaan yang dijalankan oleh CLI:

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

DocStore menambahkan:

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

SegmentedLog menambahkan:

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

Untuk DocStore, `verify()` memeriksa apakah record dapat diurai dengan benar dan apakah indeks kesetaraan,
rentang, serta gabungan cocok dengan hasil pemindaian penuh record. `repair()` mengarantina
file record yang rusak di bawah `.storh/corrupt/` dan membangun ulang indeks dari record
valid.

Untuk SegmentedLog, `verify()` mendekode baris segmen dan membandingkan indeks status turunan saat ini dengan pemutaran ulang segmen yang baru. `repair()` membangun ulang status turunan dan memotong baris akhir yang terpotong.

Untuk Queue, `verify()` mendekode setiap peristiwa persisten dan membandingkan status pending,
processing, done, payload, serta urutan klaim dengan pemutaran ulang `queue.log` yang baru.
`repair()` membangun ulang status antrean dari log dan memasukkan kembali pekerjaan yang sedang diproses namun sudah melewati batas waktu.
