diff --git a/tasks/BACKLOG.md b/tasks/BACKLOG.md index 38a6454..6dc3eaa 100644 --- a/tasks/BACKLOG.md +++ b/tasks/BACKLOG.md @@ -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 покажет их, только если они переедут к ней. Заодно переписывается захват задачи: сегодня это два запроса без транзакции, а падающая всегда задача падает вечно. diff --git a/tasks/items/no-user-filename-in-log.md b/tasks/items/no-user-filename-in-log.md deleted file mode 100644 index 609bc5d..0000000 --- a/tasks/items/no-user-filename-in-log.md +++ /dev/null @@ -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` на месте. - -## Рамки - -Прочие журнальные строки проекта здесь не пересматриваются. Полная сверка -журнала с запретами — отдельная работа; эта задача закрывает названный -инвариантом случай. -