точки входа переехали в cmd/, заведена заглушка OIDC для локального входа

- main.go и journal_route_test.go переехали в cmd/transcriber без правок
  содержимого; образ собирает ./cmd/transcriber поимённо
- cmd/oidcstub отвечает на /authorize, /token и /userinfo, проверок не делает
  и слушает петлевой адрес: войти без Authelia стало чем
- ступень сборки приложения переехала на node:24 с alpine — musl ждёт ответа
  на AAAA, которого нет, и npm ci висел вместо отказа
This commit is contained in:
av
2026-08-15 20:15:57 +03:00
parent 63a13404df
commit 91138dd39a
19 changed files with 335 additions and 25 deletions
+1 -1
View File
@@ -52,7 +52,7 @@
- [🔬 Четыре недоказанные гипотезы о поверхности входа](items/login-surface-hypotheses.md) — Ревью назвало четыре пути, которых не смогло ни подтвердить, ни опровергнуть: браузера и живого провайдера в прогоне не было.
- [🐞 Починить срок сессии, который ставит откат шага входа](items/rollback-restores-wrong-session-duration.md) — Константа defaultAuthTokenDuration в шаге 202608120001 названа умолчанием библиотеки, но 1209600 — это 14 суток, а умолчание PocketBase 432000, пять суток: откат объявляет возврат к умолчанию и ставит срок вдвое больше выбранных владельцем семи.
- [🔬 Адрес объекта в тексте отказа SpeechKit](items/speechkit-error-text-leak.md) — Текст отказа операции приходит от Yandex и уезжает в журнал и в колонку error_text: если он несёт URI объекта, из журнала снова собирается ссылка на чужую запись.
- [🧹 Разобрать мелочи http-транспорта](items/http-transport-nits.md) — Маршруты зарегистрированы дважды, и переименование пути в main.go проходит проверки зелёным; обработчик пишет в журнал через стандартный log и дублирует запись, уже сделанную сервисом.
- [🧹 Разобрать мелочи http-транспорта](items/http-transport-nits.md) — Маршруты зарегистрированы дважды, и переименование пути в cmd/transcriber проходит проверки зелёным; обработчик пишет в журнал через стандартный log и дублирует запись, уже сделанную сервисом.
- [🧹 Запретить обращаться к Bot API мимо клиента бота](items/bot-api-only-through-bot-client.md) — Чистка отказа от адреса с токеном живёт в клиенте; свой http.Client в транспорте вернёт утечку молча — правило noctx такую подмену не ловит, а класс уже стоил одного дефекта.
- [🧹 Свести пять расхождений между документами канона](items/docs-consistency-2026-08-13.md) — Сверка 2026-08-13 нашла шесть мест, где два документа отвечают на один вопрос по-разному; одно сведено при повышении раскладки, а три из пяти оставшихся стоят в architecture.md, и по ним читатель строит решения о выкладке и о периметре.
- [✨ Сопоставить пользователя Telegram с учётной записью](items/telegram-account-link.md) — Белый список сверяется с именем пользователя Telegram, которое владелец меняет в любой момент, а записи из бота ни с кем не связаны.
+4 -4
View File
@@ -2,15 +2,15 @@
- **Тип:** chore
- **Категория:** Очередь — Поднято до контракта API: маршруты объявлены дважды, и переименование пути проходит тесты зелёным — переписывать контроллер под слепыми проверками нельзя.
- **Зачем:** Маршруты зарегистрированы дважды, и переименование пути в main.go проходит проверки зелёным; обработчик пишет в журнал через стандартный log и дублирует запись, уже сделанную сервисом.
- **Зачем:** Маршруты зарегистрированы дважды, и переименование пути в cmd/transcriber проходит проверки зелёным; обработчик пишет в журнал через стандартный log и дублирует запись, уже сделанную сервисом.
- **Теги:** review-2026-08-11
Два дефекта, найденные ревью change `2026-08-11-fix-http-handler-tests`. Оба в
`internal/controller/http`, мерджатся одним заходом.
**Маршруты зарегистрированы дважды.** `main.go` объявляет пути приёма и опроса,
**Маршруты зарегистрированы дважды.** `cmd/transcriber` объявляет пути приёма и опроса,
и сборка теста объявляет их же своей копией. Проверки ходят по копии, поэтому
переименование пути в `main.go` их не роняет — а публичный контракт HTTP API
переименование пути в `cmd/transcriber` их не роняет — а публичный контракт HTTP API
проект объявил необратимым. Проверено мутацией на прогоне триажа: замена
`api.POST("/audio", …)` на `api.POST("/upload", …)` оставляет тесты зелёными.
Нашёл проход `review-specs`.
@@ -23,7 +23,7 @@
## Затрагивает
- `internal/controller/http` и `main.go` — регистрация маршрутов приёма и
- `internal/controller/http` и `cmd/transcriber` — регистрация маршрутов приёма и
опроса, сегодня продублированная в обоих местах;
- `internal/controller/http/transcribe.go` — журнальная строка обработчика;
- `internal/controller/http/transcribe_test.go` — сборка теста, держащая свою
@@ -41,7 +41,7 @@ file name too long"`, и поля `file_ext` в ней нет вовсе.
## Затрагивает
- слой журнала запроса в `main.go` и приведение пути `journalRoute`;
- слой журнала запроса в `cmd/transcriber` и приведение пути `journalRoute`;
- отказ подготовки рабочей копии в `internal/service`, шаг приёма записи;
- `docs/conventions/logging.md` — правило о длине поля журнала;
- умолчание `MaxHeaderBytes` у сервера: сегодня оно единственное неназванное
+1 -1
View File
@@ -37,7 +37,7 @@ POST /app/audiorecords без сессии → 401 ... http.status_code=0
## Затрагивает
- слой журнала запроса в `main.go`: место, где снимается код ответа;
- слой журнала запроса в `cmd/transcriber`: место, где снимается код ответа;
- `docs/conventions/logging.md` — словарь полей запроса.
## Критерии приёмки