
# Matriks Fitur

Matriks fitur adalah laporan yang dibuat secara otomatis untuk mencatat apakah alat native dan wrapper Greph menghasilkan keluaran yang setara untuk setiap flag dan perilaku yang didukung. Matriks ini menjadi sumber kebenaran untuk pertanyaan "apakah Greph mendukung ini?".

Matriks dibuat ulang dari probe perintah nyata pada ruang kerja fixture deterministik. Bukti mentah tersedia di [`FEATURE_MATRIX.json`](https://github.com/inline0/greph/blob/main/FEATURE_MATRIX.json) dan tabel yang dirender tersedia di [`FEATURE_MATRIX.md`](https://github.com/inline0/greph/blob/main/FEATURE_MATRIX.md).

## Panduan Status

| Status | Arti |
|---|---|
| `Pass` | Probe dijalankan dan sesuai dengan perilaku yang diharapkan |
| `Fail` | Probe dijalankan, tetapi tidak memenuhi perilaku yang diharapkan |
| `Unavailable` | Perintah penyedia tidak tersedia di lingkungan ini |

## Bagian

Matriks ini disusun menjadi enam bagian:

1. **Permukaan Kompatibilitas rg**: setiap probe dijalankan pada biner `rg` upstream dan `bin/rg`. Keduanya harus `Pass` agar baris ditandai sebagai didukung.
2. **Permukaan Kompatibilitas sg**: setiap probe dijalankan pada biner `sg` upstream dan `bin/sg`. Keduanya harus `Pass` agar baris ditandai sebagai didukung.
3. **Permukaan Khusus Wrapper sg**: probe yang hanya menargetkan `bin/sg` (fitur tambahan yang disediakan wrapper tetapi tidak tersedia di ast-grep itu sendiri).
4. **Permukaan greph Native**: probe yang menguji `bin/greph` secara langsung. Tidak ada alat upstream untuk dibandingkan; probe memeriksa perilaku yang diharapkan pada ruang kerja fixture.
5. **Permukaan greph Terindeks**: probe yang menguji `bin/greph-index` (build, penyegaran, dan pencarian teks yang sudah dihangatkan).
6. **Permukaan Pustaka AST Terindeks**: probe yang memanggil PHP API (`Greph::buildAstIndex()`, `Greph::searchAstIndexed()`, `Greph::buildAstCache()`, `Greph::searchAstCached()`) dan memeriksa build, pencarian, serta penyegaran.

## Membuat Ulang Matriks

```bash
php bin/feature-matrix
```

Jalankan dari hasil kloning repositori dengan `rg` dan `sg` di `PATH`; `bin/feature-matrix` bukan bagian dari paket Composer. Skrip ini membuat ruang kerja fixture, menjalankan setiap probe kompatibilitas terhadap biner upstream (jika terpasang) dan wrapper Greph, merekam hasil terstruktur, lalu menulis `FEATURE_MATRIX.json` dan `FEATURE_MATRIX.md`. Sertakan `--stdout` untuk menampilkan Markdown tanpa menulis file mana pun.

File yang dikomit dibuat ulang secara manual; CI tidak membuatnya ulang. Rangkaian PHPUnit yang dijalankan CI mencakup pengujian yang membuat matriks dengan alat upstream ditandai tidak tersedia, lalu memeriksa struktur laporannya. Dengan demikian, satu probe yang mulai gagal tidak akan menggagalkan CI. Buat ulang matriks dan tinjau diff sebelum rilis.

## Isi Matriks dan Dokumentasi

Referensi CLI serta halaman [Kompatibilitas / rg](https://greph.inline0.dev/id/docs/compatibility/rg) dan [Kompatibilitas / sg](https://greph.inline0.dev/id/docs/compatibility/sg) menjelaskan cakupan yang *dimaksud*. Matriks fitur mencatat cakupan yang *terverifikasi*, dengan argumen probe yang persis di samping setiap baris.

Jika sesuatu didokumentasikan tetapi tidak ada dalam matriks, dokumentasinya sudah usang. Jika sesuatu ada dalam matriks tetapi tidak didokumentasikan, dokumentasinya perlu dilengkapi. Keduanya harus selaras.

## Contoh Baris

### Kompatibilitas rg (cuplikan)

| Fitur | rg | bin/rg | Catatan |
|---|---|---|---|
| Pencarian string tetap | Lulus | Lulus | Probe: `-F needle single.txt` |
| Pencarian string tetap tanpa membedakan huruf besar-kecil | Lulus | Lulus | Probe: `-F -i needle single.txt` |
| Pencarian seluruh kata | Lulus | Lulus | Probe: `-F -w needle words.txt` |
| Filter glob | Lulus | Lulus | Probe: `--glob *.php function .` |
| File tersembunyi | Lulus | Lulus | Probe: `--hidden -F secret .` |
| Keluaran JSON terstruktur | Lulus | Lulus | Probe: `--json -F needle single.txt` menggunakan semantik peristiwa ripgrep JSON |

### Kompatibilitas sg (cuplikan)

| Fitur | sg | bin/sg | Catatan |
|---|---|---|---|
| Pencarian pola dengan `run --pattern` | Lulus | Lulus | Probe: `run --pattern array($$$ITEMS) src/App.php` |
| Penulisan ulang melalui `run --rewrite` | Lulus | Lulus | Probe: `run --pattern array($$$ITEMS) --rewrite [$$$ITEMS] src/App.php` |
| Keluaran aliran JSON terstruktur | Lulus | Lulus | Probe: `run --json=stream --pattern dispatch($EVENT) src/App.php` |
| Penulisan ulang semua | Lulus | Lulus | Probe: `run --pattern array($$$ITEMS) --rewrite [$$$ITEMS] --update-all src/App.php` |

Untuk tabel lengkap, lihat [`FEATURE_MATRIX.md`](https://github.com/inline0/greph/blob/main/FEATURE_MATRIX.md).

## Mengapa Berbasis Probe

Tabel kompatibilitas yang dipelihara secara manual akan menyimpang. Inti wrapper adalah "gunakan wrapper di tempat Anda biasa memanggil `rg` atau `sg` dan semuanya tetap berfungsi". Satu-satunya cara menjaga janji itu adalah menjalankan alat upstream dan wrapper secara berdampingan, lalu membandingkan hasilnya. Runner probe melakukan hal tersebut setiap kali matriks dibuat ulang.
