# Observability Contract Registry `config/observability_mapping.yaml` é a única tabela usada pelo framework para duas responsabilidades relacionadas ao contrato externo: 1. traduzir nomes/códigos semânticos para labels exigidos pela observabilidade do cliente; 2. preservar ações legadas de guardrails (`retry`, `handover`, etc.) sem hardcode de nomes no Python. A sintaxe v1 continua válida: ```yaml mappings: guardrail.dlex_in: GRL.004 ``` A forma rica adiciona `action` e `aliases`: ```yaml mappings: guardrail.revprec: action: retry aliases: [REVPREC, TIM_REVPREC] ``` `label` é opcional. Quando ausente, o nome de observabilidade não é renomeado. `action` também é opcional. ## Precedência de ação Para uma decisão negada, o framework usa: 1. `metadata.terminal_action` retornado pelo rail; 2. `on_deny` do `guardrails.yaml`; 3. `action` resolvida pelo `observability_mapping.yaml`; 4. `BLOCK` como fallback fail-safe. Isso mantém compatibilidade com rails internos e externos sem que `OutputSupervisor` ou `ParallelRailExecutor` conheçam nomes como `REVPREC`, `CMP`, `SCO`, `GND`, `ATH` ou `HUMAN`. ## Aliases Uma entrada `guardrail.revprec` é automaticamente resolvida também por `REVPREC`. Aliases explícitos permitem associar nomes externos ou históricos, por exemplo `TIM_REVPREC`. ## Compatibilidade Mappings escalares continuam funcionando sem alteração. Agentes que não habilitam o mapper continuam em passthrough e usam `BLOCK` para negações sem ação explícita.