## Why

Чтобы открыть приложение на своей машине, сегодня мало запустить сервис: рядом
надо поднять второй процесс — подставной обратный прокси из оснастки, — потому
что сервис узнаёт пришедшего по заголовку, а браузер заголовков не ставит. Два
процесса вместо одного, свой порт у каждого и правило «приложение открывают по
адресу прокси, а не по адресу сервиса» — всё это надо помнить и объяснять
каждому, кто пришёл в проект.

Владелец назвал желаемое прямо: один бинарник, а различия между запусками
задаются конфигом. Тестовый прогон должен подниматься тем же
`go run ./cmd/transcriber -c config.toml`, что и всякий другой, и отличаться от
боевого только содержимым файла настроек.

## What Changes

- В секцию `[auth]` добавляется подсекция `test_headers` — имитация заголовков,
  которые сервису на сервере ставит обратный прокси. Ключи подсекции задают
  значения, которыми сервис назовёт пришедшего сам, когда тот пришёл ни с чем.
- В секцию `[server]` добавляется предохранитель `debug` — признак отладочного
  запуска со значением по умолчанию «выключено». Подстановка заголовков работает
  только при включённом признаке.
- Старт получает новые правила отказа. Заполненная имитация при выключенном
  предохранителе роняет сервис, а не игнорируется молча; имитация, при которой
  узнавание не состоится ни при каком запросе — неизвестное имя заголовка,
  отсутствующий или негодный `Remote-User`, — роняет его тоже.
- Владелец обязан видеть отладочный запуск в журнале сервиса — предупреждением
  при старте и на каждом подставленном запросе.
- Подставной обратный прокси `go run ./cmd/devtools proxy` убирается целиком:
  всё, ради чего его поднимали, делает сам сервис, и второго способа входить
  локально не остаётся. Решение владельца на чекпоинте; цена — поломки контура
  местным инструментом больше не воспроизводятся.
- Образец конфига и памятка описывают локальный вход через настройки вместо
  запуска второго процесса.

## Capabilities

### New Capabilities

Новых capability изменение не заводит: предмет прежний — кто пришёл в сервис и
пускают ли его дальше.

### Modified Capabilities

- `access`: узнавание получает второй источник заголовков — настройки сервиса —
  и правила, при которых этот источник законен. Требования: подстановка идёт
  только при включённом предохранителе, только при отсутствии пришедшего
  заголовка, только с адресов, которым сервис и так верит; заполненная имитация
  без предохранителя роняет старт; отладочный запуск виден в журнале, а значения
  подставленного заголовка в журнале по-прежнему нет.

## Impact

- Настройки: `internal/config` — структуры секций `[server]` и `[auth]`,
  умолчания, проверки старта. Имя нового ключа конфига необратимо и решается
  человеком.
- Вход: `internal/controller/http` — цепочка слоёв корня приложения и
  узнавание по заголовку.
- Точка входа: `cmd/transcriber` — порядок проверок при старте и сборка
  цепочки.
- Оснастка: `cmd/devtools` — подкоманда `proxy` удаляется вместе с флагами,
  шапкой пакета и строкой `usage()`.
- Документы: `config.example.toml`, `CLAUDE.md`, `README.md`,
  `docs/security.md`, `docs/conventions/config.md`, `docs/architecture.md` —
  везде, где локальный вход описан через второй процесс.
- Граница домена: `docs/passport.md`, «Управление учётными записями». Сегодня
  он утверждает, что кто пришёл, сервис не решает никогда, и что исключений у
  этого больше нет. Изменение заводит исключение, и паспорт обязан назвать его
  одной строкой с границей — предохранитель `[server] debug`, выключенный по
  умолчанию, — и ссылкой на спеку `access`.
- Периметр: изменение заводит настройку, которой сервис пускает кого угодно.
  Машиной боевая поломка не исключена: сервис с включённым предохранителем и
  заполненной имитацией поднимется на любом перечне доверенных адресов. Что
  стоит между боевой выкладкой и открытым входом — в `design.md`, решение 4.
