Skip to content

Commit 587191a

Browse files
committed
chore: improve add-answer skill to check duplicated answers
1 parent efbdd39 commit 587191a

1 file changed

Lines changed: 20 additions & 1 deletion

File tree

.claude/skills/add-answer/SKILL.md

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ description: "Генерация или улучшение ответа на в
5656
Пайплайн выполняется строго по фазам. Сначала полностью финализируется русский вариант (ответ + метаданные), и только потом он дословно переносится на украинский и английский.
5757

5858
```
59+
ФАЗА 0: Проверка пересечений → сверить тему с каталогом вопросов; при критическом дубле — стоп и запрос решения
5960
ФАЗА 1: RU-ответ (.md) → создать/улучшить эталонный ответ
6061
ФАЗА 2: RU-метаданные → tags, category, level, structure
6162
ФАЗА 3: UKR и ENG → дословный перевод .md + метаданных на основе финального RU
@@ -64,6 +65,24 @@ description: "Генерация или улучшение ответа на в
6465

6566
---
6667

68+
### ФАЗА 0 — Проверка пересечений тем (overlap check)
69+
70+
Прогоняется **до** генерации/улучшения ответа. Цель — не дать двум вопросам превратиться в дубликаты друг друга. База вопросов — плотный граф связанных тем, поэтому частичные касания нормальны; ловим только **критические** дубли.
71+
72+
**Держи проверку дешёвой: сравнивай метаданные, а не тексты ответов.** Тема каждого вопроса исчерпывающе описана полями `name` + `tags` + `category` + `structure` в `src/assets/content/rus/questions.ts`. Этого достаточно, чтобы поймать смысловой дубль. **Не читай для этого `.md`-файлы других вопросов** — это лишние сотни тысяч токенов без пользы.
73+
74+
1. **Собери компактный каталог** из `rus/questions.ts`: для каждого вопроса — `id`, `name`, `tags`, `category` и пункты `structure[].name`. Достаточно одного прохода по файлу (например, `grep -nE "id:|name:|tags:|category:" src/assets/content/rus/questions.ts` + беглый просмотр `structure` соседей по теме). Целевой вопрос из каталога исключи.
75+
2. **Сравни целевую тему с каталогом** по смыслу (не по точному совпадению строк): та же концепция под другим названием, тот же набор `tags`, пункты `structure`, которые пересказывают ядро другого вопроса.
76+
3. **Классифицируй каждое совпадение:**
77+
- **Критическое** — стержневая концепция совпадает с другим вопросом, ИЛИ ≳ половины пунктов `structure` целевого вопроса дублируют ядро другого. Два ответа будут в основном пересказывать друг друга.
78+
- **Соседнее (норма)** — общие теги/категория, но угол вопроса другой (например, «замыкания» vs «цепочка областей видимости»). Это ожидаемо, блокировать не нужно.
79+
4. **Если есть критические пересечения — СТОП.** Не генерируй ответ. Покажи пользователю компактный отчёт и **дождись решения**:
80+
- какие вопросы пересекаются (`id` + `name`);
81+
- что именно дублируется (конкретные пункты `structure` / концепция);
82+
- рекомендация с вариантами: **слить** вопросы в один; **сузить** охват текущего так, чтобы он дополнял, а не повторял (и явно разделить, какой вопрос владеет какой под-темой); либо **оставить оба с кросс-ссылкой** «см. также», сознательно не переобъясняя общую часть во вторичном.
83+
- Дальше действуй по выбору пользователя.
84+
5. **Если только соседние пересечения** — не останавливайся. Зафиксируй их и упомяни одной строкой в отчёте ФАЗЫ 4 (при уместности предложи кросс-ссылку), затем продолжай ФАЗУ 1.
85+
6786
### ФАЗА 1 — Русскоязычный ответ (эталон)
6887

6988
1. **Поиск вопроса**: Найди указанный вопрос (по ID или названию) в `src/assets/content/rus/questions.ts`.
@@ -120,7 +139,7 @@ description: "Генерация или улучшение ответа на в
120139

121140
### ФАЗА 4 — Отчёт
122141

123-
Кратко сообщи пользователю итог по каждому языку: создан новый файл ответа или улучшен существующий; какие метаданные (`tags` / `category` / `level` / `structure`) были изменены и почему. Одним компактным блоком, без воды.
142+
Кратко сообщи пользователю итог по каждому языку: создан новый файл ответа или улучшен существующий; какие метаданные (`tags` / `category` / `level` / `structure`) были изменены и почему. Одним компактным блоком, без воды. Если в ФАЗЕ 0 нашлись **соседние** пересечения — добавь строку с их `id` и, при уместности, предложением кросс-ссылки.
124143

125144
---
126145

0 commit comments

Comments
 (0)