tasks: очередь расставлена от базы к деталям
- порядок беклога и роадмапа назначен слоями: проверки, которым можно верить → долги входа → владелец записи и контракт API → конвейер под тестами → приложение и возможности поверх; у каждого движения записана причина; - заведены восемь задач под пункты «Завершения», которых не закрывала ни одна запись, — цель any-audio-source была без задач вовсе; - у четырёх задач сняты критерии, требовавшие того, что делает задача ниже по очереди; исправлены ссылки на несуществующий repo/sqlite и на отменённую разведку об очереди.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# ✨ Свести приём и чтение записей к одному контракту для приложения
|
||||
|
||||
- **Тип:** feature
|
||||
- **Категория:** Очередь
|
||||
- **Категория:** Очередь — Единая точка трансляции доменной ошибки — база и для экранов, и для токенов; список своих записей заводится после владельца, а не до.
|
||||
- **Зачем:** Сегодняшний API отвечает 404 на любую ошибку чтения и 500 на любую ошибку приёма: строить на нём экраны нечем.
|
||||
- **Теги:** goal:web-access
|
||||
|
||||
@@ -25,10 +25,10 @@
|
||||
|
||||
## Критерии приёмки
|
||||
|
||||
- Сбой базы при чтении задачи даёт `500`, а не `404`. Оракул — тест с
|
||||
репозиторием, возвращающим ошибку драйвера.
|
||||
- Негодный файл даёт `400` с человекочитаемым текстом, а не `500`. Оракул —
|
||||
тест: файл, который отвергает разбор метаданных.
|
||||
- Код ответа отвечает причине отказа, а не месту, где он случился: сбой базы при
|
||||
чтении даёт `500`, а не `404`, негодный файл — `400` с человекочитаемым
|
||||
текстом, а не `500`. Оракул — два теста: репозиторий, возвращающий ошибку
|
||||
драйвера, и файл, который отвергает разбор метаданных.
|
||||
- Тело ошибки одной формы на всех эндпоинтах, не содержит сырого `err.Error()` и
|
||||
опечатки `transcibe`. Оракул — тест на четырёх ветвях отказа (форма совпадает,
|
||||
текста внутренней ошибки в теле нет) плюс пустой `grep -rn 'transcibe'
|
||||
@@ -37,12 +37,19 @@
|
||||
тест на выборке больше страницы.
|
||||
- Отображение ошибки живёт в одной функции, и она названа в
|
||||
`docs/architecture.md`. Оракул — `task gate`, шаг `docs.py check`.
|
||||
- Ответ приёма отдаёт список заведённых записей и место под признак повторного
|
||||
файла, даже когда файл в запросе один. Оракул — тест приёма: тело ответа —
|
||||
список из одного элемента, у элемента есть поле признака повтора.
|
||||
|
||||
## Рамки
|
||||
|
||||
Аутентификацию и владельца не заводим — это `oidc-login` и `record-ownership`;
|
||||
задача про форму контракта. Публичный контракт после мерджа обратной правкой не
|
||||
откатывается — поэтому сюда же приехала опечатка `transcibe` в тексте ошибки
|
||||
приёма (нашёл проход `review-specs` на ревью change
|
||||
откатывается, и по решению владельца от 2026-08-12 форма ответа приёма
|
||||
согласуется здесь один раз — сразу списком и с местом под признак повтора, —
|
||||
чтобы `dedup-by-content-hash`, `multi-file-upload` и `reject-oversized-recording`
|
||||
её не переписывали, а экран загрузки не переделывался под вторую форму. Приём
|
||||
по-прежнему берёт из запроса один файл: меняется форма ответа, не число файлов.
|
||||
Сюда же приехала опечатка `transcibe` в тексте ошибки приёма (нашёл проход `review-specs` на ревью change
|
||||
`2026-08-11-fix-http-handler-tests`): в одиночку текст ошибки менять нельзя,
|
||||
а здесь контракт переписывается целиком.
|
||||
|
||||
Reference in New Issue
Block a user