Releases: chekazoid/legal-entity-marks
Release list
Legal Entity Marks 1.8.2
Обновляйте поверх, затем пересканируйте статьи.
Исправлено: маркировка обычных оборотов речи
Симптом: в статье появился дисклеймер про нежелательную организацию, хотя такого названия в тексте нет.
Причина: Минюст перечисляет альтернативные наименования прямо внутри записи реестра:
Подготовка данных вытаскивает такие фрагменты в алиасы, и алиас совпал с обычной фразой . В блоке дисклеймеров при этом печатается полное название из реестра, поэтому связь между текстом и меткой была неочевидной. Тем же страдали названия стран
Теперь алиас из двух-трёх общеупотребительных слов ищется только в кавычках.
Фразы из четырёх и более слов под правило не подпадают. Алиасы, вписанные редакцией на странице «Бренды СМИ», тоже не затрагиваются: человек выбрал их осознанно.
Замер по всему реестру: правило затронуло 20 алиасов из 1008 (2%), все просмотрены вручную.
Проверено на живом WordPress 7.0.1 / PHP 8.3: ложное срабатывание ушло, все настоящие упоминания находятся по-прежнему.
Legal Entity Marks 1.8.1
Обновляйте поверх, затем пересканируйте статьи.
Исправлено: после обновления на 1.8.0 бренды не помечались
Симптом: плагин обновлён, пересканирование проведено, а издания в статье всё равно без меток.
Причина в порядке действий при обновлении: алиасы применялись до того, как в список добавлялись новые комплектные правила (DOXA, «Вёрстка», «7х7», «Радио Свобода»). Правила доезжали строкой позже, но применять их было уже некому: метка версии выставлена, повторно блок не выполняется. В итоге свежие бренды не попадали в реестр до следующего обновления реестров.
Порядок исправлен. Воспроизведено на живом WordPress: при симуляции обновления со старой версии алиасы оставались пустыми, после правки все четыре бренда их получают, а сканирование реального фрагмента статьи находит три издания.
Исправлено: кавычки в дисклеймерах
В блоке дисклеймеров названия с прямыми кавычками выводились как "Вёрстка Медиа", а после первой попытки починки как “. Теперь прямые кавычки из реестра приводятся к ёлочкам: «Вёрстка Медиа».
Если после обновления всё ещё не помечается
Проверьте на странице Маркировка → Бренды СМИ, что напротив нужного издания в колонке «Записей» стоит не ноль, и что правило включено. Ноль означает, что текст в «Искать в названии» не совпадает с названием в реестре.
Legal Entity Marks 1.8.0
Обновляйте поверх, затем пересканируйте статьи.
Новое: страница «Бренды СМИ»
В реестре Минюста издания записаны юридическими названиями («Интернет-издание "Вёрстка Медиа"»), а в статьях их называют брендом («Вёрстки»). Раньше это соответствие было зашито в плагин. Теперь оно редактируется в админке: Маркировка → Бренды СМИ.
- Список предзаполнен 61 правилом для известных изданий, редакция дополняет и правит его под себя, может отключать и удалять.
- Три поля у правила: искать в названии (кусок официального названия из реестра), обычные алиасы (ловятся с кавычками и без, для различимых имён вроде DOXA), только в кавычках (для брендов-обычных слов: издание «Холод» пометится, «на улице холод» нет). Падежи внутри кавычек подхватываются сами.
- В таблице видно, сколько записей реестра нашло каждое правило. Ноль подсвечивается красным: значит, текст не совпадает с реестром и правило молча не работает. Именно такая опечатка ломала правило «Вёрстки».
- Правила хранятся в базе и переживают обновление плагина. Новые комплектные правила при обновлении добавляются, ваши правки не затираются.
Спорные фрагменты («Донбасс», «Азов», «Сеть», «Джамаат») намеренно не включены в предзаполнение: там ложная пометка хуже пропуска. При необходимости добавьте их сами.
Исправлено: кавычки между словами названия
«Радио Свобода» из реестра не совпадала с «Радио „Свобода“» в статье. Теперь между словами названия допускаются пробелы, переносы строк и кавычки.
Причина оказалась глубже: в коде стояла замена разделителя, которая никогда не срабатывала (preg_quote не экранирует пробел). То есть все многословные названия требовали ровно один пробел между словами: ни переноса строки, ни двойного пробела.
Исправлено: порча данных при сохранении форм
Значения из $_POST не проходили wp_unslash, поэтому прямые кавычки в названиях («ОВД-Инфо», "Вёрстка Медиа") сохранялись со слэшами и правила переставали находить записи. Затрагивало также правку сущностей реестра и запрещённых доменов. Исправлено во всех местах.
Проверено на живом WordPress 7.0.1 / PHP 8.3.
Legal Entity Marks 1.7.1
Обновляйте поверх, затем пересканируйте статьи.
Три причины, по которым издания не помечались
С боевого сайта: в статье не помечались DOXA, «Вёрстка» и «7×7», хотя все три есть в реестре и действуют. Причины оказались разные.
- Падежи в кавычках. «Вёрстки», «Вёрстке» не совпадали с «Вёрстка»: организации не склонялись. Теперь для брендов в кавычках берутся словоформы. Кавычки уже гарантируют, что речь об издании, поэтому склонение внутри них безопасно. Это исправление системное и работает для всех кавычечных брендов.
- Короткое название. В реестре «Новостной портал «DOXA»», но алиас не извлекался: генератор берёт содержимое кавычек только от 5 символов, а DOXA это 4.
- Разные начертания. В реестре «7х7» с кириллической х (U+0445), в статье «7×7» со знаком умножения (U+00D7), встречается и латинская x. Добавлены все три.
Молчаливая ошибка в курируемом списке
Правило для «Вёрстки» было записано с ёлочками, а в реестре название в прямых кавычках, поэтому правило не находило запись и просто ничего не делало. Теперь wp lem brand-aliases предупреждает о правилах, не нашедших ни одной записи.
Почему нет массового авто-извлечения алиасов
Из 163 действующих организаций с фрагментом в кавычках большинство это местные организации Свидетелей Иеговы, названные по городам: «Орел», «Печора», «Ухта», «Сыктывкар». Автоматические алиасы превратили бы каждое упоминание этих городов в «экстремистскую организацию», поэтому список остаётся курируемым.
Проверено на реальном тексте статьи: до фикса сканер не находил ни одного из трёх изданий, после находит все три.
Legal Entity Marks 1.7.0
Обновляйте поверх установленной версии, плагин не удаляйте.
Реестры больше не устаревают молча
Встроенные JSON это стартовый снимок и офлайн-фолбэк, а не постоянный источник. Раньше свежесть держалась только на недельном WP-Cron: если он на сайте отключён или сломан, реестры не обновлялись вообще, и никто об этом не узнавал. Для плагина, который ставят на чужие сайты, это тихая потеря точности.
- Обновление плагина само подтягивает реестры. При смене версии ставится разовая фоновая задача обновления из источников, чтобы сайт не ждал недельного крона. Админку не тормозит.
- Предупреждение об устаревании. Если реестры не обновлялись дольше 30 дней или ни разу, в админке появляется предупреждение со ссылкой «Обновить сейчас» и подсказкой про
wp lem fetch --source=all. Обычная причина такой ситуации это неработающий WP-Cron. Порог настраивается фильтромlem_stale_days. - Сразу после установки предупреждение не показывается: там обновление уже стоит в очереди и проходит за минуты.
Проверено на живом WordPress 7.0.1 / PHP 8.3: после симуляции обновления плагина заход в админку ставит задачу обновления через минуту; предупреждение появляется только в тех состояниях, где данные действительно устарели.
Напоминание для тех, кто собирает плагин
Перед релизом стоит обновлять комплектные данные, чтобы новые установки стартовали с актуального снимка:
python3 bin/update-registries.py
Legal Entity Marks 1.6.5
Обновляйте поверх установленной версии, плагин не удаляйте. После обновления пересканируйте статьи.
Исправлено: на статьях из классического редактора маркировались все упоминания подряд
Симптом: в режиме «иноагенты только в цитатах» имя всё равно получало метку, хотя человека никто не цитировал, и пересканирование не помогало.
Причина: классический редактор хранит текст без тегов <p>, абзацы задаются пустыми строками, а <p> расставляет wpautop уже при выводе. Разбор на блоки делил текст только по закрывающим тегам, не находил их и считал всю статью одним блоком. Одна ссылка в конце (например, «Источник: Медиазона») делала «контекстом» весь текст, и под маркировку попадало любое имя в статье.
На контенте Gutenberg (с тегами <p>) этого не было, поэтому баг долго не проявлялся.
- Пустая строка теперь тоже считается границей абзаца.
- Служебные куски без видимого текста (комментарии блоков) отбрасываются, чтобы не сбивать счёт соседей у цитат.
wp lem scan --post_idочищает кеш статьи: раньше эта ветка выходила раньше очистки, и страница продолжала отдаваться из кеша со старой маркировкой. Это же объясняет, почему точечный перескан «не помогал».
Проверено на живом WordPress 7.0.1 / PHP 8.3 на контенте классического редактора: до фикса контекстом был весь текст, после фикса in_context=False и ноль сносок. В tests/test_context.php добавлены две регрессии.
Legal Entity Marks 1.6.4
Обновляйте поверх установленной версии, плагин не удаляйте.
Переключатель из трёх положений в блоке «Маркировка»
Раньше в блоке было две галочки с противоположным смыслом, зависящим от того, в каком списке оказалась сущность. Галочку «промаркировать всё равно» легко было принять за возврат в автоматический режим, а она делала обратное: принудительно помечала имя вопреки правилу «только в цитатах». Со стороны это выглядело так, будто маркировка не отключается.
Теперь на каждое упоминание один явный выбор:
- Автоматически - по общим правилам плагина. В подписи сразу видно, что правила дают сейчас: «сейчас помечается» или «сейчас не помечается: нет цитаты или ссылки».
- Всегда помечать - пометить вопреки общим правилам.
- Не помечать - убрать ложное срабатывание.
«Автоматически» не записывает переопределение вовсе, поэтому возврат под общие правила однозначен. Два других положения действуют только для своей статьи.
Формат хранения (_lem_overrides) не менялся: ранее выставленные значения читаются как прежде. Если на какой-то статье осталась принудительная маркировка из старого интерфейса, откройте статью и выберите «Автоматически».
Проверено на живом WordPress 7.0.1 / PHP 8.3: все три положения сохраняются и дают ожидаемый результат на фронтенде.
Legal Entity Marks 1.6.3
Обновляйте поверх установленной версии, плагин не удаляйте. После обновления обязательно пересканируйте статьи: признак «упомянут в цитате» вычисляется во время сканирования, на старых результатах метки останутся прежними.
Исправлено: закавыченный термин больше не считается цитатой
Симптом: при включённом режиме «иноагенты только в цитатах» имя всё равно получало метку, хотя человека никто не цитировал.
Причина: триггер «прямая речь в кавычках» срабатывал на любом закавыченном фрагменте от 15 символов. В абзаце вида «Минюст объявил Иванова «иностранным агентом»» закавычен термин (19 символов), из-за чего весь абзац засчитывался как цитата, а фамилия в нём попадала в контекст и помечалась.
Теперь цитатой считается только фрагмент, похожий на фразу: от 25 символов и минимум 4 слова.
| Фрагмент | Было | Стало |
|---|---|---|
| «иностранным агентом» | цитата | не цитата |
| «нежелательной» | не цитата | не цитата |
| «Я не согласен с этим решением суда» | цитата | цитата |
Настоящая прямая речь работает по-прежнему. В tests/test_context.php добавлены две регрессии на закавыченные термины.
Воспроизведено и проверено на реальном тексте статьи: до фикса имя попадало в контекст и помечалось, после фикса нет, а в контексте остаётся только абзац со ссылкой на источник.
Legal Entity Marks 1.6.2
Обновляйте поверх установленной версии, плагин не удаляйте. После обновления запустите полный скан заново.
Исправлено: тело статьи оставалось без маркировки на темах с Yoast
Симптом: мета-описание (og:description) метку получало, а тело статьи нет.
Причина: SEO-плагин в wp_head генерирует описание через get_the_excerpt(), а он для авто-выдержки прогоняет фильтр the_content по обрезанному тексту раньше вывода тела. Плагин выставлял флаг однократного применения на этом раннем вызове и настоящее тело потом пропускал.
the_content, вызванный при генерации выдержки или внутриwp_head(Yoast, schema, соцкарточки), теперь пропускается: не помечается и не расходует право пометить тело.- Флаг применения ведётся отдельно по каждой записи.
- Поддержка блочных и классических тем сохранена.
Брендовые алиасы применяются сами при обновлении
Раньше при обновлении файлов на непустой базе новые брендовые алиасы (Медуза, Дождь и т.п.) не докатывались до ручной команды wp lem brand-aliases или обновления реестров. Симптом: у «Телеканал Дождь» aliases: [], из-за чего «Дождь» в кавычках не помечался.
Теперь при смене версии плагина алиасы применяются автоматически при первом заходе в админку. Отдельно запускать ничего не нужно.
Проверено на живом WordPress 7.0.1 / PHP 8.3: баг с Yoast воспроизведён и устранён, автоприменение срабатывает после обновления, регрессий нет.
Legal Entity Marks 1.6.1
Обновляйте поверх установленной версии, плагин не удаляйте. После обновления запустите полный скан заново.
Ручные звёздочки редактора теперь распознаются
Редакции по традиции ставят *, ** или *** сразу после имени или названия как пометку иноагента. Раньше в статьях, где сущность упомянута только одинокой фамилией со звёздочкой (без полного имени рядом) или брендом-словом без кавычек, сканер её пропускал.
Теперь звёздочка сразу после термина считается подтверждением: такое упоминание помечается всегда, в обход анти-однофамилец и требования кавычек для брендов-слов. Пример из практики: «в telegram-канале Монгайт** сообщила» и «продюсер телеканала Дождь**» теперь ловятся, даже если полного имени и кавычек в статье нет.
- При выводе плагин заменяет ручные звёздочки своей сноской, чтобы не было задвоения «Монгайт***».
- Одинокая рискованная фамилия («Белый») со звёздочкой всё равно не помечается без полного имени, чтобы не плодить ложные срабатывания на обычных словах.
- На статьях без звёздочек никакого замедления: проверка включается только при наличии
*в тексте.
Проверено на живом WordPress 7.0.1 / PHP 8.3 на реальной статье про арест журналистки телеканала «Дождь» Анны Монгайт.
Примечание: если в статьях есть ручная сноска-легенда («* - признан иностранным агентом»), она остаётся в тексте как обычный абзац. Плагин снимает звёздочки у имён и добавляет свой блок дисклеймеров, но произвольный абзац-легенду не трогает: его при желании удаляет редактор.