- предел длины компонента (255 байт) проверяется в BuildLinks до первой операции с ФС: ни каталога, ни ссылки при отказе не создаётся - причина пустого предпросмотра считается на показе (ReviewData.PreviewError) и печатается в панели действий и в карточке Telegram: у задачи без записанной причины взять её больше неоткуда
3.6 KiB
3.6 KiB
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— своя ветка ответа, как у коллизии.- Внешних зависимостей, схемы БД и конфига изменение не трогает.