Descrição
A task `execute_workflow` em `tasks.py` não tem guarda de idempotência. Se a task for re-executada (timeout do Celery, retry), efeitos colaterais podem se duplicar.
@shared_task
def execute_workflow(run_id, workflow_id):
# ← sem verificação de status antes de executar
# ← pode rodar novamente mesmo se PENDING → RUNNING
Impacto
- Mensagens duplicadas via handler_email / handler_telegram
- Execução paralela do mesmo workflow pode corromper estado
Correção sugerida
- Adicionar guard early-return: `if Run.objects.get(id=run_id).status != PENDING: return`
- Usar SELECT FOR UPDATE para lock da run antes de executar
- Implementar idempotency key no Celery task signature
Referência
- tasks.py: `execute_workflow()`
Descrição
A task `execute_workflow` em `tasks.py` não tem guarda de idempotência. Se a task for re-executada (timeout do Celery, retry), efeitos colaterais podem se duplicar.
Impacto
Correção sugerida
Referência