spec: allow warning and retry after exhausted read retries (WealthLedger/specs#79) (#80)
Specs security / security (push) Successful in 7s
Specs verify / verify (push) Successful in 10s

This commit was merged in pull request #80.
This commit is contained in:
2026-11-03 07:45:09 +03:00
parent 8b2b742e52
commit 0469756d3b
9 changed files with 61 additions and 21 deletions
@@ -18,7 +18,9 @@ Portfolio и других экранов чтения при фоновом об
выборки как результат новой.
Доступный результат MUST оставаться видимым без индикаторов фонового чтения
клиента, технических предупреждений об этом чтении и действий ручного повтора.
клиента, технических предупреждений об этом чтении и действий ручного повтора,
пока автоматические повторы не исчерпаны; после их исчерпания применяется
требование «Временные сбои чтения восстанавливаются автоматически».
Frontend MUST NOT подменять внутренние признаки свежести и полноты, успешное
время источника или ошибку обновления только ради отсутствия их отображения.
Client Cached Snapshot MUST оставаться отличным от server-side fallback;
@@ -43,14 +45,14 @@ MUST NOT возвращать их на экран.
#### Scenario: Resource сохраняется после неуспешной часовой попытки
- **WHEN** response содержит полный `data` и `meta`, обозначающий неуспех последней часовой попытки
- **THEN** frontend сохраняет `data` и его исходное время видимыми и отдельно обозначает неуспех попытки, не предлагая ручной повтор
- **THEN** frontend сохраняет `data` и его исходное время видимыми и отдельно обозначает неуспех попытки, не предлагая запуск повторного получения данных из источника
#### Scenario: Обновление Portfolio завершается ошибкой после успешного ответа
- **WHEN** экран Brokerage Account уже показывает Client Cached Snapshot Portfolio, а последующее обновление этого же Portfolio завершается временной ошибкой
- **THEN** frontend сохраняет Portfolio видимым без предупреждения и ручного повтора, а восстановление выполняется автоматически
- **THEN** frontend сохраняет Portfolio видимым без предупреждения и ручного повтора, а восстановление выполняется автоматически, пока автоматические повторы не исчерпаны
#### Scenario: Server-side fallback и client cached snapshot различаются
- **WHEN** backend возвращает Portfolio с `isStale` либо фоновое обновление Client Cached Snapshot завершается временной ошибкой
- **WHEN** backend возвращает Portfolio с `isStale` либо фоновое обновление Client Cached Snapshot завершается временной ошибкой, а автоматические повторы ещё не исчерпаны
- **THEN** frontend сохраняет доступные данные без технических сообщений и не подменяет один внутренний вид состояния другим
#### Scenario: Подтверждённая пустота переживает фоновую ошибку
@@ -75,7 +77,17 @@ Frontend SHALL автоматически повторять временно н
получение необходимых текущему экрану данных без ручного обновления. Повторы
одной попытки MUST иметь конечный предел и паузы, исключающие непрерывную
череду запросов. При исчерпании предела доступные данные SHALL сохраняться,
а при их отсутствии SHALL показываться локальная недоступность. Возвращение сети,
а при их отсутствии SHALL показываться локальная недоступность. На экранах
Account, Accounts, Income, Operations, Events и секций деталей инструмента при исчерпании предела
frontend SHALL дополнительно показывать неблокирующее локализованное предупреждение
о неудачном обновлении и действие «Повторить» рядом с затронутым результатом либо
локальной недоступностью. Действие MUST повторять только чтение (GET) затронутого
запроса, не запускать получение данных из источника и не менять выбранные
фильтры, период, открытые разделы и ввод; успешное чтение MUST снимать
предупреждение и MUST NOT сообщать об успехе. Предупреждение MUST NOT дублировать
состояние источника из `meta` и MUST NOT изменять `Portfolio.isStale`. На остальных
экранах чтения, включая поиск, диапазон графика, карты и настройки подключения,
предупреждение и действие повтора MUST NOT показываться. Возвращение сети,
возвращение пользователя к открытому экрану и повторное открытие экрана MUST
возобновлять получение отсутствующих или требующих обновления данных без
перезагрузки страницы. Свежий полный результат MUST NOT требовать обращения
@@ -101,6 +113,18 @@ Frontend SHALL автоматически повторять временно н
- **WHEN** временная недоступность сохраняется после конечного предела автоматических попыток
- **THEN** приложение прекращает серию повторов, сохраняет доступный результат либо локальную недоступность без бесконечной загрузки и ожидает следующего события восстановления
#### Scenario: Повторы исчерпаны при сохранённом результате
- **WHEN** на экране Account, Accounts, Income, Operations, Events либо в секции деталей инструмента автоматические повторы исчерпаны, а ранее полученный результат остаётся доступным
- **THEN** результат и его исходное состояние источника остаются видимыми, рядом показываются неблокирующее предупреждение о неудачном обновлении и действие «Повторить», а активация действия повторяет только чтение затронутого запроса и после успеха снимает предупреждение
#### Scenario: Повторы исчерпаны без результата
- **WHEN** на тех же экранах автоматические повторы исчерпаны, а результата выборки нет
- **THEN** локальная недоступность содержит действие «Повторить», повторяющее только чтение затронутого запроса, и результат одной секции деталей не блокирует восстановление остальных
#### Scenario: Поиск, график и карты остаются тихими
- **WHEN** автоматические повторы исчерпаны при чтении результата поиска, диапазона графика, карт либо настроек подключения
- **THEN** приложение не показывает предупреждение и действие повтора и сохраняет прежнее локальное поведение
#### Scenario: Сеть или пользователь вернулись
- **WHEN** после временного сбоя восстановилась сеть либо пользователь вернулся к экрану с отсутствующим или требующим обновления результатом
- **THEN** получение данных возобновляется автоматически для текущей выборки и при успехе заменяет состояние недоступности содержимым