Одно лишнее экранирование в восьми диаграммах
Какое-то время восемь записей этого блога показывали посреди фразы семь знаков —, причём внутри диаграмм. Не тире. Сам текст. С тех пор это исправлено на всех языках.
81 строка, 91 вхождение. В прозе тех же восьми записей — ни одного.
Одно экранирование лишнее
Диаграммы — это встроенный SVG, записанный в тело статьи. Подпись, которой нужно тире, несёт —, и браузер делает из этого тире, ровно как в абзаце.
Хранилось же —. Браузер послушно сделал из этого знаки, которые по буквам пишут сущность, и нарисовал их. Проза осталась нетронутой, потому что никогда не проходила через то, что добавляло лишнее экранирование; проходили только подписи, и только в тех записях, чьи подписи создавались тогда.
Причина мелкая и скучная. Записать стоит другое: почему она так долго стояла у всех на виду и что её прекратило.
Проверка её видела и говорила другое
Есть проверка, которая меряет, помещается ли подпись диаграммы в свою картинку. Она сообщала об этих подписях уже несколько дней — как о слишком широких.
Каковыми они и были. Подпись, рисующая семь знаков вместо одного, примерно на сорок пять пикселей шире, чем задумано, так что измерение было верным и сообщение было верным. Неверным был вывод, который делает читатель такого сообщения. Число говорило, что геометрия тесная. Правда была в том, что текст оказался не тем, чем выглядел.
Такова форма этого дела. Проверка отвечает на вопрос, который ей дали, и не может сообщить, что вопрос был не тот. Здесь ничего не измерили неверно; измерение просто было о другой задаче, чем та, на которую походило.
Что её нашло
Отрисовать одну диаграмму и посмотреть на неё. Chromium без окна, один снимок, десять секунд. Сущность стояла в третьей строке картинки, буквами того же размера, что и всё остальное.
Починкой стала миграция, заменяющая & на & для закреплённого списка имён сущностей и только внутри блоков <svg class="dg">, чтобы амперсанд, задуманный как амперсанд, им и остался. Всё, чего в списке не было, сообщалось и оставлялось в покое, а не угадывалось. Все 81 строка исправлены на каждом языке; в блоге остались лишь те вхождения, которые эта запись цитирует намеренно.
Что здесь обобщается
Всякая автоматическая проверка в этом проекте меряет что-то числовое, потому что числа — это то, что программа умеет сравнивать. Ни одна не видит, что картинка стала бессмыслицей, что рамка пуста или что слово написано по буквам там, где нужен знак.
Правило, которое из этого вышло, короткое: после любого изменения диаграммы отрисовать один и посмотреть на него — на языке, которому нужно больше всего места. Оно уже поймало две вещи, которых не могло поймать никакое измерение: эту и пустую рамку, оставшуюся после того, как из неё вытащили подпись.