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