# Свежесть данных и повторное использование WealthLedger читает инвестиционные данные из SQLite. Обычный GET возвращает сохранённый результат и не запускает личную синхронизацию. Общие справочные данные инструментов запрашиваются онлайн, когда это требуется карточке; финансовый HTTP-ответ не ждёт T-Bank. Модель принята в [ADR 017](../../adr/017-local-tbank-reads-and-background-sync.md). ## Клиентский и серверный снимки [Client Cached Snapshot](../../glossary.md#client-cached-snapshot) — успешный ответ в TanStack Query. Он сохраняет показанное содержимое при временной ошибке запроса в той же границе доступа. SQLite сохраняет источники независимо от браузера: membership, последний полный portfolio, исполненные операции, общие сведения об инструментах, котировки, свечи и календари. [Полнота периода](../../glossary.md#полнота-истории-счёта) и свежесть различаются. Успешно проверенный пустой интервал полон; последняя страница журнала сама по себе полноту не доказывает. Ошибка сверки сохраняет прежние данные и время. Старый полный портфель не удаляется по истечении TTL. `isStale` показывает возраст portfolio source, а не сам факт неудачного обновления. | Источник | Когда обычный запрос требует обновления | | --- | --- | | Portfolio, котировки, изменяемый хвост дневных свечей | Через 60 секунд | | Membership и изменяемый хвост операций | Через 5 минут | | Metadata, поиск каталога и company | Онлайн при чтении | | Календари | Через часовой обход | | Полные прошлые интервалы операций и завершённые свечи | При явном обновлении показанного периода | TTL не создаёт таймер импорта. Запрошенная работа может закончиться после ухода со страницы. После перезапуска нет автоматического обхода intent: следующий подходящий запрос повторяет незавершённый интервал с первой страницы, переиспользуя полные интервалы. Cursor брокера не служит durable checkpoint. Повторное чтение перечитывает общие справочные данные онлайн, а финансовые ресурсы используют сохранённый результат и применяемую политику свежести. Повторная сверка полного периода публикуется одной транзакцией после всех страниц, интервалов и счетов, включая `all`. Сбой сохраняет весь прежний результат. Первая загрузка может публиковать полные малые интервалы и показывать частичный период без окончательных сумм. Клиент наблюдает только известную активную работу открытого экрана. Status GET и data GET с `sync=observe` не запускают работу. После изменения состояния ответ попадает в ту же query identity; после ухода или завершения наблюдение прекращается. Поздний ответ не заменяет уже принятый новый. [HTTP API](../http-api.md) объясняет envelope и экранный refresh. Отменой query lifecycle владеет TanStack Query. Status не пересобирает финансовые ответы и не передаёт hash notifications. Свечи нового диапазона загружаются при его открытии; предзагрузка всей истории портфеля не выполняется. ## Смена подключения Каждое чтение проверяет локальную сессию, текущее подключение, известный отказ токена и сохранённый состав доступных счетов. Расшифровка token и GetAccounts для локальной выдачи не нужны. Старый membership допускает выдачу и фоновую сверку; это задержка обнаружения отзыва доступа, а не live-проверка брокера. Unknown membership не даёт доступа к произвольному accountId: ответ сообщает о загрузке доступа. Успешный новый список немедленно ограничивает последующие чтения. Известный invalid token блокирует личные данные. Успешный PUT атомарно сохраняет token, новую случайную внутреннюю revision и membership из проверки token. Прежние личные datasets и work становятся недоступны. DELETE удаляет подключение и личные данные; общие неперсональные источники могут оставаться. Неуспешный PUT сохраняет действующую границу. Публикация проверяет revision и attempt в той же SQLite-транзакции; поздняя работа старого подключения не меняет даже timestamp. Revision не попадает в API, логи или cursor. Frontend очищает personal queries при смене подключения и известном отказе доступа; поздний ответ не восстанавливает скрытые данные. Logout очищает сессию и query cache. Подробнее — [интеграция T-Bank](../../integrations/tbank.md).