Files
docs/adr/021-quiet-reading-and-rare-confirmations.md
T
codex-bot e8e3ef6285
Docs security / security (push) Successful in 8s
Docs verify / verify (push) Successful in 13s
docs: describe quiet reading and visible source state (#51)
ADR 021 фиксирует решение о тихом чтении и видимом состоянии источника; ui-resilience и затронутые domains приведены к AS-IS.
2026-10-17 22:11:49 +03:00

5.9 KiB

021. Тихое чтение и редкие подтверждения

Status: Accepted. Заменяет manual-refresh часть ADR 019 на стороне интерфейса и уточняет клиентскую часть ADR 007. Не меняет владельцев обновления и границы чтения из ADR 019.

Context

Экраны просмотра перекладывали на пользователя контроль над получением данных: кнопки «Обновить» и «Повторить», индикатор фонового обновления и сообщение о неудачной синхронизации повторялись в разных разделах. Пользователь приходит смотреть финансы, а не обслуживать загрузку; восстановление после временного сбоя не должно зависеть от нажатия кнопки.

При этом состояние самих данных остаётся значимым: время последнего успешного результата источника, устаревание и исход часовой попытки влияют на доверие к показанным суммам и не могут быть просто скрыты.

Decision

  • Автоматическое чтение клиента не сообщает о себе. Экраны просмотра не показывают кнопок ручного обновления и повтора, индикаторов фонового перечитывания и технических предупреждений о собственном запросе.
  • Временные сбои GET восстанавливаются сами: ограниченный срок ожидания запроса и не более двух повторов с возрастающими паузами, затем возврат к штатной работе при появлении результата. Пользователь не инициирует восстановление.
  • Состояние источника из meta остаётся видимым. Время последнего успешного результата, признак устаревания, исход последней часовой попытки и неполнота показываются текстом либо доступно именованным элементом, а не только цветом. Это свойство данных, а не отчёт о техническом процессе, и оно не превращается в действие пользователя.
  • Доступный результат сохраняется при обновлении и временной ошибке. Неполнота и подтверждённая пустота остаются различимыми: неизвестная сумма не становится нулём, незавершённый расчёт не выдаётся за окончательный, незагруженный список не выдаётся за отсутствие записей.
  • Первичное ожидание ограничено по времени и показывает структуру будущего содержимого. По его истечении экран переходит в спокойную локальную недоступность вместо бесконечной загрузки и сам заменяет её содержимым после восстановления. Сбой одного блока не скрывает остальные доступные блоки.
  • Ошибки явных действий пользователя сохраняются и остаются видимыми. Решение касается только чтения; отправка формы, изменение данных и сброс фильтра по-прежнему сообщают результат, в том числе неуспешный.

Consequences

Пользователь не может ускорить обновление вручную: нормальным владельцем обновления остаётся часовой обход из ADR 019, и отсутствие кнопки не меняет его срок. Если источник недоступен долго, экран показывает прежние данные с обозначением устаревания, а не приглашение повторить.

Автоматический повтор ограничен: он покрывает короткие сетевые сбои, но не длительную недоступность. Ошибки доступа, домена и отмены не повторяются, mutations не повторяются вовсе.

Состояние источника и состояние клиентского чтения описывают разные вещи и не подменяют друг друга. Portfolio.isStale сохраняет смысл возраста снимка; ошибка клиентского перечитывания его не меняет.

Детали поведения — в ожидании и восстановлении интерфейса и свежести данных. Согласованные требования принадлежат workspace-спецификациям frontend-user-feedback, frontend-data-resilience и frontend-loading-presentation.