
# Ganchos

Rudel aciona ações WordPress e filtros em torno dos eventos do ciclo de vida dos ambientes isolados. O catálogo abaixo corresponde ao que `Rudel::hooks()` retorna: 28 ações e 5 filtros.

## Exemplo

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

A maioria das ações `before` e `failed` recebe um array `$context`. Para os hooks do ciclo de vida do ambiente isolado, ele contém o `environment` (ou o `name`, `options` e `environments_dir` na criação); as ações `failed` também recebem o `Throwable` capturado como `$error`.

## Ações do ciclo de vida do ambiente isolado

| Ação | 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` |

As três ações `replace_state` pertencem a `EnvironmentManager::replace_environment_state()`, que nenhum comando Rudel chama.

## Ações de snapshot

| Ação | 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` contém `environment`, `kind` (`snapshot`), `name` e `path`. Cada uma também é acionada por um alias `snapshot`, como `rudel_after_snapshot_create`, e as falhas acionam `rudel_failed_recovery_point_{create|restore|delete}` e `rudel_failed_snapshot_{create|restore|delete}` com `$context` e o erro. Esses aliases não estão no catálogo.

## Ações de limpeza

| Ação | 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` contém `removed`, `skipped`, `errors` e `reasons`.

## Ações de push Git

| Ação | Argumentos |
|--------|-----------|
| `rudel_before_environment_push` | `$context` |
| `rudel_after_environment_push` | `$sha`, `$context` |
| `rudel_environment_push_failed` | `$context`, `$error` |

Esses hooks são acionados para `Rudel::push()`. `$context` contém `environment`, `remote`, `message` e `subdir`. O comando `wp rudel push` faz push diretamente e não os aciona.

## Ações de automação

| Ação | Argumentos |
|--------|-----------|
| `rudel_before_automation_cleanup` | `$config` |
| `rudel_after_automation_cleanup` | `$result`, `$config` |
| `rudel_after_automation_expiring_environments` | `$result`, `$config` |

`$config` é o array `rudel_config` completo. Consulte [Automação](https://rudel.inline0.dev/pt/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` pode alterar as opções de qualquer chamada create antes que Rudel as processe. `rudel_environment_clone_source` filtra os metadados de clone armazenados em um sandbox criado a partir do host. `rudel_environment_db_dropin_contents` aplica-se apenas ao drop-in `db.php` usado por ambientes de subsite em multisite; sandboxes de sobreposição, o único tipo criado pelas versões atuais, nunca geram um.

Os filtros servem para ajustar políticas, não para substituir o modelo de armazenamento de Rudel. A identidade em tempo de execução, os prefixos de tabela e os metadados de worktree continuam sendo estado de Rudel armazenado no DB.
