- адреса приложения переехали в своё пространство `/app/`, опрос готовности убран целиком: рубеж и причину остановки владелец узнаёт карточкой записи, текст — отдельным адресом названного вида - заведена единая точка отображения доменной ошибки и слой, приводящий к той же форме отказы библиотеки: тело несёт машиночитаемый код рядом с сообщением - у записи появились имя файла отправителя, длительность и размер своими колонками, а у ленты владельца — свой индекс: без него страница сканировала весь архив сервиса
38 lines
3.1 KiB
Markdown
38 lines
3.1 KiB
Markdown
# Длительность и размер лежат колонками записи, и равенство со строкой файла не поддерживается
|
||
|
||
- **Дата:** 2026-08-15
|
||
- **Источник:** openspec/changes/archive/2026-08-15-app-json-contract/design.md,
|
||
раздел «Три новых колонки записи и один шаг схемы»
|
||
|
||
## Решение
|
||
|
||
Длительность и размер принятого легли колонками аудиозаписи, хотя обе величины
|
||
уже есть у строки её файла. Равенство между ними не поддерживается никем —
|
||
намеренно. «Неизвестно» эти колонки не выражают: ноль означает ноль.
|
||
|
||
## Почему
|
||
|
||
Обе величины показываются в списке, а список по норме `storage` читается без
|
||
содержимого. Ревью дизайна возражало: величины станут копиями, которые некому
|
||
держать равными. Решением владельца колонки остались, а равенство объявлено
|
||
**ненужным**: «на записи лежит снимок принятого, взятый приёмом один раз; на
|
||
файле — величины той копии, которой файл является сейчас». Уточнение
|
||
длительности — перечитали метаданные, сменили источник, нарезали длинную запись
|
||
— меняет вторые и не трогает первые. Это разные вопросы: «что человек прислал» и
|
||
«что лежит сейчас».
|
||
|
||
Отличимость «неизвестно» от нуля снята после ревью кода и по замеру: числовая
|
||
колонка хранилища пустого значения не держит вовсе и кладёт пустое нулём.
|
||
Платить за отличимость четвёртой колонкой-признаком либо текстовым типом у чисел
|
||
не за что — обе величины ставит приём и ставит всегда, а запись с непрочитанными
|
||
метаданными отвергается отказом и не заводится.
|
||
|
||
## Последствия
|
||
|
||
- `+` страница списка не читает по строке файла на каждую запись;
|
||
- `+` смысл у двух пар чисел разный и записан нормой, а не подразумевается;
|
||
- `−` в применённом шаге схемы навсегда остаются две колонки, повторяющие
|
||
величины строки файла; расхождение между ними — не поломка, и заметить его
|
||
нечем;
|
||
- `−` запись, заведённая рукой в панели без величин, покажет человеку ноль.
|