ADR 0184 — Reabrir sessão: as três decisões do dono, e developer reabre
Status
Accepted. 2026-09-30 (AT-337, rodada 32). Sobre o ADR 0183, que NÃO é editado: ele marcou três decisões como padrão provisório, conservador, à espera do dono, e este ADR registra a resposta do dono para as três.
Context
O ADR 0183 abriu uma saída dos estados terminais da sessão — a reabertura, por
rota própria (POST projects/:projectId/sessions/:sessionId/reopen) — e deixou
três escolhas em aberto, declaradas como provisórias:
- o papel mínimo, fixado em
maintainer, um degrau acima da transição genérica (developer) que encerra a sessão; - a ausência de prazo — toda sessão encerrada reabrível para sempre;
- a recusa, com 409
sessao_com_execucao, de sessão que carregaexecution.activated, para quefindActiveExecutionSession(RN-139) não seja desviada para uma sessão de execução antiga.
O dono decidiu as três em 2026-09-30.
Decision
- Papel mínimo
developer. O mesmo papel de encerrar pela transição genérica: quem pode dar a sessão por terminada pode trazê-la de volta. O argumento do 0183 para subir um degrau (religar gasto de token) não se sustenta diante de o mesmodeveloperjá poder abrir sessão nova e conversar nela, gastando o mesmo token.viewercontinua recusado (403). A mudança é a que o 0183 previu: o@RequireRoleda rota e oroleAtLeastda tela de Sessão. - Sem prazo — CONFIRMADO. Nenhuma comparação com
closed_at. - Sessão com
execution.activatedcontinua recusada — CONFIRMADO. 409sessao_com_execucao; o caminho para voltar a executar segue sendo abrir sessão nova e ativar a execução nela.
Nada mais do 0183 muda: a transição própria (canReopen), o evento
session.reopened, o engine chamado antes da transação e o
SessionLifecycleWorker que ignora o fechamento já desfeito.
Consequences
- As três decisões deixam de ser provisórias. A RN-650
passa a dizer
developer, e a RN-649 cita este ADR nas duas decisões confirmadas. docs/security-surface.mdlista a rota comorole:developer; o testeroute-surface.spec.tscompara a tabela com a anotação real.- A tela troca o motivo em texto de "exige maintainer" para "exige developer"
(chave
ativacao.reabrirExigeDeveloper, nos dois idiomas). - Segue aberto, e não é decidido aqui: a segunda análise automática do Psicólogo depois de reabrir (Consequences do 0183).