Skip to content

About

Unofficial pre-submission compliance and runtime checker for Yandex Games

Topics

Resources

Contributing

Security policy

Stars

39 stars

Watchers

0 watching

Forks

Repository files navigation

Yandex Games Debug Checker

Неофициальный open-source чекер для предварительной проверки игр перед отправкой на модерацию в Яндекс Играх.

Один файл debugcheck.js, без runtime-зависимостей. Он подключается после /sdk.js, но до игровых скриптов, анализирует загруженный исходный код и во время запуска наблюдает за SDK-событиями, таймингами, рекламой, локализацией и поведением страницы.

Это независимый инструмент и не является продуктом Яндекса. Результат PASS не гарантирует прохождение модерации. Актуальным источником правил остаётся официальная документация Яндекс Игр.

English README

Сообщество и обратная связь

  • 💬 Вопросы, идеи, предложения новых проверок и обсуждение правил: GitHub Discussions
  • 🐛 Воспроизводимый баг checker'а: Bug report
  • 🧪 Воспроизводимый false positive / некорректный результат проверки: False positive / incorrect check
  • 🛠 Хотите прислать исправление: см. CONTRIBUTING.md

Если вы не уверены, является ли результат багом или вопросом трактовки правила, начните с Discussions. Issues предназначены для конкретных воспроизводимых проблем.

Что проверяется

Public v1.1.0 содержит 93 исполняемых проверок. Они разделены на три класса:

  • REQ — проверка привязана к опубликованному требованию Яндекс Игр;
  • REC — проверка привязана к опубликованной рекомендации;
  • HEURISTIC — инженерная эвристика, которая помогает найти риск, но не должна трактоваться как официальный вердикт.

Статические проверки читают index.html, подключённые локальные JS-файлы и CSS. Runtime-проверки наблюдают за фактическим порядком SDK-вызовов и браузерными событиями. Полный каталог: docs/checks.md и checks.csv.

Быстрый старт

Скопируйте debugcheck.js в тестовую сборку игры и подключите его в <head> после SDK, но до игровых скриптов:

<script src="/sdk.js"></script>
<script src="debugcheck.js"></script>
<script src="game.js"></script>

Откройте панель одним из способов:

Ctrl+Shift+2, три раза подряд

или из DevTools/своей debug-кнопки:

YGDebugChecker.open();

Для повторной проверки:

YGDebugChecker.refresh();

Перед production-релизом удалите <script src="debugcheck.js"></script> и сам файл из релизной сборки.

Демонстрационный пример: Orc Castle

В examples/orc-castle лежит специально подготовленная небольшая Canvas-игра в вариантах before / after. Это демонстрационный fixture, созданный для наглядной проверки checker'а, а не опубликованная production-игра и не результат аудита случайно выбранного проекта.

Цифры ниже не захардкожены: browser audit действительно запускает оба варианта в Chromium, а PASS / FAIL / WARN / NOT VERIFIED формирует сам checker.

Вариант PASS FAIL WARN N/V SCORE
Before 45 3 12 10 75%
After 70 0 0 2 100%

before намеренно содержит типовые проблемы интеграции, которые должен обнаружить checker. after показывает исправленный вариант: корректный порядок SDK → checker → game, startup через YaGames.init(), чтение environment.i18n.lang, input gate, Game Ready, optional Gameplay API lifecycle, mobile hardening и sound toggle. В after нет WARN/FAIL. Два пункта остаются NOT VERIFIED: timing первого paint в headless-тесте и Canvas-текст, который нельзя доказать DOM-сканированием. Они не маскируются под предупреждения.

Для GitHub Pages есть отдельная mock-сборка. Production-пример examples/orc-castle/after/index.html mock SDK не содержит.

Подробнее: examples/orc-castle/README.md.

Как читать результат

  • FAIL используется только для небольшого набора проверок, где сигнал достаточно прямой и был отдельно допущен в public policy checker'а.
  • WARN означает, что checker увидел конкретный риск/подозрительный сигнал.
  • NOT VERIFIED (N/V) означает, что автоматических доказательств недостаточно. Это не дефект и не снижает score; отдельно показывается coverage.
  • N/A означает, что опциональная возможность не обнаружена, например rewarded ads, IAP или лидерборды.

Даже если hard FAIL нет, перед отправкой игры нужно пройти docs/manual-checklist.md.

Почему public-версия отличается от исходного внутреннего checker'а

Первоначальная версия создавалась как внутренний инструмент конкретной студии. Перед публикацией из неё удалены проверки, завязанные на внутренние имена переменных, setLang(), screenshot tooling, локальные pre-submit отчёты и инструменты записи тестовых значений в лидерборды. Также исправлены несколько правил после сверки с актуальной документацией Яндекс Игр. Подробно: docs/audit-2026-08-11.md.

PASS / FAIL / WARN / NOT VERIFIED

Checker различает четыре состояния результата:

  • PASS — проверка получила достаточное доказательство корректности.
  • FAIL — обнаружено подтверждённое нарушение для hard-fail правила.
  • WARN — обнаружен реальный риск или эвристический сигнал, который стоит проверить.
  • NOT VERIFIED — checker не смог автоматически доказать ни корректность, ни проблему. Это не WARN и не влияет на score; состояние отдельно учитывается как покрытие автоматической проверки.

Для локализации environment.i18n.lang теперь подтверждается по фактическому runtime-чтению. Для сложных собственных resolver-функций можно необязательно предоставить checker-контракт:

window.YGDebugCheckerConfig = {
  supportedLanguages: ['ru', 'en'],
  resolveLanguage: resolveGameLanguage
};

Это не требование Яндекс Игр и не нужно для работы игры. Контракт нужен только checker'у, чтобы выполнить resolver на тестовых языках и заменить NOT VERIFIED на доказанный PASS/результат.

Ограничения

Статический анализ не является AST-анализатором и использует сигнатуры/эвристики. Минификация и обфускация могут снижать точность. Для Unity/Godot/WASM большая часть логики недоступна статике, поэтому основная ценность остаётся в runtime-проверках. Checker не может надёжно определить содержательную корректность геймплея, промоматериалов, фактический round-trip сохранений и некоторые бизнес-правила покупок/рекламы.

Подробнее: docs/limitations.md.

Официальные источники

На момент аудита 11 августа 2026 года использовались:

Требования платформы меняются. При существенном обновлении документации checker нужно перепроверять.

Тесты

npm test

Полный локальный аудит, включая headless Chromium smoke-test:

npm run audit

Если Chromium/Chrome не найден, статические тесты всё равно выполняются, а browser smoke-test помечается как пропущенный. В CI браузерный тест обязателен.

Безопасность

Checker не отправляет аналитику и не обращается к внешним сервисам. Для статического анализа он читает только документы и относительные JS/CSS ресурсы текущего origin. Инструменты, которые изменяли данные лидербордов, в public-версии удалены.

Лицензия

MIT. См. LICENSE.

Yandex и Яндекс Игры являются товарными знаками соответствующих правообладателей. Этот репозиторий не является официальным проектом Яндекса и не заявляет аффилированность или одобрение.

About

Unofficial pre-submission compliance and runtime checker for Yandex Games

Topics

Resources

Contributing

Security policy

Stars

39 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages