имя файла отправителя убрано из журнала приёма

- расширение приводится к перечню известных форматов прежде метки метрики:
  страница метрик открыта, и хвост имени уезжал на неё дословно
- проверки приёма перехватывают все три потока журнала и читают реестр метрик,
  каждая падает при снятии того, что сторожит
This commit is contained in:
av
2026-08-11 16:37:58 +03:00
parent ffa36e96c7
commit bd6001cd8d
18 changed files with 1797 additions and 20 deletions
@@ -0,0 +1,45 @@
# ADR-2026-08-11. Наружу расширение выходит только приведённым к перечню
- **Дата:** 2026-08-11
- **Источник:** [openspec/changes/archive/2026-08-11-no-user-filename-in-log/design.md](../../openspec/changes/archive/2026-08-11-no-user-filename-in-log/design.md), раздел `Decisions`
## Решение
Расширение принятой записи приводится к закрытому перечню известных форматов
прежде, чем уйти меткой метрики; всё, чего в перечне нет, заменяется одним общим
значением. Имя файла на диске при этом не трогается — там расширение остаётся
тем, каким пришло.
Дословно из источника:
> Из трёх способов человек выбрал средний. Отвергнуты: оставить как есть и завести
> задачу — канал жил бы до неё, а закрытие этой задачи читалось бы как
> «починено»; приводить расширение везде, включая имя файла на диске, —
> раскладка каталога записей объявлена необратимой и меняется решением человека,
> а не по ходу починки журнала.
## Почему
Расширение берётся из имени, которое дал отправитель, дословно: имя
`запись.тайное-слово` отдаёт `тайное-слово`, а `Разговор с Петровым 11.08`
`08`. Оно уходило меткой метрики, а страница метрик отдаётся без проверки
отправителя. Канал оказался шире того, ради которого задача заводилась: журнал
читает владелец сервиса, метки — кто угодно, и то же значение оседает в
хранилище метрик. Тем же каналом множество значений метки становится
неограниченным: их задаёт анонимный отправитель.
Отказ от нормализации на диске — не экономия, а граница обратимости: формат
имени файла и раскладка `data/files` объявлены необратимыми, и меняются они
решением человека под свою задачу, а не попутно с починкой журнала.
## Цена
- Перечень форматов стал нормой и требует ведения: формат, который сервис
начнёт принимать, до внесения в перечень будет виден в метрике как общее
значение, неотличимо от чужого хвоста.
- Форма метки размера принятой записи изменилась — ведущая точка пропала
(`.mp3` стало `mp3`). Ряды, собранные до выкладки, перестают пополняться.
- Настоящий формат записи, попавшей в общее значение, остаётся видимым только в
журнале — по полю пути строки приёма и полю формата строки конвертации.
- Хвост расширения по-прежнему уходит в журнал внутри пути файла. Это остаток,
он записан в [../security.md](../security.md), и своей задачи у него пока нет.