Хеш исходника
Память модуля о том, под какой текст сделан перевод. Пока хеш совпадает, перевод считается годным.
На этом держится вся очередь: именно сравнение хешей отвечает на вопрос «изменился ли оригинал с тех пор, как мы это перевели».
Правило, которое нельзя нарушать
Любая правка, меняющая то, как получается хеш, обязана выпускаться вместе с ремонтом.
Правок такого рода две разновидности, и вторая не выглядит опасной — поэтому её и пропускают:
- правка самого подсчёта хеша: нормализация, алгоритм;
- правка чтения значения, которое в этот хеш попадает.
Как на этом обожглись
В версии 6.13.0 чтение значения переключили с экранированного на сырое. Правка верная и нужная сама по себе. Но тем же чтением кормится подсчёт хеша.
Битрикс при чтении экранированного значения прогоняет его через свою обработку, и неразрывный пробел превращается в сущность. В русской типографике этот знак стоит почти в каждом заголовке.
Результат: все хеши, записанные до 6.13.0, перестали совпадать. Очередь честно доложила «ждёт перевода» по всему каталогу — то есть предложила оплатить повторный перевод того, что уже переведено. На боевом стенде это было 1411 строк состояния из 1655.
Заметить было некому: очередь выглядела работающей.
Как выпускать такую правку
- Прежнее правило вынести в отдельный метод и не удалять.
- Дописать его в список прежних правил, по которым идёт ремонт. Если правил стало несколько и они независимы — перечислить все сочетания.
- Прогнать разведку на копии боевой базы: она покажет, сколько строк затронуто.
- Выпускать вместе с ремонтом, а не «потом».
Ремонт устроен так, что ошибиться в опасную сторону не может: чинится только то, чьё расхождение объяснено прежним правилом целиком. Всё прочее остаётся нетронутым, и стереть законную жалобу очереди он не способен по устройству.
Что это значит для вас
Если после обновления модуля очередь вдруг показала на перевод весь каталог — не нажимайте «Перевести накопленное». Сначала разберитесь, почему.
Законный рост очереди после обновления возможен: например, полный пересчёт нашёл испорченные переводы, см. Сверка перевода с оригиналом. А вот «ждёт перевода» ровно по всем элементам разом — это признак разъехавшихся хешей, и лечится он ремонтом, а не оплатой.