# 021. Тихое чтение и редкие подтверждения **Status:** Accepted. Заменяет manual-refresh часть [ADR 019](019-hourly-reads-and-online-instrument-reference.md) на стороне интерфейса и уточняет клиентскую часть [ADR 007](007-react-query-fetch-policy.md). Не меняет владельцев обновления и границы чтения из ADR 019. ## Context Экраны просмотра перекладывали на пользователя контроль над получением данных: кнопки «Обновить» и «Повторить», индикатор фонового обновления и сообщение о неудачной синхронизации повторялись в разных разделах. Пользователь приходит смотреть финансы, а не обслуживать загрузку; восстановление после временного сбоя не должно зависеть от нажатия кнопки. При этом состояние самих данных остаётся значимым: время последнего успешного результата источника, устаревание и исход часовой попытки влияют на доверие к показанным суммам и не могут быть просто скрыты. ## Decision - Автоматическое чтение клиента не сообщает о себе. Экраны просмотра не показывают кнопок ручного обновления и повтора, индикаторов фонового перечитывания и технических предупреждений о собственном запросе. - Временные сбои GET восстанавливаются сами: ограниченный срок ожидания запроса и не более двух повторов с возрастающими паузами, затем возврат к штатной работе при появлении результата. Пользователь не инициирует восстановление. - Состояние источника из `meta` остаётся видимым. Время последнего успешного результата, признак устаревания, исход последней часовой попытки и неполнота показываются текстом либо доступно именованным элементом, а не только цветом. Это свойство данных, а не отчёт о техническом процессе, и оно не превращается в действие пользователя. - Доступный результат сохраняется при обновлении и временной ошибке. Неполнота и подтверждённая пустота остаются различимыми: неизвестная сумма не становится нулём, незавершённый расчёт не выдаётся за окончательный, незагруженный список не выдаётся за отсутствие записей. - Первичное ожидание ограничено по времени и показывает структуру будущего содержимого. По его истечении экран переходит в спокойную локальную недоступность вместо бесконечной загрузки и сам заменяет её содержимым после восстановления. Сбой одного блока не скрывает остальные доступные блоки. - Ошибки явных действий пользователя сохраняются и остаются видимыми. Решение касается только чтения; отправка формы, изменение данных и сброс фильтра по-прежнему сообщают результат, в том числе неуспешный. ## Consequences Пользователь не может ускорить обновление вручную: нормальным владельцем обновления остаётся часовой обход из ADR 019, и отсутствие кнопки не меняет его срок. Если источник недоступен долго, экран показывает прежние данные с обозначением устаревания, а не приглашение повторить. Автоматический повтор ограничен: он покрывает короткие сетевые сбои, но не длительную недоступность. Ошибки доступа, домена и отмены не повторяются, mutations не повторяются вовсе. Состояние источника и состояние клиентского чтения описывают разные вещи и не подменяют друг друга. `Portfolio.isStale` сохраняет смысл возраста снимка; ошибка клиентского перечитывания его не меняет. Детали поведения — в [ожидании и восстановлении интерфейса](../architecture/cross-cutting/ui-resilience.md) и [свежести данных](../architecture/cross-cutting/data-freshness.md). Согласованные требования принадлежат workspace-спецификациям `frontend-user-feedback`, `frontend-data-resilience` и `frontend-loading-presentation`.