From e14561b258aa408ddb5e102495c57e539ddc6cfd Mon Sep 17 00:00:00 2001 From: heaven Date: Sat, 29 Aug 2026 12:32:49 +0300 Subject: [PATCH] Tell the frozen frontend that a revoked session now arrives as a named frame, not as a silent disconnect it would answer by reconnecting into a 401 --- frontend/docs/frontend-PROGRESS.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/frontend/docs/frontend-PROGRESS.md b/frontend/docs/frontend-PROGRESS.md index 63a573c8..f578b6e0 100644 --- a/frontend/docs/frontend-PROGRESS.md +++ b/frontend/docs/frontend-PROGRESS.md @@ -13,6 +13,24 @@ > `API_CONTRACT_DRAFT.md` (`API_CONTRACT_INPUT.md` — исполненный вход, под ⚠-баннером). > Сверху — текущее состояние, ниже — хроника по сессиям. +## 📌 ПИНГ ОРКЕСТРАТОРА (29.08, D39.169) — новый терминальный кадр SSE `session_ended`, зоне при разморозке + +Канон **0.8.0** объявил девятый кадр потока: `session_ended`, payload — ровно `EventBase`. + +**Почему он появился.** Закрыта единственная открытая уязвимость платформы (`PD-379`): отзыв сессии +не выключал уже открытый поток событий — «выйти везде» не работало, поток жил ещё сорок секунд после +отзыва. Теперь сервер гасит поток и шлёт этот кадр. + +⚠ **Половина, которую сервер закрыть НЕ МОЖЕТ, и она ваша.** Без обработчика на клиенте отзыв +неотличим от обрыва сети: браузер увидит закрытое соединение и пойдёт переподключаться — в `401`, +объяснить который ему нечем. То есть для ЧЕЛОВЕКА уязвимость остаётся наполовину открытой. + +**Что нужно при разморозке:** обработать `session_ended` отдельно от `end` и `resync_required` — +`end` значит «книга кончилась, возвращаться незачем», `resync_required` — «спроси заново», а здесь +единственное верное действие **войти заново**. Переподключение без входа бессмысленно. + +Носитель — `docs/architecture/14-api-contract/openapi.yaml`, схема `EventSessionEnded`. + ## Текущее состояние > **Запись оркестратора №15, 07.08.** Абзацы ниже — состояние на 04.08, и первый из них с тех пор