---
name: quality-check
description: "Отдел контроля качества (ОТК). Обязательная проверка ЛЮБОГО материала перед сдачей. Три режима: контент для {{PAID_GROUP_NAME}}, GitHub публикация, Telegram пост. Триггеры: 'проверь качество', 'ОТК', 'quality check', 'прогони чеклист', 'проверка перед публикацией'."
triggers:
  - проверь качество
  - ОТК
  - quality check
  - прогони чеклист
  - проверка перед публикацией
  - финальная проверка
  - готово к публикации?
related_skills:
  - methodologist: "стандарты PDF и контента"
  - copywriter: "стиль текста и voice-dictionary"
---

# Quality Check - Отдел контроля качества (ОТК)

## Назначение

Обязательная проверка ЛЮБОГО материала перед сдачей {{OWNER_NAME}}. Это последний рубеж перед публикацией. Если ОТК не пройден - материал возвращается на доработку.

## Главный принцип: НЕ НАВРЕДИ

Любой продукт который мы выпускаем - скилл, инструкция, агент, PDF - должен быть "стерильным":
- Работает на ЛЮБОЙ ОС (macOS, Linux, Windows/WSL)
- Работает с ЛЮБОЙ моделью (Claude, GPT, Gemini, локальные)
- НЕ ломает то что уже стоит у человека (скиллы, кроны, конфиг, память)
- НЕ перезаписывает чужие файлы без явного предупреждения
- AGENT.md всегда начинает с "просканируй что уже есть" перед изменениями
- Легко устанавливается и легко удаляется (инструкция по откату)
- Зависимости: ноль или минимум, все проверяются перед использованием

Если продукт не проходит этот принцип - он не готов. Точка.

**Кто проходит ОТК:**
- Валера (Тимлид) - ОБЯЗАТЕЛЬНО перед сдачей каждого продукта
- {{AGENT_NICKNAME}} - при самостоятельном создании материалов
- Продюсер - финальная проверка собранного пакета

**Принцип: никто не проверяет сам себя.** Если Валера создал - ОТК прогоняет Продюсер или {{AGENT_NICKNAME}}. Если {{AGENT_NICKNAME}} создал - прогоняет сам, но по жёсткому чеклисту без исключений.

---

## Как запускать

Определи режим по типу материала:

| Материал | Режим |
|----------|-------|
| MD + PDF + AGENT.md для платной группы | **A: Контент** |
| Репозиторий для GitHub | **B: GitHub** |
| Пост для Telegram канала | **C: Пост** |
| Скилл или агент | **D: Скилл/Агент** |
| Любая комбинация | Прогнать ВСЕ применимые режимы |

---

## Режим A: Контент для {{PAID_GROUP_NAME}}

### A1. Комплектность файлов
```
- [ ] MD-файл (инструкция для человека, 350-500 строк)
- [ ] PDF-файл (красиво свёрстанный, Arial шрифты, кириллица)
- [ ] AGENT.md (инструкция для агента, идемпотентные шаги)
- [ ] Пост-анонс для Telegram (отдельный файл или в пакете)
```

### A2. Стиль текста
Сверить с `skills/copywriter/references/voice-dictionary.md`:
```bash
# Автоматическая проверка запрещённых паттернов
FILE="путь_к_файлу"

# Длинные тире (должны быть дефисы с пробелами)
grep -n "—" "$FILE" && echo "❌ НАЙДЕНЫ длинные тире (—)! Заменить на дефис (-)" || echo "✅ Тире ок"

# AI-мусор
grep -niE "отличный вопрос|давайте рассмотрим|рад помочь|безусловно|является|данный подход|в рамках|на сегодняшний день|в целом|таким образом" "$FILE" && echo "❌ НАЙДЕН AI-мусор!" || echo "✅ AI-мусор не найден"

# Канцелярит
grep -niE "осуществлять|посредством|в связи с тем|на основании|в соответствии|надлежащим образом|вышеуказанн" "$FILE" && echo "❌ НАЙДЕН канцелярит!" || echo "✅ Канцелярит не найден"
```

Ручная проверка:
```
- [ ] Язык разговорный, как в мессенджере, не как в журнале
- [ ] Нет пустых фраз и воды
- [ ] Конкретика: числа, команды, примеры
- [ ] Дефис (-) вместо длинного тире (—) ВЕЗДЕ
- [ ] Нет "Отличный вопрос!", "Давайте рассмотрим", "является"
```

### A3. Формат PDF
Сверить с `skills/methodologist/references/pdf-design-standard.md`:
```
- [ ] A4, портрет, белый фон
- [ ] Поля: 25-30 мм бока, 20 мм верх, 25 мм низ
- [ ] Титульная: тёмный баннер (#3D4553), синяя линия (#4A90D9)
- [ ] Шрифт: Arial (НЕ DejaVu, НЕ Helvetica) - кириллица без квадратов
- [ ] Нумерация страниц
- [ ] Колонтитул с названием серии
- [ ] Текст не вылезает за границы
- [ ] Код в блоках читаемый (моноширинный шрифт, фон #F5F5F5)
```

### A4. Контент (стандарт методолога)
Сверить с `skills/methodologist/references/pdf-content-standard.md`:
```
- [ ] Структура: Зачем → Что делаем → Пошагово → Проверка → Troubleshooting
- [ ] Время выполнения указано (20-60 минут)
- [ ] Команды в блоках кода (copy-paste ready)
- [ ] Все команды проверены через --help на реальной системе
- [ ] Чеклист "всё работает" в конце
- [ ] Troubleshooting: минимум 3 типичные проблемы
```

### A5. AGENT.md (для агента подписчика)
```
- [ ] ШАГ 0 ОБЯЗАТЕЛЕН: "Просканируй текущую систему" (ОС, модель, существующие скиллы, структура папок)
- [ ] Шаги идемпотентные (можно запустить повторно без поломок)
- [ ] Перед каждым шагом: "Проверь, не настроено ли уже"
- [ ] НЕ перезаписывает существующие файлы без предупреждения
- [ ] НЕ удаляет и НЕ меняет чужие скиллы, кроны, конфиги
- [ ] Работает с ЛЮБОЙ моделью (Claude, GPT, Gemini, локальные)
- [ ] Работает на ЛЮБОЙ ОС (macOS, Linux, Windows/WSL)
- [ ] Нет объяснений "зачем" - только "что делать"
- [ ] Все пути относительные или с переменными ($HOME, $OPENCLAW_HOME)
- [ ] Нет hardcoded значений (порты, ID, пути, имена агентов)
- [ ] Если нужны зависимости - проверить наличие, предложить установку, НЕ ставить молча
- [ ] После установки: проверка что система работает как раньше + новый функционал
```

### A5b. Совместимость и безопасность установки
```
- [ ] Продукт НЕ ломает существующую архитектуру пользователя
- [ ] НЕ конфликтует с уже установленными скиллами
- [ ] НЕ перезаписывает память, конфиги, auth-профили
- [ ] Если есть конфликт - предупредить, спросить, дать выбор
- [ ] Инструкция по УДАЛЕНИЮ продукта (откат) есть или описана
- [ ] Протестировано на "чистой" системе (только OpenClaw без кастомов)
```

### A6. Персональные данные
```bash
# Полный скан - ОБЯЗАТЕЛЬНО для КАЖДОГО файла
PATTERNS="{{OWNER_NAME}}|{{OWNER_SURNAME}}|{{OWNER_USERNAME}}"
PATTERNS+="|{{FAMILY_MEMBER_1}}|{{FAMILY_MEMBER_2}}|{{PET_NAME}}"
PATTERNS+="|{{OWNER_TELEGRAM_ID}}|{{SECOND_USER_TELEGRAM_ID}}|{{TELEGRAM_CHANNEL}}|@{{TELEGRAM_CHANNEL}}|@{{OWNER_USERNAME}}"
PATTERNS+="|{{AGENT_NICKNAME}}"
PATTERNS+="|{{CITY}}|{{DISTRICT}}|{{CITY}}|{{COUNTRY}}|georgia|{{HOMETOWN}}|{{BIRTH_CITY}}"
PATTERNS+="|операционка|ОПЕРАЦИОНКА|{{PAID_CHANNEL_ID}}|{{EXTRA_CHAT_ID}}"
PATTERNS+="|{{LOCAL_PATH}}"
PATTERNS+="|{{USERNAME_1}}|{{USERNAME_2}}"
PATTERNS+="|sk-ant-|ghp_|gho_|xai-|AIzaSy"
PATTERNS+="|[0-9]+:AA[A-Za-z0-9_-]{30}"

grep -rniE "$PATTERNS" "$FILE" \
  | grep -v "YOUR_\|example\|placeholder\|шаблон\|замените"
```
```
- [ ] Grep чистый (0 результатов) или все найденные - ложные срабатывания
- [ ] Нет реальных API ключей, токенов, паролей
- [ ] Нет реальных email адресов
- [ ] Нет абсолютных путей (/Users/...)
```

### A7. Disclaimer (если применимо)
```
- [ ] Медицина: "Не заменяет очный осмотр врача"
- [ ] Финансы: "Не является финансовой рекомендацией"
- [ ] Цвет disclaimer: приглушённый красный (#C0392B)
```

---

## Режим B: GitHub публикация

### B1. Структура репозитория
```
- [ ] README.md: описание, установка (< 2 мин), использование, примеры
- [ ] LICENSE (MIT)
- [ ] .gitignore настроен
- [ ] Нет лишних файлов (.DS_Store, .env, node_modules/, __pycache__/)
```

### B2. README качество
```
- [ ] Первый абзац: ЧТО это и ЗАЧЕМ (30 секунд чтения)
- [ ] Установка: copy-paste команды
- [ ] Примеры использования: минимум 2
- [ ] Скриншоты или GIF (если UI)
- [ ] Ссылки рабочие (проверить!)
- [ ] Язык: русский основной, английский для названий/команд
```

### B3. Безопасность (КРИТИЧНО)
Запустить полный скан из режима A6 по ВСЕМ файлам:
```bash
grep -rniE "$PATTERNS" . \
  --include="*.md" --include="*.py" --include="*.sh" \
  --include="*.json" --include="*.js" --include="*.yaml" \
  | grep -v ".git/"
```

Дополнительно:
```
- [ ] Нет абсолютных путей - только относительные или переменные
- [ ] Нет hardcoded портов (18789, 18790, 18800)
- [ ] Нет ID чатов/групп
- [ ] Нет внутренних кодовых имён агентов
- [ ] Примеры используют generic данные (your-bot, your-channel, user@example.com)
```

### B4. Универсальность и совместимость
```
- [ ] Работает на macOS + Linux + Windows/WSL
- [ ] Нет зависимости от конкретной модели (Claude/GPT/Gemini/локальные)
- [ ] Нет зависимости от конкретных скиллов или агентов пользователя
- [ ] Зависимости: минимум, все указаны в README, проверка наличия перед использованием
- [ ] Первый запуск: понятно что произойдёт
- [ ] НЕ ломает существующую систему пользователя
- [ ] НЕ перезаписывает чужие файлы без спроса
- [ ] Инструкция по удалению/откату есть
```

### B5. Публикация
```
- [ ] Репо: сначала private, потом public (если решили)
- [ ] Description и topics заполнены
- [ ] Social preview загружен (если есть баннер)
- [ ] Первый коммит чистый (нет истории с утечками)
```

---

## Режим C: Telegram пост

### C1. Формат
```
- [ ] Длина: до 4096 символов (лимит Telegram)
- [ ] Если с фото: caption до 1024 символов
- [ ] Макс 1-2 эмодзи (не новогодняя ёлка)
- [ ] Абзацы: короткие, 2-3 предложения
- [ ] Жирный (**) для ключевых мыслей (1-3 раза за пост, не больше)
```

### C2. Стиль
Сверить с voice-dictionary:
```
- [ ] Энергичный, прямой, дружелюбный
- [ ] Нет длинных тире (—) - только дефис (-)
- [ ] Нет AI-мусора ("Отличный!", "Давайте рассмотрим")
- [ ] Нет канцелярита ("является", "осуществлять")
- [ ] Конкретика > абстракции
- [ ] Пишем "я сделал" а не "было реализовано"
```

### C3. Содержание
```
- [ ] Ценность: читатель уходит с чем-то полезным
- [ ] CTA: есть призыв к действию (но не кричащий)
- [ ] Ссылки: рабочие, не битые
- [ ] Если упоминаем продукт/инструмент - ссылка есть
```

---

## Режим D: Скилл или Агент

### D1. Скилл
```
- [ ] Frontmatter: name, description, triggers заполнены
- [ ] Description: одно предложение, понятно что делает
- [ ] Triggers: минимум 3, на русском и английском
- [ ] Структура: Роль → Когда активируется → Алгоритм → Формат вывода
- [ ] Примеры использования есть
- [ ] related_skills указаны (если есть связи)
- [ ] Валидация OpenClaw: файл не ломает парсер
- [ ] Портативность: работает на любой модели (Claude/GPT/Gemini)
- [ ] Нет hardcoded путей, ID, токенов
- [ ] Не конфликтует с другими скиллами (уникальные triggers)
- [ ] Легко устанавливается: скопировал в skills/ → работает
```

### D2. Агент
```
- [ ] AGENTS.md: роль, команда, скиллы, пайплайн
- [ ] SOUL.md: характер, стиль, границы
- [ ] USER.md: контекст владельца
- [ ] IDENTITY.md: кто я, как общаюсь
- [ ] TOOLS.md: инструменты и правила
- [ ] MEMORY.md: начальная память
- [ ] memory/: lessons.md, patterns.md, projects-log.md
- [ ] Прозрачность: блок уведомлений в AGENTS.md
- [ ] memorySearch: включён или обоснованно выключен
```

---

## Формат отчёта ОТК

После прогона всех применимых режимов - выдать отчёт:

```
## ОТК: [Название материала]
**Режим:** A/B/C/D
**Дата:** YYYY-MM-DD
**Проверил:** [кто]

### Результат: ✅ PASSED / ❌ FAILED

### Найденные проблемы:
1. ❌ [описание] → [как исправить]
2. ⚠️ [некритичное] → [рекомендация]

### Проверено:
- ✅ Стиль текста (voice-dictionary)
- ✅ Формат PDF (design-standard)
- ✅ Персональные данные (grep чистый)
- ✅ Команды проверены (--help)
...
```

**Если FAILED:** вернуть на доработку с конкретным списком что исправить.
**Если PASSED:** материал готов к сдаче {{OWNER_NAME}}.

---

## Чего НЕ проверяет ОТК

- Стратегическую ценность контента (это решает {{OWNER_NAME}})
- Нужен ли этот материал вообще (это решает Продюсер)
- Маркетинговую эффективность (это Митя)
- Техническую корректность кода (это Валера при создании)

ОТК проверяет ОФОРМЛЕНИЕ, СТИЛЬ, БЕЗОПАСНОСТЬ и СООТВЕТСТВИЕ СТАНДАРТАМ.

---

*Версия: 1.0 | Создан: 2026-03-10*
