- пять из урожая change 2026-08-11-fix-http-handler-tests, тег review-2026-08-11; утечка имени файла в журнал поставлена первой строкой очереди - опечатка transcibe дописана в json-api-for-spa: текст ошибки — часть необратимого контракта, и в одиночку он не правится
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на месте.
Рамки
Прочие журнальные строки проекта здесь не пересматриваются. Полная сверка журнала с запретами — отдельная работа; эта задача закрывает названный инвариантом случай.