Files
transcriber/tasks/items/http-transport-nits.md
T
av 8739b18a9f tasks: очередь расставлена от базы к деталям
- порядок беклога и роадмапа назначен слоями: проверки, которым можно
  верить → долги входа → владелец записи и контракт API → конвейер под
  тестами → приложение и возможности поверх; у каждого движения записана
  причина;
- заведены восемь задач под пункты «Завершения», которых не закрывала ни
  одна запись, — цель any-audio-source была без задач вовсе;
- у четырёх задач сняты критерии, требовавшие того, что делает задача ниже
  по очереди; исправлены ссылки на несуществующий repo/sqlite и на
  отменённую разведку об очереди.
2026-08-12 20:48:53 +03:00

3.6 KiB

🧹 Разобрать мелочи http-транспорта

  • Тип: chore
  • Категория: Очередь — Поднято до контракта API: маршруты объявлены дважды, и переименование пути проходит тесты зелёным — переписывать контроллер под слепыми проверками нельзя.
  • Зачем: Маршруты зарегистрированы дважды, и переименование пути в main.go проходит проверки зелёным; обработчик пишет в журнал через стандартный log и дублирует запись, уже сделанную сервисом.
  • Теги: review-2026-08-11

Два дефекта, найденные ревью change 2026-08-11-fix-http-handler-tests. Оба в internal/controller/http, мерджатся одним заходом.

Маршруты зарегистрированы дважды. main.go объявляет пути приёма и опроса, и сборка теста объявляет их же своей копией. Проверки ходят по копии, поэтому переименование пути в main.go их не роняет — а публичный контракт HTTP API проект объявил необратимым. Проверено мутацией на прогоне триажа: замена api.POST("/audio", …) на api.POST("/upload", …) оставляет тесты зелёными. Нашёл проход review-specs.

Обработчик пишет в журнал мимо slog и дублирует сервис. log.Printf("Err: %v", err) — стандартный log, тогда как весь проект пишет через slog; и эту же ошибку строкой выше уже записал сервис. Типовой узел «Транспорт» в review.md прямо требует обратного: «не логирует ошибку, которую уже залогировал доменный слой». Нашёл проход review-code.

Затрагивает

  • internal/controller/http и main.go — регистрация маршрутов приёма и опроса, сегодня продублированная в обоих местах;
  • internal/controller/http/transcribe.go — журнальная строка обработчика;
  • internal/controller/http/transcribe_test.go — сборка теста, держащая свою копию маршрутов.

Критерии приёмки

  • Пути и методы объявлены в одном месте, и переименование пути роняет проверки. Оракул — мутация: заменить /api/audio на /api/upload, прогнать go test ./internal/controller/http/ и увидеть красное.
  • Обработчик не пишет в журнал через стандартный log. Оракул — grep -rn 'log\.' internal/controller/http/*.go без импорта log/slog пуст.
  • Об одном отказе приёма в журнале одна запись, а не две. Оракул — прогон отказа с перехваченным журналом: строк об этой ошибке ровно одна.

Рамки

Форма ответа и коды не меняются — этим занимается json-api-for-spa.