Хотел: поставить в очередь тред для X — три части: 190, 169 и 232 знака. Каждая короче предела площадки в 280, и по устройству треда так и надо — части уходят в ленту по отдельности, и предел держит каждая сама.
Споткнулся: кнопка «Готов» не нажималась, а пост, отправленный на утверждение, падал с жалобой на тот самый предел 280. Счётчик под полем показывал 591 — сумму трёх частей вместе с нумерацией, то есть длину всего рендера целиком. Публикатор, который уносит тред на площадку, и инструмент, которым текст поста кладёт агент, мерили иначе: длина треда — это длина самой длинной его части. Одна граница жила в четырёх местах и считалась двумя формулами, и неправы оказались как раз те две копии, что стоят раньше всех.
Решил: длину рендера теперь считает одна функция, и для треда она сама берёт самую длинную часть — отсюда её читают и панель, и счётчик под полем. Проверка перед утверждением меряет тем же вызовом, раз рендер уже на руках. Новой копии расчёта в коде не появилось: обе неправые заменены одним и тем же вызовом.
Чем плачу: проверка стала мягче. Ни «Готов», ни утверждение больше не смотрят на общий объём треда — пять частей по 280 знаков пройдут молча. Это сознательно, площадке важна часть, а не сумма, но держат теперь границу не типы, а два теста в обе стороны: тред, который проходит по самой длинной части, и тред с одной частью за пределом, который не проходит. И цена самого дефекта: нашёл его не тест, а пост, вставший поперёк очереди 28 сентября.
#отказ