feat(skills): ai-text-lint ловит потерю голоса и делает самоаудит

- Зачем:
  - линтер умел только вычитать маркеры, а текст без авторского голоса
    палится не хуже текста с em dash'ами: после чистки оставался
    безлико правильный результат.
  - у прогона не было критерия завершения, поэтому проверка сводилась
    к тому, что бросилось в глаза.
- Что:
  - T03 развёрнут в три срабатывания (перечисление без вывода, безличные
    конструкции, абстрактная оценка) с требованием назвать, что конкретно
    добавить, вместо совета «добавить позицию автора».
  - добавлен шаг самоаудита поверх закрытого каталога: находки X01, X02
    с тестом «нельзя записать ни под один ID» и разрешением нулевого
    результата.
  - Шаг 2 получил критерий «каждый паттерн применён к тексту», quick scan
    сведён к паттернам с механической детекцией.
  - S04 стал единственным владельцем однородности ритма; удалены дубль
    T03b, неоперационализируемый T03e, шаг «Ответить на вопросы» и девять
    перефразировок одной ветки в description.
- Проверка:
  - тестов на скиллы в репозитории нет, прогон ручной: вызвать скилл
    на абзаце AI-прозы и на коротком сообщении в мессенджер.
  - git show --stat HEAD: SKILL.md и references/patterns.md.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Dmitriy DementievandClaude committed 2026-08-21 10:35:34 +03:00
1 parent cb600bcaa8
commit 061a8d062b
2 files changed
+52 -23

No files matched your search

@@ -7,6 +7,9 @@
- **Примеры** — конкретные срабатывания (RU/EN)
- **Severity** — по контексту: article / message / resume
- **Рекомендация** — что делать при срабатывании
- **Детекция** (не у всех) — как искать механически: подстрока, счёт, порог
Паттерн может делиться на подпункты с буквенными ID (`T03a`, `T03b`): это отдельные срабатывания с общей причиной. В отчёт они идут раздельно, под своим буквенным ID. Severity наследуется от родителя, если у подпункта не оговорена своя.
Severity: 🔴 high (явный маркер, бросается в глаза), 🟡 medium (подозрительно в скоплении), 🟢 low (мелочь, но в сумме вносит вклад).
@@ -318,17 +321,18 @@ AI-модели же подставляют типографически кор
| message | 🔴 high |
| resume | 🟡 medium |
### S04: Однородная длина абзацев/пунктов
### S04: Однородный ритм (предложения, абзацы, пункты)
**Что:** Все абзацы примерно одной длины (3-4 предложения). Все bullet points одинаковой структуры и длины.
**Почему:** Человеческий текст имеет вариативную ритмику. Короткий абзац после длинного — нормально. У AI — ровная "решётка".
**Что:** Ровная "решётка" на любом уровне: предложения внутри абзаца одной длины, абзацы одной длины (3-4 предложения), все bullet points одинаковой структуры и длины.
**Почему:** Человеческий текст имеет вариативную ритмику. Короткое предложение после длинного, короткий абзац после длинного — нормально. У AI решётка ровная на всех уровнях сразу.
**Примеры маркеров:**
- Три-четыре предложения подряд по 8-9 слов, все построенные одинаково
- Пять bullet points, каждый ровно по два предложения
- Четыре абзаца по 50-60 слов каждый
**Рекомендация:** Варьировать длину осознанно. Добавить один короткий пункт (одно предложение) и один длинный.
**Рекомендация:** Варьировать длину осознанно. Добавить один короткий пункт (одно предложение) и один длинный. Внутри абзаца — дать одному предложению развернуться, а следующее оборвать в три слова.
**Подсказка по детекции:** Два аспекта однородности:
1. *Длина.* Посчитать слова в каждом пункте списка или абзаце. Если разброс длин менее 20% от среднего — это паттерн. Например, пять пунктов по 12, 11, 13, 12, 11 слов — подозрительно ровно.
1. *Длина.* Посчитать слова в единицах одного уровня: предложения внутри абзаца, абзацы, пункты списка. Если разброс длин менее 20% от среднего — это паттерн. Например, пять пунктов по 12, 11, 13, 12, 11 слов — подозрительно ровно. Абсолютная длина роли не играет, важен разброс: абзац из восьмисловных предложений так же однороден, как из двадцатисловных.
2. *Синтаксис.* AI часто строит предложения по одной схеме: подлежащее → сказуемое → дополнение, подлежащее → сказуемое → дополнение. Человек чередует порядок слов, начинает с обстоятельства, вставляет вводные конструкции, использует инверсию.
| Контекст | Severity |
@@ -421,14 +425,28 @@ AI-модели же подставляют типографически кор
| message | 🟡 medium |
| resume | 🔴 high |
### T03: Отсутствие личной позиции / стерильная нейтральность
### T03: Нет авторского голоса (стерильная нейтральность)
**Что:** Текст описывает предмет исключительно "со стороны", без мнения автора, личного опыта, субъективных оценок.
**Что:** Текст описывает предмет исключительно "со стороны", без мнения автора, личного опыта, субъективных оценок. Ровный, гладкий, ничей.
**Почему:** AI по умолчанию стремится к нейтральности. Человек на Хабре скажет «мне этот подход не нравится, потому что...» или «мы обожглись на этом».
**Примеры маркеров:**
- «Данный подход имеет как преимущества, так и ограничения.» (без указания, какие конкретно и что автор думает)
- «Существуют различные мнения по этому вопросу.»
**Рекомендация:** Добавить конкретную позицию автора. Не обязательно резкую — но личную.
Важно: убрать маркеры — половина работы. Текст, из которого вычистили em dash'и и «в современном мире», но не вернули голос, палится не хуже исходного, просто по-другому: он становится безлико-правильным. T03 — главный паттерн, где рекомендация не «убрать», а «добавить».
**Что искать — три отдельных срабатывания:**
**T03a. Перечисление вместо вывода.** Позиции разложены ровно, а что автор про это думает — не сказано. Граница с S06: S06 владеет самой симметричной подачей (секции, «с одной стороны / с другой стороны»), T03a — отсутствием вывода после неё. Симметрия с честным «мне ближе первое, вот почему» — это S06 без T03a.
- Маркер: «Существуют различные мнения по этому вопросу.» / «Оба варианта имеют право на жизнь.»
- С голосом: «Подход рабочий, но мы на нём дважды теряли данные при ребалансе.»
**T03b. Нет первого лица там, где оно уместно.** Безличные конструкции и «рекомендуется» в тексте про собственный опыт.
- Маркер: «Рекомендуется использовать пул соединений.»
- С голосом: «Мы держим пул на 20, больше упирается в базу.»
**T03c. Абстрактная оценка вместо конкретной.** Автор вроде бы высказался, но проверить или оспорить нечего. В резюме этот же случай идёт по R01, там своя severity.
- Маркер: «Это вызывает вопросы», «решение выглядит спорным», «требует внимания»
- С голосом: «Непонятно, что будет на 10к rps: мы не проверяли.»
**Рекомендация:** Для каждой находки назвать, **что конкретно добавить**: чьё это мнение, какой случай из опыта, какая цифра, какой сломанный прод. Рекомендация вида «добавить позицию автора» бесполезна — она возвращает пользователю ту же абстракцию, которую скилл только что нашёл. Позиция не обязана быть резкой, но обязана быть личной и проверяемой.
| Контекст | Severity |
|----------|----------|
@@ -436,6 +454,8 @@ AI-модели же подставляют типографически кор
| message | 🟢 low |
| resume | 🟢 low |
Исключение: **T03b в переписке — 🔴 high.** Голос в чате не нужен, поэтому T03a и T03c там 🟢 low, но безличное «рекомендуется» в сообщении коллеге — сильный маркер: живые люди в чате так не пишут.
### T04: Вежливые обрамления
**Что:** "Буду рад помочь", "Не стесняйтесь обращаться", "Надеюсь, это поможет", "Если возникнут вопросы..." — в конце каждого сообщения.