` без атрибута `citation_card` | не срабатывает |
+| Отрицательный | обычный XML-тег `` | не срабатывает |
+
+#### Регулярное выражение: `vertexaisearch\.cloud\.google\.com/grounding-api-redirect`
+
+| Тип | Образец | Ожидание |
+|---|---|---|
+| Прямой | ссылка `vertexaisearch.cloud.google.com/grounding-api-redirect/AbCdEf` в тексте (схема `https://` опущена намеренно) | срабатывает |
+| Отрицательный | `vertexaisearch.cloud.google.com` без пути `/grounding-api-redirect` | не срабатывает |
+| Отрицательный | обычная страница продукта Google `cloud.google.com/vertex-ai-search` | не срабатывает |
+
+---
+
+### 5. Прочие маркеры разметки
+
+#### Регулярное выражение: `\battributableIndex\b`
+
+| Тип | Образец | Ожидание |
+|---|---|---|
+| Прямой | `{"attributableIndex": 0}` | срабатывает |
+| Отрицательный | слово «attributable» в обычном тексте о праве и атрибуции | не срабатывает |
+| Граничный | `attributableIndexes` (с окончанием) | не срабатывает (граница слова) |
+
+#### Регулярное выражение: `\[citation:\d+\]`
+
+| Тип | Образец | Ожидание |
+|---|---|---|
+| Прямой | `Согласно исследованию [citation:3], результаты неоднозначны.` | срабатывает |
+| Отрицательный | `[citation needed]` (Википедийный шаблон) | не срабатывает |
+
+#### Регулярное выражение: `\[(?:attached_file|web):\d+\]` — скобочная форма ссылок инструментов (добавлено в v3.1)
+
+| Тип | Образец | Ожидание |
+|---|---|---|
+| Прямой | `См. [attached_file:1] в ответе.` | срабатывает |
+| Прямой | `Цитата [web:3] из поиска.` | срабатывает |
+| Отрицательный | `[attach:1] другой формат` | не срабатывает |
+| Отрицательный | `обычная сноска [1]` | не срабатывает |
+| Граничный | `[attached_file:1][web:2][web:3]` (тройное) | срабатывает три раза |
+
+#### Регулярное выражение: `\b(?:INSERT_SOURCE_URL(?:_\d+)?|URL_HERE|PASTE_\w+_URL_HERE)\b` — placeholder-URL (добавлено в v3.1)
+
+| Тип | Образец | Ожидание |
+|---|---|---|
+| Прямой | `Вставьте INSERT_SOURCE_URL_30 сюда.` | срабатывает |
+| Прямой | `См. URL_HERE в шаблоне.` | срабатывает |
+| Прямой | `PASTE_SPOTIFY_TRACK_URL_HERE` | срабатывает |
+| Отрицательный | `insert source url в обычной фразе` (без подчёркиваний) | не срабатывает |
+| Отрицательный | `вставьте URL сюда` (обычное слово) | не срабатывает |
+| Граничный | `INSERT_SOURCE_URL URL_HERE PASTE_TRACK_URL_HERE` (тройное) | срабатывает три раза |
+
+#### Регулярное выражение: `\b(?:19\|20)\d{2}-(?:0[1-9]\|1[0-2]\|[Xx]{2})-[Xx]{2}\b` — placeholder-даты (добавлено в v3.1, сужено в v3.7.0)
+
+| Тип | Образец | Ожидание |
+|---|---|---|
+| Прямой | `дата обращения: 2025-XX-XX.` | срабатывает |
+| Прямой | `\|date=2022-11-XX \|publisher=…` | срабатывает |
+| Прямой | `access-date=2025-xx-xx` (строчные) | срабатывает |
+| Отрицательный | обычная дата `2025-11-30` | не срабатывает |
+| Отрицательный | артикул `2025-XX-XXL` (нет границы слова) | не срабатывает |
+| Отрицательный | диапазон `2024-2025` без дня | не срабатывает |
+| Отрицательный | код изделия `1234-56-xx` (год не 19xx/20xx) | не срабатывает |
+| Отрицательный | серия `3985-77-XX` (год не 19xx/20xx) | не срабатывает |
+| Отрицательный | невозможный месяц `2025-13-XX` | не срабатывает |
+| Граничный | `2025-XX-XX и 2022-11-XX в одном списке литературы` | срабатывает два раза |
+
+---
+
+### 6. Маркеры новых платформ (добавлено в v2.5)
+
+#### Регулярное выражение: `\[\^\d+\^\]` — сноска Microsoft Copilot
+
+| Тип | Образец | Ожидание |
+|---|---|---|
+| Прямой | `Рынок вырос на 12%[^1^] по данным отчёта.` | срабатывает |
+| Прямой | `[^10^]` (двузначный номер) | срабатывает |
+| Отрицательный | `Обычная сноска Markdown[^1] определена ниже.` (одна `^`) | не срабатывает |
+| Граничный | `[^1^][^2^][^10^]` (тройное совпадение) | срабатывает три раза |
+| Граничный | пустая строка | не срабатывает |
+
+#### Регулярное выражение: `turn\d+(?:image|news|video|ref)\d+` — мультимедиа-инструменты ChatGPT (добавлено в v3.1)
+
+| Тип | Образец | Ожидание |
+|---|---|---|
+| Прямой | `Фото turn0image0 в тексте.` | срабатывает |
+| Прямой | `turn0news0 в середине` | срабатывает |
+| Прямой | `turn0video0` и `turn0ref0` | срабатывает |
+| Отрицательный | `turn left and image again` (обычная английская фраза) | не срабатывает |
+| Отрицательный | `turnaround news` | не срабатывает |
+| Граничный | `turn0image0 turn0news0 turn0video0` (тройное) | срабатывает три раза |
+
+#### Регулярное выражение: `【\d+(?::\d+)?†source】` — метка OpenAI Assistants
+
+| Тип | Образец | Ожидание |
+|---|---|---|
+| Прямой | `Согласно политике【1†source】, доступ разрешён.` | срабатывает |
+| Прямой | `【4:2†source】` (формат с подындексом) | срабатывает |
+| Отрицательный | `Декоративные уголки 【примечание】 без кинжала.` | не срабатывает |
+| Граничный | пустая строка | не срабатывает |
+
+#### Регулярное выражение: `citeturn\d+[a-z]+\d+` — потоковая метка ChatGPT
+
+| Тип | Образец | Ожидание |
+|---|---|---|
+| Прямой | `Текст citeturn0file0 со ссылкой.` | срабатывает |
+| Прямой | `citeturn2search5` в середине строки | срабатывает |
+| Отрицательный | `Прошу процитировать, затем turn to page 5.` (с пробелами) | не срабатывает |
+| Граничный | `citeturn0file0 citeturn2search5` (двойное совпадение) | срабатывает два раза |
+
+#### Регулярное выражение: `\]\(sandbox:/mnt/data/` — сломанная ссылка ChatGPT
+
+| Тип | Образец | Ожидание |
+|---|---|---|
+| Прямой | `[Скачать отчёт](sandbox:/mnt/data/report.xlsx)` | срабатывает |
+| Отрицательный | `Развернули окружение sandbox на /mnt/data сервера.` | не срабатывает |
+| Граничный | `[A](sandbox:/mnt/data/a.csv) [B](sandbox:/mnt/data/b.csv)` | срабатывает два раза |
+
+#### Регулярное выражение: `citegenerated-reference-identifier` — сгенерированный идентификатор (добавлено в v3.1)
+
+| Тип | Образец | Ожидание |
+|---|---|---|
+| Прямой | `Текст citegenerated-reference-identifier в выводе.` | срабатывает |
+| Отрицательный | `generated reference identifier через пробел` (разделено) | не срабатывает |
+
+---
+
+### 7. Невидимые и служебные символы (добавлено в v2.6)
+
+#### Регулярное выражение: `[\ue200-\ue204]` — служебные символы цитат ChatGPT
+
+| Тип | Образец | Ожидание |
+|---|---|---|
+| Прямой | `Amazon Nova даёт ряд возможностей \ue200cite\ue202turn0search3\ue201.` (символы невидимы при чтении) | срабатывает |
+| Прямой | `скрытый блок \ue203служебная пометка\ue204 в тексте` | срабатывает |
+| Отрицательный | обычный текст без служебных символов | не срабатывает |
+| Отрицательный | символ иконки `\ue000` из шрифтового набора (другая часть области частного использования) | не срабатывает |
+| Граничный | `\ue200cite\ue202turn0search3\ue201` | срабатывает три раза (по числу символов) |
+| Граничный | пустая строка | не срабатывает |
+
+#### Регулярное выражение: `(?m)^\s*?think>\|\s*$` — остаток тега рассуждения (сужено в v3.7.0: только на границе строки)
+
+| Тип | Образец | Ожидание |
+|---|---|---|
+| Прямой | `Сначала разберу условия задачи… Ответ: 42.` | срабатывает |
+| Прямой | ` Итоговый ответ ниже.` (оторванная закрывающая половина в начале строки) | срабатывает |
+| Отрицательный | `Я думаю (think), что это норма.` | не срабатывает |
+| Отрицательный | тег `` другого формата | не срабатывает |
+| Отрицательный | `У некоторых моделей есть служебный тег для черновика.` (упоминание посреди строки) | не срабатывает |
+| Граничный | `а` | срабатывает два раза |
+
+---
+
+### 8. Сцепки «Источник+цифра» (добавлено в v2.7)
+
+#### Регулярное выражение: `[A-Za-z\u0410-\u042f\u0430-\u044f\u0401\u0451)]\+\d+(?=[A-Z\u0410-\u042f\u0401][A-Za-z\u0410-\u042f\u0430-\u044f\u0401\u0451&.\-]*(?: [A-Z\u0410-\u042f\u0401][A-Za-z\u0410-\u042f\u0430-\u044f\u0401\u0451&.\-]*){0,3}\+\d)` — ошибка отрисовки сносок ChatGPT (сужено в v3.7.0: нужны два сегмента «+число»)
+
+| Тип | Образец | Ожидание |
+|---|---|---|
+| Прямой | `Стандарт создан комитетом ISO. IT Governance+3ISO+3ISO+3.` | срабатывает |
+| Прямой | `адаптирован к облачным средам. Microsoft Learn+3Google Cloud+3.` | срабатывает |
+| Отрицательный | `стандарт C++11 и C++14 поддерживаются` | не срабатывает |
+| Отрицательный | `формула x+1 в каждой строке` | не срабатывает |
+| Отрицательный | `оценка 5+ за контрольную` | не срабатывает |
+| Отрицательный | `Wikipedia+1.` (одиночная форма — только ручная проверка) | не срабатывает |
+| Отрицательный | `связка Excel+1С в резюме` | не срабатывает |
+| Отрицательный | `пакет Word+2Excel для офиса` | не срабатывает |
+| Отрицательный | `тариф Про+3Максимум на месяц` | не срабатывает |
+| Отрицательный | `Excel+1С и формула x+1 рядом` | не срабатывает |
+| Граничный | `Wikipedia+1Реестр+2Архив+3` | срабатывает два раза (сцепки между соседями) |
+
+---
+
+### 9. Метки file_search (добавлено в v2.8)
+
+#### Регулярное выражение: `turn\d+file\d+` — идентификаторы фрагментов файлов OpenAI file_search
+
+| Тип | Образец | Ожидание |
+|---|---|---|
+| Прямой | `Вывод обрывается метками fileciteturn0file2turn0file6 в конце.` | срабатывает |
+| Прямой | `одиночная метка turn0file11 после цитаты` | срабатывает |
+| Отрицательный | `turn the file over` | не срабатывает |
+| Отрицательный | `return file 5 to the archive` | не срабатывает |
+| Граничный | `fileciteturn0file2turn0file6` (сдвоенная метка) | срабатывает два раза |
+
+---
+
+### 10. Метки цитирования Gemini (добавлено в v2.9)
+
+#### Регулярное выражение: `\[cite_start\]` — метка начала цитируемого фрагмента Gemini
+
+| Тип | Образец | Ожидание |
+|---|---|---|
+| Прямой | `[cite_start]Компания основана в 1994 году и с тех пор…` | срабатывает |
+| Прямой | `Вывод содержит [cite_start] в середине строки.` | срабатывает |
+| Отрицательный | `функция cite_start() в коде без скобок вокруг` | не срабатывает |
+| Отрицательный | `[cite start] с пробелом вместо подчёркивания` | не срабатывает |
+| Граничный | `[cite_start]Первое. [cite_start]Второе.` | срабатывает два раза |
+
+#### Регулярное выражение: `\[[Cc]ite:\s?\d+(?:,\s?\d+)*\]` — ссылка Gemini на фрагмент источника (расширено в v3.2: перечисление нескольких фрагментов)
+
+| Тип | Образец | Ожидание |
+|---|---|---|
+| Прямой | `Выручка выросла на 12% [cite: 8] по итогам года.` | срабатывает |
+| Прямой | `Согласно отчёту [Cite: 12], план выполнен.` | срабатывает |
+| Прямой (v3.2) | `Работала с клиентами в медицине и недвижимости [cite: 19, 20, 21].` | срабатывает |
+| Отрицательный | `[citation needed] (Википедийный шаблон)` | не срабатывает |
+| Отрицательный | `[citation:3] — метка DeepSeek, у неё своё выражение` | не срабатывает |
+| Отрицательный | `команда \cite{ivanov2024} в LaTeX` | не срабатывает |
+| Граничный | `[cite: 1][cite: 2][Cite: 3]` | срабатывает три раза |
+
+---
+
+### 11. Символы нулевой ширины (добавлено в v2.9)
+
+#### Регулярное выражение: `[\u200b\u200c\u2060\ufeff]\|(? 🚀 **Инновации:** Мы добавили пакетную обработку, горячие клавиши и офлайн-режим. Данное обновление безусловно является свидетельством нашего стремления к качеству. Более того, **оно представляет собой идеальное место для синергии**, обеспечивая бесшовный, интуитивно понятный и мощный пользовательский опыт — гарантируя эффективность от новичков до профессионалов. Эксперты отрасли считают, что этот проект закладывает фундамент для будущих побед. Надеюсь, этот текст будет полезен для вашей презентации! :contentReference[oaicite:0]{index=0}
+
+**После:**
+
+> Мы добавили пакетную обработку, горячие клавиши и офлайн-режим.
+
+**Что исправлено:**
+
+- Удалена метка `:contentReference[oaicite:0]{index=0}` (`chatbot-artifacts.md`, раздел A.1).
+- Удалены эмодзи и чрезмерный жирный шрифт (паттерны #16, #17).
+- Удалены остатки реплик «Надеюсь, …» (паттерн #22).
+- Убраны раздутая значимость и усреднение (паттерны #1, #2).
+- Убрано правило трёх «бесшовный, интуитивно понятный и мощный» (паттерн #13).
+- Удалены размытые атрибуции «Эксперты считают» (паттерн #6).
+- Удалены ложные диапазоны «от новичков до профессионалов» (паттерн #15).
+- Факты не дописаны: в «После» остались только утверждения, которые
+ были в «До» (принцип 6).
+
+---
+
+### Пример 2: Биографическая статья с галлюцинацией источника
+
+**До:**
+
+> Иван Петров — выдающийся российский физик, чей вклад в квантовую механику навсегда изменил эту область. Он опубликовал свои основные работы в Trudy MFTI (DOI:10.5555/vipusk.2020.42), где раскрыл революционные принципы запутанности. Его исследования широко освещались в ведущих научных изданиях, что подчёркивает значимость его наследия для будущих поколений учёных.
+
+**Что не так (без правки, для проверки):**
+
+- DOI вымышленный (префикс 10.5555 зарезервирован для тестов и не выдаётся реальным журналам).
+- «Trudy MFTI» — ошибочная транслитерация, такого журнала нет.
+- «Революционные принципы запутанности» — раздутая значимость.
+- «Широко освещались» — размытая атрибуция.
+- «Выдающийся российский физик» — усреднение.
+- «Подчёркивает значимость его наследия» — преувеличение значимости.
+
+**После проверки:** Если автор не может предоставить настоящие ссылки и подтвердить факты, статью нельзя публиковать. Текст переписывается на минимально проверяемое утверждение:
+
+> Информация о работах Ивана Петрова требует проверки. Список публикаций не подтверждён в открытых базах данных.
+
+---
+
+### Пример 3: Текст с длинным тире в художественной прозе
+
+**До:**
+
+> Утро было такое — свежее, прозрачное, тонкое. Город ещё спал — только редкие шаги отдавались эхом. Она шла медленно — потому что некуда было торопиться.
+
+**Анализ:**
+
+- Длинное тире в каждом предложении — признак?
+- Признаков из `chatbot-artifacts.md` нет.
+- Машинная лексика (паттерн #10) отсутствует.
+- Раздутой значимости нет.
+- Только тире в художественном описании.
+
+**Вывод:** Это **ложное срабатывание**. Длинное тире — нормальный авторский приём в художественной прозе. См. `false-positives.md` пункт 1. Текст не править.
+
+---
+
+### Пример 4: Юридический документ с канцеляритом
+
+**До:**
+
+> На основании настоящего договора и в соответствии с действующим законодательством, в целях обеспечения исполнения обязательств, Стороны обязуются осуществлять деятельность, направленную на достижение указанных в Приложении 1 целей.
+
+**Анализ:**
+
+- Канцелярит присутствует (паттерн #8).
+- Конкретики мало.
+
+**Вывод:** Это юридический документ. Канцелярит — обязательная норма жанра. См. `false-positives.md` пункт 5. Текст не править на «человечность» — потеряет юридическую силу.
+
+---
diff --git a/skills/humanizer-ru/references/test-fixtures.md b/skills/humanizer-ru/references/test-fixtures.md
new file mode 100644
index 000000000..c8af7d200
--- /dev/null
+++ b/skills/humanizer-ru/references/test-fixtures.md
@@ -0,0 +1,126 @@
+# Проверочные примеры для регулярных выражений
+
+Новый файл в v2.3. Справочник разбит на части: эталонные пары «образец / результат» для всех регулярных выражений из `chatbot-artifacts.md` собраны в файлах из таблицы ниже. Эти образцы используются для проверки регулярных выражений перед публикацией изменений в скилле.
+
+Каждое регулярное выражение проходит три проверки:
+
+- **Прямой образец** — выражение должно сработать.
+- **Отрицательный образец** — похожий, но не относящийся к ИИ текст. Выражение не должно сработать.
+- **Граничный образец** — пустая строка, многократные совпадения, юникод. Выражение не должно ломаться.
+
+Автоматический прогон — `python3 scripts/check_markers.py` (он же в CI). Ручной вариант для PowerShell приведён в конце файла.
+
+
+---
+
+## Состав файла
+
+Справочник разбит на части: содержимое живёт в файлах из таблицы, а этот файл остаётся входом. Нумерация разделов сохранена: остальные файлы проекта ссылаются на неё.
+
+| Раздел | Где читать |
+|---|---|
+| Разделы 1–15 — образцы для регулярных выражений: прямой, отрицательный и граничный на каждое выражение | `test-fixtures-cases.md` |
+| Полные пары «до / после» для содержательной правки: маркетинг, биография, художественная проза, юридический текст | `test-fixtures-pairs.md` |
+| Эмпирическая проверка выражений и принцип использования | этот файл, разделы ниже |
+
+## Эмпирическая проверка регулярных выражений
+
+**Основной способ (с v2.6) — автоматический прогон.** Все выражения из `chatbot-artifacts.md` проверяются скриптом на стандартной библиотеке Python — три уровня на каждое выражение (прямой, отрицательный, граничный образец плюс многократные совпадения):
+
+```bash
+python3 scripts/check_markers.py
+```
+
+Скрипт запускается в CI (`.github/workflows/regex-check.yml`) на каждом PR, затрагивающем `scripts/` или файлы с маркерами. Локальный запуск перед релизом обязателен. При добавлении нового выражения образцы добавляются в скрипт и в раздел «Образцы для регулярных выражений» выше.
+
+**Альтернативный способ — PowerShell.** Ручная проверка для среды Windows без Python:
+
+```powershell
+$test = @{
+ oaicite_full = @{
+ pattern = ':contentReference\[oaicite:\d+\]\{index=\d+\}'
+ positive = 'Согласно :contentReference[oaicite:0]{index=0}, цифры верны.'
+ negative = 'Упомянуто слово oaicite в статье об ИИ.'
+ }
+ oai_citation = @{
+ pattern = 'oai_citation:\d+‡'
+ positive = 'oai_citation:5‡Wiki источник'
+ negative = 'oai_citation без двоеточия'
+ }
+ turn_search = @{
+ pattern = 'turn\d+search\d+'
+ positive = 'turn0search0'
+ negative = 'turn around and search'
+ }
+ utm_chatgpt = @{
+ pattern = '[?&]utm_source=chatgpt\.com'
+ positive = 'https://example.com/?utm_source=chatgpt.com'
+ negative = 'utm_source=chatgpt.com упомянут в тексте'
+ }
+ utm_openai = @{
+ pattern = '[?&]utm_source=openai'
+ positive = 'https://docs.example.com/?utm_source=openai'
+ negative = 'OpenAI utm_source без знака запроса'
+ }
+ attached_file = @{
+ pattern = 'attached_file:\/\/'
+ positive = 'attached_file:///tmp/file.pdf'
+ negative = 'См. прикрепленный файл (русский текст)'
+ }
+ grok_card = @{
+ pattern = 'grok_card:\/\/'
+ positive = 'grok_card://1234567890'
+ negative = 'карточка Grok без специальной разметки'
+ }
+ vertexai = @{
+ pattern = 'vertexaisearch\.cloud\.google\.com/grounding-api-redirect'
+ positive = 'ссылка vertexaisearch.cloud.google.com/grounding-api-redirect/abc в тексте'
+ negative = 'cloud.google.com/vertex-ai-search'
+ }
+ copilot_caret = @{
+ pattern = '\[\^\d+\^\]'
+ positive = 'Рынок вырос на 12%[^1^] по отчёту'
+ negative = 'Обычная сноска Markdown[^1] ниже'
+ }
+ assistants_source = @{
+ pattern = '【\d+(?::\d+)?†source】'
+ positive = 'политика【1†source】разрешает'
+ negative = 'декоративные уголки 【примечание】'
+ }
+ cite_turn = @{
+ pattern = 'citeturn\d+[a-z]+\d+'
+ positive = 'текст citeturn0file0 ссылка'
+ negative = 'процитируй, затем turn to page 5'
+ }
+ sandbox_link = @{
+ pattern = '\]\(sandbox:/mnt/data/'
+ positive = '[Скачать](sandbox:/mnt/data/r.xlsx)'
+ negative = 'окружение sandbox на /mnt/data сервера'
+ }
+}
+
+foreach ($name in $test.Keys) {
+ $t = $test[$name]
+ $pos = $t.positive -match $t.pattern
+ $neg = $t.negative -match $t.pattern
+ $ok = $pos -and (-not $neg)
+ $status = if ($ok) { 'OK' } else { 'FAIL' }
+ Write-Host ('{0,-18} {1} pos={2} neg={3}' -f $name, $status, $pos, $neg)
+}
+```
+
+В PowerShell-варианте приведены 12 выражений как образец ручной проверки. Полный прогон всех 38 (включая усечённые формы, невидимые символы из A.7 и A.10, метки file_search и метки Gemini) выполняет `scripts/check_markers.py` — он и считается каноническим. Тот же скрипт умеет проверять произвольный текст: `python3 scripts/check_markers.py --scan файл.md`.
+
+---
+
+## Принцип использования
+
+Если в скилл добавляется новое регулярное выражение или новый признак — он обязан получить три проверочных образца в этом файле до публикации. Файл служит автоматизированным набором тестов для регрессионной защиты.
+
+При смене флагманской модели (см. `llm-fingerprints.md`) нужно:
+
+1. Проверить, изменился ли формат вывода инструментов.
+2. Если да — добавить новые регулярные выражения с образцами.
+3. Старые регулярные выражения сохранить для текстов прежней эпохи.
+
+Принцип «без регрессий»: ни одно работающее правило не удаляется.