chore(i18n): refresh uk translations
This commit is contained in:
parent
f849875950
commit
be552b86a1
@ -1,85 +1,85 @@
|
||||
---
|
||||
read_when:
|
||||
- Створення або запуск візуальної QA-перевірки наживо для помилок OpenClaw
|
||||
- Додавання перевірки до та після для запиту на злиття
|
||||
- Додавання сценаріїв Discord, Slack, WhatsApp або інших реальних транспортів
|
||||
- Створення або запуск живого візуального QA для помилок OpenClaw
|
||||
- Додавання перевірки до й після для запиту на злиття
|
||||
- Додавання сценаріїв для Discord, Slack, WhatsApp або інших транспортних механізмів реального часу
|
||||
- Налагодження QA-запусків, які потребують знімків екрана, автоматизації браузера або доступу через VNC
|
||||
summary: Mantis — це візуальна система наскрізної перевірки для відтворення помилок OpenClaw на живих транспортах, збирання доказів до та після та прикріплення артефактів до PR.
|
||||
summary: Mantis — це візуальна система наскрізної перевірки для відтворення помилок OpenClaw у live transports, захоплення доказів до й після та прикріплення артефактів до PR.
|
||||
title: Богомол
|
||||
x-i18n:
|
||||
generated_at: "2026-05-04T01:25:50Z"
|
||||
generated_at: "2026-05-04T02:51:58Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 5a86ab4bc876d1c53ada1c30580034165f028194a072f559eb54a898a369211d
|
||||
source_hash: 9d3f3fa3db111b1b5c85f8efeccd749fbd5885cee6b7843ca4c8d049acfd9164
|
||||
source_path: concepts/mantis.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
Mantis — це система наскрізної перевірки OpenClaw для помилок, яким потрібні реальне
|
||||
середовище виконання, реальний транспорт і видимий доказ. Вона запускає сценарій на відомому
|
||||
поганому ref, збирає докази, запускає той самий сценарій на кандидатному ref і
|
||||
Mantis — це система наскрізної перевірки OpenClaw для помилок, яким потрібні реальне середовище виконання,
|
||||
реальний транспорт і видимий доказ. Вона запускає сценарій на відомому
|
||||
поганому посиланні, збирає докази, запускає той самий сценарій на кандидатному посиланні й
|
||||
публікує порівняння як артефакти, які мейнтейнер може переглянути з PR або
|
||||
з локальної команди.
|
||||
|
||||
Mantis починає з Discord, бо Discord дає нам цінну першу лінію:
|
||||
реальну автентифікацію бота, реальні канали guild, реакції, threads, нативні команди та
|
||||
браузерний інтерфейс, у якому люди можуть візуально підтвердити, що показав транспорт.
|
||||
Mantis починає з Discord, тому що Discord дає нам першу лінію з високою цінністю:
|
||||
реальна автентифікація бота, реальні канали гільдії, реакції, треди, нативні команди й
|
||||
браузерний інтерфейс, де люди можуть візуально підтвердити, що показав транспорт.
|
||||
|
||||
## Цілі
|
||||
|
||||
- Відтворити помилку з GitHub issue або PR з тією самою формою транспорту, яку бачать
|
||||
користувачі.
|
||||
- Зібрати артефакт **before** на базовому ref перед застосуванням виправлення.
|
||||
- Зібрати артефакт **after** на кандидатному ref після застосування виправлення.
|
||||
- Використовувати детермінований оракул, коли це можливо, наприклад читання реакції через Discord REST
|
||||
або перевірку transcript каналу.
|
||||
- Збирати скриншоти, коли помилка має видиму поверхню UI.
|
||||
- Запускати локально з CLI, керованого агентом, і віддалено з GitHub.
|
||||
- Зберігати достатньо стану машини для VNC-рятування, коли вхід, браузерна автоматизація або
|
||||
автентифікація провайдера зависає.
|
||||
- Публікувати стислий статус в операторський канал Discord, коли запуск заблоковано,
|
||||
- Відтворити помилку з issue або PR на GitHub з тією самою формою транспорту, яку
|
||||
бачать користувачі.
|
||||
- Зібрати артефакт **до** на базовому посиланні перед застосуванням виправлення.
|
||||
- Зібрати артефакт **після** на кандидатному посиланні після застосування виправлення.
|
||||
- Використовувати детермінований оракул, коли це можливо, наприклад читання реакцій
|
||||
через Discord REST або перевірку транскрипту каналу.
|
||||
- Збирати скриншоти, коли помилка має видиму поверхню інтерфейсу.
|
||||
- Запускатися локально з CLI, керованого агентом, і віддалено з GitHub.
|
||||
- Зберігати достатньо стану машини для відновлення через VNC, коли вхід, автоматизація браузера або
|
||||
автентифікація провайдера застрягає.
|
||||
- Публікувати стислий статус в операторський канал Discord, коли запуск заблокований,
|
||||
потребує ручної допомоги через VNC або завершується.
|
||||
|
||||
## Нецілі
|
||||
|
||||
- Mantis не замінює модульні тести. Запуск Mantis зазвичай має перетворитися на
|
||||
менший регресійний тест після того, як виправлення стане зрозумілим.
|
||||
- Mantis не є звичайним швидким CI-гейтом. Він повільніший, використовує живі облікові дані та
|
||||
призначений для помилок, де живе середовище має значення.
|
||||
- Mantis не повинен вимагати людини для нормальної роботи. Ручний VNC — це шлях
|
||||
- Mantis не є заміною модульних тестів. Запуск Mantis зазвичай має перетворитися
|
||||
на менший регресійний тест після того, як виправлення зрозуміле.
|
||||
- Mantis не є звичайним швидким CI-гейтом. Він повільніший, використовує живі облікові дані й
|
||||
призначений для помилок, де важливе живе середовище.
|
||||
- Mantis не має вимагати участі людини для нормальної роботи. Ручний VNC — це шлях
|
||||
відновлення, а не основний сценарій.
|
||||
- Mantis не зберігає сирі секрети в артефактах, логах, скриншотах, Markdown
|
||||
- Mantis не зберігає необроблені секрети в артефактах, журналах, скриншотах, Markdown-
|
||||
звітах або коментарях PR.
|
||||
|
||||
## Відповідальність
|
||||
## Власність
|
||||
|
||||
Mantis живе у QA-стеку OpenClaw.
|
||||
Mantis живе в стеку QA OpenClaw.
|
||||
|
||||
- OpenClaw відповідає за середовище виконання сценаріїв, транспортні адаптери, схему доказів і
|
||||
локальний CLI у `pnpm openclaw qa mantis`.
|
||||
- QA Lab відповідає за компоненти live transport harness, помічники браузерного захоплення та
|
||||
записувачі артефактів.
|
||||
- Crabbox відповідає за прогріті Linux-машини, коли потрібна віддалена VM.
|
||||
- GitHub Actions відповідає за віддалену точку входу workflow і збереження артефактів.
|
||||
- ClawSweeper відповідає за маршрутизацію коментарів GitHub: розбір команд мейнтейнерів,
|
||||
запуск workflow і публікацію фінального коментаря PR.
|
||||
- Агенти OpenClaw керують Mantis через Codex, коли сценарію потрібні агентне налаштування,
|
||||
налагодження або повідомлення про застряглий стан.
|
||||
- OpenClaw володіє середовищем виконання сценаріїв, транспортними адаптерами, схемою доказів і
|
||||
локальним CLI під `pnpm openclaw qa mantis`.
|
||||
- QA Lab володіє частинами живого транспортного стенда, допоміжними засобами захоплення браузера й
|
||||
записувачами артефактів.
|
||||
- Crabbox володіє прогрітими Linux-машинами, коли потрібна віддалена VM.
|
||||
- GitHub Actions володіє віддаленою точкою входу робочого процесу й зберіганням артефактів.
|
||||
- ClawSweeper володіє маршрутизацією коментарів GitHub: розбором команд мейнтейнерів,
|
||||
запуском робочого процесу й публікацією фінального коментаря PR.
|
||||
- Агенти OpenClaw керують Mantis через Codex, коли сценарій потребує агентного налаштування,
|
||||
налагодження або звітування про застряглий стан.
|
||||
|
||||
Ця межа тримає знання про транспорт в OpenClaw, планування машин у
|
||||
Crabbox, а клей мейнтейнерського workflow у ClawSweeper.
|
||||
Ця межа утримує знання про транспорт в OpenClaw, планування машин у
|
||||
Crabbox, а зв’язувальний шар робочого процесу мейнтейнерів у ClawSweeper.
|
||||
|
||||
## Форма команд
|
||||
## Форма команди
|
||||
|
||||
Перша локальна команда перевіряє Discord-бота, guild, канал, надсилання повідомлення,
|
||||
надсилання реакції та шлях артефактів:
|
||||
Перша локальна команда перевіряє бота Discord, гільдію, канал, надсилання повідомлення,
|
||||
надсилання реакції й шлях артефактів:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa mantis discord-smoke \
|
||||
--output-dir .artifacts/qa-e2e/mantis/discord-smoke
|
||||
```
|
||||
|
||||
Локальний runner для before і after приймає таку форму:
|
||||
Локальний runner для до й після приймає таку форму:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa mantis run \
|
||||
@ -90,61 +90,106 @@ pnpm openclaw qa mantis run \
|
||||
--output-dir .artifacts/qa-e2e/mantis/local-discord-status-reactions
|
||||
```
|
||||
|
||||
Runner створює від’єднані worktree для baseline і candidate у каталозі output,
|
||||
встановлює залежності, збирає кожен ref, запускає сценарій з
|
||||
Runner створює відокремлені базове й кандидатне робочі дерева в каталозі виводу,
|
||||
встановлює залежності, збирає кожне посилання, запускає сценарій з
|
||||
`--allow-failures`, а потім записує `baseline/`, `candidate/`, `comparison.json`
|
||||
і `mantis-report.md`. Для першого сценарію Discord успішна перевірка
|
||||
означає, що статус baseline — `fail`, а статус candidate — `pass`.
|
||||
означає, що базовий статус — `fail`, а кандидатний статус — `pass`.
|
||||
|
||||
Перша VM/браузерна примітива — desktop smoke:
|
||||
Перший примітив VM/браузера — це димова перевірка робочого столу:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa mantis desktop-browser-smoke \
|
||||
--output-dir .artifacts/qa-e2e/mantis/desktop-browser
|
||||
```
|
||||
|
||||
Вона орендує або повторно використовує desktop-машину Crabbox, запускає видимий браузер усередині
|
||||
VNC-сесії, захоплює desktop, забирає артефакти назад у локальний output
|
||||
каталог і записує команду перепідключення у звіт. Команда за замовчуванням
|
||||
використовує провайдера Hetzner, бо це перший провайдер із робочим desktop/VNC
|
||||
покриттям у лінії Mantis. Перевизначте це через `--provider`, `--crabbox-bin` або
|
||||
`OPENCLAW_MANTIS_CRABBOX_PROVIDER`, коли запускаєте проти іншого fleet Crabbox.
|
||||
Він орендує або повторно використовує настільну машину Crabbox, запускає видимий браузер усередині
|
||||
VNC-сесії, захоплює робочий стіл, стягує артефакти назад у локальний каталог
|
||||
виводу й записує команду повторного підключення у звіт. За замовчуванням команда
|
||||
використовує провайдера Hetzner, тому що це перший провайдер з робочим покриттям desktop/VNC
|
||||
у лінії Mantis. Перевизначайте це за допомогою `--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 використовує це, щоб захопити згенерований timeline status-reaction Discord через реальний Crabbox desktop.
|
||||
- `--keep-lease` або `OPENCLAW_MANTIS_KEEP_VM=1` залишає новостворений успішний lease відкритим для VNC-інспекції. Невдалі запуски за замовчуванням залишають lease, коли він був створений, щоб оператор міг перепідключитися.
|
||||
- `--class`, `--idle-timeout` і `--ttl` налаштовують розмір машини та час життя lease.
|
||||
- `--lease-id <cbx_...>` або `OPENCLAW_MANTIS_CRABBOX_LEASE_ID` повторно використовує прогрітий робочий стіл.
|
||||
- `--browser-url <url>` змінює сторінку, відкриту у видимому браузері.
|
||||
- `--html-file <path>` відображає локальний HTML-артефакт репозиторію у видимому браузері. Mantis використовує це для захоплення згенерованої часової шкали статусних реакцій Discord через реальний робочий стіл Crabbox.
|
||||
- `--keep-lease` або `OPENCLAW_MANTIS_KEEP_VM=1` залишає новостворену успішну оренду відкритою для перевірки через VNC. Невдалі запуски за замовчуванням зберігають оренду, якщо її було створено, щоб оператор міг повторно підключитися.
|
||||
- `--class`, `--idle-timeout` і `--ttl` налаштовують розмір машини й час життя оренди.
|
||||
|
||||
GitHub smoke workflow — `Mantis Discord Smoke`. GitHub workflow before і after
|
||||
для першого реального сценарію — `Mantis Discord Status Reactions`. Він
|
||||
Перший повний примітив настільного транспорту — це димова перевірка Slack на робочому столі:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa mantis slack-desktop-smoke \
|
||||
--output-dir .artifacts/qa-e2e/mantis/slack-desktop \
|
||||
--gateway-setup \
|
||||
--scenario slack-canary \
|
||||
--keep-lease
|
||||
```
|
||||
|
||||
Він орендує або повторно використовує настільну машину Crabbox, синхронізує поточний checkout у
|
||||
VM, запускає `pnpm openclaw qa slack` усередині цієї VM, відкриває Slack Web у VNC-
|
||||
браузері, захоплює видимий робочий стіл і копіює як артефакти Slack QA, так і
|
||||
VNC-скриншот назад у локальний каталог виводу. Це перша форма Mantis,
|
||||
де SUT Gateway OpenClaw і браузер обидва живуть усередині однієї
|
||||
настільної Linux VM.
|
||||
|
||||
З `--gateway-setup` команда готує постійний одноразовий дім OpenClaw
|
||||
у `$HOME/.openclaw-mantis/slack-openclaw`, патчить конфігурацію Slack Socket Mode
|
||||
для вибраного каналу, запускає `openclaw gateway run` на порту
|
||||
`38973` і тримає Chrome запущеним у VNC-сесії. Це режим "залиш мені
|
||||
Linux-робочий стіл зі Slack і запущеним claw"; лінія Slack QA бот-до-бота
|
||||
залишається типовою, коли `--gateway-setup` опущено.
|
||||
|
||||
Обов’язкові вхідні дані для `--credential-source env`:
|
||||
|
||||
- `OPENCLAW_QA_SLACK_CHANNEL_ID`
|
||||
- `OPENCLAW_QA_SLACK_DRIVER_BOT_TOKEN`
|
||||
- `OPENCLAW_QA_SLACK_SUT_BOT_TOKEN`
|
||||
- `OPENCLAW_QA_SLACK_SUT_APP_TOKEN`
|
||||
- `OPENCLAW_LIVE_OPENAI_KEY` для віддаленої модельної лінії. Якщо локально задано лише
|
||||
`OPENAI_API_KEY`, Mantis зіставляє його з `OPENCLAW_LIVE_OPENAI_KEY`
|
||||
перед викликом Crabbox, щоб пересилання env `OPENCLAW_*` у Crabbox могло передати його
|
||||
у VM.
|
||||
|
||||
Корисні прапорці Slack для робочого столу:
|
||||
|
||||
- `--lease-id <cbx_...>` повторно запускає на машині, де оператор уже увійшов у Slack Web через VNC.
|
||||
- `--gateway-setup` запускає постійний OpenClaw Slack Gateway у VM замість того, щоб лише запускати лінію QA бот-до-бота.
|
||||
- `--slack-url <url>` відкриває конкретну URL-адресу Slack Web. Без нього Mantis виводить `https://app.slack.com/client/<team>/<channel>` зі Slack `auth.test`, коли доступний токен 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 переживає повторні запуски на тій самій оренді.
|
||||
- `--credential-source convex --credential-role ci` використовує спільний пул облікових даних замість прямих env-токенів Slack.
|
||||
- `--provider-mode`, `--model`, `--alt-model` і `--fast` передаються до живої лінії Slack.
|
||||
|
||||
Димовий робочий процес GitHub — `Mantis Discord Smoke`. Робочий процес GitHub
|
||||
до й після для першого реального сценарію — `Mantis Discord Status Reactions`. Він
|
||||
приймає:
|
||||
|
||||
- `baseline_ref`: ref, який має відтворювати поведінку queued-only.
|
||||
- `candidate_ref`: ref, який має показувати `queued -> thinking -> done`.
|
||||
- `baseline_ref`: посилання, яке має відтворити поведінку лише queued.
|
||||
- `candidate_ref`: посилання, яке має показати `queued -> thinking -> done`.
|
||||
|
||||
Він checkout-ить ref workflow harness, збирає окремі worktree baseline і candidate,
|
||||
запускає `discord-status-reactions-tool-only` для кожного worktree і
|
||||
Він checkout-ить посилання стенда робочого процесу, збирає окремі базове й кандидатне
|
||||
робочі дерева, запускає `discord-status-reactions-tool-only` проти кожного робочого дерева та
|
||||
завантажує `baseline/`, `candidate/`, `comparison.json` і `mantis-report.md` як
|
||||
артефакти Actions. Він також рендерить HTML timeline кожної лінії у Crabbox
|
||||
desktop browser і публікує ці VNC-скриншоти поруч із детермінованими
|
||||
timeline PNG у коментарі PR. Workflow збирає Crabbox CLI з
|
||||
`openclaw/crabbox` main, щоб він міг використовувати поточні прапорці desktop/browser lease
|
||||
до наступного випуску бінарника Crabbox.
|
||||
артефакти Actions. Він також рендерить HTML часової шкали кожної лінії у браузері
|
||||
робочого столу Crabbox і публікує ці VNC-скриншоти поруч із детермінованими
|
||||
PNG часової шкали в коментарі PR. Робочий процес збирає Crabbox CLI з
|
||||
`openclaw/crabbox` main, щоб він міг використовувати поточні прапорці оренди desktop/browser
|
||||
до того, як буде випущено наступний бінарний реліз Crabbox.
|
||||
|
||||
Ви також можете запустити status-reactions run напряму з коментаря PR:
|
||||
Ви також можете запустити запуск статусних реакцій напряму з коментаря PR:
|
||||
|
||||
```text
|
||||
@Mantis discord status reactions
|
||||
```
|
||||
|
||||
Тригер коментаря навмисно вузький. Він запускається лише для коментарів pull request
|
||||
Тригер коментаря навмисно вузький. Він запускається лише на коментарях pull request
|
||||
від користувачів із доступом write, maintain або admin, і розпізнає лише
|
||||
запити status-reaction Discord. За замовчуванням він використовує відомий поганий baseline ref
|
||||
і поточний SHA head PR як candidate. Мейнтейнери можуть перевизначити будь-який
|
||||
ref:
|
||||
запити статусних реакцій Discord. За замовчуванням він використовує відоме погане базове посилання
|
||||
і поточний SHA голови PR як кандидата. Мейнтейнери можуть перевизначити будь-яке
|
||||
посилання:
|
||||
|
||||
```text
|
||||
@Mantis discord status reactions baseline=origin/main candidate=HEAD
|
||||
@ -157,49 +202,49 @@ ref:
|
||||
@clawsweeper verify e2e discord
|
||||
```
|
||||
|
||||
Перша команда явна й сфокусована на сценарії. Друга згодом може зіставляти PR
|
||||
або issue з рекомендованими сценаріями Mantis на основі labels, змінених файлів і
|
||||
результатів review ClawSweeper.
|
||||
Перша команда явна й сфокусована на сценарії. Друга пізніше може зіставляти PR
|
||||
або issue з рекомендованими сценаріями Mantis на основі міток, змінених файлів і
|
||||
висновків рев’ю ClawSweeper.
|
||||
|
||||
## Життєвий цикл запуску
|
||||
|
||||
1. Отримати облікові дані.
|
||||
2. Виділити або повторно використати VM.
|
||||
3. Підготувати профіль desktop/browser, коли сценарію потрібні UI-докази.
|
||||
4. Підготувати чистий checkout для baseline ref.
|
||||
5. Встановити залежності та зібрати лише те, що потрібно сценарію.
|
||||
3. Підготувати профіль робочого столу/браузера, коли сценарію потрібні докази інтерфейсу.
|
||||
4. Підготувати чистий checkout для базового посилання.
|
||||
5. Встановити залежності й зібрати лише те, що потрібно сценарію.
|
||||
6. Запустити дочірній OpenClaw Gateway з ізольованим каталогом стану.
|
||||
7. Налаштувати live transport, провайдера, модель і профіль браузера.
|
||||
8. Запустити сценарій і зібрати baseline-докази.
|
||||
9. Зупинити gateway і зберегти логи.
|
||||
10. Підготувати candidate ref у тій самій VM.
|
||||
11. Запустити той самий сценарій і зібрати candidate-докази.
|
||||
12. Порівняти результати оракула та візуальні докази.
|
||||
13. Записати Markdown, JSON, логи, скриншоти та необов’язкові trace-артефакти.
|
||||
7. Налаштувати живий транспорт, провайдера, модель і профіль браузера.
|
||||
8. Запустити сценарій і зібрати базові докази.
|
||||
9. Зупинити Gateway і зберегти журнали.
|
||||
10. Підготувати кандидатне посилання в тій самій VM.
|
||||
11. Запустити той самий сценарій і зібрати кандидатні докази.
|
||||
12. Порівняти результати оракула й візуальні докази.
|
||||
13. Записати Markdown, JSON, журнали, скриншоти й опціональні артефакти трасування.
|
||||
14. Завантажити артефакти GitHub Actions.
|
||||
15. Опублікувати стислий статус у PR або Discord.
|
||||
15. Опублікувати стислий статусний коментар PR або повідомлення Discord.
|
||||
|
||||
Сценарій має вміти падати двома різними способами:
|
||||
Сценарій має вміти зазнавати невдачі двома різними способами:
|
||||
|
||||
- **Помилку відтворено**: baseline впав очікуваним способом.
|
||||
- **Помилка harness**: налаштування середовища, облікові дані, Discord API, браузер або
|
||||
провайдер впали до того, як оракул помилки став значущим.
|
||||
- **Помилку відтворено**: базова версія зазнала невдачі очікуваним способом.
|
||||
- **Збій стенда**: налаштування середовища, облікові дані, Discord API, браузер або
|
||||
провайдер зазнали невдачі до того, як оракул помилки став змістовним.
|
||||
|
||||
Фінальний звіт має розділяти ці випадки, щоб мейнтейнери не плутали нестабільне
|
||||
середовище з поведінкою продукту.
|
||||
|
||||
## MVP Discord
|
||||
|
||||
Перший сценарій має націлюватися на status reactions Discord у guild channels, де
|
||||
режим доставки source reply — `message_tool_only`.
|
||||
Перший сценарій має бути націлений на статусні реакції Discord у каналах гільдій, де
|
||||
режим доставки вихідної відповіді — `message_tool_only`.
|
||||
|
||||
Чому це добрий початковий сценарій для Mantis:
|
||||
Чому це добрий початковий сценарій Mantis:
|
||||
|
||||
- Це видно в Discord як реакції на повідомленні, яке запустило дію.
|
||||
- Він видимий у Discord як реакції на тригерне повідомлення.
|
||||
- Він має сильний REST-оракул через стан реакцій повідомлення Discord.
|
||||
- Він перевіряє реальний OpenClaw Gateway, автентифікацію Discord-бота, dispatch повідомлень,
|
||||
режим доставки source reply, стан status reaction і життєвий цикл model turn.
|
||||
- Він достатньо вузький, щоб перша реалізація залишалася чесною.
|
||||
- Він перевіряє реальний OpenClaw Gateway, автентифікацію бота Discord, відправлення повідомлень,
|
||||
режим доставки вихідної відповіді, стан статусних реакцій і життєвий цикл модельного ходу.
|
||||
- Він достатньо вузький, щоб перша реалізація була чесною.
|
||||
|
||||
Очікувана форма сценарію:
|
||||
|
||||
@ -232,12 +277,12 @@ evidence:
|
||||
screenshotMessageRow: true
|
||||
```
|
||||
|
||||
Baseline-докази мають показувати queued acknowledgement reaction, але без
|
||||
lifecycle transition у режимі tool-only. Candidate-докази мають показувати, що lifecycle
|
||||
status reactions працюють, коли `messages.statusReactions.enabled` явно
|
||||
дорівнює true.
|
||||
Базові докази мають показувати реакцію підтвердження queued, але без
|
||||
переходу життєвого циклу в режимі лише інструмента. Кандидатні докази мають показувати, що
|
||||
статусні реакції життєвого циклу працюють, коли `messages.statusReactions.enabled` явно
|
||||
встановлено в true.
|
||||
|
||||
Виконуваний перший зріз — opt-in live QA сценарій Discord:
|
||||
Перший виконуваний зріз — це opt-in живий сценарій Discord QA:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa discord \
|
||||
@ -249,30 +294,30 @@ pnpm openclaw qa discord \
|
||||
--output-dir .artifacts/qa-e2e/mantis/discord-status-reactions-candidate
|
||||
```
|
||||
|
||||
Він налаштовує SUT з always-on guild handling, `visibleReplies:
|
||||
"message_tool"`, `ackReaction: "👀"` і явними status reactions. Оракул
|
||||
опитує реальне Discord-повідомлення, що запустило дію, і очікує спостережену послідовність
|
||||
Він налаштовує SUT із постійно ввімкненою обробкою гільдій, `visibleReplies:
|
||||
"message_tool"`, `ackReaction: "👀"` та явними статусними реакціями. Оракул
|
||||
опитує реальне тригерне повідомлення Discord і очікує спостережувану послідовність
|
||||
`👀 -> 🤔 -> 👍`. Артефакти включають `discord-qa-reaction-timelines.json`,
|
||||
`discord-status-reactions-tool-only-timeline.html` і
|
||||
`discord-status-reactions-tool-only-timeline.png`.
|
||||
|
||||
## Наявні компоненти QA
|
||||
|
||||
Mantis має будуватися на наявному приватному QA-стеку, а не починати з
|
||||
Mantis має будуватися на наявному приватному стеку QA, а не починати з
|
||||
нуля:
|
||||
|
||||
- `pnpm openclaw qa discord` уже запускає live Discord line з driver і
|
||||
SUT bots.
|
||||
- Live transport runner уже записує звіти та observed-message
|
||||
артефакти в `.artifacts/qa-e2e/`.
|
||||
- Credential leases Convex уже надають ексклюзивний доступ до спільних live
|
||||
transport credentials.
|
||||
- Browser control service уже підтримує скриншоти, snapshots,
|
||||
headless managed profiles і remote CDP profiles.
|
||||
- QA Lab уже має debugger UI і bus для transport-shaped testing.
|
||||
- `pnpm openclaw qa discord` вже запускає живу лінію Discord із ботами-драйвером і
|
||||
SUT.
|
||||
- Живий транспортний runner уже записує звіти та артефакти спостережуваних повідомлень
|
||||
у `.artifacts/qa-e2e/`.
|
||||
- Оренди облікових даних Convex уже надають ексклюзивний доступ до спільних живих
|
||||
транспортних облікових даних.
|
||||
- Сервіс керування браузером уже підтримує знімки екрана, snapshots,
|
||||
керовані headless-профілі та віддалені CDP-профілі.
|
||||
- QA Lab уже має UI налагоджувача та шину для тестування у формі транспортів.
|
||||
|
||||
Перша реалізація Mantis може бути тонким before/after runner поверх цих
|
||||
компонентів плюс один шар візуальних доказів.
|
||||
Перша реалізація Mantis може бути тонким runner до/після над цими
|
||||
компонентами плюс один шар візуальних доказів.
|
||||
|
||||
## Модель доказів
|
||||
|
||||
@ -296,78 +341,77 @@ Mantis має будуватися на наявному приватному QA
|
||||
run.log
|
||||
```
|
||||
|
||||
`mantis-summary.json` має бути машинозчитуваним джерелом істини. Markdown
|
||||
звіт призначений для коментарів PR і людського review.
|
||||
`mantis-summary.json` має бути машинно-читабельним джерелом істини. Markdown-звіт
|
||||
призначений для коментарів до PR та людського перегляду.
|
||||
|
||||
Summary має включати:
|
||||
Підсумок має включати:
|
||||
|
||||
- перевірені refs і SHAs
|
||||
- transport і scenario id
|
||||
- machine provider і machine id або lease id
|
||||
- credential source без secret values
|
||||
- baseline result
|
||||
- candidate result
|
||||
- чи помилка відтворилася на baseline
|
||||
- чи candidate виправив її
|
||||
- artifact paths
|
||||
- санітизовані setup або cleanup issues
|
||||
- refs і SHAs, які тестувалися
|
||||
- транспорт і id сценарію
|
||||
- провайдера машини та id машини або id оренди
|
||||
- джерело облікових даних без секретних значень
|
||||
- результат baseline
|
||||
- результат candidate
|
||||
- чи відтворилася помилка на baseline
|
||||
- чи виправив її candidate
|
||||
- шляхи артефактів
|
||||
- очищені проблеми налаштування або очищення
|
||||
|
||||
Скриншоти — це докази, а не секрети. Однак вони все одно потребують дисципліни редагування:
|
||||
Знімки екрана є доказами, а не секретами. Вони все одно потребують дисципліни редагування:
|
||||
можуть з’являтися приватні назви каналів, імена користувачів або вміст повідомлень. Для публічних PR
|
||||
віддавайте перевагу посиланням на артефакти GitHub Actions замість inline images, доки історія редагування
|
||||
не стане сильнішою.
|
||||
надавайте перевагу посиланням на артефакти GitHub Actions замість вбудованих зображень, доки історія редагування
|
||||
не стане надійнішою.
|
||||
|
||||
## Браузер і VNC
|
||||
|
||||
Browser lane має два режими:
|
||||
Браузерна лінія має два режими:
|
||||
|
||||
- **Headless automation**: стандартний для CI. Chrome запускається з увімкненим CDP, а
|
||||
Playwright або browser control OpenClaw збирає скриншоти.
|
||||
- **VNC rescue**: вмикається на тій самій VM, коли вхід, MFA, Discord anti-automation
|
||||
або візуальне налагодження потребує людини.
|
||||
- **Headless-автоматизація**: стандартно для CI. Chrome запускається з увімкненим CDP, а
|
||||
Playwright або керування браузером OpenClaw захоплює знімки екрана.
|
||||
- **VNC-рятування**: вмикається на тій самій VM, коли вхід, MFA, антиавтоматизація Discord
|
||||
або візуальне налагодження потребують людини.
|
||||
|
||||
Профіль браузера спостерігача Discord має бути достатньо сталим, щоб не
|
||||
входити в систему під час кожного запуску, але ізольованим від особистого стану
|
||||
браузера. Профіль належить пулу машин Mantis, а не ноутбуку розробника.
|
||||
Браузерний профіль спостерігача Discord має бути достатньо постійним, щоб уникати
|
||||
входу під час кожного запуску, але ізольованим від особистого стану браузера. Профіль
|
||||
належить пулу машин Mantis, а не ноутбуку розробника.
|
||||
|
||||
Коли Mantis застрягає, він публікує статусне повідомлення Discord із:
|
||||
|
||||
- id запуску
|
||||
- id сценарію
|
||||
- постачальником машин
|
||||
- провайдером машини
|
||||
- каталогом артефактів
|
||||
- інструкціями підключення через VNC або noVNC, якщо доступно
|
||||
- інструкціями підключення VNC або noVNC, якщо доступні
|
||||
- коротким текстом блокера
|
||||
|
||||
Перше приватне розгортання може публікувати ці повідомлення в наявний канал
|
||||
операторів, а пізніше перейти до окремого каналу Mantis.
|
||||
Перше приватне розгортання може публікувати ці повідомлення в наявний операторський
|
||||
канал і пізніше перейти до окремого каналу Mantis.
|
||||
|
||||
## Машини
|
||||
|
||||
Mantis має надавати перевагу AWS через Crabbox для першої віддаленої реалізації.
|
||||
Crabbox надає нам прогріті машини, відстеження оренди, гідратацію, логи,
|
||||
результати та очищення. Якщо потужності AWS надто повільні або недоступні,
|
||||
додайте постачальника Hetzner за тим самим інтерфейсом машин.
|
||||
Crabbox дає нам прогріті машини, відстеження оренд, hydration, журнали, результати та
|
||||
очищення. Якщо місткість AWS надто повільна або недоступна, додайте провайдера Hetzner
|
||||
за тим самим інтерфейсом машини.
|
||||
|
||||
Мінімальні вимоги до VM:
|
||||
|
||||
- Linux з інсталяцією Chrome або Chromium, придатною для робочого столу
|
||||
- доступ CDP для автоматизації браузера
|
||||
- VNC або noVNC для відновлення
|
||||
- Linux зі встановленим Chrome або Chromium, придатним для робочого столу
|
||||
- CDP-доступ для автоматизації браузера
|
||||
- VNC або noVNC для рятування
|
||||
- Node 22 і pnpm
|
||||
- checkout OpenClaw і кеш залежностей
|
||||
- кеш браузера Playwright Chromium, коли використовується Playwright
|
||||
- достатньо CPU та пам’яті для одного OpenClaw Gateway, одного браузера й одного модельного запуску
|
||||
- вихідний доступ до Discord, GitHub, постачальників моделей і брокера облікових даних
|
||||
- вихідний доступ до Discord, GitHub, модельних провайдерів і брокера облікових даних
|
||||
|
||||
VM не має зберігати довготривалі необроблені секрети поза очікуваними сховищами
|
||||
облікових даних або профілю браузера.
|
||||
VM не повинна зберігати довгоживучі сирі секрети поза очікуваними сховищами облікових даних або
|
||||
браузерних профілів.
|
||||
|
||||
## Секрети
|
||||
|
||||
Секрети зберігаються в секретах організації або репозиторію GitHub для
|
||||
віддалених запусків, а для локальних запусків — у локальному файлі секретів під
|
||||
контролем оператора.
|
||||
Секрети зберігаються в секретах організації або репозиторію GitHub для віддалених запусків і в
|
||||
локальному файлі секретів під контролем оператора для локальних запусків.
|
||||
|
||||
Рекомендовані назви секретів:
|
||||
|
||||
@ -383,47 +427,44 @@ VM не має зберігати довготривалі необроблен
|
||||
- `OPENCLAW_QA_MANTIS_CRABBOX_COORDINATOR`
|
||||
- `OPENCLAW_QA_MANTIS_CRABBOX_COORDINATOR_TOKEN`
|
||||
|
||||
У довгостроковій перспективі пул облікових даних Convex має залишатися
|
||||
звичайним джерелом для живих транспортних облікових даних. Секрети GitHub
|
||||
початково завантажують брокер і резервні лінії. Workflow статусних реакцій
|
||||
Discord зіставляє секрети Mantis Crabbox назад зі змінними середовища
|
||||
`CRABBOX_COORDINATOR` і `CRABBOX_COORDINATOR_TOKEN`, яких очікує Crabbox CLI.
|
||||
Прості назви секретів GitHub `CRABBOX_*` залишаються прийнятими як резервна
|
||||
сумісність.
|
||||
У довгостроковій перспективі пул облікових даних Convex має залишатися звичайним джерелом живих
|
||||
транспортних облікових даних. Секрети GitHub bootstrap брокер і резервні лінії.
|
||||
Workflow статусних реакцій Discord зіставляє секрети Mantis Crabbox назад із
|
||||
змінними середовища `CRABBOX_COORDINATOR` і `CRABBOX_COORDINATOR_TOKEN`,
|
||||
які очікує Crabbox CLI. Прості назви секретів GitHub `CRABBOX_*` залишаються
|
||||
прийнятими як резервна сумісність.
|
||||
|
||||
Runner Mantis ніколи не повинен друкувати:
|
||||
|
||||
- токени ботів Discord
|
||||
- API-ключі постачальників
|
||||
- cookie браузера
|
||||
- API-ключі провайдерів
|
||||
- cookies браузера
|
||||
- вміст профілів автентифікації
|
||||
- паролі VNC
|
||||
- необроблені payload облікових даних
|
||||
- сирі payload облікових даних
|
||||
|
||||
Публічні завантаження артефактів також мають редагувати цільові метадані
|
||||
Discord, як-от id бота, guild, каналу та повідомлення. Workflow GitHub smoke
|
||||
увімкнув `OPENCLAW_QA_REDACT_PUBLIC_METADATA=1` саме з цієї причини.
|
||||
Публічні завантаження артефактів також мають редагувати цільові метадані Discord, такі як id ботів,
|
||||
гільдій, каналів і повідомлень. Smoke workflow GitHub вмикає
|
||||
`OPENCLAW_QA_REDACT_PUBLIC_METADATA=1` саме з цієї причини.
|
||||
|
||||
Якщо токен випадково вставили в issue, PR, чат або лог, поверніть його після
|
||||
збереження нового секрету.
|
||||
Якщо токен випадково вставлено в issue, PR, чат або журнал, поверніть його
|
||||
після збереження нового секрету.
|
||||
|
||||
## Артефакти GitHub і коментарі PR
|
||||
|
||||
Workflow Mantis мають завантажувати повний пакет доказів як короткоживучий
|
||||
артефакт Actions. Коли workflow запускається для звіту про баг або PR із
|
||||
виправленням, він також має публікувати відредаговані PNG-скріншоти в гілку
|
||||
`qa-artifacts` і оновлювати або створювати коментар до цього бага чи PR із
|
||||
виправленням із вбудованими скріншотами до/після. Не публікуйте основний доказ
|
||||
лише в загальному PR автоматизації QA. Необроблені логи, спостережені
|
||||
повідомлення та інші об’ємні докази залишаються в артефакті Actions.
|
||||
Workflow Mantis мають завантажувати повний пакет доказів як короткоживучий артефакт Actions.
|
||||
Коли workflow запускається для звіту про помилку або PR із виправленням, він також має
|
||||
публікувати відредаговані PNG-знімки екрана до гілки `qa-artifacts` і upsert
|
||||
коментар до цієї помилки або PR із виправленням із вбудованими знімками екрана до/після. Не публікуйте
|
||||
основний доказ лише в загальному PR автоматизації QA. Сирі журнали, спостережувані
|
||||
повідомлення та інші великі докази залишаються в артефакті Actions.
|
||||
|
||||
Виробничі workflow мають публікувати ці коментарі через GitHub App Mantis, а не
|
||||
через `github-actions[bot]`. Зберігайте id застосунку та приватний ключ як
|
||||
секрети GitHub Actions `MANTIS_GITHUB_APP_ID` і
|
||||
`MANTIS_GITHUB_APP_PRIVATE_KEY`. Workflow використовує прихований маркер як ключ
|
||||
upsert, оновлює цей коментар, коли токен може його редагувати, і створює новий
|
||||
коментар, що належить Mantis, коли старіший маркер, який належить боту, не можна
|
||||
редагувати.
|
||||
Production workflow мають публікувати ці коментарі через GitHub App Mantis, а не
|
||||
через `github-actions[bot]`. Збережіть app id і приватний ключ як секрети GitHub Actions
|
||||
`MANTIS_GITHUB_APP_ID` і `MANTIS_GITHUB_APP_PRIVATE_KEY`.
|
||||
Workflow використовує прихований маркер як ключ upsert, оновлює цей
|
||||
коментар, коли токен може його редагувати, і створює новий коментар, власником якого є Mantis, коли
|
||||
старіший маркер, власником якого є бот, неможливо редагувати.
|
||||
|
||||
Коментар PR має бути коротким і візуальним:
|
||||
|
||||
@ -445,21 +486,21 @@ candidate showed the expected queued -> thinking -> done sequence.
|
||||
| <inline screenshot> | <inline screenshot> |
|
||||
```
|
||||
|
||||
Коли запуск завершується невдало через збій harness, коментар має повідомляти
|
||||
саме це, а не натякати, що кандидат не пройшов.
|
||||
Коли запуск не вдається через збій harness, коментар має сказати саме це,
|
||||
а не натякати, що candidate не пройшов.
|
||||
|
||||
## Нотатки щодо приватного розгортання
|
||||
|
||||
Приватне розгортання вже може мати застосунок Discord для Mantis. Повторно
|
||||
використовуйте цей застосунок замість створення іншого, якщо він має потрібні
|
||||
дозволи бота й може бути безпечно ротований.
|
||||
Приватне розгортання може вже мати застосунок Mantis Discord. Повторно використовуйте цей
|
||||
застосунок замість створення іншого, коли він має потрібні дозволи бота
|
||||
і його можна безпечно ротувати.
|
||||
|
||||
Налаштуйте початковий канал сповіщень оператора через секрети або конфігурацію
|
||||
розгортання. Спочатку він може вказувати на наявний канал мейнтейнерів або
|
||||
операцій, а потім перейти до окремого каналу Mantis, щойно він з’явиться.
|
||||
Налаштуйте початковий канал операторських сповіщень через секрети або конфігурацію
|
||||
розгортання. Спочатку він може вказувати на наявний канал maintainers або operations,
|
||||
а потім перейти до окремого каналу Mantis, щойно він з’явиться.
|
||||
|
||||
Не вносьте guild ids, channel ids, токени ботів, cookie браузера або паролі VNC
|
||||
у цей документ. Зберігайте їх у секретах GitHub, брокері облікових даних або
|
||||
Не розміщуйте guild ids, channel ids, токени ботів, cookies браузера або паролі VNC
|
||||
у цьому документі. Зберігайте їх у секретах GitHub, брокері облікових даних або
|
||||
локальному сховищі секретів оператора.
|
||||
|
||||
## Додавання сценарію
|
||||
@ -471,44 +512,46 @@ candidate showed the expected queued -> thinking -> done sequence.
|
||||
- потрібні облікові дані
|
||||
- політику baseline ref
|
||||
- політику candidate ref
|
||||
- патч конфігурації OpenClaw
|
||||
- config patch OpenClaw
|
||||
- кроки налаштування
|
||||
- стимул
|
||||
- очікуваний baseline oracle
|
||||
- очікуваний candidate oracle
|
||||
- stimulus
|
||||
- очікуваний оракул baseline
|
||||
- очікуваний оракул candidate
|
||||
- цілі візуального захоплення
|
||||
- бюджет timeout
|
||||
- кроки очищення
|
||||
|
||||
Сценарії мають надавати перевагу малим типізованим oracle:
|
||||
Сценарії мають надавати перевагу малим типізованим оракулам:
|
||||
|
||||
- стан реакцій Discord для багів реакцій
|
||||
- посилання на повідомлення Discord для багів тредингу
|
||||
- thread ts Slack і стан API реакцій для багів Slack
|
||||
- id повідомлень email і заголовки для багів email
|
||||
- скріншоти браузера, коли UI є єдиним надійним спостережуваним сигналом
|
||||
- стан реакцій Discord для помилок реакцій
|
||||
- посилання на повідомлення Discord для помилок threading
|
||||
- Slack thread ts і стан reaction API для помилок Slack
|
||||
- id повідомлень email і headers для помилок email
|
||||
- знімки екрана браузера, коли UI є єдиним надійним спостережуваним сигналом
|
||||
|
||||
Vision-перевірки мають бути додатковими. Якщо API платформи може довести баг,
|
||||
використовуйте API як oracle pass/fail, а скріншоти залишайте для впевненості
|
||||
людей.
|
||||
Vision-перевірки мають бути додатковими. Якщо API платформи може довести помилку, використовуйте
|
||||
API як оракул pass/fail і залишайте знімки екрана для людської впевненості.
|
||||
|
||||
## Розширення постачальників
|
||||
## Розширення провайдерів
|
||||
|
||||
Після Discord той самий runner може додати:
|
||||
|
||||
- Slack: реакції, треди, згадки застосунку, модальні вікна, завантаження файлів.
|
||||
- Email: автентифікацію Gmail і трединг повідомлень за допомогою `gog`, коли конекторів недостатньо.
|
||||
- WhatsApp: вхід через QR, повторну ідентифікацію, доставку повідомлень, медіа, реакції.
|
||||
- Telegram: gating згадок у групі, команди, реакції там, де доступно.
|
||||
- Matrix: зашифровані кімнати, зв’язки тредів або відповідей, відновлення після перезапуску.
|
||||
- Slack: reactions, threads, app mentions, modals, file uploads.
|
||||
- Email: автентифікація Gmail і threading повідомлень за допомогою `gog`, де connectors недостатньо.
|
||||
- WhatsApp: QR-вхід, повторна ідентифікація, доставка повідомлень, media, reactions.
|
||||
- Telegram: gating згадок у групах, commands, reactions, де доступно.
|
||||
- Matrix: зашифровані rooms, thread або reply relations, restart resume.
|
||||
|
||||
Кожен транспорт має мати один дешевий smoke-сценарій і один або більше сценаріїв
|
||||
класу багів. Дорогі візуальні сценарії мають залишатися opt-in.
|
||||
Кожен транспорт має мати один дешевий smoke-сценарій і один або більше сценаріїв класу помилок.
|
||||
Дорогі візуальні сценарії мають залишатися opt-in.
|
||||
|
||||
## Відкриті питання
|
||||
|
||||
- Який бот Discord має бути driver, а який SUT, коли наявний бот Mantis використовується повторно?
|
||||
- Чи має вхід браузера спостерігача використовувати людський обліковий запис Discord, тестовий обліковий запис або лише REST-докази, доступні для читання ботом, на першій фазі?
|
||||
- Який бот Discord має бути driver, а який SUT, коли наявний
|
||||
бот Mantis використовується повторно?
|
||||
- Чи має вхід браузера спостерігача використовувати людський обліковий запис Discord, тестовий обліковий запис
|
||||
або лише REST-докази, доступні для читання ботом, для першої фази?
|
||||
- Як довго GitHub має зберігати артефакти Mantis для PR?
|
||||
- Коли ClawSweeper має автоматично рекомендувати Mantis замість очікування команди мейнтейнера?
|
||||
- Чи мають скріншоти редагуватися або обрізатися перед завантаженням для публічних PR?
|
||||
- Коли ClawSweeper має автоматично рекомендувати Mantis замість очікування
|
||||
команди maintainer?
|
||||
- Чи потрібно редагувати або обрізати знімки екрана перед завантаженням для публічних PR?
|
||||
|
||||
@ -1,66 +1,67 @@
|
||||
---
|
||||
read_when:
|
||||
- Розуміння того, як стек QA працює як єдине ціле
|
||||
- Розуміння того, як компоненти стеку забезпечення якості поєднуються між собою
|
||||
- Розширення qa-lab, qa-channel або транспортного адаптера
|
||||
- Додавання QA-сценаріїв на основі репозиторію
|
||||
- Побудова автоматизації QA з підвищеною реалістичністю навколо панелі керування Gateway
|
||||
summary: 'Огляд стеку QA: qa-lab, qa-channel, сценарії на основі репозиторію, лінії реального транспорту, транспортні адаптери та звітування.'
|
||||
- Створення реалістичнішої QA-автоматизації навколо панелі керування Gateway
|
||||
summary: 'Огляд стеку QA: qa-lab, qa-channel, сценарії на основі репозиторію, лінії живого транспорту, транспортні адаптери та звітність.'
|
||||
title: Огляд забезпечення якості
|
||||
x-i18n:
|
||||
generated_at: "2026-05-04T00:35:17Z"
|
||||
generated_at: "2026-05-04T02:51:53Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 0b376767b967a51cc8a45ca5ce420f78067b52e6368d2abe921ffed533f6f9ba
|
||||
source_hash: 067f5aa0831724659ae36d548ef2e7bd28b40aad9cef45f325a01a2748003b29
|
||||
source_path: concepts/qa-e2e-automation.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
Приватний QA-стек призначений для перевірки OpenClaw реалістичнішим,
|
||||
схожим на канали способом, ніж це може зробити один модульний тест.
|
||||
Приватний QA-стек призначений для перевірки OpenClaw у реалістичнішому,
|
||||
канально-орієнтованому режимі, ніж це може зробити один модульний тест.
|
||||
|
||||
Поточні складники:
|
||||
Поточні складові:
|
||||
|
||||
- `extensions/qa-channel`: синтетичний канал повідомлень із поверхнями DM, каналу, треду,
|
||||
реакції, редагування та видалення.
|
||||
- `extensions/qa-lab`: UI налагоджувача й QA-шина для спостереження за транскриптом,
|
||||
ін’єкції вхідних повідомлень і експорту Markdown-звіту.
|
||||
- `extensions/qa-matrix`, майбутні плагіни запуску: адаптери live-транспорту, які
|
||||
керують реальним каналом усередині дочірнього QA gateway.
|
||||
- `qa/`: seed-ресурси з репозиторію для початкового завдання та базових QA-сценаріїв.
|
||||
- [Mantis](/uk/concepts/mantis): перевірка до й після наживо для помилок, яким
|
||||
потрібні реальні транспорти, знімки екрана браузера, стан VM і докази PR.
|
||||
реакції, редагування й видалення.
|
||||
- `extensions/qa-lab`: інтерфейс налагоджувача й QA-шина для спостереження за транскриптом,
|
||||
ін’єкції вхідних повідомлень та експорту Markdown-звіту.
|
||||
- `extensions/qa-matrix`, майбутні runner plugins: адаптери живого транспорту, які
|
||||
керують реальним каналом усередині дочірнього QA Gateway.
|
||||
- `qa/`: seed-ресурси з репозиторію для стартового завдання та базових QA
|
||||
сценаріїв.
|
||||
- [Mantis](/uk/concepts/mantis): перевірка до й після live-валідації для багів, яким
|
||||
потрібні реальні транспорти, знімки екрана браузера, стан VM і докази для PR.
|
||||
|
||||
## Поверхня команд
|
||||
|
||||
Кожен QA-потік виконується через `pnpm openclaw qa <subcommand>`. Багато з них мають
|
||||
аліаси скриптів `pnpm qa:*`; підтримуються обидві форми.
|
||||
Кожен QA-потік запускається через `pnpm openclaw qa <subcommand>`. Багато з них мають
|
||||
псевдоніми скриптів `pnpm qa:*`; підтримуються обидві форми.
|
||||
|
||||
| Команда | Призначення |
|
||||
| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `qa run` | Вбудована самоперевірка QA; записує Markdown-звіт. |
|
||||
| `qa suite` | Запустити сценарії з репозиторію проти QA gateway lane. Аліаси: `pnpm openclaw qa suite --runner multipass` для одноразової Linux VM. |
|
||||
| `qa coverage` | Вивести markdown-інвентар покриття сценаріїв (`--json` для машинного виводу). |
|
||||
| `qa parity-report` | Порівняти два файли `qa-suite-summary.json` і записати agentic parity-звіт. |
|
||||
| `qa character-eval` | Запустити character QA-сценарій на кількох live-моделях зі звітом, оціненим суддею. Див. [Звітування](#reporting). |
|
||||
| `qa manual` | Запустити одноразовий prompt проти вибраної provider/model lane. |
|
||||
| `qa ui` | Запустити UI налагоджувача QA та локальну QA-шину (аліас: `pnpm qa:lab:ui`). |
|
||||
| `qa docker-build-image` | Зібрати попередньо підготовлений QA Docker-образ. |
|
||||
| `qa docker-scaffold` | Записати docker-compose scaffold для QA-дашборда + gateway lane. |
|
||||
| `qa up` | Зібрати QA-сайт, запустити стек на Docker, вивести URL (аліас: `pnpm qa:lab:up`; варіант `:fast` додає `--use-prebuilt-image --bind-ui-dist --skip-ui-build`). |
|
||||
| `qa aimock` | Запустити лише сервер AIMock provider. |
|
||||
| `qa mock-openai` | Запустити лише scenario-aware сервер provider `mock-openai`. |
|
||||
| `qa credentials doctor` / `add` / `list` / `remove` | Керувати спільним пулом облікових даних Convex. |
|
||||
| `qa matrix` | Live transport lane проти одноразового Tuwunel homeserver. Див. [Matrix QA](/uk/concepts/qa-matrix). |
|
||||
| `qa telegram` | Live transport lane проти реальної приватної групи Telegram. |
|
||||
| `qa discord` | Live transport lane проти реального приватного каналу Discord guild. |
|
||||
| `qa slack` | Live transport lane проти реального приватного каналу Slack. |
|
||||
| `qa mantis` | Runner перевірки до й після для помилок live transport, з доказами status-reactions у Discord і desktop/browser smoke у Crabbox. Див. [Mantis](/uk/concepts/mantis). |
|
||||
| Команда | Призначення |
|
||||
| --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `qa run` | Вбудована самоперевірка QA; записує Markdown-звіт. |
|
||||
| `qa suite` | Запускає сценарії з репозиторію проти lane QA Gateway. Псевдоніми: `pnpm openclaw qa suite --runner multipass` для одноразової Linux VM. |
|
||||
| `qa coverage` | Друкує Markdown-інвентар покриття сценаріїв (`--json` для машинного виводу). |
|
||||
| `qa parity-report` | Порівнює два файли `qa-suite-summary.json` і записує агентний звіт про паритет. |
|
||||
| `qa character-eval` | Запускає QA-сценарій персонажа на кількох live-моделях із оціненим звітом. Див. [Звітування](#reporting). |
|
||||
| `qa manual` | Запускає одноразовий prompt проти вибраного lane провайдера/моделі. |
|
||||
| `qa ui` | Запускає інтерфейс QA-нóлагоджувача та локальну QA-шину (псевдонім: `pnpm qa:lab:ui`). |
|
||||
| `qa docker-build-image` | Збирає попередньо підготовлений QA Docker-образ. |
|
||||
| `qa docker-scaffold` | Записує docker-compose scaffold для QA-панелі + lane Gateway. |
|
||||
| `qa up` | Збирає QA-сайт, запускає стек на Docker, друкує URL (псевдонім: `pnpm qa:lab:up`; варіант `:fast` додає `--use-prebuilt-image --bind-ui-dist --skip-ui-build`). |
|
||||
| `qa aimock` | Запускає лише сервер провайдера AIMock. |
|
||||
| `qa mock-openai` | Запускає лише scenario-aware сервер провайдера `mock-openai`. |
|
||||
| `qa credentials doctor` / `add` / `list` / `remove` | Керує спільним пулом облікових даних Convex. |
|
||||
| `qa matrix` | Lane живого транспорту проти одноразового homeserver Tuwunel. Див. [Matrix QA](/uk/concepts/qa-matrix). |
|
||||
| `qa telegram` | Lane живого транспорту проти реальної приватної групи Telegram. |
|
||||
| `qa discord` | Lane живого транспорту проти реального приватного каналу guild Discord. |
|
||||
| `qa slack` | Lane живого транспорту проти реального приватного каналу Slack. |
|
||||
| `qa mantis` | Runner перевірки до й після для багів живого транспорту, з доказами Discord status-reactions, desktop/browser smoke у Crabbox і Slack-in-VNC smoke. Див. [Mantis](/uk/concepts/mantis). |
|
||||
|
||||
## Потік оператора
|
||||
## Операторський потік
|
||||
|
||||
Поточний потік QA-оператора — це двопанельний QA-сайт:
|
||||
Поточний операторський QA-потік — це двопанельний QA-сайт:
|
||||
|
||||
- Ліворуч: Gateway-дашборд (Control UI) з агентом.
|
||||
- Ліворуч: панель Gateway (Control UI) з агентом.
|
||||
- Праворуч: QA Lab, що показує Slack-подібний транскрипт і план сценарію.
|
||||
|
||||
Запустіть його так:
|
||||
@ -69,13 +70,13 @@ x-i18n:
|
||||
pnpm qa:lab:up
|
||||
```
|
||||
|
||||
Це збирає QA-сайт, запускає gateway lane на Docker і відкриває
|
||||
сторінку QA Lab, де оператор або цикл автоматизації може дати агенту QA-місію,
|
||||
спостерігати реальну поведінку каналу й записати, що спрацювало, не спрацювало або
|
||||
залишилося заблокованим.
|
||||
Це збирає QA-сайт, запускає lane Gateway на Docker і відкриває сторінку
|
||||
QA Lab, де оператор або цикл автоматизації може дати агенту QA-місію,
|
||||
спостерігати реальну поведінку каналу та записувати, що спрацювало, що не вдалося
|
||||
або що залишилося заблокованим.
|
||||
|
||||
Для швидшої ітерації UI QA Lab без перебудови Docker-образу щоразу
|
||||
запустіть стек із bind-mounted бандлом QA Lab:
|
||||
Для швидшої ітерації QA Lab UI без перезбирання Docker-образу щоразу
|
||||
запустіть стек із bind-mounted QA Lab bundle:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa docker-build-image
|
||||
@ -84,38 +85,38 @@ pnpm qa:lab:up:fast
|
||||
pnpm qa:lab:watch
|
||||
```
|
||||
|
||||
`qa:lab:up:fast` тримає Docker-сервіси на попередньо зібраному образі та bind-mount-ить
|
||||
`qa:lab:up:fast` тримає Docker-сервіси на попередньо зібраному образі та bind-mount
|
||||
`extensions/qa-lab/web/dist` у контейнер `qa-lab`. `qa:lab:watch`
|
||||
перезбирає цей бандл при зміні, а браузер автоматично перезавантажується, коли змінюється
|
||||
хеш ресурсу QA Lab.
|
||||
перезбирає цей bundle під час змін, а браузер автоматично перезавантажується, коли змінюється hash
|
||||
asset-ів QA Lab.
|
||||
|
||||
Для локального OpenTelemetry trace smoke виконайте:
|
||||
Для локального OpenTelemetry trace smoke запустіть:
|
||||
|
||||
```bash
|
||||
pnpm qa:otel:smoke
|
||||
```
|
||||
|
||||
Цей скрипт запускає локальний приймач трас OTLP/HTTP, виконує
|
||||
QA-сценарій `otel-trace-smoke` з увімкненим плагіном `diagnostics-otel`, потім
|
||||
Цей скрипт запускає локальний OTLP/HTTP trace receiver, запускає
|
||||
QA-сценарій `otel-trace-smoke` з увімкненим plugin `diagnostics-otel`, потім
|
||||
декодує експортовані protobuf spans і перевіряє критичну для релізу форму:
|
||||
`openclaw.run`, `openclaw.harness.run`, `openclaw.model.call`,
|
||||
`openclaw.context.assembled` і `openclaw.message.delivery` мають бути присутні;
|
||||
model calls не мають експортувати `StreamAbandoned` на успішних turns; сирі diagnostic IDs і
|
||||
атрибути `openclaw.content.*` мають не потрапляти в trace. Він записує
|
||||
`otel-smoke-summary.json` поруч із артефактами QA suite.
|
||||
виклики моделі не повинні експортувати `StreamAbandoned` на успішних turns; сирі діагностичні ID та
|
||||
атрибути `openclaw.content.*` мають залишатися поза trace. Він записує
|
||||
`otel-smoke-summary.json` поруч з артефактами QA suite.
|
||||
|
||||
Observability QA залишається лише для source-checkout. npm tarball навмисно не містить
|
||||
QA Lab, тому package Docker release lanes не виконують команди `qa`. Використовуйте
|
||||
`pnpm qa:otel:smoke` із зібраного source checkout, коли змінюєте diagnostics
|
||||
instrumentation.
|
||||
Observability QA лишається тільки для source-checkout. npm tarball навмисно не містить
|
||||
QA Lab, тому package Docker release lanes не запускають команди `qa`. Використовуйте
|
||||
`pnpm qa:otel:smoke` зі зібраного source checkout під час зміни instrumentation
|
||||
діагностики.
|
||||
|
||||
Для transport-real Matrix smoke lane виконайте:
|
||||
Для transport-real Matrix smoke lane запустіть:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa matrix --profile fast --fail-fast
|
||||
```
|
||||
|
||||
Повний довідник CLI, каталог профілів/сценаріїв, env vars і структура артефактів для цієї lane містяться в [Matrix QA](/uk/concepts/qa-matrix). Коротко: він provision-ить одноразовий Tuwunel homeserver у Docker, реєструє тимчасових driver/SUT/observer users, запускає реальний Matrix-плагін усередині дочірнього QA gateway, обмеженого цим транспортом (без `qa-channel`), а потім записує Markdown-звіт, JSON summary, артефакт observed-events і об’єднаний output log у `.artifacts/qa-e2e/matrix-<timestamp>/`.
|
||||
Повний CLI-довідник, каталог профілів/сценаріїв, env vars і структура артефактів для цього lane описані в [Matrix QA](/uk/concepts/qa-matrix). Коротко: він створює одноразовий homeserver Tuwunel у Docker, реєструє тимчасових користувачів driver/SUT/observer, запускає реальний Matrix plugin усередині дочірнього QA Gateway, обмеженого цим транспортом (без `qa-channel`), а потім записує Markdown-звіт, JSON-підсумок, артефакт observed-events і комбінований output log у `.artifacts/qa-e2e/matrix-<timestamp>/`.
|
||||
|
||||
Для transport-real Telegram, Discord і Slack smoke lanes:
|
||||
|
||||
@ -125,19 +126,36 @@ pnpm openclaw qa discord
|
||||
pnpm openclaw qa slack
|
||||
```
|
||||
|
||||
Вони націлені на попередньо наявний реальний канал із двома ботами (driver + SUT). Обов’язкові env vars, списки сценаріїв, output artifacts і пул облікових даних Convex задокументовані в [довіднику QA для Telegram, Discord і Slack](#telegram-discord-and-slack-qa-reference) нижче.
|
||||
Вони націлені на вже наявний реальний канал із двома ботами (driver + SUT). Обов’язкові env vars, списки сценаріїв, вихідні артефакти та пул облікових даних Convex задокументовані в [довіднику QA для Telegram, Discord і Slack](#telegram-discord-and-slack-qa-reference) нижче.
|
||||
|
||||
Перед використанням pooled live credentials виконайте:
|
||||
Для повного Slack desktop VM запуску з VNC rescue запустіть:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa mantis slack-desktop-smoke \
|
||||
--gateway-setup \
|
||||
--scenario slack-canary \
|
||||
--keep-lease
|
||||
```
|
||||
|
||||
Ця команда орендує desktop/browser машину Crabbox, запускає Slack live lane
|
||||
усередині VM, відкриває Slack Web у VNC-браузері, захоплює desktop і
|
||||
копіює `slack-qa/` плюс `slack-desktop-smoke.png` назад у директорію артефактів
|
||||
Mantis. Повторно використовуйте `--lease-id <cbx_...>` після ручного входу в Slack Web
|
||||
через VNC. З `--gateway-setup` Mantis залишає постійний OpenClaw Slack
|
||||
Gateway запущеним усередині VM на порту `38973`; без нього команда запускає
|
||||
звичайний bot-to-bot Slack QA lane і завершується після захоплення артефактів.
|
||||
|
||||
Перед використанням pooled live credentials запустіть:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa credentials doctor
|
||||
```
|
||||
|
||||
Doctor перевіряє env Convex broker, валідує налаштування endpoint і перевіряє доступність admin/list, коли присутній maintainer secret. Для секретів він повідомляє лише статус set/missing.
|
||||
Doctor перевіряє env брокера Convex, валідує налаштування endpoint і перевіряє досяжність admin/list, коли присутній секрет maintainer. Він повідомляє лише статус set/missing для секретів.
|
||||
|
||||
## Покриття live transport
|
||||
## Покриття live-транспортів
|
||||
|
||||
Live transport lanes мають один спільний контракт замість того, щоб кожна з них вигадувала власну форму списку сценаріїв. `qa-channel` — це широка синтетична suite поведінки продукту, і вона не є частиною матриці покриття live transport.
|
||||
Live transport lanes спільно використовують один контракт, а не кожен винаходить власну форму списку сценаріїв. `qa-channel` — це широкий синтетичний suite поведінки продукту, і він не є частиною матриці покриття live-транспортів.
|
||||
|
||||
| Lane | Canary | Mention gating | Bot-to-bot | Allowlist block | Top-level reply | Restart resume | Thread follow-up | Thread isolation | Reaction observation | Help command | Native command registration |
|
||||
| -------- | ------ | -------------- | ---------- | --------------- | --------------- | -------------- | ---------------- | ---------------- | -------------------- | ------------ | --------------------------- |
|
||||
@ -146,52 +164,52 @@ Live transport lanes мають один спільний контракт за
|
||||
| Discord | x | x | x | | | | | | | | x |
|
||||
| Slack | x | x | x | | | | | | | | |
|
||||
|
||||
Це зберігає `qa-channel` як широку suite поведінки продукту, тоді як Matrix,
|
||||
Telegram і майбутні live transports мають спільний явний checklist
|
||||
transport-contract.
|
||||
Це залишає `qa-channel` широким suite поведінки продукту, тоді як Matrix,
|
||||
Telegram і майбутні live-транспорти спільно використовують один явний checklist
|
||||
контракту транспорту.
|
||||
|
||||
Для одноразової Linux VM lane без залучення Docker у QA path виконайте:
|
||||
Для одноразового Linux VM lane без залучення Docker до QA-шляху запустіть:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline
|
||||
```
|
||||
|
||||
Це завантажує свіжий Multipass guest, встановлює залежності, збирає OpenClaw
|
||||
усередині guest, запускає `qa suite`, а потім копіює звичайний QA-звіт і
|
||||
summary назад у `.artifacts/qa-e2e/...` на host.
|
||||
Він повторно використовує ту саму поведінку вибору сценаріїв, що й `qa suite` на host.
|
||||
Host і Multipass suite runs за замовчуванням виконують кілька вибраних сценаріїв паралельно
|
||||
з ізольованими gateway workers. `qa-channel` за замовчуванням має concurrency
|
||||
Це завантажує свіжий гостьовий екземпляр Multipass, встановлює залежності, збирає OpenClaw
|
||||
усередині гостьового середовища, запускає `qa suite`, а потім копіює звичайний звіт QA та
|
||||
зведення назад у `.artifacts/qa-e2e/...` на хості.
|
||||
Використовується така сама поведінка вибору сценаріїв, як і для `qa suite` на хості.
|
||||
Запуски набору на хості та в Multipass типово виконують кілька вибраних сценаріїв паралельно
|
||||
з ізольованими працівниками Gateway. `qa-channel` типово має паралельність
|
||||
4, обмежену кількістю вибраних сценаріїв. Використовуйте `--concurrency <count>`, щоб налаштувати
|
||||
кількість workers, або `--concurrency 1` для послідовного виконання.
|
||||
Команда завершується з ненульовим кодом, коли будь-який сценарій падає. Використовуйте `--allow-failures`, коли
|
||||
потрібні артефакти без failing exit code.
|
||||
Live runs передають підтримувані QA auth inputs, практичні для
|
||||
guest: provider keys на основі env, шлях QA live provider config і
|
||||
`CODEX_HOME`, коли він присутній. Тримайте `--output-dir` під коренем репозиторію, щоб guest
|
||||
міг записувати назад через змонтований workspace.
|
||||
кількість працівників, або `--concurrency 1` для послідовного виконання.
|
||||
Команда завершується з ненульовим кодом, якщо будь-який сценарій завершується невдало. Використовуйте `--allow-failures`, коли
|
||||
потрібні артефакти без коду завершення помилки.
|
||||
Live-запуски передають підтримувані вхідні дані автентифікації QA, практичні для
|
||||
гостьового середовища: ключі провайдерів на основі env, шлях до конфігурації QA live provider і
|
||||
`CODEX_HOME`, якщо він присутній. Тримайте `--output-dir` у корені репозиторію, щоб гостьове середовище
|
||||
могло записувати назад через змонтований робочий простір.
|
||||
|
||||
## Довідник QA для Telegram, Discord і Slack
|
||||
|
||||
Matrix має [окрему сторінку](/uk/concepts/qa-matrix) через кількість сценаріїв і Docker-backed homeserver provisioning. Telegram, Discord і Slack менші — по кілька сценаріїв, без системи профілів, проти попередньо наявних реальних каналів — тому їхній довідник міститься тут.
|
||||
Matrix має [окрему сторінку](/uk/concepts/qa-matrix) через кількість сценаріїв і підготовку Docker-backed homeserver. Telegram, Discord і Slack менші — по кілька сценаріїв кожен, без системи профілів, проти вже наявних реальних каналів — тому їхній довідник розміщено тут.
|
||||
|
||||
### Спільні CLI flags
|
||||
### Спільні прапорці CLI
|
||||
|
||||
Ці lanes реєструються через `extensions/qa-lab/src/live-transports/shared/live-transport-cli.ts` і приймають ті самі flags:
|
||||
Ці напрямки реєструються через `extensions/qa-lab/src/live-transports/shared/live-transport-cli.ts` і приймають однакові прапорці:
|
||||
|
||||
| Прапорець | Типове значення | Опис |
|
||||
| ------------------------------------- | --------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
|
||||
| `--scenario <id>` | — | Запустити лише цей сценарій. Можна повторювати. |
|
||||
| `--output-dir <path>` | `<repo>/.artifacts/qa-e2e/{telegram,discord,slack}-<timestamp>` | Куди записуються звіти/підсумок/спостережені повідомлення та вихідний журнал. Відносні шляхи обчислюються відносно `--repo-root`. |
|
||||
| `--repo-root <path>` | `process.cwd()` | Корінь репозиторію під час виклику з нейтрального cwd. |
|
||||
| `--sut-account <id>` | `sut` | Тимчасовий ідентифікатор облікового запису в конфігурації QA gateway. |
|
||||
| `--provider-mode <mode>` | `live-frontier` | `mock-openai` або `live-frontier` (застарілий `live-openai` також працює). |
|
||||
| `--model <ref>` / `--alt-model <ref>` | типове значення постачальника | Посилання на основну/альтернативну модель. |
|
||||
| `--fast` | вимкнено | Швидкий режим постачальника, де підтримується. |
|
||||
| `--credential-source <env\|convex>` | `env` | Див. [Пул облікових даних Convex](#convex-credential-pool). |
|
||||
| `--credential-role <maintainer\|ci>` | `ci` у CI, інакше `maintainer` | Роль, що використовується, коли `--credential-source convex`. |
|
||||
| Прапорець | Типово | Опис |
|
||||
| ------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
|
||||
| `--scenario <id>` | — | Запустити лише цей сценарій. Можна повторювати. |
|
||||
| `--output-dir <path>` | `<repo>/.artifacts/qa-e2e/{telegram,discord,slack}-<timestamp>` | Куди записуються звіти/зведення/спостережені повідомлення та журнал виводу. Відносні шляхи розв’язуються відносно `--repo-root`. |
|
||||
| `--repo-root <path>` | `process.cwd()` | Корінь репозиторію під час виклику з нейтрального cwd. |
|
||||
| `--sut-account <id>` | `sut` | Тимчасовий id облікового запису в конфігурації QA Gateway. |
|
||||
| `--provider-mode <mode>` | `live-frontier` | `mock-openai` або `live-frontier` (застарілий `live-openai` все ще працює). |
|
||||
| `--model <ref>` / `--alt-model <ref>` | provider default | Основні/альтернативні refs моделей. |
|
||||
| `--fast` | вимкнено | Швидкий режим провайдера там, де підтримується. |
|
||||
| `--credential-source <env\|convex>` | `env` | Див. [пул облікових даних Convex](#convex-credential-pool). |
|
||||
| `--credential-role <maintainer\|ci>` | `ci` у CI, інакше `maintainer` | Роль, яку використовують, коли `--credential-source convex`. |
|
||||
|
||||
Кожна смуга завершується з ненульовим кодом у разі будь-якого невдалого сценарію. `--allow-failures` записує артефакти без встановлення коду виходу з помилкою.
|
||||
Кожен напрямок завершується з ненульовим кодом за будь-якого невдалого сценарію. `--allow-failures` записує артефакти без встановлення коду завершення помилки.
|
||||
|
||||
### QA Telegram
|
||||
|
||||
@ -199,17 +217,17 @@ Matrix має [окрему сторінку](/uk/concepts/qa-matrix) через
|
||||
pnpm openclaw qa telegram
|
||||
```
|
||||
|
||||
Націлюється на одну справжню приватну групу Telegram із двома окремими ботами (драйвер + SUT). Бот SUT повинен мати ім’я користувача Telegram; спостереження бот-до-бота працює найкраще, коли в обох ботів увімкнено **Bot-to-Bot Communication Mode** у `@BotFather`.
|
||||
Націлено на одну реальну приватну групу Telegram із двома окремими ботами (driver + SUT). SUT-бот повинен мати ім’я користувача Telegram; спостереження бот-до-бота працює найкраще, коли обидва боти мають увімкнений **Bot-to-Bot Communication Mode** у `@BotFather`.
|
||||
|
||||
Обов’язкові змінні середовища, коли `--credential-source env`:
|
||||
Обов’язкові env, коли `--credential-source env`:
|
||||
|
||||
- `OPENCLAW_QA_TELEGRAM_GROUP_ID` — числовий ідентифікатор чату (рядок).
|
||||
- `OPENCLAW_QA_TELEGRAM_GROUP_ID` — числовий id чату (рядок).
|
||||
- `OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN`
|
||||
- `OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN`
|
||||
|
||||
Необов’язково:
|
||||
|
||||
- `OPENCLAW_QA_TELEGRAM_CAPTURE_CONTENT=1` зберігає тіла повідомлень в артефактах спостережених повідомлень (за замовчуванням редагуються).
|
||||
- `OPENCLAW_QA_TELEGRAM_CAPTURE_CONTENT=1` зберігає тіла повідомлень в артефактах спостережених повідомлень (типово редагує).
|
||||
|
||||
Сценарії (`extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.ts:44`):
|
||||
|
||||
@ -225,8 +243,8 @@ pnpm openclaw qa telegram
|
||||
Вихідні артефакти:
|
||||
|
||||
- `telegram-qa-report.md`
|
||||
- `telegram-qa-summary.json` — включає RTT для кожної відповіді (надсилання драйвером → спостережена відповідь SUT), починаючи з canary.
|
||||
- `telegram-qa-observed-messages.json` — тіла редагуються, якщо не встановлено `OPENCLAW_QA_TELEGRAM_CAPTURE_CONTENT=1`.
|
||||
- `telegram-qa-summary.json` — містить RTT для кожної відповіді (надсилання driver → спостережена відповідь SUT), починаючи з canary.
|
||||
- `telegram-qa-observed-messages.json` — тіла відредаговано, якщо не задано `OPENCLAW_QA_TELEGRAM_CAPTURE_CONTENT=1`.
|
||||
|
||||
### QA Discord
|
||||
|
||||
@ -234,15 +252,15 @@ pnpm openclaw qa telegram
|
||||
pnpm openclaw qa discord
|
||||
```
|
||||
|
||||
Націлюється на один справжній приватний канал гільдії Discord із двома ботами: драйверним ботом, керованим тестовим стендом, і ботом SUT, запущеним дочірнім Gateway OpenClaw через вбудований Discord plugin. Перевіряє обробку згадок каналу, те, що бот SUT зареєстрував нативну команду `/help` у Discord, а також opt-in сценарії доказів Mantis.
|
||||
Націлено на один реальний приватний канал guild у Discord із двома ботами: driver-бот, керований harness, і SUT-бот, запущений дочірнім OpenClaw Gateway через вбудований Discord Plugin. Перевіряє обробку згадок каналу, те, що SUT-бот зареєстрував нативну команду `/help` у Discord, а також opt-in сценарії доказів Mantis.
|
||||
|
||||
Обов’язкові змінні середовища, коли `--credential-source env`:
|
||||
Обов’язкові env, коли `--credential-source env`:
|
||||
|
||||
- `OPENCLAW_QA_DISCORD_GUILD_ID`
|
||||
- `OPENCLAW_QA_DISCORD_CHANNEL_ID`
|
||||
- `OPENCLAW_QA_DISCORD_DRIVER_BOT_TOKEN`
|
||||
- `OPENCLAW_QA_DISCORD_SUT_BOT_TOKEN`
|
||||
- `OPENCLAW_QA_DISCORD_SUT_APPLICATION_ID` — має збігатися з ідентифікатором користувача бота SUT, поверненим Discord (інакше смуга швидко завершується з помилкою).
|
||||
- `OPENCLAW_QA_DISCORD_SUT_APPLICATION_ID` — має збігатися з id користувача SUT-бота, який повертає Discord (інакше напрямок швидко завершується помилкою).
|
||||
|
||||
Необов’язково:
|
||||
|
||||
@ -253,9 +271,9 @@ pnpm openclaw qa discord
|
||||
- `discord-canary`
|
||||
- `discord-mention-gating`
|
||||
- `discord-native-help-command-registration`
|
||||
- `discord-status-reactions-tool-only` — opt-in сценарій Mantis. Запускається окремо, оскільки перемикає SUT на постійно ввімкнені відповіді гільдії лише інструментами з `messages.statusReactions.enabled=true`, а потім захоплює часову шкалу REST-реакцій плюс візуальний артефакт HTML/PNG.
|
||||
- `discord-status-reactions-tool-only` — opt-in сценарій Mantis. Запускається окремо, бо перемикає SUT на always-on, tool-only відповіді guild з `messages.statusReactions.enabled=true`, а потім захоплює REST-хронологію реакцій і візуальний артефакт HTML/PNG.
|
||||
|
||||
Запустіть сценарій статусних реакцій Mantis явно:
|
||||
Запустіть сценарій Mantis для status-reaction явно:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa discord \
|
||||
@ -270,8 +288,8 @@ pnpm openclaw qa discord \
|
||||
|
||||
- `discord-qa-report.md`
|
||||
- `discord-qa-summary.json`
|
||||
- `discord-qa-observed-messages.json` — тіла редагуються, якщо не встановлено `OPENCLAW_QA_DISCORD_CAPTURE_CONTENT=1`.
|
||||
- `discord-qa-reaction-timelines.json` і `discord-status-reactions-tool-only-timeline.png`, коли запускається сценарій статусних реакцій.
|
||||
- `discord-qa-observed-messages.json` — тіла відредаговано, якщо не задано `OPENCLAW_QA_DISCORD_CAPTURE_CONTENT=1`.
|
||||
- `discord-qa-reaction-timelines.json` і `discord-status-reactions-tool-only-timeline.png`, коли запускається сценарій status-reaction.
|
||||
|
||||
### QA Slack
|
||||
|
||||
@ -279,9 +297,9 @@ pnpm openclaw qa discord \
|
||||
pnpm openclaw qa slack
|
||||
```
|
||||
|
||||
Націлюється на один справжній приватний канал Slack із двома окремими ботами: драйверним ботом, керованим тестовим стендом, і ботом SUT, запущеним дочірнім Gateway OpenClaw через вбудований Slack plugin.
|
||||
Націлено на один реальний приватний канал Slack із двома окремими ботами: driver-бот, керований harness, і SUT-бот, запущений дочірнім OpenClaw Gateway через вбудований Slack Plugin.
|
||||
|
||||
Обов’язкові змінні середовища, коли `--credential-source env`:
|
||||
Обов’язкові env, коли `--credential-source env`:
|
||||
|
||||
- `OPENCLAW_QA_SLACK_CHANNEL_ID`
|
||||
- `OPENCLAW_QA_SLACK_DRIVER_BOT_TOKEN`
|
||||
@ -301,22 +319,22 @@ pnpm openclaw qa slack
|
||||
|
||||
- `slack-qa-report.md`
|
||||
- `slack-qa-summary.json`
|
||||
- `slack-qa-observed-messages.json` — тіла редагуються, якщо не встановлено `OPENCLAW_QA_SLACK_CAPTURE_CONTENT=1`.
|
||||
- `slack-qa-observed-messages.json` — тіла відредаговано, якщо не задано `OPENCLAW_QA_SLACK_CAPTURE_CONTENT=1`.
|
||||
|
||||
### Пул облікових даних Convex
|
||||
|
||||
Смуги Telegram, Discord і Slack можуть орендувати облікові дані зі спільного пулу Convex замість читання змінних середовища вище. Передайте `--credential-source convex` (або встановіть `OPENCLAW_QA_CREDENTIAL_SOURCE=convex`); QA Lab отримує ексклюзивну оренду, надсилає для неї Heartbeat протягом виконання та звільняє її під час завершення роботи. Типи пулу: `"telegram"`, `"discord"` і `"slack"`.
|
||||
Напрямки Telegram, Discord і Slack можуть орендувати облікові дані зі спільного пулу Convex замість читання env vars вище. Передайте `--credential-source convex` (або задайте `OPENCLAW_QA_CREDENTIAL_SOURCE=convex`); QA Lab отримує ексклюзивну оренду, підтримує її Heartbeat протягом запуску та звільняє під час завершення. Типи пулу: `"telegram"`, `"discord"` і `"slack"`.
|
||||
|
||||
Форми payload, які broker перевіряє на `admin/add`:
|
||||
Форми payload, які broker перевіряє в `admin/add`:
|
||||
|
||||
- Telegram (`kind: "telegram"`): `{ groupId: string, driverToken: string, sutToken: string }` — `groupId` має бути рядком числового chat-id.
|
||||
- Telegram (`kind: "telegram"`): `{ groupId: string, driverToken: string, sutToken: string }` — `groupId` має бути числовим рядком chat-id.
|
||||
- Discord (`kind: "discord"`): `{ guildId: string, channelId: string, driverBotToken: string, sutBotToken: string, sutApplicationId: string }`.
|
||||
|
||||
Операційні змінні середовища та контракт endpoint broker Convex описані в [Testing → Shared Telegram credentials via Convex](/uk/help/testing#shared-telegram-credentials-via-convex-v1) (назва розділу передує підтримці Discord; семантика broker однакова для обох типів).
|
||||
Операційні env vars і контракт endpoint broker Convex наведено в [Тестування → Спільні облікові дані Telegram через Convex](/uk/help/testing#shared-telegram-credentials-via-convex-v1) (назва розділу передує підтримці Discord; семантика broker однакова для обох типів).
|
||||
|
||||
## Seeds із репозиторію
|
||||
## Seeds на основі репозиторію
|
||||
|
||||
Seed-ресурси розташовані в `qa/`:
|
||||
Seed-ресурси розміщені в `qa/`:
|
||||
|
||||
- `qa/scenarios/index.md`
|
||||
- `qa/scenarios/<theme>/*.md`
|
||||
@ -325,108 +343,108 @@ Seed-ресурси розташовані в `qa/`:
|
||||
агенту.
|
||||
|
||||
`qa-lab` має залишатися generic markdown runner. Кожен markdown-файл сценарію є
|
||||
джерелом істини для одного тестового запуску та має визначати:
|
||||
джерелом істини для одного тестового запуску й має визначати:
|
||||
|
||||
- метадані сценарію
|
||||
- необов’язкові метадані категорії, capability, смуги та ризику
|
||||
- посилання на документацію та код
|
||||
- необов’язкові вимоги до plugin
|
||||
- необов’язкові метадані категорії, capability, lane і risk
|
||||
- docs і code refs
|
||||
- необов’язкові вимоги до Plugin
|
||||
- необов’язковий patch конфігурації Gateway
|
||||
- виконуваний `qa-flow`
|
||||
|
||||
Багаторазова runtime-поверхня, що підтримує `qa-flow`, може залишатися generic
|
||||
і наскрізною. Наприклад, markdown-сценарії можуть поєднувати помічники на боці
|
||||
транспорту з помічниками на боці браузера, які керують вбудованим Control UI через
|
||||
шов Gateway `browser.request`, без додавання спеціалізованого runner.
|
||||
і cross-cutting. Наприклад, markdown-сценарії можуть поєднувати transport-side
|
||||
helpers із browser-side helpers, які керують вбудованим Control UI через
|
||||
Gateway `browser.request` seam без додавання runner для спеціального випадку.
|
||||
|
||||
Файли сценаріїв слід групувати за продуктовою capability, а не за папкою дерева
|
||||
джерел. Зберігайте ідентифікатори сценаріїв стабільними під час переміщення файлів; використовуйте `docsRefs` і `codeRefs`
|
||||
для простежуваності реалізації.
|
||||
Файли сценаріїв слід групувати за product capability, а не за папкою дерева
|
||||
джерел. Зберігайте стабільні ID сценаріїв під час переміщення файлів; використовуйте `docsRefs` і `codeRefs`
|
||||
для трасування реалізації.
|
||||
|
||||
Базовий список має залишатися достатньо широким, щоб покривати:
|
||||
Базовий список має залишатися достатньо широким, щоб охоплювати:
|
||||
|
||||
- DM і чат каналу
|
||||
- DM і channel chat
|
||||
- поведінку thread
|
||||
- життєвий цикл дій із повідомленнями
|
||||
- Cron callbacks
|
||||
- пригадування пам’яті
|
||||
- життєвий цикл message action
|
||||
- callbacks Cron
|
||||
- memory recall
|
||||
- перемикання моделей
|
||||
- передавання subagent
|
||||
- читання репозиторію та читання документації
|
||||
- одне невелике завдання збірки, як-от Lobster Invaders
|
||||
- handoff subagent
|
||||
- читання репозиторію та документації
|
||||
- одне невелике завдання збірки, наприклад Lobster Invaders
|
||||
|
||||
## Смуги mock-постачальника
|
||||
## Mock-напрямки провайдерів
|
||||
|
||||
`qa suite` має дві локальні смуги mock-постачальника:
|
||||
`qa suite` має два локальні mock-напрямки провайдерів:
|
||||
|
||||
- `mock-openai` — scenario-aware mock OpenClaw. Він залишається типовою
|
||||
детермінованою mock-смугою для QA з репозиторію та parity gates.
|
||||
- `aimock` запускає сервер постачальника на базі AIMock для експериментального protocol,
|
||||
fixture, record/replay і chaos-покриття. Він є додатковим і не
|
||||
- `mock-openai` — це scenario-aware mock OpenClaw. Він залишається типовим
|
||||
детермінованим mock-напрямком для repo-backed QA і parity gates.
|
||||
- `aimock` запускає AIMock-backed provider server для експериментального protocol,
|
||||
fixture, record/replay і chaos coverage. Він є додатковим і не
|
||||
замінює scenario dispatcher `mock-openai`.
|
||||
|
||||
Реалізація смуг постачальників розташована в `extensions/qa-lab/src/providers/`.
|
||||
Кожен постачальник володіє своїми типовими значеннями, запуском локального сервера, конфігурацією моделі Gateway,
|
||||
Реалізація provider-lane розміщена в `extensions/qa-lab/src/providers/`.
|
||||
Кожен provider володіє своїми defaults, запуском локального сервера, конфігурацією моделей Gateway,
|
||||
потребами staging auth-profile і прапорцями live/mock capability. Спільний код suite і
|
||||
Gateway має маршрутизувати через реєстр постачальників замість розгалуження за
|
||||
іменами постачальників.
|
||||
Gateway має маршрутизувати через provider registry замість branching on
|
||||
provider names.
|
||||
|
||||
## Транспортні адаптери
|
||||
## Transport adapters
|
||||
|
||||
`qa-lab` володіє generic транспортним швом для markdown QA-сценаріїв. `qa-channel` є першим адаптером на цьому шві, але ціль дизайну ширша: майбутні справжні або синтетичні канали мають підключатися до того самого suite runner замість додавання транспортно-специфічного QA runner.
|
||||
`qa-lab` володіє generic transport seam для markdown-сценаріїв QA. `qa-channel` — перший adapter на цьому seam, але ціль дизайну ширша: майбутні реальні або synthetic channels мають підключатися до того самого suite runner замість додавання transport-specific QA runner.
|
||||
|
||||
На рівні архітектури поділ такий:
|
||||
На архітектурному рівні поділ такий:
|
||||
|
||||
- `qa-lab` володіє generic виконанням сценаріїв, конкурентністю worker, записом артефактів і звітуванням.
|
||||
- Транспортний адаптер володіє конфігурацією Gateway, готовністю, спостереженням inbound і outbound, транспортними діями та нормалізованим транспортним станом.
|
||||
- `qa-lab` володіє generic виконанням сценаріїв, паралельністю працівників, записом артефактів і звітністю.
|
||||
- Transport adapter володіє конфігурацією Gateway, readiness, inbound and outbound observation, transport actions і normalized transport state.
|
||||
- Markdown-файли сценаріїв у `qa/scenarios/` визначають тестовий запуск; `qa-lab` надає багаторазову runtime-поверхню, яка їх виконує.
|
||||
|
||||
### Додавання каналу
|
||||
|
||||
Додавання каналу до markdown QA-системи потребує рівно двох речей:
|
||||
Додавання каналу до markdown-системи QA вимагає рівно двох речей:
|
||||
|
||||
1. Транспортного адаптера для каналу.
|
||||
2. Пакета сценаріїв, що перевіряє контракт каналу.
|
||||
1. Transport adapter для каналу.
|
||||
2. Scenario pack, який перевіряє contract каналу.
|
||||
|
||||
Не додавайте новий верхньорівневий корінь команди QA, коли спільний host `qa-lab` може володіти flow.
|
||||
Не додавайте новий top-level root команди QA, коли спільний хост `qa-lab` може володіти flow.
|
||||
|
||||
`qa-lab` володіє спільною механікою host:
|
||||
`qa-lab` володіє спільними механіками хоста:
|
||||
|
||||
- корінь команди `openclaw qa`
|
||||
- запуск і teardown suite
|
||||
- запуск і завершення suite
|
||||
- конкурентність worker
|
||||
- запис артефактів
|
||||
- генерація звіту
|
||||
- генерація звітів
|
||||
- виконання сценаріїв
|
||||
- compatibility aliases для старіших сценаріїв `qa-channel`
|
||||
- сумісні псевдоніми для старіших сценаріїв `qa-channel`
|
||||
|
||||
Runner plugins володіють транспортним контрактом:
|
||||
|
||||
- як `openclaw qa <runner>` монтується під спільним коренем `qa`
|
||||
- як Gateway конфігурується для цього транспорту
|
||||
- як gateway налаштовується для цього транспорту
|
||||
- як перевіряється готовність
|
||||
- як впроваджуються inbound events
|
||||
- як спостерігаються outbound messages
|
||||
- як надаються transcripts і нормалізований транспортний стан
|
||||
- як виконуються transport-backed actions
|
||||
- як впроваджуються вхідні події
|
||||
- як спостерігаються вихідні повідомлення
|
||||
- як надаються транскрипти й нормалізований стан транспорту
|
||||
- як виконуються дії, підтримані транспортом
|
||||
- як обробляється транспортно-специфічне скидання або очищення
|
||||
|
||||
Мінімальний поріг прийняття для нового каналу:
|
||||
Мінімальна планка впровадження для нового каналу:
|
||||
|
||||
1. Залиште `qa-lab` власником спільного кореня `qa`.
|
||||
2. Реалізуйте runner транспорту на спільному host seam `qa-lab`.
|
||||
3. Тримайте специфічну для транспорту механіку всередині runner plugin або harness каналу.
|
||||
4. Змонтуйте runner як `openclaw qa <runner>` замість реєстрації конкуруючої кореневої команди. Runner plugins мають оголошувати `qaRunners` в `openclaw.plugin.json` і експортувати відповідний масив `qaRunnerCliRegistrations` з `runtime-api.ts`. Тримайте `runtime-api.ts` легким; ліниві CLI та виконання runner мають залишатися за окремими точками входу.
|
||||
2. Реалізуйте transport runner на спільному host seam `qa-lab`.
|
||||
3. Тримайте транспортно-специфічні механіки всередині runner plugin або channel harness.
|
||||
4. Монтуйте runner як `openclaw qa <runner>` замість реєстрації конкуруючої кореневої команди. Runner plugins мають оголошувати `qaRunners` в `openclaw.plugin.json` і експортувати відповідний масив `qaRunnerCliRegistrations` з `runtime-api.ts`. Тримайте `runtime-api.ts` легким; відкладені CLI та виконання runner мають залишатися за окремими entrypoints.
|
||||
5. Створіть або адаптуйте markdown-сценарії в тематичних каталогах `qa/scenarios/`.
|
||||
6. Використовуйте загальні допоміжні функції сценаріїв для нових сценаріїв.
|
||||
7. Залишайте наявні псевдоніми сумісності робочими, якщо repo не виконує навмисну міграцію.
|
||||
7. Зберігайте роботу наявних псевдонімів сумісності, якщо репозиторій не виконує навмисну міграцію.
|
||||
|
||||
Правило ухвалення рішення суворе:
|
||||
|
||||
- Якщо поведінку можна виразити один раз у `qa-lab`, помістіть її в `qa-lab`.
|
||||
- Якщо поведінку можна один раз виразити в `qa-lab`, помістіть її в `qa-lab`.
|
||||
- Якщо поведінка залежить від одного транспорту каналу, тримайте її в цьому runner plugin або plugin harness.
|
||||
- Якщо сценарію потрібна нова можливість, яку може використовувати більше ніж один канал, додайте загальну допоміжну функцію замість специфічної для каналу гілки в `suite.ts`.
|
||||
- Якщо поведінка має сенс лише для одного транспорту, залиште сценарій специфічним для транспорту й явно зазначте це в контракті сценарію.
|
||||
- Якщо сценарію потрібна нова можливість, яку може використати більше ніж один канал, додайте загальну допоміжну функцію замість гілки, специфічної для каналу, у `suite.ts`.
|
||||
- Якщо поведінка має сенс лише для одного транспорту, залиште сценарій транспортно-специфічним і явно зазначте це в контракті сценарію.
|
||||
|
||||
### Назви допоміжних функцій сценаріїв
|
||||
|
||||
@ -445,21 +463,21 @@ Runner plugins володіють транспортним контрактом:
|
||||
- `formatTransportTranscript`
|
||||
- `resetTransport`
|
||||
|
||||
Псевдоніми сумісності залишаються доступними для наявних сценаріїв — `waitForQaChannelReady`, `waitForOutboundMessage`, `waitForNoOutbound`, `formatConversationTranscript`, `resetBus` — але під час створення нових сценаріїв слід використовувати загальні назви. Псевдоніми існують, щоб уникнути одночасної примусової міграції, а не як модель на майбутнє.
|
||||
Псевдоніми сумісності залишаються доступними для наявних сценаріїв — `waitForQaChannelReady`, `waitForOutboundMessage`, `waitForNoOutbound`, `formatConversationTranscript`, `resetBus` — але під час створення нових сценаріїв слід використовувати загальні назви. Псевдоніми існують, щоб уникнути одночасної міграції всього коду, а не як модель на майбутнє.
|
||||
|
||||
## Звітування
|
||||
|
||||
`qa-lab` експортує Markdown-звіт протоколу зі спостережуваної часової лінії bus.
|
||||
`qa-lab` експортує Markdown-звіт протоколу зі спостереженої часової шкали bus.
|
||||
Звіт має відповідати на такі питання:
|
||||
|
||||
- Що спрацювало
|
||||
- Що не вдалося
|
||||
- Що не спрацювало
|
||||
- Що залишилося заблокованим
|
||||
- Які подальші сценарії варто додати
|
||||
|
||||
Для інвентаризації доступних сценаріїв — корисної під час оцінювання обсягу подальшої роботи або підключення нового транспорту — запустіть `pnpm openclaw qa coverage` (додайте `--json` для машинозчитуваного виводу).
|
||||
Для інвентаризації доступних сценаріїв — корисної під час оцінювання обсягу подальшої роботи або підключення нового транспорту — запустіть `pnpm openclaw qa coverage` (додайте `--json` для машиночитного виводу).
|
||||
|
||||
Для перевірок характеру й стилю запустіть той самий сценарій на кількох живих model
|
||||
Для перевірок характеру й стилю запустіть той самий сценарій на кількох live model
|
||||
refs і запишіть оцінений Markdown-звіт:
|
||||
|
||||
```bash
|
||||
@ -479,36 +497,36 @@ pnpm openclaw qa character-eval \
|
||||
--judge-concurrency 16
|
||||
```
|
||||
|
||||
Команда запускає локальні дочірні процеси QA Gateway, а не Docker. Сценарії оцінювання характеру
|
||||
мають задавати persona через `SOUL.md`, а потім виконувати звичайні звернення користувача,
|
||||
як-от чат, допомога з workspace і невеликі файлові завдання. Моделі-кандидату
|
||||
не слід повідомляти, що її оцінюють. Команда зберігає кожен повний
|
||||
Команда запускає дочірні процеси локального QA gateway, а не Docker. Сценарії character eval
|
||||
мають задавати persona через `SOUL.md`, а потім виконувати звичайні user turns,
|
||||
такі як чат, допомога з робочим простором і невеликі файлові завдання. Candidate model не слід
|
||||
повідомляти, що її оцінюють. Команда зберігає кожен повний
|
||||
транскрипт, записує базову статистику запуску, а потім просить judge models у fast mode з
|
||||
міркуванням `xhigh`, де воно підтримується, ранжувати запуски за природністю, вайбом і гумором.
|
||||
Використовуйте `--blind-judge-models` під час порівняння провайдерів: judge prompt усе ще отримує
|
||||
кожен транскрипт і статус запуску, але refs кандидатів замінюються нейтральними
|
||||
мітками, як-от `candidate-01`; звіт зіставляє рейтинги назад із реальними refs після
|
||||
розбору.
|
||||
Запуски кандидатів за замовчуванням використовують мислення `high`, з `medium` для GPT-5.5 і `xhigh`
|
||||
для старіших OpenAI eval refs, які це підтримують. Перевизначте окремого кандидата inline за допомогою
|
||||
міркуванням `xhigh`, де воно підтримується, ранжувати запуски за природністю, vibe і гумором.
|
||||
Використовуйте `--blind-judge-models` під час порівняння providers: judge prompt усе одно отримує
|
||||
кожен транскрипт і статус запуску, але candidate refs замінюються нейтральними
|
||||
мітками, як-от `candidate-01`; звіт зіставляє рейтинги з реальними refs після
|
||||
парсингу.
|
||||
Candidate runs за замовчуванням використовують thinking `high`, з `medium` для GPT-5.5 і `xhigh`
|
||||
для старіших OpenAI eval refs, які це підтримують. Перевизначте конкретного candidate inline за допомогою
|
||||
`--model provider/model,thinking=<level>`. `--thinking <level>` усе ще задає
|
||||
глобальний fallback, а старіша форма `--model-thinking <provider/model=level>` зберігається
|
||||
глобальний fallback, а старіша форма `--model-thinking <provider/model=level>` збережена
|
||||
для сумісності.
|
||||
OpenAI refs кандидатів за замовчуванням використовують fast mode, щоб priority processing застосовувалася там, де
|
||||
провайдер це підтримує. Додайте `,fast`, `,no-fast` або `,fast=false` inline, коли
|
||||
окремому кандидату чи судді потрібне перевизначення. Передавайте `--fast` лише тоді, коли хочете
|
||||
примусово ввімкнути fast mode для кожної моделі-кандидата. Тривалості кандидатів і суддів
|
||||
записуються у звіт для аналізу benchmark, але judge prompts явно вказують
|
||||
OpenAI candidate refs за замовчуванням використовують fast mode, щоб priority processing застосовувався там,
|
||||
де provider це підтримує. Додайте `,fast`, `,no-fast` або `,fast=false` inline, коли
|
||||
окремому candidate або judge потрібне перевизначення. Передавайте `--fast` лише тоді, коли хочете
|
||||
примусово ввімкнути fast mode для кожної candidate model. Тривалості candidate і judge
|
||||
записуються у звіті для benchmark analysis, але judge prompts явно вказують
|
||||
не ранжувати за швидкістю.
|
||||
Запуски моделей-кандидатів і суддів за замовчуванням мають concurrency 16. Зменште
|
||||
`--concurrency` або `--judge-concurrency`, коли ліміти провайдера чи навантаження на локальний Gateway
|
||||
Запуски candidate і judge model за замовчуванням мають concurrency 16. Зменште
|
||||
`--concurrency` або `--judge-concurrency`, коли ліміти provider або навантаження локального gateway
|
||||
роблять запуск надто шумним.
|
||||
Коли не передано candidate `--model`, character eval за замовчуванням використовує
|
||||
Коли candidate `--model` не передано, character eval за замовчуванням використовує
|
||||
`openai/gpt-5.5`, `openai/gpt-5.2`, `openai/gpt-5`, `anthropic/claude-opus-4-6`,
|
||||
`anthropic/claude-sonnet-4-6`, `zai/glm-5.1`,
|
||||
`moonshot/kimi-k2.5` і
|
||||
`google/gemini-3.1-pro-preview`, коли не передано `--model`.
|
||||
Коли не передано `--judge-model`, судді за замовчуванням:
|
||||
`google/gemini-3.1-pro-preview`, коли `--model` не передано.
|
||||
Коли `--judge-model` не передано, judges за замовчуванням:
|
||||
`openai/gpt-5.5,thinking=xhigh,fast` і
|
||||
`anthropic/claude-opus-4-6,thinking=high`.
|
||||
|
||||
@ -517,4 +535,4 @@ OpenAI refs кандидатів за замовчуванням викорис
|
||||
- [Matrix QA](/uk/concepts/qa-matrix)
|
||||
- [QA Channel](/uk/channels/qa-channel)
|
||||
- [Тестування](/uk/help/testing)
|
||||
- [Dashboard](/uk/web/dashboard)
|
||||
- [Панель керування](/uk/web/dashboard)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user