# Длительность и размер лежат колонками записи, и равенство со строкой файла не поддерживается

- **Дата:** 2026-08-15
- **Источник:** openspec/changes/archive/2026-08-15-app-json-contract/design.md,
  раздел «Три новых колонки записи и один шаг схемы»

## Решение

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

## Почему

Обе величины показываются в списке, а список по норме `storage` читается без
содержимого. Ревью дизайна возражало: величины станут копиями, которые некому
держать равными. Решением владельца колонки остались, а равенство объявлено
**ненужным**: «на записи лежит снимок принятого, взятый приёмом один раз; на
файле — величины той копии, которой файл является сейчас». Уточнение
длительности — перечитали метаданные, сменили источник, нарезали длинную запись
— меняет вторые и не трогает первые. Это разные вопросы: «что человек прислал» и
«что лежит сейчас».

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

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

- `+` страница списка не читает по строке файла на каждую запись;
- `+` смысл у двух пар чисел разный и записан нормой, а не подразумевается;
- `−` в применённом шаге схемы навсегда остаются две колонки, повторяющие
  величины строки файла; расхождение между ними — не поломка, и заметить его
  нечем;
- `−` запись, заведённая рукой в панели без величин, покажет человеку ноль.
