Цели
- Воспроизвести ошибку из GitHub issue или PR с той же формой транспорта, которую видят пользователи.
- Зафиксировать артефакт до на базовом ref перед применением исправления.
- Зафиксировать артефакт после на кандидатном ref после применения исправления.
- По возможности использовать детерминированный оракул, например чтение реакции через Discord REST или проверку транскрипта канала.
- Делать снимки экрана, когда ошибка имеет видимую поверхность UI.
- Запускать локально из CLI под управлением агента и удаленно из GitHub.
- Сохранять достаточно машинного состояния для восстановления через VNC, когда вход, браузерная автоматизация или аутентификация провайдера застревают.
- Отправлять краткий статус в операторский канал Discord, когда запуск заблокирован, требует ручной помощи через VNC или завершается.
Не цели
- Mantis не заменяет модульные тесты. Запуск Mantis обычно должен превращаться в меньший регрессионный тест после того, как исправление понято.
- Mantis не является обычным быстрым CI-гейтом. Он медленнее, использует живые учетные данные и предназначен для ошибок, где важна живая среда.
- Mantis не должен требовать человека для обычной работы. Ручной VNC — это путь восстановления, а не штатный путь.
- Mantis не сохраняет необработанные секреты в артефактах, логах, снимках экрана, Markdown отчетах или комментариях PR.
Владение
Mantis находится в QA-стеке OpenClaw.- OpenClaw владеет средой выполнения сценариев, транспортными адаптерами, схемой доказательств и
локальным CLI в
pnpm openclaw qa mantis. - QA Lab владеет частями harness для живого транспорта, помощниками захвата браузера и писателями артефактов.
- Crabbox владеет прогретыми Linux-машинами, когда нужна удаленная VM.
- GitHub Actions владеет удаленной точкой входа workflow и хранением артефактов.
- ClawSweeper владеет маршрутизацией комментариев GitHub: разбором команд сопровождающих, запуском workflow и публикацией итогового комментария PR.
- Агенты OpenClaw управляют Mantis через Codex, когда сценарию нужны агентная настройка, отладка или отчет о застрявшем состоянии.
Форма команды
Первая локальная команда проверяет бота Discord, гильдию, канал, отправку сообщения, отправку реакции и путь артефактов:--allow-failures, затем записывает baseline/, candidate/, comparison.json
и mantis-report.md. Для первого сценария Discord успешная верификация
означает, что статус baseline — fail, а статус candidate — pass.
Второй Discord-зонд до/после нацелен на вложения в тредах:
message.thread-reply с repo-local
filePath, затем опрашивает тред на наличие ответа SUT и имени файла вложения. Снимок экрана
baseline показывает ответ без вложения; снимок экрана candidate
показывает ожидаемое вложение mantis-thread-report.md.
Первая примитивная VM/browser-проверка — desktop smoke:
--provider, --crabbox-bin или
OPENCLAW_MANTIS_CRABBOX_PROVIDER при запуске на другом парке Crabbox.
Полезные флаги desktop smoke:
--lease-id <cbx_...>илиOPENCLAW_MANTIS_CRABBOX_LEASE_IDповторно использует прогретый desktop.--browser-url <url>меняет страницу, открытую в видимом браузере.--html-file <path>отображает repo-local HTML-артефакт в видимом браузере. Mantis использует это для захвата сгенерированной временной шкалы реакций статуса Discord через реальный desktop Crabbox.--browser-profile-dir <remote-path>повторно использует удаленный Chrome user-data-dir, чтобы постоянный desktop Mantis мог оставаться залогиненным между запусками. Используйте это для долгоживущего профиля просмотрщика Discord Web.--browser-profile-archive-env <name>восстанавливает base64.tgzархив Chrome user-data-dir из указанной переменной окружения перед запуском браузера. Используйте это для залогиненных свидетелей, таких как Discord Web. Переменная окружения по умолчанию —OPENCLAW_MANTIS_BROWSER_PROFILE_TGZ_B64.--video-duration <seconds>управляет длительностью MP4-захвата. Используйте большую длительность для медленных залогиненных веб-приложений, которым нужно время стабилизироваться.--keep-leaseилиOPENCLAW_MANTIS_KEEP_VM=1оставляет новый успешно созданный lease открытым для проверки через VNC. Неуспешные запуски по умолчанию оставляют lease, если он был создан, чтобы оператор мог переподключиться.--class,--idle-timeoutи--ttlнастраивают размер машины и срок жизни lease.
thread-reply и проверяет вложение через Discord
REST. Когда задан OPENCLAW_QA_DISCORD_CAPTURE_UI_METADATA=1, сценарий также
записывает артефакт URL Discord Web. Когда задан OPENCLAW_QA_DISCORD_KEEP_THREADS=1, он
оставляет этот тред доступным достаточно долго, чтобы залогиненный браузер мог открыть
и записать его.
GitHub workflow открывает URL треда candidate в Discord Web, делает
снимок экрана, записывает MP4 и генерирует обрезанный GIF-превью с движением, когда доступен
медиа-инструментарий Crabbox. Предпочитайте постоянный путь профиля просмотрщика, настроенный
через MANTIS_DISCORD_VIEWER_CHROME_PROFILE_DIR, потому что полные архивы профиля Chrome
могут превысить лимит размера секретов GitHub. Для небольших/bootstrap-профилей
workflow также может восстановить base64 .tgz архив из
MANTIS_DISCORD_VIEWER_CHROME_PROFILE_TGZ_B64. Если не настроен ни один источник профиля,
workflow все равно публикует детерминированные снимки вложений baseline/candidate
и логирует уведомление, что залогиненный свидетель Discord Web был пропущен.
Первая полноценная примитивная проверка desktop-транспорта — Slack desktop smoke:
pnpm openclaw qa slack внутри этой VM, открывает Slack Web в VNC
браузере, захватывает видимый рабочий стол и копирует как артефакты Slack QA, так и
VNC-снимок экрана обратно в локальный выходной каталог. Это первая форма Mantis,
где SUT OpenClaw gateway и браузер находятся внутри одной и той же
Linux desktop VM.
С --gateway-setup команда подготавливает постоянный одноразовый OpenClaw
home в $HOME/.openclaw-mantis/slack-openclaw, патчит конфигурацию Slack Socket Mode
для выбранного канала, запускает openclaw gateway run на порту
38973 и оставляет Chrome запущенным в VNC-сессии. Это режим «оставь мне
Linux desktop со Slack и запущенным claw»; bot-to-bot линия Slack QA
остается режимом по умолчанию, когда --gateway-setup опущен.
Обязательные входные данные для --credential-source env:
OPENCLAW_QA_SLACK_CHANNEL_IDOPENCLAW_QA_SLACK_DRIVER_BOT_TOKENOPENCLAW_QA_SLACK_SUT_BOT_TOKENOPENCLAW_QA_SLACK_SUT_APP_TOKENOPENCLAW_LIVE_OPENAI_KEYдля удаленной модельной линии. Если локально задан толькоOPENAI_API_KEY, Mantis сопоставляет его сOPENCLAW_LIVE_OPENAI_KEYперед вызовом Crabbox, чтобы проброс envOPENCLAW_*в Crabbox мог доставить его в VM.
--gateway-setup --credential-source convex Mantis арендует учетные данные Slack SUT
из общего пула перед созданием VM и передает арендованные
id канала, app token Socket Mode и bot token как runtime env OPENCLAW_MANTIS_SLACK_*
внутри desktop. Это сохраняет GitHub workflows тонкими: им нужен только
секрет брокера Convex, а не необработанные Slack bot или app tokens.
Полезные флаги Slack desktop:
--lease-id <cbx_...>повторно запускает проверку на машине, где оператор уже вошел в Slack Web через VNC.--gateway-setupзапускает постоянный OpenClaw Slack gateway в VM вместо запуска только bot-to-bot линии QA.--keep-leaseоставляет VM с gateway открытой для проверки через VNC после успеха;--no-keep-leaseостанавливает ее после сбора артефактов.--slack-url <url>открывает конкретный URL Slack Web. Без него Mantis выводитhttps://app.slack.com/client/<team>/<channel>из Slackauth.test, когда доступен bot token SUT.--slack-channel-id <id>управляет allowlist канала Slack, используемым настройкой gateway.OPENCLAW_MANTIS_SLACK_BROWSER_PROFILE_DIRуправляет постоянным профилем Chrome внутри VM. Значение по умолчанию —$HOME/.config/openclaw-mantis/slack-chrome-profile, поэтому ручной вход в Slack Web переживает повторные запуски на том же lease.--credential-source convex --credential-role ciиспользует общий пул учетных данных вместо прямых env-токенов Slack.--provider-mode,--model,--alt-modelи--fastпередаются в живую линию Slack.
slack-desktop-smoke.png является доказательством Slack Web
только когда lease использует теплый профиль браузера, который уже залогинен.
GitHub smoke workflow — Mantis Discord Smoke. GitHub workflow до и после
для первого реального сценария — Mantis Discord Status Reactions. Он
принимает:
baseline_ref: ref, который должен воспроизводить поведение только queued.candidate_ref: ref, который должен показыватьqueued -> thinking -> done.
discord-status-reactions-tool-only против каждого worktree и
загружает baseline/, candidate/, comparison.json и mantis-report.md как
артефакты Actions. Он также отображает timeline HTML каждой линии в desktop-браузере Crabbox
и публикует эти VNC-снимки экрана рядом с детерминированными
timeline PNG в комментарии PR. Тот же комментарий PR встраивает легкие
обрезанные GIF-превью с движением, сгенерированные crabbox media preview, ссылается на
соответствующие обрезанные MP4-клипы с движением и сохраняет полные desktop MP4-файлы для глубокого
анализа. Снимки экрана остаются встроенными для быстрого review. Workflow собирает
Crabbox CLI из
openclaw/crabbox main, чтобы использовать текущие флаги desktop/browser lease
до выхода следующего бинарного релиза Crabbox.
Mantis Scenario — это универсальная ручная точка входа. Она принимает scenario_id,
candidate_ref, необязательный baseline_ref и необязательный pr_number, затем
запускает workflow, принадлежащий сценарию. Обертка намеренно тонкая:
workflow сценариев по-прежнему сами отвечают за настройку транспорта, учетные данные,
класс VM, ожидаемый oracle и манифест артефактов.
Mantis Slack Desktop Smoke — первый workflow Slack VM. Он извлекает
доверенный candidate ref в отдельный worktree, арендует рабочий стол Crabbox Linux,
запускает pnpm openclaw qa mantis slack-desktop-smoke --gateway-setup для этого
candidate, открывает Slack Web в браузере VNC, записывает рабочий стол, создает
предпросмотр с обрезкой по движению через crabbox media preview, загружает весь
каталог артефактов и при необходимости публикует встроенный комментарий с evidence в целевом PR.
По умолчанию для аренды рабочего стола используется AWS, а также доступен ручной ввод provider,
чтобы операторы могли переключиться на Hetzner, когда емкость AWS медленная или недоступна. Используйте
этот lane, когда нужен «рабочий стол Linux со Slack и запущенным claw», а не
только Slack-транскрипт bot-to-bot.
Mantis Telegram Live оборачивает существующий lane live QA для Telegram в тот же PR
pipeline evidence. Он извлекает доверенный candidate ref в отдельный
worktree, запускает pnpm openclaw qa telegram --credential-source convex --credential-role ci, записывает манифест mantis-evidence.json из
сводки Telegram QA, qa-evidence.json и артефактов отчета, рендерит
редактированный HTML evidence через браузер рабочего стола Crabbox, создает
GIF с обрезкой по движению через crabbox media preview и публикует встроенный PR
комментарий с evidence, когда доступен номер PR. Этот lane является визуальным QA-evidence,
а не proof с авторизованным Telegram Web: Telegram Bot API дает стабильное live
evidence сообщений, но состояние входа в Telegram Web не требуется для обычной автоматизации Mantis.
Mantis Telegram Desktop Proof — это agentic native Telegram Desktop
обертка before/after. Maintainer может запустить ее из комментария PR с
@openclaw-mantis telegram desktop proof, из UI Actions с произвольными
инструкциями или через универсальный диспетчер Mantis Scenario. Workflow
передает PR, baseline ref, candidate ref и инструкции maintainer в Codex.
Агент читает PR, решает, какое Telegram-visible поведение доказывает
изменение, запускает real-user Crabbox Telegram Desktop proof lane для baseline и
candidate, повторяет до тех пор, пока native GIF не станут полезными, записывает парные
артефакты motionPreview в mantis-evidence.json, загружает bundle и
публикует двухколоночную таблицу PR evidence, когда доступен номер PR.
Для настройки Telegram desktop с участием человека используйте builder сценария:
openclaw gateway run
на порту 38974, публикует сообщение готовности driver-bot в арендованную private
group, затем делает screenshot и MP4 с видимого рабочего стола VNC. Bot
token никогда не выполняет вход в Telegram Desktop; он только настраивает OpenClaw. Просмотрщик
desktop — это отдельная пользовательская сессия Telegram, восстановленная из
--telegram-profile-archive-env <name> или созданная вручную через VNC и сохраняемая
активной с --keep-lease.
Полезные флаги Telegram desktop builder:
--lease-id <cbx_...>повторно запускает against VM, где оператор уже вошел в Telegram Desktop.--telegram-profile-archive-env <name>читает base64.tgzархив профиля Telegram Desktop из этой env var и восстанавливает его перед запуском.--telegram-profile-dir <remote-path>управляет удаленным каталогом профиля Telegram Desktop. Значение по умолчанию —$HOME/.local/share/TelegramDesktop.--no-gateway-setupустанавливает и открывает Telegram Desktop без настройки OpenClaw.--credential-source convex --credential-role ciиспользует общий credential broker вместо прямых Telegram env tokens.
mantis-evidence.json рядом со своим отчетом.
Эта схема является handoff между кодом сценария и комментариями GitHub:
path артефактов задаются относительно каталога манифеста. Значения targetPath
являются относительными путями внутри настроенного префикса артефактов Mantis R2/S3. Publisher
отклоняет path traversal и пропускает записи с "required": false,
когда необязательные previews или videos недоступны.
Поддерживаемые виды артефактов:
timeline: детерминированный screenshot сценария, обычно before/after.desktopScreenshot: screenshot рабочего стола VNC/browser.motionPreview: inline animated GIF, созданный из записи рабочего стола.motionClip: MP4 с обрезкой по движению, удаляющий статический lead-in и tail.fullVideo: полная MP4-запись для глубокого анализа.metadata: JSON/log sidecar.report: Markdown-отчет.
scripts/mantis/publish-pr-evidence.mjs. Workflows
вызывают его с манифестом, целевым PR, корнем назначения артефактов, marker комментария,
URL артефакта Actions, run URL и источником запроса. Он загружает объявленные артефакты
в настроенный bucket Mantis R2/S3, строит PR-комментарий в формате summary-first со
встроенными images/previews и linked videos, затем обновляет существующий marker
comment или создает новый. Workflows публикуют в openclaw-crabbox-artifacts
с публичными URL под https://artifacts.openclaw.ai. Они передают значения bucket,
region и public URL напрямую. Переиспользуемому publisher требуются:
MANTIS_ARTIFACT_R2_ACCESS_KEY_IDMANTIS_ARTIFACT_R2_SECRET_ACCESS_KEYMANTIS_ARTIFACT_R2_BUCKETMANTIS_ARTIFACT_R2_ENDPOINTMANTIS_ARTIFACT_R2_REGIONMANTIS_ARTIFACT_R2_PUBLIC_BASE_URL
telegram-status-command. Maintainers могут переопределить candidate=...,
provider=aws|hetzner и lease=<cbx_...>, когда им нужен конкретный ref или
предварительно прогретый рабочий стол Crabbox.
Примеры команд ClawSweeper:
Жизненный цикл run
- Получить credentials.
- Выделить или переиспользовать VM.
- Подготовить профиль desktop/browser, когда сценарию требуется UI evidence.
- Подготовить чистый checkout для baseline ref.
- Установить dependencies и собрать только то, что нужно сценарию.
- Запустить дочерний OpenClaw Gateway с изолированным state directory.
- Настроить live transport, provider, model и browser profile.
- Запустить сценарий и собрать baseline evidence.
- Остановить gateway и сохранить logs.
- Подготовить candidate ref в той же VM.
- Запустить тот же сценарий и собрать candidate evidence.
- Сравнить oracle results и visual evidence.
- Записать Markdown, JSON, logs, screenshots и необязательные trace artifacts.
- Загрузить GitHub Actions artifacts.
- Опубликовать краткий status message в PR или Discord.
- Bug reproduced: baseline упал ожидаемым образом.
- Harness failure: environment setup, credentials, Discord API, browser или provider упали до того, как bug oracle стал осмысленным.
Discord MVP
Первый сценарий должен быть нацелен на Discord status reactions в guild channels, где режим доставки source reply —message_tool_only.
Почему это хороший начальный Mantis seed:
- Он видим в Discord как reactions на triggering message.
- У него сильный REST oracle через состояние reaction сообщения Discord.
- Он задействует реальный OpenClaw Gateway, auth Discord bot, message dispatch, source reply delivery mode, status reaction state и жизненный цикл model turn.
- Он достаточно узкий, чтобы первый implementation оставался честным.
messages.statusReactions.enabled.
Первый executable slice — это opt-in Discord live QA scenario:
visibleReplies: "message_tool", ackReaction: "👀" и явными status reactions. Oracle
опрашивает реальное triggering message в Discord и ожидает наблюдаемую sequence
👀 -> 🤔 -> 👍. Артефакты включают discord-qa-reaction-timelines.json,
discord-status-reactions-tool-only-timeline.html и
discord-status-reactions-tool-only-timeline.png.
Существующие части QA
Mantis должен строиться на существующем private QA stack, а не начинаться с нуля:pnpm openclaw qa discordуже запускает live Discord lane с driver и SUT bots.- Live transport runner уже записывает reports, QA evidence и
transport-specific artifacts в
.artifacts/qa-e2e/. - Convex credential leases уже предоставляют exclusive access к shared live transport credentials.
- Browser control service уже поддерживает screenshots, snapshots, headless managed profiles и remote CDP profiles.
- QA Lab уже имеет debugger UI и bus для transport-shaped testing.
Модель evidence
Каждый run записывает стабильный каталог артефактов:mantis-summary.json должен быть машиночитаемым источником истины. Отчет
Markdown предназначен для комментариев к PR и ручной проверки.
Сводка должна включать:
- проверенные refs и SHA
- транспорт и идентификатор сценария
- поставщика машины и идентификатор машины или идентификатор аренды
- источник учетных данных без секретных значений
- результат baseline
- результат candidate
- воспроизвелась ли ошибка на baseline
- исправил ли ее candidate
- пути к артефактам
- очищенные сведения о проблемах настройки или очистки
Браузер и VNC
Браузерный путь имеет два режима:- Автоматизация без интерфейса: режим по умолчанию для CI. Chrome запускается с включенным CDP, а Playwright или браузерное управление OpenClaw делает скриншоты.
- Аварийный доступ через VNC: включается на той же VM, когда вход в систему, MFA, защита Discord от автоматизации или визуальная отладка требуют участия человека.
- идентификатор запуска
- идентификатор сценария
- поставщик машины
- каталог артефактов
- инструкции по подключению VNC или noVNC, если доступны
- короткий текст блокера
Машины
Для первой удаленной реализации Mantis должен предпочитать AWS через Crabbox. Crabbox предоставляет прогретые машины, отслеживание аренды, гидрацию, логи, результаты и очистку. Если емкость AWS слишком медленная или недоступна, добавьте поставщика Hetzner за тем же интерфейсом машин. Минимальные требования к VM:- Linux с установленным Chrome или Chromium, пригодным для рабочего стола
- доступ CDP для автоматизации браузера
- VNC или noVNC для аварийного доступа
- Node 22 и pnpm
- checkout OpenClaw и кэш зависимостей
- кэш браузера Playwright Chromium, когда используется Playwright
- достаточно CPU и памяти для одного OpenClaw Gateway, одного браузера и одного запуска модели
- исходящий доступ к Discord, GitHub, поставщикам моделей и брокеру учетных данных
Секреты
Секреты хранятся в секретах организации или репозитория GitHub для удаленных запусков и в локальном, контролируемом оператором файле секретов для локальных запусков. Рекомендуемые имена секретов:OPENCLAW_QA_DISCORD_MANTIS_BOT_TOKENOPENCLAW_QA_DISCORD_DRIVER_BOT_TOKENOPENCLAW_QA_DISCORD_SUT_BOT_TOKENOPENCLAW_QA_DISCORD_GUILD_IDOPENCLAW_QA_DISCORD_CHANNEL_IDOPENCLAW_QA_DISCORD_NOTIFY_CHANNEL_IDOPENCLAW_QA_REDACT_PUBLIC_METADATA=1для публичных загрузок артефактов GitHubOPENCLAW_QA_CONVEX_SITE_URLOPENCLAW_QA_CONVEX_SECRET_CIOPENCLAW_QA_MANTIS_CRABBOX_COORDINATOROPENCLAW_QA_MANTIS_CRABBOX_COORDINATOR_TOKEN
CRABBOX_COORDINATOR и CRABBOX_COORDINATOR_TOKEN, которые ожидает Crabbox CLI.
Простые имена секретов GitHub CRABBOX_* остаются допустимыми как резервная
совместимость.
Раннер Mantis никогда не должен печатать:
- токены ботов Discord
- API-ключи поставщиков
- cookie браузера
- содержимое профиля аутентификации
- пароли VNC
- необработанные payload учетных данных
OPENCLAW_QA_REDACT_PUBLIC_METADATA=1.
Если токен случайно вставлен в issue, PR, чат или лог, ротируйте его после
сохранения нового секрета.
Артефакты GitHub и комментарии к PR
Рабочие процессы Mantis должны загружать полный пакет доказательств как краткоживущий артефакт Actions. Когда workflow запускается для отчета об ошибке или PR с исправлением, он также должен публиковать очищенные встроенные медиа в настроенный бакет Mantis R2/S3 и выполнять upsert комментария в этой ошибке или PR с исправлением со встроенными скриншотами до/после. Не публикуйте основное доказательство только в общем PR автоматизации QA. Необработанные логи, наблюдаемые сообщения и другие объемные доказательства остаются в артефакте Actions. Production workflows должны публиковать эти комментарии через Mantis GitHub App, а не черезgithub-actions[bot]. Сохраните id приложения и приватный ключ как
секреты GitHub Actions MANTIS_GITHUB_APP_ID и
MANTIS_GITHUB_APP_PRIVATE_KEY. Workflow использует скрытый маркер как ключ
upsert, обновляет этот комментарий, когда токен может его редактировать, и
создает новый комментарий от имени Mantis, когда более старый маркер, созданный
ботом, нельзя отредактировать.
Комментарий к PR должен быть коротким и визуальным:
Заметки о приватной развертке
В приватной развертке уже может быть приложение Mantis Discord. Переиспользуйте это приложение вместо создания еще одного, если у него есть нужные разрешения бота и его можно безопасно ротировать. Задайте начальный канал уведомлений оператора через секреты или конфигурацию развертки. Сначала он может указывать на существующий канал мейнтейнеров или операций, а затем перейти в выделенный канал Mantis, когда он появится. Не помещайте в этот документ идентификаторы гильдий, идентификаторы каналов, токены ботов, cookie браузера или пароли VNC. Храните их в секретах GitHub, брокере учетных данных или локальном хранилище секретов оператора.Добавление сценария
Сценарий Mantis должен объявлять:- id и заголовок
- транспорт
- требуемые учетные данные
- политику baseline ref
- политику candidate ref
- patch конфигурации OpenClaw
- шаги настройки
- стимул
- ожидаемый oracle baseline
- ожидаемый oracle candidate
- цели визуального захвата
- бюджет timeout
- шаги очистки
- состояние реакции Discord для ошибок реакций
- ссылки на сообщения Discord для ошибок threading
- ts треда Slack и состояние API реакций для ошибок Slack
- идентификаторы сообщений email и заголовки для ошибок email
- скриншоты браузера, когда UI является единственным надежным наблюдаемым признаком
Расширение поставщиков
После Discord тот же раннер может добавить:- Slack: реакции, треды, упоминания приложения, модальные окна, загрузки файлов.
- Email: аутентификация Gmail и threading сообщений с использованием
gog, когда коннекторов недостаточно. - WhatsApp: вход по QR, повторная идентификация, доставка сообщений, медиа, реакции.
- Telegram: gating упоминаний в группе, команды, реакции, где доступны.
- Matrix: зашифрованные комнаты, связи тредов или ответов, возобновление после перезапуска.
Открытые вопросы
- Какой бот Discord должен быть driver, а какой SUT, когда существующий бот Mantis переиспользуется?
- Должен ли вход в браузер наблюдателя использовать человеческий аккаунт Discord, тестовый аккаунт или только читаемые ботом REST-доказательства на первом этапе?
- Как долго GitHub должен хранить артефакты Mantis для PR?
- Когда ClawSweeper должен автоматически рекомендовать Mantis вместо ожидания команды мейнтейнера?
- Следует ли редактировать или обрезать скриншоты перед загрузкой для публичных PR?