- условие самообновления — доменный предикат store.State.IsObservable() вместо фазы catched; один поллер на поверхность, интервалы 5 с и 15 с - отказ тика отвечает 200 и самозавершающимся фрагментом с корневым id цели вместо 404/500, который htmx не свопит - заведён ADR-2026-08-10-observability-is-not-terminality, переписан раздел «Живой поллинг» в конвенции веб-UI
5.1 KiB
MODIFIED Requirements
Requirement: Живой прогресс активных загрузок
Веб-UI SHALL показывать прогресс, скорость и ETA активных (downloading)
загрузок на главной без перезагрузки страницы, обновляя их тем же
самообновлением, которым обновляется сама карточка (см. web-ui,
«Самообновление живой задачи»). Обновление MUST NOT сбрасывать клиентские
фильтр, поиск и прокрутку.
Когда задача покидает состояние downloading, показ скорости и ETA SHALL
прекращаться: вне качания эти величины смысла не имеют. Снимок при этом
продолжает питать прочие живые значения карточки и страницы — размер и рейтинг
раздачи, — и прекращение показа цифр качания MUST NOT означать прекращения
обновления поверхности: она продолжает отражать смену состояния, пока задача
наблюдаема.
Живые цифры MUST браться из снимка воркера; при отсутствии данных по задаче поверхность деградирует без них, не ломая остального отображения.
Scenario: Прогресс растёт без перезагрузки
- WHEN загрузка качается и пользователь смотрит на главную
- THEN её прогресс-бар, скорость и ETA обновляются на месте без перезагрузки страницы
Scenario: Клиентское состояние сохраняется
- WHEN применён фильтр или поиск и происходит фоновое обновление
- THEN выбранный фильтр, текст поиска и позиция прокрутки не сбрасываются
Scenario: Завершение убирает цифры качания, но не обновление
- WHEN загрузка переходит из
downloadingв другое наблюдаемое состояние - THEN блок прогресса, скорости и ETA с карточки исчезает
- AND карточка продолжает обновляться и приносит новое состояние
- AND размер и рейтинг раздачи по-прежнему берутся из снимка
Requirement: Секция раздачи на странице загрузки
Страница /download/{id} SHALL показывать секцию «Раздача» с живой статистикой
(рейтинг, число сидов и пиров, объём отданного, скорость отдачи) для задач,
чей торрент сидирует. Если живых данных по задаче нет, секция SHALL
отсутствовать либо явно показывать «нет данных», не ломая остальную страницу.
Секция MUST NOT опрашивать сервер самостоятельно: она лежит внутри области,
которую страница обновляет целиком, и собственный опрос секции подменял бы
разметку страницы. Её цифры SHALL приходить с тиком самообновления страницы
(см. web-ui, «Самообновление живой задачи»), а частота их обновления
SHALL совпадать с частотой обновления страницы.
Scenario: Сидирующая задача показывает раздачу
- WHEN открыта страница задачи, торрент которой раздаётся
- THEN в секции «Раздача» видны рейтинг, сиды/пиры, отдано и скорость отдачи
Scenario: Нет живых данных — секция деградирует
- WHEN открыта страница задачи, торрента которой нет в qBittorrent
- THEN секция «Раздача» отсутствует или показывает «нет данных», а распознавание, файлы и история отображаются нормально
Scenario: Секция обновляется тиком страницы
- GIVEN открыта страница наблюдаемой задачи, чья раздача сидирует
- WHEN страница отрисована
- THEN секция «Раздача» не несёт собственного опроса
- AND её цифры обновляются вместе с остальной страницей