# 🔬 Имя копии в каталоге записи без обращения к базе

- **Тип:** research
- **Категория:** Очередь — Разведка о той же раскладке каталога данных, и цена ответа растёт с каждой уложенной записью
- **Зачем:** Имена копий вида <ULID><ext> без базы не читаются: по каталогу на диске не сказать ни чья запись, ни какого она уровня, а раскладка объявлена необратимой, и цена решения растёт с каждой уложенной записью.
- **Теги:** review-2026-08-23

Копии записи лежат именами вида `<ULID><расширение>` в каталоге записи. По
каталогу на диске не сказать ни чья запись, ни какого уровня копия: имя читается
только вместе с базой.

Пока на боевом сервере записей нет вовсе (стадия «стройка»), это не мешает.
Цена растёт с каждой уложенной записью: раскладка каталога данных объявлена
необратимой, и переименование задним числом
стоит прохода по всему каталогу и по всем ссылкам в базе.

Разведка отвечает не «переименовать ли», а «нужна ли читаемость без базы вообще»
— и во что обойдётся её отсутствие, когда записи пойдут живым потоком.

Нашёл триаж ревью change `2026-08-23-storage-without-pocketbase`.

## Вопрос

Вопроса два, и оба об одном имени копии.

1. Нужно ли имени копии нести что-то, по чему запись узнаётся без обращения к
   базе, и какой ценой это берётся сейчас против той, что придётся заплатить
   потом?
2. Допустимо ли, что имя копии выводится из строки журнала арифметикой, и если
   нет — чем платить за невыводимость, не потеряв порядок имён?

Второй вопрос пришёл прогоном ревью `config-test-headers-login` 2026-08-23, и
выводимость там уже установлена: `TestProbeStorageNameDerivesFromRecordID` даёт
на `record_id 01m0pwf0r1cp9v0zt83w79ccbn` имя копии
`01m0pwf0r1cp9v0zt83w79ccbp.mp3`, ровно `инкремент(record_id)+ext`, а
`TestProbeDerivationRate` — 49 из 50 приёмов подряд. Журнал несёт `record_id` и
`file_ext`, то есть имя собирается без обращения к каталогу данных, и инвариант
«Имя файла на диске задаёт сервис, а в журнал не идёт» соблюдён по букве, но не
по назначению. Триаж тест не воспроизводил. Спрашивается поэтому не факт, а его цена.

Первый вопрос от этого дешевеет: часть читаемости без базы уже есть — просто не
по назначению и не решением.

Оба вопроса решает одна разведка, и отдельной записи второй не получает —
решение владельца. Довод: раскладка каталога данных объявлена необратимой, и два
ответа порознь дали бы две необратимые правки одного каталога.

## Куда ляжет ответ

Записка `docs/research/`, а решение — в
[ADR о раскладке каталога данных](../../docs/adr/). Изменение самой раскладки
необратимо и берётся отдельной задачей после ответа.

## Рамки

Раскладка каталога данных этой разведкой не меняется — она объявлена
необратимой, и правка её решается человеком. Боевой каталог данных не трогать.
