## Why

Название бывает длиннее, чем файловая система разрешает назвать файл. Сегодня
раскладка узнаёт об этом от ядра, уже начав работу: задача падает в `failed`, а
владелец видит вместо карточки ревью английскую строку `file name too long`.
Состояние `failed` терминальное — починить случай нечем, хотя чинится он одной
подсказкой на ревью, ровно как занятый целевой путь.

## What Changes

- Раскладка проверяет длину имени **до** первой операции с файловой системой:
  каждый компонент целевого пути (папка тайтла, папка сезона, имя файла) обязан
  помещаться в предел, который держат распространённые файловые системы Linux.
- Не помещается — раскладка отказывается целиком, не создав ни одного каталога и
  ни одной ссылки, и задача уходит в `review` со своей причиной («имя не
  помещается»), а не в `failed` с текстом системной ошибки.
- Владелец правит название подсказкой на ревью и применяет заново — путь тот же,
  что при коллизии цели.

## Capabilities

### New Capabilities

Новых нет.

### Modified Capabilities

- `file-layout`: новое требование о непомещающемся целевом имени — проверка до
  файловых операций, отказ целиком, уход в `review` с доменной причиной.
- `review`: панель действий при пустом предпросмотре печатает записанную причину
  вместо общего «Подтверди источник». Пустой предпросмотр наступает от коллизии,
  от непомещающегося имени и от невалидного плана — текст один на всех и в трёх
  случаях из четырёх неверен.

## Impact

- `internal/layout` — проверка длины компонентов в `BuildLinks` (чистая функция,
  до `mkdir`/`link`) и своя доменная ошибка вместо системной.
- `internal/worker` — ветка перевода задачи в `review` по этой ошибке, рядом с
  веткой коллизии цели; свой код причины для корреляции.
- Веб-UI и Telegram — панель действий и карточка ревью называют причину, по
  которой плана нет; причина считается на показе, поэтому относится к текущему
  плану. Ревью показало, что взять её из записанного поля недостаточно: на самом
  частом входе оно пусто.
- `internal/httpapi` — трансляция новой доменной ошибки в конфликт, а не в сбой
  сервера; `internal/tgbot` — своя ветка ответа, как у коллизии.
- Внешних зависимостей, схемы БД и конфига изменение не трогает.
