# Ответ распознавателя хранится дословно, двоичной формой и вложением

- **Дата:** 2026-08-14
- **Источник:** openspec/changes/archive/2026-08-14-record-centric-model/design.md,
  раздел «Сырой ответ провайдера хранится вложением, а не колонкой»

## Решение

Ответ SpeechKit сохраняется целиком — сообщения потока подряд, каждое своей
двоичной записью с длиной впереди, — и лежит **вложением** коллекции попыток
распознавания, а не колонкой.

## Почему

Цитата источника:

> Хранится он вообще потому, что **результат операции у провайдера не
> переспрашивается**. Отвергнутый вариант — не хранить и разобрать на лету:
> дешевле сегодня, но связь реплики с говорящим мы строить пока не умеем, и
> когда научимся, архив пересчитать будет не из чего, а повторная операция стоит
> денег за каждую запись.

Вложением, а не колонкой:

> Ответ на многочасовую запись — мегабайты. Хранилище читает запись целиком, а
> шаг опроса читает строку попытки раз в несколько секунд: положенный колонкой,
> ответ ехал бы в память при каждом опросе — тот же промах, что расшифровка в
> перечне колонок захвата сегодня.

Двоичной формой, а не текстовой, — решение ревью кода того же изменения. Замер:
текстовое представление собирается по нашей скомпилированной схеме и **молча
выбрасывает поля, которых в ней нет**, а провайдер добавляет их без
предупреждения. Двоичная форма неизвестные поля переносит: они переживают запись
и чтение и станут читаемыми, когда схема обновится. Ради этого архив и заводился.

## Последствия

- `+` архив пересчитывается из сохранённого без единого рубля: связь реплики с
  говорящим станет доступна, когда мы научимся её читать.
- `+` шаг опроса читает строку попытки, не поднимая мегабайты в память.
- `−` **формат файла на диске объявлен необратимым**: сохранённое не читается
  глазами и не разбирается ничем, кроме нашего же кода, а прочесть архив без
  сервиса нельзя вовсе.
- `−` каталог данных растёт быстрее прежнего: ответ многословнее самой
  расшифровки — несёт альтернативы, время каждого слова и разбор говорящих.
  Потолок в 256 МиБ на вложение назван строкой в `database.md`, а сколько там на
  деле у шестичасовой записи, не мерил никто.
