
# Hook

Rudel attiva azioni e filtri WordPress in corrispondenza degli eventi del ciclo di vita della sandbox. Il catalogo seguente mostra ciò che restituisce `Rudel::hooks()`: 28 azioni e 5 filtri.

## Esempio

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

La maggior parte delle azioni `before` e `failed` riceve un array `$context`. Per gli hook del ciclo di vita della sandbox, contiene `environment` (oppure `name`, `options` e `environments_dir` durante la creazione); anche le azioni `failed` ricevono l'`Throwable` intercettato come `$error`.

## Azioni del ciclo di vita della sandbox

| Azione | Argomenti |
|--------|-----------|
| `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` |

Le tre azioni `replace_state` appartengono a `EnvironmentManager::replace_environment_state()`, che nessun comando Rudel richiama.

## Azioni degli snapshot

| Azione | Argomenti |
|--------|-----------|
| `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` comprende `environment`, `kind` (`snapshot`), `name` e `path`. Ognuna di queste si attiva anche con un alias `snapshot`, ad esempio `rudel_after_snapshot_create`; in caso di errore si attivano `rudel_failed_recovery_point_{create|restore|delete}` e `rudel_failed_snapshot_{create|restore|delete}` con `$context` e l'errore. Questi alias non sono inclusi nel catalogo.

## Azioni di pulizia

| Azione | Argomenti |
|--------|-----------|
| `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` comprende `removed`, `skipped`, `errors` e `reasons`.

## Azioni di push Git

| Azione | Argomenti |
|--------|-----------|
| `rudel_before_environment_push` | `$context` |
| `rudel_after_environment_push` | `$sha`, `$context` |
| `rudel_environment_push_failed` | `$context`, `$error` |

Si attivano per `Rudel::push()`. `$context` comprende `environment`, `remote`, `message` e `subdir`. Il comando `wp rudel push` esegue il push direttamente e non li attiva.

## Azioni di automazione

| Azione | Argomenti |
|--------|-----------|
| `rudel_before_automation_cleanup` | `$config` |
| `rudel_after_automation_cleanup` | `$result`, `$config` |
| `rudel_after_automation_expiring_environments` | `$result`, `$config` |

`$config` è l'intero array `rudel_config`. Consultate [Automazione](https://rudel.inline0.dev/it/docs/features/automation).

## Filtri

| Filtro | Argomenti |
|--------|-----------|
| `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` può modificare le opzioni di qualsiasi chiamata di creazione prima che Rudel le applichi. `rudel_environment_clone_source` filtra i metadati del clone archiviati in una sandbox creata dall’host. `rudel_environment_db_dropin_contents` si applica solo al drop-in `db.php` usato negli ambienti multisito con sottositi; le sandbox overlay, l’unico tipo creato dalle versioni attuali, non ne generano mai uno.

I filtri servono ad adeguare le policy, non a sostituire il modello di archiviazione di Rudel. L’identità di runtime, i prefissi delle tabelle e i metadati delle worktree restano dati di stato di Rudel basati sul database.
