
# 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>` هو جذر التخزين الذي فُتحت به المحركات، أي المسار الذي تعيده `StorageRoot::resolve()`: المجلد الأساسي مضافاً إليه مساحة الاسم. ويكون المخزن المفتوح ضمن `StorageRoot::resolve(__DIR__ . '/var/storh', 'app')` موجوداً في `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
```

توجيه الأوامر إلى المجلد الأساسي وحده (`var/storh`) يشير إلى مجموعة غير موجودة بعد، لذا تعرض الأوامر مجموعة فارغة بدلاً من الإخفاق.

يتطلب `vendor/bin/storh` الإصدار 0.5.2 من storh أو أحدث عند تثبيت storh كتبعية. كانت الإصدارات الأقدم تبحث فقط عن محمّل Composer التلقائي في مجلد `vendor/` الخاص بالحزمة، وتفشل بخطأ `require`.

يطبع CLI قيمة JSON ثابتة لاستخدامها في مهام cron وفحوصات سلامة النشر. تكون المجموعة افتراضياً `default`؛ ويكون المحرك افتراضياً `doc` لـ`stats` و`verify` و`reindex`، و`log` لـ`compact`.

## أساليب الصيانة التي تستند إليها الأوامر

تتيح جميع المحركات أساليب الصيانة التي يستدعيها CLI:

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

يضيف DocStore:

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

يضيف SegmentedLog:

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

بالنسبة إلى DocStore، يتحقق `verify()` من تحليل السجلات بنجاح ومن مطابقة فهارس المساواة والنطاق والمركبة لفحص كامل للسجلات. ويعزل `repair()` ملفات السجلات التالفة ضمن `.storh/corrupt/`، ويعيد بناء الفهارس من السجلات الصالحة.

بالنسبة إلى SegmentedLog، يفك `verify()` ترميز أسطر المقاطع ويقارن فهرس الحالة المشتق الحالي بإعادة تشغيل جديدة للمقاطع. ويعيد `repair()` بناء الحالة المشتقة ويبتّر الأسطر اللاحقة غير المكتملة.

بالنسبة إلى Queue، يفك `verify()` ترميز كل حدث دائم ويقارن حالات الانتظار والمعالجة والإنجاز والحمولة وترتيب المطالبة بإعادة تشغيل جديدة لـ`queue.log`. ويعيد `repair()` بناء حالة قائمة الانتظار من السجل، ويعيد إدراج المهام التي انتهت مهلة معالجتها.
