закрыта задача no-user-filename-in-log
This commit is contained in:
@@ -20,7 +20,6 @@
|
||||
|
||||
## Очередь
|
||||
|
||||
- [🐞 Не писать имя файла пользователя в журнал](items/no-user-filename-in-log.md) — Приём кладёт имя файла, данное пользователем, в журнал контейнера на каждой принятой записи — инвариант приватности объявляет это критическим и необратимым.
|
||||
- [🐞 Убирать записанный файл, когда приём отказал на середине](items/orphan-file-on-failed-intake.md) — Отказ чтения метаданных и отказ записи на диск оставляют файл в каталоге хранения без задачи и без учёта: сопоставить его не с чем, удалять приходится руками.
|
||||
- [🧹 Задать таймауты обращениям к внешним сервисам](items/external-call-timeouts.md) — Ни у Telegram, ни у Object Storage, ни у SpeechKit нет таймаута: молчащий собеседник держит шаг конвейера до истечения часового захвата.
|
||||
- [🧹 Перевести хранилище и файлы записей на встроенный PocketBase](items/pocketbase-storage.md) — Записи, метаданные и файлы лежат порознь, и владелец не видит их ничем, кроме консоли на сервере: панель PocketBase покажет их, только если они переедут к ней. Заодно переписывается захват задачи: сегодня это два запроса без транзакции, а падающая всегда задача падает вечно.
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
# 🐞 Не писать имя файла пользователя в журнал
|
||||
|
||||
- **Тип:** 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` на месте.
|
||||
|
||||
## Рамки
|
||||
|
||||
Прочие журнальные строки проекта здесь не пересматриваются. Полная сверка
|
||||
журнала с запретами — отдельная работа; эта задача закрывает названный
|
||||
инвариантом случай.
|
||||
|
||||
Reference in New Issue
Block a user