spec: add reduce-screen-sync-polling change
Specs security / security (push) Successful in 8s
Specs verify / verify (push) Successful in 10s
Conventional commits / commits (pull_request) Successful in 15s
Specs security / security (pull_request) Successful in 11s
Specs verify / verify (pull_request) Successful in 10s

OpenSpec change: screen sync status polling and observe reads run
every five seconds during active sync; terminal state observes
resources immediately.
This commit is contained in:
2026-10-07 14:12:35 +03:00
parent 33cc4f3e0c
commit 271024b8d8
5 changed files with 271 additions and 0 deletions
@@ -0,0 +1,85 @@
## MODIFIED Requirements
### Requirement: Временные сбои чтения восстанавливаются автоматически
Frontend SHALL автоматически повторять временно неуспешное чтение и
восстанавливать получение необходимых текущему экрану данных без ручного
обновления. Повторы одной попытки MUST иметь конечный предел и паузы,
исключающие непрерывную череду запросов. При исчерпании предела доступные данные
SHALL сохраняться, а при их отсутствии SHALL показываться локальная
недоступность. Возвращение сети, возвращение пользователя к открытому экрану и
повторное открытие экрана MUST возобновлять получение отсутствующих или
требующих обновления данных без перезагрузки страницы. Свежий полный результат
MUST NOT требовать обращения к источнику только из-за такого события.
Наблюдая выполняющуюся экранную синхронизацию, frontend MUST проверять её
состояние и повторно читать связанные ресурсы не чаще одного раза за пять
секунд. После получения terminal state этой синхронизации frontend MUST сразу
наблюдать ресурсы текущего экрана, не ожидая следующего пятиисекундного
интервала.
Восстановление MUST учитывать сбой чтения результата и сбой самого получения
данных из источника, даже если чтение состояния завершилось успешно. Наблюдение
уже выполняющейся работы MUST NOT запускать её повторно. Уход с экрана MUST
прекращать новые попытки его восстановления; это не требует отменять уже
начатую работу источника. Автоматическое восстановление MUST NOT повторять
запросы, требующие исправления ввода, входа или восстановления доступа, и MUST
NOT переносить старые параметры в новую пользовательскую выборку.
#### Scenario: Кратковременный сбой чтения
- **WHEN** чтение текущей выборки временно не удалось, а следующая разрешённая
автоматическая попытка успешна
- **THEN** экран самостоятельно показывает результат без ручного действия и без
сообщения о сбое или восстановлении
#### Scenario: Экранная синхронизация продолжается
- **WHEN** экран наблюдает синхронизацию, которая остаётся в состоянии running
после очередной проверки
- **THEN** frontend выполняет следующую проверку состояния и наблюдение
связанных ресурсов не ранее чем через пять секунд
#### Scenario: Экранная синхронизация завершилась
- **WHEN** очередная проверка экранной синхронизации возвращает terminal state
- **THEN** frontend сразу наблюдает связанные ресурсы текущего экрана, чтобы
показать итоговый результат без ожидания следующего интервала
#### Scenario: Источник завершил работу ошибкой
- **WHEN** чтение сохранённых данных успешно, но получение необходимых новых
данных из источника временно не удалось
- **THEN** приложение применяет ограниченное автоматическое восстановление к
неуспешной работе, а не считает успешное чтение доказательством её успеха
#### Scenario: Повторы исчерпаны
- **WHEN** временная недоступность сохраняется после конечного предела
автоматических попыток
- **THEN** приложение прекращает серию повторов, сохраняет доступный результат
либо локальную недоступность без бесконечной загрузки и ожидает следующего
события восстановления
#### Scenario: Сеть или пользователь вернулись
- **WHEN** после временного сбоя восстановилась сеть либо пользователь вернулся
к экрану с отсутствующим или требующим обновления результатом
- **THEN** получение данных возобновляется автоматически для текущей выборки и
при успехе заменяет состояние недоступности содержимым
#### Scenario: Несколько событий восстановления совпали
- **WHEN** сеть восстановилась одновременно с возвращением пользователя на экран
- **THEN** приложение не запускает дублирующую работу получения одного набора
данных
#### Scenario: Работа источника ещё выполняется
- **WHEN** приложение восстанавливает чтение состояния уже выполняющейся работы
- **THEN** оно продолжает получение её результата без повторного запуска той же
работы
#### Scenario: Пользователь покинул экран
- **WHEN** пользователь ушёл со страницы с ожидающим восстановлением
- **THEN** новые попытки для покинутого экрана прекращаются, а уже начатая работа
не изменяет содержимое другой выборки
#### Scenario: Ошибка требует действия пользователя
- **WHEN** подтверждены недействительное подключение, отсутствие доступа или
некорректный ввод
- **THEN** автоматическая серия повторов прекращается и появляется
соответствующее действие или локальная ошибка без технической кнопки повторной
загрузки