Pause the school on warning notices until the owner dismisses them.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-20 22:33:38 +03:00
co-authored by Cursor
parent e22d9bae33
commit f36af269bb
27 changed files with 993 additions and 51 deletions
+13 -13
View File
@@ -11,25 +11,25 @@
## Задачи
- [ ] `Notice` с `pause`: работник ставит `running=false`. `SetRunning(true)` игнор, пока есть
- [x] `Notice` с `pause`: работник ставит `running=false`. `SetRunning(true)` игнор, пока есть
хотя бы одно такое уведомление (как нелегальный skip — не fatal)
- [ ] Модал (не тост): висит, очередь если несколько, на экране один. Закрытие — dismiss
- [ ] Sticky в сейве школы; после загрузки и Open — снова кадры. Info по-прежнему не сохранять
- [ ] Dismiss pausing — только хозяин; гость кадр видит, dismiss игнор / HTTP `403` `not-owner`
- [ ] Потолок 8 sticky; девятый не эмитить. После последнего dismiss часы сами не запускать
- [ ] Ванильный `GenerationFailed` (error, pause) можно положить в каталог; эмит с портрета —
- [x] Модал (не тост): висит, очередь если несколько, на экране один. Закрытие — dismiss
- [x] Sticky в сейве школы; после загрузки и Open — снова кадры. Info по-прежнему не сохранять
- [x] Dismiss pausing — только хозяин; гость кадр видит, dismiss игнор / HTTP `403` `not-owner`
- [x] Потолок 8 sticky; девятый не эмитить. После последнего dismiss часы сами не запускать
- [x] Ванильный `GenerationFailed` (error, pause) можно положить в каталог; эмит с портрета —
фаза 67, здесь достаточно тестового/внутреннего поста на доску
- [ ] [`protocol.md`](../../protocol.md) — поведение паузы и прав, без лишнего бампа версии
- [x] [`protocol.md`](../../protocol.md) — поведение паузы и прав, без лишнего бампа версии
(версия уже +1 в 64)
## Тесты, без которых фаза не закрыта
- [ ] Пост pausing-notice: `running` становится false; последующий SetRunning(true) оставляет паузу
- [ ] Dismiss последнего pausing: SetRunning(true) снова включает часы; без Play сами не идут
- [ ] Сейв/загрузка: sticky на месте, info нет
- [ ] Гость не снимает паузу dismiss-ом; хозяин снимает
- [ ] Клиентский: модал не гаснет по TTL; очередь показывает следующий после закрытия
- [ ] Хостовый: Open после рестарта работника отдаёт sticky, часы на паузе
- [x] Пост pausing-notice: `running` становится false; последующий SetRunning(true) оставляет паузу
- [x] Dismiss последнего pausing: SetRunning(true) снова включает часы; без Play сами не идут
- [x] Сейв/загрузка: sticky на месте, info нет
- [x] Гость не снимает паузу dismiss-ом; хозяин снимает
- [x] Клиентский: модал не гаснет по TTL; очередь показывает следующий после закрытия
- [x] Хостовый: Open после рестарта работника отдаёт sticky, часы на паузе
## Критерий готовности