закрыта задача 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/orphan-file-on-failed-intake.md) — Отказ чтения метаданных и отказ записи на диск оставляют файл в каталоге хранения без задачи и без учёта: сопоставить его не с чем, удалять приходится руками.
|
||||||
- [🧹 Задать таймауты обращениям к внешним сервисам](items/external-call-timeouts.md) — Ни у Telegram, ни у Object Storage, ни у SpeechKit нет таймаута: молчащий собеседник держит шаг конвейера до истечения часового захвата.
|
- [🧹 Задать таймауты обращениям к внешним сервисам](items/external-call-timeouts.md) — Ни у Telegram, ни у Object Storage, ни у SpeechKit нет таймаута: молчащий собеседник держит шаг конвейера до истечения часового захвата.
|
||||||
- [🧹 Перевести хранилище и файлы записей на встроенный PocketBase](items/pocketbase-storage.md) — Записи, метаданные и файлы лежат порознь, и владелец не видит их ничем, кроме консоли на сервере: панель PocketBase покажет их, только если они переедут к ней. Заодно переписывается захват задачи: сегодня это два запроса без транзакции, а падающая всегда задача падает вечно.
|
- [🧹 Перевести хранилище и файлы записей на встроенный 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