
# Hook

Rudel menjalankan tindakan dan filter WordPress di sekitar peristiwa siklus hidup sandbox. Katalog di bawah ini adalah hasil dari `Rudel::hooks()`: 28 tindakan dan 5 filter.

## Contoh

```php
add_action(
    'rudel_after_environment_create',
    function ( \Rudel\Environment $environment, array $context ): void {
        error_log( 'Created Rudel environment ' . $environment->id );
    },
    10,
    2
);
```

Sebagian besar tindakan `before` dan `failed` menerima larik `$context`. Untuk hook siklus hidup sandbox, larik ini berisi `environment` (atau `name`, `options`, dan `environments_dir` saat pembuatan); tindakan `failed` juga menerima `Throwable` yang tertangkap sebagai `$error`.

## Tindakan siklus hidup sandbox

| Tindakan | Argumen |
|--------|-----------|
| `rudel_before_environment_create` | `$context` |
| `rudel_after_environment_create` | `$environment`, `$context` |
| `rudel_environment_create_failed` | `$context`, `$error` |
| `rudel_before_environment_update` | `$context` |
| `rudel_after_environment_update` | `$environment`, `$context` |
| `rudel_environment_update_failed` | `$context`, `$error` |
| `rudel_before_environment_destroy` | `$context` |
| `rudel_after_environment_destroy` | `$context` |
| `rudel_environment_destroy_failed` | `$context`, `$error` |
| `rudel_before_environment_replace_state` | `$context` |
| `rudel_after_environment_replace_state` | `$result`, `$context` |
| `rudel_environment_replace_state_failed` | `$context`, `$error` |

Tiga tindakan `replace_state` termasuk `EnvironmentManager::replace_environment_state()`, yang tidak dipanggil oleh perintah Rudel mana pun.

## Tindakan snapshot

| Tindakan | Argumen |
|--------|-----------|
| `rudel_before_recovery_point_create` | `$context` |
| `rudel_after_recovery_point_create` | `$context`, `$meta` |
| `rudel_before_recovery_point_restore` | `$context` |
| `rudel_after_recovery_point_restore` | `$context` |
| `rudel_before_recovery_point_delete` | `$context` |
| `rudel_after_recovery_point_delete` | `$context` |

`$context` berisi `environment`, `kind` (`snapshot`), `name`, dan `path`. Masing-masing juga dijalankan dengan alias `snapshot`, misalnya `rudel_after_snapshot_create`, dan kegagalan menjalankan `rudel_failed_recovery_point_{create|restore|delete}` serta `rudel_failed_snapshot_{create|restore|delete}` dengan `$context` dan error. Alias tersebut tidak tercantum dalam katalog.

## Tindakan pembersihan

| Tindakan | Argumen |
|--------|-----------|
| `rudel_before_environment_cleanup` | `$options` |
| `rudel_after_environment_cleanup` | `$result`, `$options` |
| `rudel_before_environment_cleanup_merged` | `$options` |
| `rudel_after_environment_cleanup_merged` | `$result`, `$options` |

`$result` berisi `removed`, `skipped`, `errors`, dan `reasons`.

## Tindakan push Git

| Tindakan | Argumen |
|--------|-----------|
| `rudel_before_environment_push` | `$context` |
| `rudel_after_environment_push` | `$sha`, `$context` |
| `rudel_environment_push_failed` | `$context`, `$error` |

Ini dijalankan untuk `Rudel::push()`. `$context` berisi `environment`, `remote`, `message`, dan `subdir`. Perintah `wp rudel push` mendorong perubahan secara langsung dan tidak menjalankan tindakan tersebut.

## Tindakan otomatisasi

| Tindakan | Argumen |
|--------|-----------|
| `rudel_before_automation_cleanup` | `$config` |
| `rudel_after_automation_cleanup` | `$result`, `$config` |
| `rudel_after_automation_expiring_environments` | `$result`, `$config` |

`$config` adalah larik `rudel_config` lengkap. Lihat [Otomatisasi](https://rudel.inline0.dev/id/docs/features/automation).

## Filter

| Filter | Argumen |
|--------|-----------|
| `rudel_environment_create_options` | `$options`, `$name`, `$manager` |
| `rudel_environment_clone_source` | `$clone_source`, `$host_url`, `$db_cloned`, `$themes_cloned`, `$plugins_cloned`, `$uploads_cloned`, `$extra` |
| `rudel_environment_cleanup_options` | `$options`, `$repository` |
| `rudel_environment_cleanup_merged_options` | `$options`, `$repository` |
| `rudel_environment_db_dropin_contents` | `$contents`, `$context` |

`rudel_environment_create_options` dapat mengubah opsi pada setiap pemanggilan create sebelum Rudel memprosesnya. `rudel_environment_clone_source` memfilter metadata clone yang disimpan pada sandbox yang dibuat dari host. `rudel_environment_db_dropin_contents` hanya berlaku untuk drop-in `db.php` yang digunakan lingkungan multisite-subsite; sandbox overlay, satu-satunya jenis yang dibuat versi saat ini, tidak pernah membuatnya.

Filter ditujukan untuk penyesuaian kebijakan, bukan untuk mengganti model penyimpanan Rudel. Identitas runtime, prefix tabel, dan metadata worktree tetap menjadi state Rudel berbasis DB.
