## Why

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

Списка своих записей у сервиса нет вовсе, карточка и текст едут одним ответом, а
пределы, которыми сервис ограничивает загрузку, приложению неоткуда узнать —
кроме как повторить их своей константой и разойтись с сервером молча.

## What Changes

- **BREAKING.** Опрос готовности убирается целиком вместе со своими именами
  полей. Стадия проекта — стройка, на сервере данных нет, а внешней программы на
  прежнем контракте не существует: своего токена у неё не было.
- **BREAKING.** Приложение уезжает из общего пространства `/api/` в своё `/app/`.
  Общее пространство принадлежит хранилищу, и обновление библиотеки вправе занять
  там имя рядом с нашим.
- **BREAKING.** Приём стоит тем же адресом, что и список, и отличается методом:
  он заводит аудиозапись, а не кладёт файл. Ответ приёма отдаёт список заведённых
  записей и место под признак повторного файла — форма согласуется один раз,
  чтобы соседние задачи её не переписывали.
- Отказ отвечает своей причиной: сбой хранилища виден как сбой, негодная запись —
  как негодная, отказ по чужому имени — как отказ. Тело отказа одной формы на
  всех адресах приложения, и собирает его одно место.
- Появляется чтение своего архива: страница записей новыми сверху, карточка
  записи без текста и текст названного вида — сплошной либо репликами со
  временем. Шестичасовая расшифровка больше не задерживает показ шапки.
- Появляется адрес, которым сервис объявляет свои пределы: потолок размера
  записи, частота опроса, перечень известных расширений, потолок тем.
- Запись подписывается именем файла, данным отправителем: имя ложится своей
  колонкой и не спорит с заголовком, который дал человек либо посчитала языковая
  модель. Длина ограничена, управляющие знаки убраны.
- Длительность и размер переезжают колонками записи: список читается без
  содержимого, а обе величины приём узнаёт у источника метаданных и так.

## Capabilities

### New Capabilities

- `archive`: архив своих записей глазами приложения — пространство адресов
  приложения и единая форма отказа, пределы, которыми сервис ограничивает
  загрузку, и чтение своего архива: страница записей, карточка и текст названного
  вида.

### Modified Capabilities

- `intake`: приём переезжает на новый адрес и меняет форму ответа на список;
  опрос готовности убирается целиком; имя, данное отправителем, доходит до самой
  записи отдельной колонкой, оставаясь за пределами имени файла в хранилище и
  журнала.
- `access`: область слоя предъявления сессии названа адресами приложения, и
  среди них появляется вопрос «кто вошёл».
- `storage`: у записи появляются колонки имени файла отправителя, длительности и
  размера.
- `pipeline`: исход своей записи владелец узнаёт карточкой записи, а не убранным
  опросом готовности; два требования называли держателем нормы адрес, которого
  больше нет.

## Impact

- Приём и чтение записей по HTTP: все адреса приложения, коды ответа и форма
  тела.
- Схема хранилища: новый шаг под три колонки записи.
- Слой предъявления сессии и своё правило ограничителя частоты переезжают на
  новый корень.
- Правило неизвестного пути в приложении перечисляет корни сервиса, а не один.
- Внешней программе на прежнем контракте ломается всё; такой программы у сервиса
  сегодня нет.
