ADR 0184 — Повторное открытие сессии: три решения владельца, и developer открывает снова
Статус
Accepted. 2026-09-30 (AT-337, раунд 32). Поверх ADR 0183, который НЕ редактируется: он пометил три решения как предварительное, консервативное значение по умолчанию в ожидании владельца, а этот ADR фиксирует ответ владельца по всем трём.
Контекст
ADR 0183 открыл выход из терминальных состояний сессии — повторное открытие через
собственный маршрут (POST projects/:projectId/sessions/:sessionId/reopen) — и оставил
три выбора открытыми, объявленными как предварительные:
- минимальная роль, закреплённая как
maintainer, на ступень выше общего перехода (developer), который завершает сессию; - отсутствие срока — каждая завершённая сессия может быть открыта снова навсегда;
- отказ с 409
sessao_com_execucaoдля сессии, несущейexecution.activated, чтобыfindActiveExecutionSession(RN-139) не уводился на старую сессию выполнения.
Владелец решил все три 2026-09-30.
Решение
- Минимальная роль
developer. Та же роль, что для завершения через общий переход: кто может объявить сессию завершённой, может вернуть её. Аргумент 0183 за подъём на ступень (снова включить расход токенов) не выдерживает того, что тот жеdeveloperуже может открыть новую сессию и разговаривать в ней, тратя те же токены.viewerпо-прежнему отклоняется (403). Изменение — то, что предвидел 0183:@RequireRoleмаршрута иroleAtLeastэкрана Sessão. - Без срока — ПОДТВЕРЖДЕНО. Никакого сравнения с
closed_at. - Сессия с
execution.activatedпо-прежнему отклоняется — ПОДТВЕРЖДЕНО. 409sessao_com_execucao; путь к повторному выполнению — по-прежнему открыть новую сессию и активировать выполнение в ней.
Больше ничего в 0183 не меняется: собственный переход (canReopen), событие
session.reopened, вызов engine до транзакции и
SessionLifecycleWorker, игнорирующий уже отменённое закрытие.
Последствия
- Три решения перестают быть предварительными. RN-650
начинает говорить
developer, а RN-649 ссылается на этот ADR в двух подтверждённых решениях. docs/security-surface.mdперечисляет маршрут какrole:developer; тестroute-surface.spec.tsсравнивает таблицу с реальной аннотацией.- Экран меняет текстовую причину с "exige maintainer" на "exige developer"
(ключ
ativacao.reabrirExigeDeveloper, в обоих языках). - Остаётся открытым и здесь не решается: второй автоматический анализ Psicólogo после повторного открытия (Consequences 0183).