Pular para conteúdo

Tabelas de transição — execução lógica e tentativa

Oráculo único para backend (GerenciadorExecucoes), front (habilitação de botões), firmware (telemetria de status) e testes (7.4 caso 4.2, BACK-03). Decisão de produto: ADR-011.

Convenções

  • Execução lógica: em_andamento | concluida | cancelada.
  • Tentativa: running | success | failed | ∅ (nenhuma tentativa aberta na execução).
  • Aberta: running.
  • Health-check: registro anterior à tentativa (ADR-017). Nova execução e Retomar exigem o último health-check aprovado, concluído há até 7 minutos e com tipo_dip igual ao do labirinto; senão são recusados (R06).
  • Contadores: attempt_index ∈ {1,2,3}; relógio da execução desde Nova execução (RF32).
  • Ações recusadas em uma execução existente (Retomar) registram tentativa rejeitada (RF19) sem alterar estados válidos. A recusa de Nova execução só é informada ao operador.

success é o único status de tentativa que conclui a execução. failed na tentativa 1 ou 2, inclusive Encerrar tentativa e perda de link, mantém a execução em_andamento. Na tentativa 3, essas falhas deixam a tentativa failed e a execução vai a cancelada, porque não cabe retomada. O estouro do tempo total e uma nova execução cancelam a execução imediatamente.

Tentativa Execução depois Linhas
running em_andamento T01, T02
success concluida T05, T11
failed na tentativa 1 ou 2, inclusive Encerrar tentativa em_andamento T06, T07
failed na tentativa 3, inclusive Encerrar tentativa cancelada T07, T12
failed por link (10 s) na tentativa 1 ou 2 em_andamento T08
failed por link na tentativa 3 ou por tempo (10 min) cancelada T08, T09
execução anterior ainda aberta quando nasce outra a anterior fica cancelada T13

1. Tentativa (dentro de execução em_andamento)

ID Estado tentativa (antes) Evento Estado tentativa (depois) Estado execução (depois) Efeito esperado
T01 ∅ Abertura com Nova execução (UC01) e health-check válido running em_andamento Nova execucao_id, tentativa_id, attempt_index=1, iniciada_em execução; largar ao robô
T02 ∅ Retomar tentativa válida (UC31) com health-check válido running em_andamento Nova tentativa_id, attempt_index+1, tipo_inicio=retomada; largar ao robô
T03 ∅ Telemetria: health-check concluído e aprovado ∅ em_andamento Registro próprio, sem tentativa; vale 7 minutos (RF29)
T04 ∅ Telemetria: health-check reprovado ∅ em_andamento Nova execução e Retomar recusados (R06); nenhuma tentativa é criada
T05 running Telemetria: success success concluida Métricas; execução encerrada com sucesso (RF26, RF33)
T06 running Telemetria: failed (trajeto/componente) failed em_andamento† Motivo conforme RF15; célula/componente gravados
T07 running Encerrar tentativa (UC04) failed em_andamento† Motivo escolhido + encerrado_operador; interrupcao_pendente=true (RF39). Na tentativa 3, a execução segue para T12 e fica cancelada
T08 running Perda de link 10 s (UC12.2) failed em_andamento† Motivo link_lost; sem downlink; na tentativa 3 segue para T12
T09 running Tempo execução ≥600 s (UC12.1) failed cancelada Motivo time_exceeded; sem downlink
T10 failed — failed † Terminal; só nova tentativa via T02 ou fim de execução
T11 success — success concluida Terminal

† Com attempt_index 1 ou 2, a execução permanece em_andamento e cabe Retomar tentativa. Com attempt_index=3, a falha segue para T12 e a execução fica cancelada. Isso inclui Encerrar tentativa (T07) e perda de link (T08) na terceira tentativa.

ID Estado tentativa (antes) Evento Estado tentativa (depois) Estado execução (depois) Efeito esperado
T12 failed attempt_index=3 e sem retomada pendente failed cancelada Três tentativas consumidas sem sucesso, inclusive Encerrar tentativa na terceira
T13 Aberta Nova execução (UC01) cancela execução anterior (exec anterior) failed ou encerrada anterior cancelada Tentativa anterior fechada; nova exec T01

2. Execução lógica (visão agregada)

Estado derivado das tentativas e dos monitores de tempo/link. Use com a tabela 1 para testes de integração.

ID Estado exec (antes) Evento Estado exec (depois) Tentativa / efeito
E01 (nenhuma ou terminal) Nova execução sem outra em_andamento em_andamento T01
E02 em_andamento Nova execução (outra labirinto/sessão) em_andamento (nova) Execução anterior → cancelada (T13); T01 na nova
E03 em_andamento Tentativa → success concluida T05
E04 em_andamento Tentativa → failed, restam retomadas (attempt_index<3) em_andamento T06/T07; tentativa ∅ até retomada
E05 em_andamento Tentativa → failed, attempt_index=3 cancelada T12
E06 em_andamento UC12.2 link em_andamento ou cancelada T08; cancela somente na tentativa 3
E07 em_andamento UC12.1 tempo cancelada T09
E08 concluida ou cancelada Nova execução em_andamento Nova execução (E01/T01)

3. Recusas (sem transição de tentativa/execução válida)

ID Condição Ação do operador Resultado
R01 Existe tentativa aberta Retomar tentativa Recusa RF19; registro tentativa rejeitada
R02 Execução não em_andamento ou última tentativa não failed Retomar tentativa Recusa RF19
R03 attempt_index=3 já consumido Retomar tentativa Recusa RF19
R04 Execução cancelada ou concluida Encerrar tentativa HTTP 409; sem mudança
R05 Nenhuma tentativa aberta Encerrar tentativa HTTP 409; sem mudança
R06 Health-check ausente, reprovado, expirado (> 7 min) ou com tipo_dip diferente do labirinto Nova execução ou Retomar tentativa Recusa RF19; só a do Retomar registra tentativa rejeitada

Nova execução com execução anterior em_andamento não é recusa: cancela a anterior (E02), conforme US12.


4. Firmware (referência cruzada)

Transições do laço embarcado (health-check → lendo sensores → …): Tabela B em 4.4 — Diagrama de estados. Status health-check / running / success / failed na telemetria devem ser consistentes com T03–T07 deste documento.


5. Testes

  • Backend: um teste automatizado por linha T01–T13 e E01–E08 (mínimo); recusas R01–R05.
  • 7.4 / 4.2: suite “Regras de tentativas e recusa” cobre tabela inteira.
  • Front: após T06/T07 com retomada possível, exibir Retomar (n/3); ocultar após T12/E05.