Files
bare/docs/decisions/009-local-history.md
T
ClaudeandClaude Fable 5 3d814112a9 Заложить репозиторий: философия, архитектура, модель угроз, ADR
Документы фиксируют принятые проектные решения Bare:
клиент без фреймворков и сборки, Go-сервер одним бинарём,
E2EE на WebCrypto, сервер-реле без истории, локальная история
с экспортом/импортом, Web Push + VAPID. Кода нет — сначала документы.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SW4ZXtKn5NjX8NH3Lhm2ND
2026-08-20 09:17:37 +00:00

1.1 KiB

ADR-009: История — только на устройстве, в IndexedDB

Контекст

История, живущая на сервере, делает сервер архивом и целью атак. У Bare история — собственность устройства.

Решение

Клиент хранит историю в IndexedDB. messageId — ULID/UUIDv7: хронологическая сортировка и идемпотентный merge. Составной индекс (chatId, messageId). Пагинация курсором по ~50 сообщений, виртуализация списка в DOM. При старте — navigator.storage.persist(); занятое место показывается через storage.estimate().

Следствия

  • Зашёл с другого устройства — там только новые сообщения.
  • Потеря устройства без экспорта — потеря истории.
  • Браузер может вычистить storage; persist() снижает риск, но не исключает его.