ADR 021 фиксирует решение о тихом чтении и видимом состоянии источника; ui-resilience и затронутые domains приведены к AS-IS.
7.1 KiB
Ожидание, ошибки и восстановление интерфейса
Интерфейс различает ожидание данных, известную ошибку запроса и непойманную ошибку отображения маршрута. Эти состояния требуют разных действий и не подменяют друг друга.
Ожидание и доступные данные
При первой загрузке без результата structural skeleton показывает расположение ожидаемых блоков. При частичной загрузке он занимает только незагруженную область. Placeholders не содержат правдоподобных финансовых данных, не становятся действиями и не получают клавиатурный фокус; область ожидания обозначается как занятая.
При восстановлении сессии SPA показывает нейтральный skeleton каркаса, пока неизвестно, доступен public или protected маршрут. При загрузке отложенного маршрута уже доступный каркас остаётся видимым.
Фоновое чтение не сообщает о себе: оно сохраняет видимые данные без индикации процесса и без технического предупреждения. В частности, клиентский снимок счетов или портфеля остаётся доступным после ошибки refetch, и эта ошибка не означает отсутствие инвестиций. Действие пользователя сохраняет видимые данные или элемент управления и сообщает свой результат, включая неуспешный.
Первичное ожидание ограничено по времени. По его истечении область переходит в спокойную локальную недоступность вместо бесконечной загрузки и сама заменяет её содержимым после восстановления. Решение принято в ADR 021.
Серверная полнота не выводится из query lifecycle. Missing показывает skeleton только отсутствующих секций, partial — подтверждённые строки и сообщение о неполноте. Totals ждут обязательных зависимостей, comparisons готовятся независимо. Только complete empty означает отсутствие операций. Время источника не заменяется временем получения HTTP-ответа.
Экраны просмотра не предлагают ручное обновление или повтор чтения: временные сбои GET восстанавливаются сами ограниченным числом повторов, сохраняя показанный результат и applied filters. Ошибка transport отличается от ошибки source work. Status observation прекращается после terminal outcome или ухода; само истечение TTL не запускает импорт. Известный access loss очищает personal view, включая защиту от позднего ответа.
Состояние источника при этом видимо: время последнего успешного результата, устаревание, исход последней часовой попытки и неполнота показаны текстом либо доступно именованным элементом рядом с данными, к которым относятся. Это свойство данных, а не отчёт о техническом процессе, и оно не требует действия.
Известная ошибка сценария
Ошибки счетов, портфеля и подключения T-Bank остаются локальными: затронутый блок показывает собственное состояние и не скрывает успешно отображённые соседние блоки. Устаревший серверный Portfolio Snapshot показывает сохранённый портфель с обозначением устаревания. Он не превращается в глобальный fallback. Ошибка источника не означает нулевой баланс или отсутствие операций.
Предусмотренные сценарием navigation actions сохраняются: подтверждённая потеря
доступа предлагает восстановить подключение, а 404 — вернуться к списку
счетов. Это навигация и явные действия пользователя, а не повтор чтения.
Непойманная ошибка маршрута
Непойманная runtime-ошибка при отображении public или protected route
заменяет его содержимое нейтральным fallback без технических деталей.
Пользователь может перейти к /accounts при активной сессии или к /login
без неё. Переход на другой маршрут сбрасывает это состояние; если новый
маршрут отображается успешно, пользователь продолжает работу.
Общий fallback восстанавливает навигацию, но не обещает устранить причину ошибки. HTTP-коды и безопасная форма серверной ошибки находятся в HTTP API, восстановление сессии — в аутентификации.
Согласованное поведение раскрыто в workspace-спецификациях UI resilience, loading presentation и data resilience.