Files
codex-chatgpt-mcp-proxy/ESTADOS.md

59 lines
3.1 KiB
Markdown

# Estados e política de recuperação
```mermaid
stateDiagram-v2
[*] --> queued
queued --> leased: aquisição atômica
queued --> cancelled: cancelamento antes de adquirir
leased --> running: thread e turno registrados
running --> awaiting_local_approval: request Codex
awaiting_local_approval --> running: decisão local ou recusa por timeout
leased --> cancel_requested
running --> cancel_requested
awaiting_local_approval --> cancel_requested
cancel_requested --> cancelled: turno interrompido e confirmado
running --> succeeded
running --> failed
running --> timed_out: interrupção confirmada
leased --> failed: falha antes de turn/start
leased --> needs_reconciliation: reserva expirada ou reinício incerto
running --> needs_reconciliation: queda ou reserva expirada
awaiting_local_approval --> needs_reconciliation: contato perdido
cancel_requested --> needs_reconciliation: interrupção sem confirmação
needs_reconciliation --> succeeded: resultado durável da mesma tentativa
needs_reconciliation --> failed: decisão local explícita
```
Estados terminais: succeeded, failed, cancelled, timed_out. Não podem ser sobrescritos.
O histórico de mudanças fica em tabela própria e é retornado por get_task. A API
progress aceita running/awaiting_local_approval; preserva cancel_requested e
needs_reconciliation. Continuação exige tarefa terminal, thread persistida e ausência
de outra continuação ativa/queued na mesma thread. O workspace não muda.
## Falhas
- Queda de rede: Codex continua até o timeout; eventos/resultados ficam no journal
local. O servidor pode marcar reconciliação, mas aceita o resultado da mesma tentativa.
- Reinício do servidor: SQLite e volume conservam as reservas e os resultados.
- Reinício do worker: primeiro reenviar o outbox. Se há final durável, publicar sem
inferir outra vez. Se não há final, declarar incerteza e bloquear novas aquisições.
- Queda do App Server após intenção de turn/start: reconciliação, nunca replay.
- Timeout/cancelamento: turn/interrupt, aguardando turn/completed. Se não há confirmação
em 15 segundos, fechar o processo e marcar reconciliação. RPC/startup pode acrescentar
até 30 segundos de tolerância ao deadline; não é um deadline rígido em tempo real.
- Cancelamento não faz rollback dos arquivos e não comprova reversão de efeitos externos.
Uma tarefa incerta impede novas tarefas no worker até inspeção. Depois de verificar
processos, thread e arquivos, usando configuração local do worker:
```bash
.venv/bin/codex-bridge reconcile TASK_ID ATTEMPT_ID failed --confirm-no-active-turn
```
A identidade de tentativa está no journal local e no endpoint worker autenticado. Não
adicione a mesma tarefa à fila com uma nova chave apenas para "tentar de novo" sem
avaliar efeitos parciais. Reconciliação não reexecuta a instrução.
O banco local de threads do Codex não é manipulado pela ponte. Não há exactly-once;
idempotência protege submissão/reenvio, mas não transforma efeitos locais em transações.