
# Hooks

Rudel ejecuta acciones y filtros WordPress en torno a los eventos del ciclo de vida de los entornos aislados. El catálogo siguiente es lo que devuelve `Rudel::hooks()`: 28 acciones y 5 filtros.

## Ejemplo

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

La mayoría de las acciones de `before` y `failed` reciben una matriz `$context`. En los hooks del ciclo de vida de los entornos aislados contiene el `environment` (o el `name`, `options` y `environments_dir` al crear); las acciones `failed` también reciben la `Throwable` capturada como `$error`.

## Acciones del ciclo de vida del entorno aislado

| Acción | Argumentos |
|--------|-----------|
| `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` |

Las tres acciones `replace_state` pertenecen a `EnvironmentManager::replace_environment_state()`, que no se invoca mediante ningún comando Rudel.

## Acciones de instantánea

| Acción | Argumentos |
|--------|-----------|
| `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` contiene `environment`, `kind` (`snapshot`), `name` y `path`. Cada una también se ejecuta con un alias `snapshot`, por ejemplo `rudel_after_snapshot_create`, y los fallos ejecutan `rudel_failed_recovery_point_{create|restore|delete}` y `rudel_failed_snapshot_{create|restore|delete}` con `$context` y el error. Esos alias no aparecen en el catálogo.

## Acciones de limpieza

| Acción | Argumentos |
|--------|-----------|
| `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` contiene `removed`, `skipped`, `errors` y `reasons`.

## Acciones de envío Git

| Acción | Argumentos |
|--------|-----------|
| `rudel_before_environment_push` | `$context` |
| `rudel_after_environment_push` | `$sha`, `$context` |
| `rudel_environment_push_failed` | `$context`, `$error` |

Se ejecutan para `Rudel::push()`. `$context` contiene `environment`, `remote`, `message` y `subdir`. El comando `wp rudel push` envía directamente y no las ejecuta.

## Acciones de automatización

| Acción | Argumentos |
|--------|-----------|
| `rudel_before_automation_cleanup` | `$config` |
| `rudel_after_automation_cleanup` | `$result`, `$config` |
| `rudel_after_automation_expiring_environments` | `$result`, `$config` |

`$config` es la matriz completa de `rudel_config`. Consulte [Automatización](https://rudel.inline0.dev/es/docs/features/automation).

## Filtros

| Filtro | Argumentos |
|--------|-----------|
| `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` puede cambiar las opciones de cualquier llamada de creación antes de que Rudel actúe sobre ellas. `rudel_environment_clone_source` filtra los metadatos de clonación guardados en un entorno aislado creado a partir del host. `rudel_environment_db_dropin_contents` solo se aplica al complemento `db.php` que usan los entornos multisitio con subsitios; los entornos aislados con superposición, el único tipo que crean las versiones actuales, nunca lo generan.

Los filtros están pensados para ajustar la política, no para sustituir el modelo de almacenamiento de Rudel. La identidad en tiempo de ejecución, los prefijos de tablas y los metadatos de áreas de trabajo siguen siendo estados Rudel respaldados por la base de datos.
