локальный вход задаётся конфигом: заголовки подставляет сам сервис
- в конфиг добавлены секция [auth.test_headers] и предохранитель [server] debug: заголовки входа подставляет слой транспорта, второго процесса локальный запуск больше не требует - подкоманда devtools proxy удалена целиком: всё, ради чего её поднимали, делает сам сервис - адресного предохранителя нет по решению владельца — цена названа в ADR и в модели угроз
This commit is contained in:
@@ -63,12 +63,23 @@ force_shutdown_timeout = <N> # ждать остановки ворке
|
||||
Секретов в этой секции больше нет: они ушли 2026-08-22 вместе с собственным
|
||||
входом.
|
||||
|
||||
Там же, комментарием под секцией, стоит **второе значение перечня — петлевой
|
||||
адрес, под подставной прокси `cmd/devtools proxy`**. Оно стоит закомментированным, и это
|
||||
намеренно: образец описывает боевую выкладку, а локальный вход — способ до неё
|
||||
Там же, комментарием под секцией, стоит **рецепт локального входа одним связным
|
||||
блоком**: три правки сверху вниз — пара петлевых адресов в перечень доверенных,
|
||||
`[server] debug = true`, раскомментированная секция `[auth.test_headers]` с
|
||||
ключом `Remote-User`. Блок один, а не три комментария по месту: правки связаны
|
||||
между собой, и применённая порознь любая из них роняет старт либо оставляет
|
||||
сервис никого не узнающим. Рабочей строкой в образце стоит боевое значение —
|
||||
перечень с адресом прокси и `debug = false`, — а секция имитации закомментирована
|
||||
целиком: образец описывает боевую выкладку, а локальный вход — способ до неё
|
||||
дойти, и два рабочих значения в одном файле читались бы как выбор без указания,
|
||||
какое из них чьё.
|
||||
|
||||
*Расхождение:* петлевые адреса в рецепте названы **парой** — `127.0.0.1` и
|
||||
`::1`, — а не одним значением, хотя правило секции требует от образца только
|
||||
формы значения. Причина в цене: браузер разрешает `localhost` в IPv6 не реже,
|
||||
чем в IPv4, и перечень без `::1` даёт неузнанный запрос там, где человек ждёт
|
||||
входа.
|
||||
|
||||
## Поля по дискриминатору `type`
|
||||
|
||||
Когда набор полей секции зависит от поля-дискриминатора `type` (выбор одного из
|
||||
@@ -137,6 +148,16 @@ TOML. Пустые ключи Yandex ловятся в конструкторе
|
||||
Два ключа секции `[telegram]`, стоявшие здесь исключением, ушли вместе с самим
|
||||
входом 2026-08-14: секции больше нет, и своей проверки у неё тоже.
|
||||
|
||||
**Проверка, охватывающая две секции разом, живёт методом на корневой `Config`.**
|
||||
Такая сегодня одна — `ValidateTestHeaders`: она судит `[server] debug` против
|
||||
`[auth.test_headers]`, и ни в `Validate()` секции сервера, ни в `Validate()`
|
||||
секции входа не помещается — секция начала бы знать о чужой секции. Зовётся она
|
||||
из `cmd/transcriber` рядом с остальными. Имена принимаемых заголовков приходят
|
||||
ей **доводом**, а не читаются из пакета настроек: дом у них один — константы
|
||||
транспорта, — а `internal/config` транспорта не знает и знать не должен, иначе
|
||||
`cmd/devtools`, которому нужен один разбор конфига, линковал бы всю поверхность
|
||||
HTTP.
|
||||
|
||||
Секции `[auth]`, `[pipeline]` и `[storage]` проверяют себя сами, и проверка стоит
|
||||
на старте: `Validate()` каждой зовётся из `cmd/transcriber` сразу после загрузки
|
||||
и роняет процесс с именем незаполненного ключа. У `[storage]` это ожидание занятой
|
||||
|
||||
@@ -173,3 +173,10 @@ transcriber — **приложение, а не библиотека**: внеш
|
||||
|
||||
- Сбор независимых ошибок (проверка конфига — все проблемы разом) —
|
||||
`errors.Join`; проверка собранного по-прежнему через `errors.Is`.
|
||||
|
||||
*Расхождение:* проверку конфига пункт называет поимённо, а ни одна из них так не
|
||||
устроена: `errors.Join` в `internal/config` не зовётся нигде, и всякая проверка
|
||||
возвращается на первом несовпадении. Заметило ревью задачи
|
||||
`config-test-headers-login` 2026-08-23 — тем же прогоном, каким добавили
|
||||
`ValidateTestHeaders`, ведущую себя так же. Человек, заполняющий конфиг
|
||||
впервые, чинит одну ошибку за прогон.
|
||||
|
||||
@@ -87,6 +87,11 @@ stdlib-логом в поток ошибок. Это выбор, а не дол
|
||||
*Расхождение:* уровень зашит константой в `cmd/transcriber`, `DEBUG` включить нечем.
|
||||
Пустой прогон воркера не логируется вовсе — и это правилу не противоречит.
|
||||
|
||||
*Изъятие:* строка о подставленных заголовках входа
|
||||
(`internal/controller/http/substitute.go`) адресована разработчику, а идёт на
|
||||
`INFO`: `DEBUG` включить нечем, а в бою она не пишется вовсе — подстановку
|
||||
держит выключенный умолчанием предохранитель `[server] debug`.
|
||||
|
||||
## Время
|
||||
|
||||
- Поле — `time` (ключ `slog` по умолчанию).
|
||||
|
||||
Reference in New Issue
Block a user