Skip to content

Releases: chekazoid/legal-entity-marks

Legal Entity Marks 1.8.2

Choose a tag to compare

@chekazoid chekazoid released this 25 Jul 07:15

Обновляйте поверх, затем пересканируйте статьи.

Исправлено: маркировка обычных оборотов речи

Симптом: в статье появился дисклеймер про нежелательную организацию, хотя такого названия в тексте нет.

Причина: Минюст перечисляет альтернативные наименования прямо внутри записи реестра:

Подготовка данных вытаскивает такие фрагменты в алиасы, и алиас совпал с обычной фразой . В блоке дисклеймеров при этом печатается полное название из реестра, поэтому связь между текстом и меткой была неочевидной. Тем же страдали названия стран
Теперь алиас из двух-трёх общеупотребительных слов ищется только в кавычках.

Фразы из четырёх и более слов под правило не подпадают. Алиасы, вписанные редакцией на странице «Бренды СМИ», тоже не затрагиваются: человек выбрал их осознанно.

Замер по всему реестру: правило затронуло 20 алиасов из 1008 (2%), все просмотрены вручную.

Проверено на живом WordPress 7.0.1 / PHP 8.3: ложное срабатывание ушло, все настоящие упоминания находятся по-прежнему.

Legal Entity Marks 1.8.1

Choose a tag to compare

@chekazoid chekazoid released this 25 Jul 07:00

Обновляйте поверх, затем пересканируйте статьи.

Исправлено: после обновления на 1.8.0 бренды не помечались

Симптом: плагин обновлён, пересканирование проведено, а издания в статье всё равно без меток.

Причина в порядке действий при обновлении: алиасы применялись до того, как в список добавлялись новые комплектные правила (DOXA, «Вёрстка», «7х7», «Радио Свобода»). Правила доезжали строкой позже, но применять их было уже некому: метка версии выставлена, повторно блок не выполняется. В итоге свежие бренды не попадали в реестр до следующего обновления реестров.

Порядок исправлен. Воспроизведено на живом WordPress: при симуляции обновления со старой версии алиасы оставались пустыми, после правки все четыре бренда их получают, а сканирование реального фрагмента статьи находит три издания.

Исправлено: кавычки в дисклеймерах

В блоке дисклеймеров названия с прямыми кавычками выводились как "Вёрстка Медиа", а после первой попытки починки как “. Теперь прямые кавычки из реестра приводятся к ёлочкам: «Вёрстка Медиа».

Если после обновления всё ещё не помечается

Проверьте на странице Маркировка → Бренды СМИ, что напротив нужного издания в колонке «Записей» стоит не ноль, и что правило включено. Ноль означает, что текст в «Искать в названии» не совпадает с названием в реестре.

Legal Entity Marks 1.8.0

Choose a tag to compare

@chekazoid chekazoid released this 24 Jul 16:40

Обновляйте поверх, затем пересканируйте статьи.

Новое: страница «Бренды СМИ»

В реестре Минюста издания записаны юридическими названиями («Интернет-издание "Вёрстка Медиа"»), а в статьях их называют брендом («Вёрстки»). Раньше это соответствие было зашито в плагин. Теперь оно редактируется в админке: Маркировка → Бренды СМИ.

  • Список предзаполнен 61 правилом для известных изданий, редакция дополняет и правит его под себя, может отключать и удалять.
  • Три поля у правила: искать в названии (кусок официального названия из реестра), обычные алиасы (ловятся с кавычками и без, для различимых имён вроде DOXA), только в кавычках (для брендов-обычных слов: издание «Холод» пометится, «на улице холод» нет). Падежи внутри кавычек подхватываются сами.
  • В таблице видно, сколько записей реестра нашло каждое правило. Ноль подсвечивается красным: значит, текст не совпадает с реестром и правило молча не работает. Именно такая опечатка ломала правило «Вёрстки».
  • Правила хранятся в базе и переживают обновление плагина. Новые комплектные правила при обновлении добавляются, ваши правки не затираются.

Спорные фрагменты («Донбасс», «Азов», «Сеть», «Джамаат») намеренно не включены в предзаполнение: там ложная пометка хуже пропуска. При необходимости добавьте их сами.

Исправлено: кавычки между словами названия

«Радио Свобода» из реестра не совпадала с «Радио „Свобода“» в статье. Теперь между словами названия допускаются пробелы, переносы строк и кавычки.

Причина оказалась глубже: в коде стояла замена разделителя, которая никогда не срабатывала (preg_quote не экранирует пробел). То есть все многословные названия требовали ровно один пробел между словами: ни переноса строки, ни двойного пробела.

Исправлено: порча данных при сохранении форм

Значения из $_POST не проходили wp_unslash, поэтому прямые кавычки в названиях («ОВД-Инфо», "Вёрстка Медиа") сохранялись со слэшами и правила переставали находить записи. Затрагивало также правку сущностей реестра и запрещённых доменов. Исправлено во всех местах.

Проверено на живом WordPress 7.0.1 / PHP 8.3.

Legal Entity Marks 1.7.1

Choose a tag to compare

@chekazoid chekazoid released this 24 Jul 16:22

Обновляйте поверх, затем пересканируйте статьи.

Три причины, по которым издания не помечались

С боевого сайта: в статье не помечались 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

Choose a tag to compare

@chekazoid chekazoid released this 23 Jul 10:55

Обновляйте поверх установленной версии, плагин не удаляйте.

Реестры больше не устаревают молча

Встроенные 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

Choose a tag to compare

@chekazoid chekazoid released this 23 Jul 10:01

Обновляйте поверх установленной версии, плагин не удаляйте. После обновления пересканируйте статьи.

Исправлено: на статьях из классического редактора маркировались все упоминания подряд

Симптом: в режиме «иноагенты только в цитатах» имя всё равно получало метку, хотя человека никто не цитировал, и пересканирование не помогало.

Причина: классический редактор хранит текст без тегов <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

Choose a tag to compare

@chekazoid chekazoid released this 23 Jul 09:50

Обновляйте поверх установленной версии, плагин не удаляйте.

Переключатель из трёх положений в блоке «Маркировка»

Раньше в блоке было две галочки с противоположным смыслом, зависящим от того, в каком списке оказалась сущность. Галочку «промаркировать всё равно» легко было принять за возврат в автоматический режим, а она делала обратное: принудительно помечала имя вопреки правилу «только в цитатах». Со стороны это выглядело так, будто маркировка не отключается.

Теперь на каждое упоминание один явный выбор:

  • Автоматически - по общим правилам плагина. В подписи сразу видно, что правила дают сейчас: «сейчас помечается» или «сейчас не помечается: нет цитаты или ссылки».
  • Всегда помечать - пометить вопреки общим правилам.
  • Не помечать - убрать ложное срабатывание.

«Автоматически» не записывает переопределение вовсе, поэтому возврат под общие правила однозначен. Два других положения действуют только для своей статьи.

Формат хранения (_lem_overrides) не менялся: ранее выставленные значения читаются как прежде. Если на какой-то статье осталась принудительная маркировка из старого интерфейса, откройте статью и выберите «Автоматически».

Проверено на живом WordPress 7.0.1 / PHP 8.3: все три положения сохраняются и дают ожидаемый результат на фронтенде.

Legal Entity Marks 1.6.3

Choose a tag to compare

@chekazoid chekazoid released this 23 Jul 09:11

Обновляйте поверх установленной версии, плагин не удаляйте. После обновления обязательно пересканируйте статьи: признак «упомянут в цитате» вычисляется во время сканирования, на старых результатах метки останутся прежними.

Исправлено: закавыченный термин больше не считается цитатой

Симптом: при включённом режиме «иноагенты только в цитатах» имя всё равно получало метку, хотя человека никто не цитировал.

Причина: триггер «прямая речь в кавычках» срабатывал на любом закавыченном фрагменте от 15 символов. В абзаце вида «Минюст объявил Иванова «иностранным агентом»» закавычен термин (19 символов), из-за чего весь абзац засчитывался как цитата, а фамилия в нём попадала в контекст и помечалась.

Теперь цитатой считается только фрагмент, похожий на фразу: от 25 символов и минимум 4 слова.

Фрагмент Было Стало
«иностранным агентом» цитата не цитата
«нежелательной» не цитата не цитата
«Я не согласен с этим решением суда» цитата цитата

Настоящая прямая речь работает по-прежнему. В tests/test_context.php добавлены две регрессии на закавыченные термины.

Воспроизведено и проверено на реальном тексте статьи: до фикса имя попадало в контекст и помечалось, после фикса нет, а в контексте остаётся только абзац со ссылкой на источник.

Legal Entity Marks 1.6.2

Choose a tag to compare

@chekazoid chekazoid released this 21 Jul 13:01

Обновляйте поверх установленной версии, плагин не удаляйте. После обновления запустите полный скан заново.

Исправлено: тело статьи оставалось без маркировки на темах с 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

Choose a tag to compare

@chekazoid chekazoid released this 21 Jul 12:47

Обновляйте поверх установленной версии, плагин не удаляйте. После обновления запустите полный скан заново.

Ручные звёздочки редактора теперь распознаются

Редакции по традиции ставят *, ** или *** сразу после имени или названия как пометку иноагента. Раньше в статьях, где сущность упомянута только одинокой фамилией со звёздочкой (без полного имени рядом) или брендом-словом без кавычек, сканер её пропускал.

Теперь звёздочка сразу после термина считается подтверждением: такое упоминание помечается всегда, в обход анти-однофамилец и требования кавычек для брендов-слов. Пример из практики: «в telegram-канале Монгайт** сообщила» и «продюсер телеканала Дождь**» теперь ловятся, даже если полного имени и кавычек в статье нет.

  • При выводе плагин заменяет ручные звёздочки своей сноской, чтобы не было задвоения «Монгайт*⁣**».
  • Одинокая рискованная фамилия («Белый») со звёздочкой всё равно не помечается без полного имени, чтобы не плодить ложные срабатывания на обычных словах.
  • На статьях без звёздочек никакого замедления: проверка включается только при наличии * в тексте.

Проверено на живом WordPress 7.0.1 / PHP 8.3 на реальной статье про арест журналистки телеканала «Дождь» Анны Монгайт.

Примечание: если в статьях есть ручная сноска-легенда («* - признан иностранным агентом»), она остаётся в тексте как обычный абзац. Плагин снимает звёздочки у имён и добавляет свой блок дисклеймеров, но произвольный абзац-легенду не трогает: его при желании удаляет редактор.