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:
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: Вежливые обрамления
|
||||
|
||||
**Что:** "Буду рад помочь", "Не стесняйтесь обращаться", "Надеюсь, это поможет", "Если возникнут вопросы..." — в конце каждого сообщения.
|
||||
|
||||
Reference in new issue
Block a user