{
  "schema_version": "edpol-audit-modes-v1",
  "skill_id": "edpol-editorial-audit",
  "updated": "2026-08-25",
  "routing_boundary": "Modes are review lenses inside one skill. They are not autonomous agents and do not expand publication or deployment authority.",
  "fallback_mode": "complete-audit",
  "complete_run": {
    "id": "complete-audit",
    "title": "Полный EdPol-аудит",
    "summary": "Проверяет весь заявленный публичный корпус по пяти линзам и показывает, какая линза не была закрыта.",
    "use_when": [
      "Задача охватывает весь сайт, выпуск или публичный корпус.",
      "Пользователь просит полную проверку или не задаёт достаточно узкую цель."
    ],
    "search_terms": [
      "полный аудит",
      "весь сайт",
      "все страницы",
      "весь корпус",
      "полная проверка",
      "complete audit",
      "all pages",
      "толық аудит"
    ],
    "required_inputs": [
      "Канонический checkout и source revision.",
      "Перечень маршрутов, локалей, состояний и источников публичного текста.",
      "Текущие EdPol-контракты или зафиксированная проектом версия."
    ],
    "checks": [
      "Запустить все пять линз и отдельно зафиксировать их статус.",
      "Сверить исходники, сборку и репрезентативные публичные состояния.",
      "Не превращать непроверенную линзу в общий pass."
    ],
    "outputs": [
      "Единый ledger находок.",
      "Audit receipt со статусом каждой линзы и слоя доказательств.",
      "Следующий ответственный шаг для незакрытых рисков."
    ],
    "boundary": "Полный аудит не означает автоматическую публикацию, юридическое заключение или доказательство авторства.",
    "completion_signal": "Все пять линз имеют статус checked либо явно отмечены skipped, blocked или needs-human с причиной и владельцем.",
    "includes": [
      "copy-localization",
      "evidence-provenance",
      "policy-risk",
      "rendered-experience",
      "ai-origin"
    ]
  },
  "modes": [
    {
      "id": "copy-localization",
      "title": "Текст и локализация",
      "summary": "Проверяет RU, KK и EN, шаблоны, терминологию, типографику и смысловую паритетность локалей.",
      "quick_action": {
        "label": "Проверить текст",
        "hint": "Редактура, терминология и локализация RU/KK/EN"
      },
      "use_when": [
        "Нужно вычитать, переписать или локализовать публичный текст.",
        "Есть риск расхождения смысла, терминов, чисел, цитат или действий между языками."
      ],
      "search_terms": [
        "текст",
        "редактура",
        "переписать",
        "локализация",
        "перевод",
        "казахский",
        "русский",
        "английский",
        "ru",
        "kk",
        "en",
        "copy",
        "translation",
        "қазақша",
        "аударма"
      ],
      "required_inputs": [
        "Маршрут или единица корпуса и её source-файлы.",
        "Поддерживаемые локали и владелец текста.",
        "Защищённые цитаты, юридические формулировки и канонические термины."
      ],
      "checks": [
        "Exact policy и review-only сигналы без вывода об авторстве.",
        "Смысловая паритетность RU, KK и EN, включая числа, имена, цитаты и CTA.",
        "Типографика и защищённые технические контексты."
      ],
      "outputs": [
        "Небольшие fact-preserving правки или список предложенных замен.",
        "Ledger по маршруту, локали, классу находки и статусу решения."
      ],
      "boundary": "Не переводит и не переписывает цитаты, правовые формулировки или факты без подтверждённого основания.",
      "completion_signal": "Каждая локаль и источник текста перечислены; смысловые расхождения исправлены или переданы владельцу."
    },
    {
      "id": "evidence-provenance",
      "title": "Факты и доказательства",
      "summary": "Проверяет, что утверждения, источники, даты и границы уверенности не были потеряны или усилены без основания.",
      "quick_action": {
        "label": "Проверить источник",
        "hint": "Факты, ссылки, даты, цитаты и уверенность"
      },
      "use_when": [
        "Материал содержит проверяемые факты, числа, даты, имена, ссылки или спорные утверждения.",
        "Нужно проверить provenance и не выдать наличие URL за подтверждение содержания."
      ],
      "search_terms": [
        "факт",
        "источник",
        "доказательство",
        "дата",
        "число",
        "цитата",
        "ссылка",
        "проверить утверждение",
        "fact",
        "source",
        "evidence",
        "provenance",
        "дереккөз",
        "дәлел"
      ],
      "required_inputs": [
        "Проверяемые утверждения и доступные первичные источники.",
        "Дата получения, свежесть и статус каждого источника.",
        "Владелец решения по конфликтующим или недоступным данным."
      ],
      "checks": [
        "Соответствие каждого существенного утверждения указанному источнику.",
        "Сохранение атрибуции, неопределённости и статуса unavailable или conflicting.",
        "Отсутствие придуманных деталей в предложенной редактуре."
      ],
      "outputs": [
        "Список подтверждённых, конфликтующих, устаревших и недоступных утверждений.",
        "Evidence gaps и следующий шаг проверки."
      ],
      "boundary": "Не проводит внешнее расследование автоматически и не подменяет первичный источник пересказом.",
      "completion_signal": "У каждого существенного утверждения есть проверяемое основание или явный статус неопределённости."
    },
    {
      "id": "policy-risk",
      "title": "Политика и риск",
      "summary": "Связывает публичный текст с EdPol risk register, обязательными проверками и ответственным человеком.",
      "quick_action": {
        "label": "Оценить риск",
        "hint": "Приватность, право, уязвимые темы и эскалация"
      },
      "use_when": [
        "Есть обвинения, приватность, дети, выборы, безопасность, права, ИИ или другой повышенный риск.",
        "Нужно понять, требуется ли P0/P1-эскалация до выпуска."
      ],
      "search_terms": [
        "риск",
        "закон",
        "юрист",
        "приватность",
        "персональные данные",
        "обвинение",
        "выборы",
        "ребёнок",
        "права",
        "compliance",
        "legal",
        "privacy",
        "тәуекел",
        "заң"
      ],
      "required_inputs": [
        "Контекст материала и применимые правила из текущего risk register.",
        "Владелец редакционного решения и доступные согласования.",
        "Evidence для закрытия обязательных проверок."
      ],
      "checks": [
        "P0/P1/P2-маршрут без fail-open при неизвестном правиле или недоступном реестре.",
        "Обязательные проверки, право на ответ, приватность, права и раскрытие ИИ.",
        "Назначенный человек для решения, исключения или блокировки."
      ],
      "outputs": [
        "Уровень риска, reason codes и обязательные проверки.",
        "Статус ready, blocked или needs-human и ответственный следующий шаг."
      ],
      "boundary": "Это редакционный маршрут риска, а не юридическое заключение; актуальную правовую применимость подтверждает уполномоченный специалист.",
      "completion_signal": "Каждый активный флаг имеет проверку, evidence, владельца и зафиксированное решение."
    },
    {
      "id": "rendered-experience",
      "title": "Сборка и публичный интерфейс",
      "summary": "Проверяет текст после шаблонов и сборки: видимость, доступные имена, обрезку, состояния и мобильную композицию.",
      "quick_action": {
        "label": "Проверить страницу",
        "hint": "Сборка, доступность, состояния и мобильный вид"
      },
      "use_when": [
        "Исходник выглядит корректно, но публичная страница может собирать другой текст.",
        "Изменяются шаблоны, компоненты, metadata, формы, ошибки или responsive-состояния."
      ],
      "search_terms": [
        "сайт",
        "страница",
        "шаблон",
        "сборка",
        "интерфейс",
        "мобильный",
        "обрезается",
        "доступность",
        "aria",
        "rendered",
        "template",
        "mobile",
        "accessibility",
        "бет",
        "интерфейс"
      ],
      "required_inputs": [
        "Исходный корпус и точный emitted/public candidate.",
        "Маршруты, состояния, роли и применимые viewport.",
        "Нативная команда сборки и браузерная среда проверки."
      ],
      "checks": [
        "Различие source scan и emitted-output scan.",
        "Один H1, доступные имена, длинные строки, ошибки, пустые и degraded-состояния.",
        "Репрезентативные desktop и mobile сценарии без скрытой или обрезанной копии."
      ],
      "outputs": [
        "Отдельные source и rendered evidence.",
        "Список интерфейсных дефектов с маршрутом, состоянием и viewport."
      ],
      "boundary": "Не выдаёт локальный screenshot или HTTP 200 за доказательство опубликованного runtime.",
      "completion_signal": "Проверены заявленные route/state/viewport cells, а source, local, runtime и public evidence не смешаны."
    },
    {
      "id": "ai-origin",
      "title": "Происхождение и использование ИИ",
      "summary": "Отделяет стилевые сигналы от доказательств генерации, проверяет provenance и необходимость раскрытия существенного использования ИИ.",
      "quick_action": {
        "label": "Проверить ИИ-раскрытие",
        "hint": "Provenance, detector signal и решение редактора"
      },
      "use_when": [
        "Запрос касается ИИ-авторства, detector score, раскрытия или происхождения текста и медиа.",
        "Нужно проверить, что редактура не маркирует автора без evidence."
      ],
      "search_terms": [
        "ии",
        "ai",
        "нейросеть",
        "сгенерирован",
        "авторство",
        "детектор",
        "disclosure",
        "provenance",
        "жасанды интеллект",
        "генерация"
      ],
      "required_inputs": [
        "Доступные provenance-метаданные, журнал процесса или подтверждение владельца.",
        "Текущая AI-origin policy и evidence schema.",
        "Контекст существенности использования ИИ для содержания и восприятия."
      ],
      "checks": [
        "Detector score остаётся сигналом, а не вердиктом.",
        "Проверяются metadata, process evidence и человеческий ответственный.",
        "Раскрытие не утверждает больше, чем подтверждают доказательства."
      ],
      "outputs": [
        "Класс доступного AI-origin evidence и его ограничения.",
        "Рекомендация по раскрытию или статус needs-human."
      ],
      "boundary": "Стиль текста сам по себе не доказывает ни ИИ-, ни человеческое авторство.",
      "completion_signal": "Вывод опирается на названный класс evidence; при его отсутствии авторство остаётся unknown."
    }
  ]
}
