Incidentes sem guardrails se repetem. Guardrails são alertas, testes, regras de lint e checklists que tornam a mesma falha mais difícil ou visível mais cedo. Equipes Python os codificam em pytest, Ruff, revisão Alembic e alertas de queima de SLO.
Cartão de receita de referência rápida - pronto para copiar e colar.
# pytest regressão do post-mortem INC-8842def test_migration_uses_concurrently_for_large_tables(): sql = Path("alembic/versions/20260612_add_invoice_idx.py").read_text() assert "CONCURRENTLY" in sql or "op.create_index" not in sql
# Alerta: Indicador antecedente de profundidade da fila Celery- alert: BillingQueueDepthHigh expr: celery_queue_length{queue="billing"} > 10000 for: 5m
Quando usar isso:
Itens de ação pós-mortem precisam de entrega concreta
A mesma classe de incidente ocorreu duas vezes em um trimestre
Auditoria pede controles preventivos
Fadiga de plantão por páginas barulhentas, mas evitáveis
"""guardrails_example.py - testes orientados por incidentes e verificações em tempo de execução."""from __future__ import annotationsfrom dataclasses import dataclassfrom pathlib import Path@dataclass(frozen=True)class Guardrail: incident_id: str kind: str # test | alert | lint | runbook description: str verify: strGUARDRAILS: list[Guardrail] = [ Guardrail( incident_id="INC-8842", kind="test", description="Índices de tabelas grandes usam CONCURRENTLY", verify="pytest tests/test_migrations.py -k concurrently", ), Guardrail( incident_id="INC-9011", kind="alert", description="Taxa de queima do p95 do checkout", verify="Grafana: CheckoutSLOBurn", ), Guardrail( incident_id="INC-9011", kind="lint", description="Sem sleep síncrono em rotas assíncronas", verify="scripts/check_async_blocking.py no CI", ),]def audit_open_guardrails(registry: list[Guardrail]) -> None: for g in registry: print(f"[{g.incident_id}] {g.kind}: {g.description} -> {g.verify}")if __name__ == "__main__": audit_open_guardrails(GUARDRAILS)
# tests/test_incident_9011_loop_block.pyimport astfrom pathlib import Pathdef test_no_time_sleep_in_async_functions(): src = Path("src/api/routes/checkout.py").read_text() tree = ast.parse(src) for node in ast.walk(tree): if isinstance(node, ast.AsyncFunctionDef): for child in ast.walk(node): if isinstance(child, ast.Call): func = child.func if isinstance(func, ast.Attribute) and func.attr == "sleep": raise AssertionError(f"time.sleep em async {node.name}")
O que isso demonstra:
Guardrails se conectam a IDs de incidentes para rastreabilidade
Testes de regressão codificam mecânicas de falha específicas
Scripts de CI capturam padrões de bloqueio assíncrono
Revisão de operações audita comandos de verificação, não apenas o fechamento de tickets