- предел длины компонента (255 байт) проверяется в BuildLinks до первой операции с ФС: ни каталога, ни ссылки при отказе не создаётся - причина пустого предпросмотра считается на показе (ReviewData.PreviewError) и печатается в панели действий и в карточке Telegram: у задачи без записанной причины взять её больше неоткуда
64 lines
4.9 KiB
Markdown
64 lines
4.9 KiB
Markdown
## ADDED Requirements
|
|
|
|
### Requirement: Панель действий при пустом предпросмотре называет причину
|
|
|
|
Панель действий SHALL называть причину, когда предпросмотр раскладки пуст, а не
|
|
печатать общее «Подтверди источник, чтобы получить превью раскладки». Первой
|
|
SHALL идти причина, посчитанная **на показе** — отказ построения этого
|
|
предпросмотра: она относится к текущему эффективному плану, тогда как записанная
|
|
при последнем переходе после смены источника устаревает, а у задачи, пришедшей в
|
|
`review` без записанной причины, её нет вовсе. Записанная причина SHALL
|
|
использоваться, когда посчитанной нет. Общий текст SHALL оставаться только там,
|
|
где нет ни той, ни другой — источник действительно ещё не подтверждён.
|
|
|
|
Построение предпросмотра НЕ SHALL двигать состояние задачи: причина считается на
|
|
чтении и наружу отдаётся значением, а не записью.
|
|
|
|
Те же две причины в том же порядке SHALL показываться и в карточке Telegram,
|
|
когда плана в ней нет: обе поверхности ревью объясняют отсутствие команды
|
|
«Применить» одинаково. Команда, упершаяся в непомещающееся имя, SHALL отвечать
|
|
конфликтом, а не сбоем сервера.
|
|
|
|
Требование не трогает доступность команды «Применить»: она по-прежнему следует
|
|
наличию предпросмотра. Речь о том, что человеку говорят, когда предпросмотра нет:
|
|
пустой предпросмотр наступает и от коллизии путей, и от непомещающегося имени, и
|
|
от невалидного плана, а текст сегодня во всех случаях один и в трёх из четырёх
|
|
неверен.
|
|
|
|
#### Scenario: Непомещающееся имя названо в панели действий
|
|
|
|
- **GIVEN** загрузка в `review` с причиной «имя не помещается», источник
|
|
подтверждён, предпросмотр пуст
|
|
- **WHEN** человек открывает экран ревью
|
|
- **THEN** панель действий печатает причину отказа, а не предложение подтвердить
|
|
источник, и команда «Применить» недоступна
|
|
|
|
#### Scenario: Причина не записана в состоянии — считается на показе
|
|
|
|
- **GIVEN** загрузка пришла в `review` без записанной причины (нет матча), а её
|
|
название не помещается в имя файла
|
|
- **WHEN** человек открывает экран ревью
|
|
- **THEN** панель действий называет длину имени, хотя в состоянии причины нет, и
|
|
состояние при этом не меняется
|
|
|
|
#### Scenario: После смены источника показывается свежая причина
|
|
|
|
- **GIVEN** загрузка в `review` с записанной причиной «имя не помещается», и
|
|
человек выбрал другой источник
|
|
- **WHEN** экран перестраивается
|
|
- **THEN** показывается причина, посчитанная для нового плана, а не записанная
|
|
при прошлом переходе
|
|
|
|
#### Scenario: Карточка Telegram называет ту же причину
|
|
|
|
- **GIVEN** загрузка в `review`, плана в карточке нет
|
|
- **WHEN** карточка отправляется или обновляется
|
|
- **THEN** в ней есть строка с причиной, по которой план не построился
|
|
|
|
#### Scenario: Источник не подтверждён — текст прежний
|
|
|
|
- **GIVEN** загрузка в `review` без записанной причины, без посчитанной и без
|
|
предпросмотра
|
|
- **WHEN** человек открывает экран ревью
|
|
- **THEN** панель действий печатает общее предложение подтвердить источник
|