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_dipigual 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.