Использование Ocarina с AI
Рабочая конфигурация: полный цикл тестирования, собранный связкой Claude Code и Ocarina, против публичного демо Katalon CURA.
📖 Возьмите за образец AI-пример.
Три духовных камня
CLAUDE.mdв корне проекта.skills/с одним<name>/SKILL.mdна каждую процедуру.- Правило проверки: каждое утверждение о SUT идёт от наблюдения (probe,
gh api,curl -v), а не от домысла.
CLAUDE.md
Два варианта. CLAUDE.md — полный (правила + структура проекта, иерархия, соглашения, устройство CI, шаблон PR). CLAUDE.slim.md — только правила. Slim — когда контекст перегружен; полный — для онбординга и ревью. При расхождении побеждает полный.
Шаги онбординга (venv, pip install, набор скиллов, скопированный в Claude Code, ruff / mypy / pre-commit, smoke-проверка раннера) описаны в setup-environment.
Правила:
Тестирование безопасности функциональное и статичное — никогда активное. Никаких пейлоадов, никаких сфабрикованных запросов, никаких манипуляций с DOM через DevTools. Сценарии чёрных шляп идут через обычный пользовательский интерфейс.
Используйте константы. Именованные значения не вписывают прямо в код.
Наборы данных — это решения людей. Предложить — не значит запустить.
Проверяйте поведение SUT эмпирически. Probe, gh api или curl -v. Никогда не домысел. Выводите заново каждый раз: probe отвечает только за то, что он реально прогнал; прежний диагноз — только для того прогона.
У каждого правила есть однострочное «почему».
skills/
Один файл Markdown на каждый навык, YAML-frontmatter + тело. Десять семейств.
Ревью (14)
Статическое чтение; выносят находки на поверхность.
review-spec-gaps— уточняющие вопросы по FRD.review-watcher-misuse—watcher.report(...)вопреки соглашению «только негатив».review-compartmentalisation-leaks— URL, селекторы, магические числа не на своём месте.review-dead-code— неиспользуемые connectors / POM / сценарии / suites / фрагменты / константы; для каждой находки: удалить, инкубировать (<source-root>/incubator/, дерево зависимостей сохранено) или оставить.review-hierarchy-naming— родитель ⊃ потомок с тем же именем в дереве цикла (чаще всегоCampaign("X") ⊃ Suite("X")); переименовать потомка под его реальный сегмент (иерархия строгая — сплющивание невозможно).review-report— классифицировать каждый FAIL / SKIP за один прогон.- Плюс:
review-type-ignore,review-match-candidates,review-unverified-transitions,review-submit-dispatchers,review-comment-drift,review-suite-stability,review-intent-collisions,review-watcher-emissions.
Анализ (4)
analyse-flakiness— расширить сеть transient-error; хронические падения — это настоящие flakes.analyse-fixture-flakiness— инструментировать setup/teardown; вынести на поверхность перекрёстное загрязнение тестов.analyse-watcher-flakiness— с каждым watcher и без него, перебор интервалов.analyse-screenshot-flakiness— сгруппировать по(test, step, browser), выявить различия.
Чёрная шляпа (6)
business-logic-vulnerability-ideation— обрушить продукт.incoherence-attack-ideation— каждый шаг легален, набор невозможен.persistence-attack-ideation— упорные повторы заблокированных действий.permission-appropriateness-audit— уместна ли сама модель доступа?bfcache-exposure-ideation— атаки на BFCache.lateral-resource-ideation— IDOR только через адресную строку.
Понимание (4)
assess-test-base— каталогизировать тестовую базу.assess-ecosystem— ограниченное исследование публичных источников, с потолком по бюджету токенов.understand-sut-constraints— ограничения SUT, которые ломают параллельные тесты.understand-ocarina— пройтись по документации.
Выбор (3)
По mtime — никогда по имени файла.
pick-screenshots,pick-logs,pick-reports.
Авторство (9)
Каждый выдаёт готовый результат.
empiricism— проверяйте перед кодированием; не перезаписывайте intentional-fail gap-тесты.write-a-probe— одноразовый скрипт, в gitignore.write-test-strategy— сгенерировать документ test-strategy из набора (scope, types, таблицы покрытия, дерево цикла, pass/fail, gaps, CI-матрица).plan-test-effort— наивный, «первый проход» плана усилий по тестированию; критичность (critical/major/minor), лёгкий реестр рисков, веса S / M / L, открытые вопросы для углублённого прохода.extend-coverage— расширить покрытие, опираясь на существующие активы.update-frd-and-tests— протянуть обновление spec во внутрипроектной FRD; вышестоящие системы (Confluence, Jira, …) остаются доступны только для чтения.manual-reproduction-guide— repro, который может выполнить человек.manage-backlog—BACKLOG.md.pr-report— отчёт с учётом типа PR.
Рефакторинг (2)
refactor-fragmentation— DRY на усмотрение пользователя.introduce-pom-retries— повторы внутри POM с разбивкой на два теста (first-try + with-retries).
Состояние (1)
question-state— опросить окружение, прежде чем доверять результату.
Настройка (2)
setup-environment— venv, инструменты разработки, набор скиллов Ocarina, скопированный в директорию скиллов Claude Code, пути к драйверам вCLAUDE.local.md, цикл pre-commit, smoke-проверка раннера.profile-environment— определяет рамки дозволенного на проекте (доступ к исходникам, зондирование вживую, чувствительность данных, конфиденциальность, безопасность, автономия, правки в репозитории) и генерирует дополнениеCLAUDE.profile.md, которое лишь ужесточает настройки по умолчанию и никогда их не ослабляет.
Запуск (1)
propose-visual-review— перед локальным запуском предлагает выбор:--not-headless(смотреть, как браузер отыгрывает сценарий) или headless (как в CI). Собирает команду; запускает пользователь.
Повторяющиеся цепочки
Набор не зелёный: review-report → analyse-* → write-a-probe → находка ложится в IDENTIFIED_GAPS.md / FRD / комментарий сценария → probe удаляется.
Сценарий чёрной шляпы выглядит многообещающе: empiricism → extend-coverage (часто intentional-fail).
Изменения в spec: update-frd-and-tests (сначала FRD, тесты следом). Gap-тесты переосмысляются, а не переворачиваются.
Нужен новый примитив Ocarina: сначала understand-ocarina, потом писать.
Собираетесь запустить прогон: propose-visual-review — с интерфейсом (--not-headless) или headless (как в CI)? Собирает команду; запускает пользователь.
Дисциплина
Показывайте, а не применяйте. Навыки выдают результат — решает пользователь.
Эмпирика, а не утверждения. Каждое утверждение о SUT — наблюдённое, процитированное, датированное. Ритуальная фраза: "Fair point, I'm assuming. Let me verify empirically."
Gap-тесты переосмысляют, а не перекрашивают в зелёный. Инвертируйте утверждение, переименуйте, перенесите строку в strategy-doc, занесите решение в IDENTIFIED_GAPS.md. Одно движение — через update-frd-and-tests.
Эмиссии watcher'ов — только негативные сигналы. Watcher, выпускающий "login succeeded", нарушает контракт.
Распределённо — когда дефицит общий. Если воркеры борются за ограниченный на стороне SUT ресурс (сессии, слоты, квоты), координируйте их через распределённые примитивы. Иначе worker-local in-memory cache вполне подойдёт — при условии, что ключи не могут столкнуться, а их генерация потокобезопасна.
Рамки можно только сужать. По умолчанию всё открыто, как на демо: чтение исходников, зондирование вживую, публичные учётные данные. profile-environment подстраивает их под конкретный проект, никогда не ослабляя правила безопасности.
Mtime, а не имя файла. UUID-суффиксы случайны; pick-* сортирует по mtime.
Чего эта схема не делает
- Не генерирует тесты автономно.
- Не замазывает галлюцинации в CI; сбой запускает
review-report+analyse-*. - Не переписывает spec; это делает только
update-frd-and-tests— со строкой ревизии. - Не запускает активные тесты безопасности. Никогда.
Открытые ресурсы
- https://mojo-molotov.github.io/ocarina-holy-book/llms.txt
- https://mojo-molotov.github.io/ocarina-holy-book/llms-full.txt
- https://mojo-molotov.github.io/ocarina-holy-book/CLAUDE.md
- https://mojo-molotov.github.io/ocarina-holy-book/CLAUDE.slim.md
- https://mojo-molotov.github.io/ocarina-holy-book/ocarina-ru.pdf
- https://mojo-molotov.github.io/ocarina-holy-book/ocarina-en.pdf
- https://mojo-molotov.github.io/ocarina-holy-book/ocarina-fr.pdf

Ого!
Ты здорово его доработал, читатель Mojo.
"On Earth and Space, he has all the tricks."
