Files
transcriber/tasks/items/no-user-filename-in-log.md
T
av 2333e80633 tasks: заведены шесть задач из урожая ревью и переименования образца конфига
- пять из урожая change 2026-08-11-fix-http-handler-tests, тег review-2026-08-11;
  утечка имени файла в журнал поставлена первой строкой очереди
- опечатка transcibe дописана в json-api-for-spa: текст ошибки — часть
  необратимого контракта, и в одиночку он не правится
2026-08-11 08:59:45 +03:00

3.4 KiB

🐞 Не писать имя файла пользователя в журнал

  • Тип: fix
  • Категория: Очередь — сломано сейчас: каждая принятая запись кладёт имя файла живого пользователя в журнал контейнера, нарушение объявлено критическим и необратимым
  • Зачем: Приём кладёт имя файла, данное пользователем, в журнал контейнера на каждой принятой записи — инвариант приватности объявляет это критическим и необратимым.
  • Теги: review-2026-08-11

Инвариант «Содержимое записи остаётся приватным» (CLAUDE.md) запрещает писать имя файла пользователя в лог: «только длина и идентификаторы». Приём пишет. Строка идёт на общем шаге заведения задачи, то есть и для записей из Telegram, и для записей по HTTP.

Найдено проходом review-specs ревью дизайна change 2026-08-11-fix-http-handler-tests; отчёт триажа — openspec/changes/archive/2026-08-11-fix-http-handler-tests/review/triage.md. Правка вынесена сюда решением человека на контрольной точке: задача была про проверки.

Воспроизведение

grep -n 'file_name' internal/service/transcribe.go

Отдаёт 107: "file_name", fileName, — поле в s.logger.Info("Creating transcribe job", ...). Уровень Info, то есть в боевой конфигурации строка пишется. Приходит fileName из CreateJobFromApi и CreateJobFromTelegram без изменений — это то самое имя, которое дал отправитель.

Затрагивает

  • internal/service/transcribe.go, функция createTranscribeJob — журнальные строки шага заведения;
  • docs/conventions/logging.md — если после правки понадобится строка про то, чем имя заменяется.

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

  • Имени, данного отправителем, нет ни в одной журнальной строке приёма. Оракул — прогон приёма с записью, чьё имя содержит опознаваемую строку, и grep этой строки по перехваченному журналу: ничего не найдено.
  • Идентификатор файла, его расширение и длина в журнале остаются: по ним путь записи прослеживается. Оракул — тот же перехваченный журнал, file_id и size на месте.

Рамки

Прочие журнальные строки проекта здесь не пересматриваются. Полная сверка журнала с запретами — отдельная работа; эта задача закрывает названный инвариантом случай.