Постановка готова. Цель: пользователь видит, что пункт перенесён, например «Перенесён из 2.3 в 1.2», а не «без изменений» или «изменён» на новом месте. Если пункт при переносе правили, правки показываются в той же записи. Сдвиг нумерации из-за вставки или удаления других пунктов переносом не считается.
Решения. Правило переноса: пары берутся в порядке новой версии, выписываются их старые индексы, пары из наибольшей возрастающей подпоследовательности «стоят на месте», остальные «перенесены»; при нескольких самых длинных берётся лексикографически наименьшая, то есть на месте остаётся как можно больше пунктов, а при равенстве — те, что стояли раньше. Модель: перенесённый пункт — обёртка над результатом сравнения пары, поэтому статус один, а правки доступны HTML-отчёту без дублирования типов. Сводка: каждый пункт ровно в одном счётчике, перенесённый, в том числе изменённый, считается только в «перенесено». Пункт без номера: «Перенесён в 3.1» или просто «Перенесён». Удалённый пункт ставится после ближайшего предшествующего пункта, стоящего на месте; перенесённые опорой не служат.
План: в модуле выравнивания новый класс перенесённого пункта, функция поиска стоящих на месте пунктов с описанным правилом ничьей, учёт в порядке документа, в размещении удалённых и в сводке со счётчиком; в текстовом отчёте шесть точных форматов записи, новая сводка и вынесенные функции тела записей; в описании CLI слово «перенесённые». Критерии: зелёный make check, ошибка mypy при убранной ветке нового класса, поиск стоящих на месте на семи примерах, вставка раздела не даёт переносов, [А, Б] → [Б, А], перенос с правкой и только с форматированием, размещение удалённого, точные форматы отчёта и вывод CLI на тестовой паре, скорость на 500 пунктах. Вне задачи: HTML, перестановка слов внутри пункта, правила сопоставления, автонумерация Word, место переноса без номера.