- пять из урожая change 2026-08-11-fix-http-handler-tests, тег review-2026-08-11; утечка имени файла в журнал поставлена первой строкой очереди - опечатка transcibe дописана в json-api-for-spa: текст ошибки — часть необратимого контракта, и в одиночку он не правится
3.6 KiB
✨ Свести приём и чтение записей к одному контракту для приложения
- Тип: feature
- Категория: Очередь
- Зачем: Сегодняшний API отвечает 404 на любую ошибку чтения и 500 на любую ошибку приёма: строить на нём экраны нечем.
- Теги: goal:web-access
Двигает пункты 1, 2 и 4 «Завершения» цели: экраны заводят задачу, видят её состояние и листают список — всё через один контракт.
Обработчик GET /api/status/:id сегодня отвечает 404 на любую ошибку
чтения, включая сбой базы, а POST /api/audio — 500 на любую ошибку заведения,
включая негодный файл. Экран, построенный на таком контракте, показывает «не
найдено» при упавшей базе.
Затрагивает
POST /api/audioиGET /api/status/:id— коды ответа и форма ошибки;- новый эндпоинт списка своих записей с постраничным чтением;
- единая точка отображения доменной ошибки в код ответа — её сегодня нет (conventions/errors.md);
internal/contract— доменные ошибки под отображение;internal/controller/httpцеликом;docs/architecture.md, раздел «Единые точки проекта».
Критерии приёмки
- Сбой базы при чтении задачи даёт
500, а не404. Оракул — тест с репозиторием, возвращающим ошибку драйвера. - Негодный файл даёт
400с человекочитаемым текстом, а не500. Оракул — тест: файл, который отвергает разбор метаданных. - Тело ошибки одной формы на всех эндпоинтах, не содержит сырого
err.Error()и опечаткиtranscibe. Оракул — тест на четырёх ветвях отказа (форма совпадает, текста внутренней ошибки в теле нет) плюс пустойgrep -rn 'transcibe' internal/. - Список записей отдаётся страницами и упорядочен по времени создания. Оракул — тест на выборке больше страницы.
- Отображение ошибки живёт в одной функции, и она названа в
docs/architecture.md. Оракул —task gate, шагdocs.py check.
Рамки
Аутентификацию и владельца не заводим — это oidc-login и record-ownership;
задача про форму контракта. Публичный контракт после мерджа обратной правкой не
откатывается — поэтому сюда же приехала опечатка transcibe в тексте ошибки
приёма (нашёл проход review-specs на ревью change
2026-08-11-fix-http-handler-tests): в одиночку текст ошибки менять нельзя,
а здесь контракт переписывается целиком.