| name | screenshot-analyze |
| description | Анализирует скриншоты мобильного приложения на L10N дефекты (переводы, CLDR форматы, RTL). Используй для проверки локализации UI, когда нужно найти ошибки в переводах, форматах дат/валют или проблемы RTL-верстки. Не используй для функционального тестирования UI или анализа кода. |
| allowed-tools | Read Write Edit Glob Grep Bash(open*) |
| agent | agents/auditor.md |
| context | fork |
L10n & I18n UI Audit (Ride-Hailing)
Визуальный кросс-локализационный анализ UI для приложений вызова такси.
Фокус: Деньги, Время, Геолокация, RTL + СЕМАНТИКА ПЕРЕВОДОВ.
Парсинг аргументов (ОБЯЗАТЕЛЬНО — шаг 0)
Путь к скриншотам ищи по приоритету — остановись на первом успешном:
1. Args скилла — любой текст после имени команды. Примеры:
/screenshot-analyze resources/screenshots/brazil_passenger_main_screen → resources/screenshots/brazil_passenger_main_screen
/screenshot-analyze /abs/path/screens → /abs/path/screens
2. Glob-поиск (fallback) — если args не содержат путь, выполни Glob("**/*.{png,jpg,jpeg,gif,webp}"), сгруппируй по директориям, возьми директорию с наибольшим количеством изображений.
3. Спроси пользователя — только если пп.1-2 не дали результата.
СТРОГО ЗАПРЕЩЕНО задавать вопрос о пути, если в пп.1-2 найден путь или файлы.
Scope (Что проверяем)
1. СЕМАНТИКА (Translation Quality) ← ГЛАВНЫЙ ПРИОРИТЕТ
- Смысловые ошибки (false friends, wrong context)
- Оскорбительный/опасный контент
- Буквальный перевод составных слов
2. ВЕРСТКА (Layout)
- Truncation, Overflow, Overlap
- RTL Mirroring
3. ФОРМАТЫ (CLDR Compliance)
- Числа, Валюта, Дата, Время, Дистанция
4. КОНСИСТЕНТНОСТЬ
- Единый язык, числовая система, терминология
Core Principles
1. Translation Verification FIRST
ГЛАВНАЯ ЗАДАЧА — ПРОВЕРКА ПЕРЕВОДОВ НА СМЫСЛОВЫЕ ОШИБКИ. Активно ищи:
- False Friends — похожие слова с разным значением
- Wrong Context — правильное слово, неправильный контекст
- Literal Translation — буквальный перевод идиом/терминов
- Offensive Content — оскорбительный/табуированный контент
2. Container vs Content
Помимо перевода проверяй: контейнеры (влезает ли текст) и форматы (CLDR). Не придирайся к стилистике, если нет смысловой ошибки.
3. RTL Mirroring
В RTL локалях (ar, he, fa, ur) весь UI зеркальный. Отзеркалить: отступы, стрелки навигации, прогресс-бары. НЕ зеркалить: автомобили, карты.
4. Валюта ≠ Локаль
Валюта определяется регионом, не языком. inDrive Brazil → R$ (BRL) на ЛЮБОМ языке UI. НЕ считать R$ в ru-RU интерфейсе багом.
Входные требования
| Параметр | Обязательность | Описание |
|---|
| Путь к скриншотам | Обязательно | Файл или директория (JPEG, PNG, GIF, WebP) |
| Регион | Авто / Спросить | Из имени файла (_BR, _RU) или спросить |
| Целевая локаль | Авто | Из имени файла (ru_BR.png → locale=ru, region=BR) |
Требования к изображениям
| Параметр | Лимит |
|---|
| Размер файла | ≤5 MB |
| Разрешение | ≤8000×8000 px |
| Оптимальное | ≤1568 px по длинной стороне |
| Минимальное | ≥200 px |
Определение региона
Формат имен файлов
{locale}_{REGION}.png
Примеры:
- en_BR.png → Locale: en, Region: BR (Бразилия)
- ru_BR.png → Locale: ru, Region: BR (Бразилия)
- ar_SA.png → Locale: ar, Region: SA (Саудовская Аравия)
Если регион определен из файлов — НЕ задавай вопросы.
Если регион НЕ определен — спроси:
"С какого региона собраны эти скриншоты?"
- Бразилия (BR) — R$, km
- Россия (RU) — ₽, km
- Саудовская Аравия (SA) — SAR, RTL, km
- США (US) — $, mi
Алгоритм анализа (4-Step)
Step 1: Reference Check
- Найди EN скриншот — это Base Layout
- Запомни структуру: количество элементов, позиции, размеры
Step 2: Layout Stress Test
- Найди языки с максимальной длиной: DE, RU, ES, PT-BR
- Проверь на каждом: Overflow, Truncation, Line Break Issues
Step 3: Bi-Directional Check (RTL)
Для AR/HE/FA/UR:
- Зеркалирование Margins/Paddings
- Направление стрелок навигации
- Позиция Back/Close кнопок
- Автомобили НЕ отзеркалены
Step 4: Data Format Validation (CLDR)
- Числа: разделители тысяч и дробей
- Валюта: символ, позиция, отбивка
- Время: 12h vs 24h
Справочные таблицы: references/cldr-tables.md
Verbosity Protocol
Structured Output Priority: Весь analysis идёт в артефакт (MD/HTML), не в чат.
Chat output (ограничения):
- Brief Summary: max 5 строк (что нашли, сколько, итог)
- Findings table: max 15 строк (топ по severity)
- Полный отчёт:
📊 Полный отчёт: {path} + открыть файл
Iterative steps: Не выводить прогресс по каждому файлу. Checkpoint только при:
- Phase transition (Фаза N → Фаза N+1)
- Blocker обнаружен
- Завершение (SKILL COMPLETE)
Tools first:
- Grep → table → report, без "Now I will grep..."
- Read → analyze → report, без "The file shows..."
Post-Check: Inline перед SKILL COMPLETE (5-7 строк checklist), не отдельный файл.
Steps 1-4: Silent. Output: Master Issues Table (max 10) + HTML report opened.
LQA & Domain-Specific Checks
Полные таблицы проверок (типы семантических ошибок, валюты, время, RTL) — в references/lqa-rules.md.
Ключевые приоритеты:
- CRITICAL: False Friends, Wrong Context, Offensive Content, RTL Price Concatenation
- ERROR: Literal Translation, CLDR нарушения, неправильные форматы времени
- WARNING: Стилистика, minor format issues
Ограничения (Safety Limits)
Max Issues: 10
Ограничивай отчёт ТОП-10 самых критичных ошибок.
Приоритет: CRITICAL → ERROR → WARNING.
Grouping
Одинаковая ошибка на нескольких скриншотах = 1 запись с перечислением файлов.
Перевод на русский
Для не-русских текстов добавляй перевод:
✅ "إيجاد الضحايا" (Найти жертв) — опасный перевод
Акцент на валютах
ОБЯЗАТЕЛЬНО сравнивай формат валюты:
- Символ (R$ vs BRL)
- Позиция (R$13 vs 13R$)
- Формат числа (R$13 vs R$13.00)
Severity Guidelines
| Severity | Критерий |
|---|
| CRITICAL | Оскорбительный контент, полная поломка функционала |
| ERROR | Неправильный перевод с изменением смысла, обрезанный CTA |
| WARNING | Стилистика, minor format issues |
| INFO | Рекомендации по улучшению |
Anti-Patterns (BANNED)
- Vague Descriptions → указывай элемент + конкретику: "Button text truncated at 'Регистрац...'"
- Currency Region False Positive → валюта региона (R$ в BR) корректна на любом языке UI
- Translating Non-Translateables → адреса, POI, бренды с карт не переводятся
- Missing Location → каждый баг с указанием элемента: "CTA button (bottom of screen)"
Формат вывода
В чат вывести только:
📊 L10n: {N} issues (CRITICAL: X, ERROR: Y) → analysis-report.html
Ограничения:
- 0 ошибок → "✅ Ошибок не обнаружено"
HTML Report
Генерируется в директории со скриншотами.
Заголовок: L10n Report — {COUNTRY_NAME}
Структура: Summary Cards → Context Banner → Per-Screenshot Sections
Шаблон: references/html-template.md
ОБЯЗАТЕЛЬНО: Открой отчёт командой open {path}/analysis-report.html
Cross-Screenshot Comparison
При нескольких локалях — сравнительная таблица:
| Элемент | EN (ref) | RU | AR | Проблема |
|---------|----------|----|----|----------|
| CTA Button | Find offers | Найти ✅ | ❌ | AR: Буквальный перевод |
| Price | R$13 | R$13 ✅ | R$13 ✅ | — |
| Back Button | < | < ✅ | ❌ < | AR: Должен быть > |
Self-Check Protocol
Перед завершением проверь:
Полный чек-лист: references/checklists.md
Что НЕ переводится
| Элемент | Правило |
|---|
| Имена пользователей | Как введены |
| Марки/модели авто | Глобальные бренды |
| Адреса с карт | Локальный язык места |
| POI | Язык места |
| Госномера | Формат региона |
Связанные файлы
| Файл | Содержание |
|---|
references/cldr-tables.md | CLDR таблицы: валюты, числа, время, plurals |
references/checklists.md | Полные чек-листы: RTL, Layout, CLDR, Semantics |
references/html-template.md | HTML шаблон отчёта |