Skip to content
Back to skills

C2f Hooks System

ASecurity

LEIA ANTES de criar, interceptar ou disparar ações (Actions) e filtros (Filters) de extensibilidade. Se não ler: hooks não disparam por registro ausente em hooks.json, parâmetros são perdidos ou causam efeitos colaterais silenciosos.

  • 4 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
developmentgophpbashsqlgit

Security analysis

A100/100

Scanned November 7, 2026

npx -y skills add otavioserra/conn2flow-ai-workspace --skill c2f-hooks-system --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of C2f Hooks System?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for C2f Hooks System
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/otavioserra-c2f-hooks-system/badge)](https://www.skillsdirectory.com/skills/otavioserra-c2f-hooks-system)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: c2f-hooks-system
description: "LEIA ANTES de criar, interceptar ou disparar ações (Actions) e filtros (Filters) de extensibilidade. Se não ler: hooks não disparam por registro ausente em hooks.json, parâmetros são perdidos ou causam efeitos colaterais silenciosos."
user-invocable: false
---

# Sistema de Hooks do Conn2Flow (`gestor/bibliotecas/hooks.php`)

# ⚡ Gatilho Obrigatório
- **TRIGGER**: Criar ou consumir pontos de extensão via `hook_do_action()` ou `hook_apply_filters()`, ou registrar manipuladores em `hooks.json` / `project/hooks/`.
- **SKIP APENAS SE**: Código interno fechado de um módulo sem necessidade de interoperabilidade com outros módulos ou plugins.
- **CONSEQUÊNCIA DE IGNORAR**: Filtros ignorados silenciosamente por falta de registro em `hooks.json`, corrupção do retorno de filtros ou acoplamento monolítico indevido.

---

Consulte e aplique as seguintes convenções ao trabalhar com o sistema de Actions e Filters no Conn2Flow:

## 1. Conceito Central: Actions vs. Filters

* **Actions (`hook_do_action`)**: Usado para efeitos colaterais (logs, notificações, widgets). Não possui retorno.
  ```php
  hook_do_action('admin-paginas', 'adicionar.banco', $id, $dados);
  ```
* **Filters (`hook_apply_filters`)**: Usado para transformação de dados. Retorna o valor modificado.
  ```php
  $titulo = hook_apply_filters('admin-paginas', 'titulo.salvar', $titulo_bruto);
  ```
* **Verificações Prévias**: `hook_has_actions('namespace', 'evento')` e `hook_has_filters('namespace', 'evento')`.

---

## 2. Eventos Nativos de Interface (`interface.php`)

A plataforma dispara hooks automáticos para os módulos que usam o sistema padrão de interface:
* `adicionar.pre-banco`, `adicionar.banco` (`$id`, `$dados`), `adicionar.parametros`, `adicionar.pagina`.
* `editar.pre-banco`, `editar.banco` (`$id`, `$dados`), `editar.parametros`, `editar.pagina`.
* `excluir.banco` (`$id`), `status.banco` (`$id`, `$novoStatus`), `clonar.banco` (`$id`, `$dados`).

---

## 3. Registro de Hooks via JSON (Fonte Única da Verdade)

**Nunca insira diretamente na tabela `hooks`** — a tabela é sobrescrita pela sincronização `atualizacoes_hooks_sincronizar()`.

### A. Em Módulos (`modulos/<modulo>/<modulo>.json`):
```json
{
    "hooks": {
        "controllers": {
            "admin-paginas": "meu-modulo.hooks.php"
        },
        "actions": {
            "admin-paginas": {
                "adicionar.banco": {
                    "callback": "meu_modulo_page_added_hook",
                    "prioridade": 5,
                    "habilitado": 1
                }
            }
        },
        "filters": {}
    }
}
```

### B. No Projeto (`project/hooks/hooks.json`):
```json
{
    "controllers": {
        "admin-paginas": "admin-paginas.hooks.php"
    },
    "actions": {
        "admin-paginas": {
            "adicionar.pagina": "projeto_page_added_hook"
        }
    },
    "filters": {}
}
```

---

## 4. Estrutura dos Controladores PHP (Callbacks)

* No Projeto: `project/hooks/controllers/<namespace>.hooks.php`.
* Nos Módulos: `modulos/<modulo>/<modulo>.hooks.php`.

Exemplo de callback:
```php
function meu_modulo_page_added_hook(string $id, array $dados = []): void {
    global $_GESTOR;
    // Lógica do hook sem alterar o módulo emissor
}
```

---

## 5. Boas Práticas
* **Sincronização Idempotente**: Execute `atualizacoes_hooks_sincronizar()` (ou via tarefas de deploy) para aplicar alterações de JSON no banco.
* **Desativação Temporária**: Use `"habilitado": 0` no JSON para desativar um hook sem remover o registro.
* **Wildcard `*`**: Use `*` no namespace para registrar ouvintes globais em qualquer módulo.

---

## 6. Sincronização de Hooks no Deploy e Comando Dedicado

### 6.1 Sincronização Automática no Pipeline de Deploy

- A tabela `hooks` do banco de dados é sincronizada automaticamente durante a etapa de banco de dados (`atualizacoes-banco-de-dados.php`) executada por:
  - `./c2f project:deploy <projeto-id>` (pipeline completo de um projeto)
  - `./c2f manager:update-all` (pipeline completo de todos os projetos)
- A função `atualizacoes_hooks_sincronizar()` é chamada internamente, lendo todos os `hooks.json` de módulos e do projeto, e recriando a tabela `hooks` com os registros atualizados.
- **Idempotência Garantida**: A sincronização é idempotente — executar múltiplas vezes produz o mesmo resultado. A tabela é reconstruída a partir dos JSONs, que são a fonte da verdade.

### 6.2 Comando Dedicado `c2f project:sync-hooks <projeto-id>`

- Para atualizar hooks **sem executar o pipeline completo** (sem migrações, sem CSS rebuild, sem resources:sync), use:
```bash
./c2f project:sync-hooks <projeto-id>
```
- Este comando foi implementado na REQ-174/BATCH-179 especificamente para permitir atualizações isoladas de hooks durante desenvolvimento.
- **Caso de Uso Principal**: Após editar um `hooks.json` de módulo ou do projeto, rodar apenas `project:sync-hooks` para refletir as mudanças no banco sem o overhead do pipeline completo.
- **Verificação Rápida**: Após a sincronização, confirme no banco:
```sql
SELECT * FROM hooks WHERE namespace = 'meu-modulo' ORDER BY prioridade;
```

> [!IMPORTANT]
> Nunca insira ou atualize registros diretamente na tabela `hooks` via SQL. A tabela é **sobrescrita integralmente** a cada sincronização. Alterações manuais serão perdidas no próximo deploy.

## REQ-077 — Pipeline, worktrees e preservação (DEC-136)

- Projeto: `./c2f project:deploy <id>` é o padrão (95% dos casos). Core: `./c2f manager:update-all`. `./c2f project:update-all <id>` é proibido na rotina de projeto; permitido exclusivamente em lote que altera Core e projeto simultaneamente.
- Antes de deploy, confira `git branch --show-current` e `git status --short` na origem; não publique trabalho alheio/inacabado. Confira o destino e sua autorização. Categoria B (skills/documentação/testes/memória): somente checks locais, sem deploy. Execução sequencial, foreground, logs e locks continuam obrigatórios.
- Worktrees por conveniência são proibidas. Só criar com concorrência multi-agente comprovada no mesmo repositório; em dúvida, consultar o humano antes. Registre raiz original, caminho temporário e concorrência na requisição e lote. Ao concluir/homologar, audite trabalho único, integração na main e junctions, então `git worktree remove <caminho>` e `git worktree prune`. Nunca use força para destruir trabalho não integrado; preserve e reporte impedimentos.
- DEC-136: manter por padrão; nada é removido (arquivo, `status='D'`, `DELETE`) sem confirmação explícita do operador humano. Retirada vira choque pendente; `--confirmar-retirada` só quando pedido pelo operador. Fonte incompleta não autoriza retirada.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.