extensions/qa-channel: DM, kanal, iş parçacığı, tepki, düzenleme ve silme yüzeylerine sahip sentetik mesaj kanalı.extensions/qa-lab: transkripti gözlemlemek, gelen mesajları enjekte etmek ve Markdown raporu dışa aktarmak için hata ayıklayıcı UI ve QA veriyolu.extensions/qa-matrix, gelecekteki runner Plugin’leri: alt QA gateway içinde gerçek bir kanalı süren canlı taşıma adaptörleri.qa/: başlangıç görevi ve temel QA senaryoları için repo destekli tohum varlıklar.- Mantis: gerçek taşımalara, tarayıcı ekran görüntülerine, VM durumuna ve PR kanıtına ihtiyaç duyan hatalar için canlı doğrulama öncesi ve sonrası.
Komut yüzeyi
Her QA akışıpnpm openclaw qa <subcommand> altında çalışır. Birçoğunun pnpm qa:*
betik takma adları vardır; iki biçim de desteklenir.
| Komut | Amaç |
|---|---|
qa run | --qa-profile olmadan paketli QA öz denetimi; --qa-profile smoke-ci, --qa-profile release veya --qa-profile all ile taksonomi destekli olgunluk profili runner’ı. |
qa suite | Repo destekli senaryoları QA gateway hattına karşı çalıştırır. Takma adlar: tek kullanımlık Linux VM için pnpm openclaw qa suite --runner multipass. |
qa coverage | YAML senaryo kapsam envanterini yazdırır (makine çıktısı için --json). |
qa parity-report | İki qa-suite-summary.json dosyasını karşılaştırıp agentic parite raporunu yazar veya tek bir çalışma zamanı çifti özetinden Codex-vs-OpenClaw çalışma zamanı paritesi ve token verimliliği raporları yazmak için --runtime-axis --token-efficiency kullanır. |
qa character-eval | Karakter QA senaryosunu birden fazla canlı modelde, yargılanmış raporla çalıştırır. Bkz. Raporlama. |
qa manual | Seçilen sağlayıcı/model hattına karşı tek seferlik bir prompt çalıştırır. |
qa ui | QA hata ayıklayıcı UI’sini ve yerel QA veriyolunu başlatır (takma ad: pnpm qa:lab:ui). |
qa docker-build-image | Önceden hazırlanmış QA Docker imajını oluşturur. |
qa docker-scaffold | QA panosu + gateway hattı için docker-compose iskeleti yazar. |
qa up | QA sitesini oluşturur, Docker destekli yığını başlatır, URL’yi yazdırır (takma ad: pnpm qa:lab:up; :fast varyantı --use-prebuilt-image --bind-ui-dist --skip-ui-build ekler). |
qa aimock | Yalnızca AIMock sağlayıcı sunucusunu başlatır. |
qa mock-openai | Yalnızca senaryo farkındalıklı mock-openai sağlayıcı sunucusunu başlatır. |
qa credentials doctor / add / list / remove | Paylaşılan Convex kimlik bilgisi havuzunu yönetir. |
qa matrix | Tek kullanımlık bir Tuwunel homeserver’a karşı canlı taşıma hattı. Bkz. Matrix QA. |
qa telegram | Gerçek bir özel Telegram grubuna karşı canlı taşıma hattı. |
qa discord | Gerçek bir özel Discord guild kanalına karşı canlı taşıma hattı. |
qa slack | Gerçek bir özel Slack kanalına karşı canlı taşıma hattı. |
qa whatsapp | Gerçek WhatsApp Web hesaplarına karşı canlı taşıma hattı. |
qa mantis | Discord durum tepkisi kanıtı, Crabbox masaüstü/tarayıcı smoke’u ve VNC içinde Slack smoke’u ile canlı taşıma hataları için doğrulama öncesi ve sonrası runner’ı. Bkz. Mantis ve Mantis Slack Masaüstü Runbook’u. |
qa run, üyeliği taxonomy.yaml dosyasından okur, ardından
çözümlenen senaryoları qa suite üzerinden gönderir. --surface ve
--category, ayrı hatlar tanımlamak yerine seçilen profili filtreler.
Ortaya çıkan qa-evidence.json, seçilen kategori sayıları ve eksik kapsam ID’leriyle
bir profil scorecard özeti içerir; tekil kanıt girdileri testler, kapsam rolleri
ve sonuçlar için doğruluk kaynağı olmaya devam eder.
Taksonomi özellik kapsam ID’leri takma ad değil, kesin kanıt hedefleridir. Birincil
senaryo kapsamı eşleşen ID’leri karşılar; ikincil kapsam danışma amaçlı kalır.
Kapsam ID’leri küçük harfli alfanümerik/tire segmentleriyle noktalı
namespace.behavior biçimini kullanır; profil, yüzey ve kategori ID’leri mevcut
tireli veya noktalı taksonomi ID’lerini hâlâ kullanabilir.
İnce kanıt, girdi başına execution alanını atlar ve evidenceMode: "slim" ayarlar;
smoke-ci varsayılan olarak incedir ve --evidence-mode full tam girdileri geri yükler:
smoke-ci kullanın. Canlı kanallara karşı Stable/LTS kanıtı
için release kullanın. all yalnızca açık tam taksonomi kanıt çalıştırmaları
için kullanın; her etkin olgunluk kategorisini seçer ve qa_profile=all ile
QA Profile Evidence iş akışı üzerinden gönderilebilir. Bir komut ayrıca OpenClaw
kök profiline ihtiyaç duyduğunda, kök profili QA komutundan önce koyun:
Operatör akışı
Mevcut QA operatör akışı iki bölmeli bir QA sitesidir:- Sol: Agent ile Gateway panosu (Control UI).
- Sağ: Slack benzeri transkripti ve senaryo planını gösteren QA Lab.
qa:lab:up:fast, Docker servislerini önceden oluşturulmuş bir imajda tutar ve
extensions/qa-lab/web/dist dizinini qa-lab container’ına bind-mount eder.
qa:lab:watch bu paketi değişiklikte yeniden oluşturur ve QA Lab varlık hash’i
değiştiğinde tarayıcı otomatik olarak yeniden yüklenir.
Yerel OpenTelemetry sinyal smoke’u için şunu çalıştırın:
diagnostics-otel Plugin’i etkin
halde otel-trace-smoke QA senaryosunu çalıştırır, ardından trace’lerin,
metriklerin ve günlüklerin dışa aktarıldığını doğrular. Dışa aktarılan protobuf
trace span’lerini çözer ve release açısından kritik biçimi denetler:
openclaw.run, openclaw.harness.run, en son GenAI semantik kuralı
model çağrısı span’i, openclaw.context.assembled ve openclaw.message.delivery
bulunmalıdır. Smoke,
OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental zorlar; bu nedenle
model çağrısı span’i {gen_ai.operation.name} {gen_ai.request.model} adını kullanmalıdır;
başarılı turn’lerde model çağrıları StreamAbandoned dışa aktarmamalıdır; ham tanılama ID’leri ve
openclaw.content.* öznitelikleri trace dışında kalmalıdır. Ham OTLP
payload’ları prompt sentinel’ini, yanıt sentinel’ini veya QA oturum
anahtarını içermemelidir. QA suite artifact’lerinin yanına otel-smoke-summary.json yazar.
Collector destekli OpenTelemetry smoke’u için şunu çalıştırın:
diagnostics-prometheus etkin halde docker-prometheus-smoke
QA senaryosunu çalıştırır, kimliği doğrulanmamış scrape işlemlerinin reddedildiğini
doğrular, ardından kimliği doğrulanmış scrape işleminin prompt içeriği, yanıt
içeriği, ham tanılama tanımlayıcıları, kimlik doğrulama token’ları veya yerel
yollar olmadan sürüm açısından kritik metrik ailelerini içerdiğini denetler.
Her iki gözlemlenebilirlik smoke testini arka arkaya çalıştırmak için şunu kullanın:
qa komutlarını
çalıştırmaz. Tanılama enstrümantasyonunu değiştirirken derlenmiş bir kaynak
checkout’undan pnpm qa:otel:smoke, pnpm qa:prometheus:smoke veya
pnpm qa:observability:smoke kullanın.
Model sağlayıcı kimlik bilgileri gerektirmeyen, gerçek aktarım kullanan bir
Matrix smoke hattı için deterministik sahte OpenAI sağlayıcısıyla hızlı profili
çalıştırın:
qa-channel yok), ardından .artifacts/qa-e2e/matrix-<timestamp>/ altında bir Markdown raporu, JSON özeti, observed-events artifact’i ve birleşik çıktı günlüğü yazar.
Senaryolar, birim testlerinin uçtan uca kanıtlayamayacağı aktarım davranışlarını kapsar: mention gating, allow-bot ilkeleri, allowlist’ler, üst düzey ve thread’li yanıtlar, DM yönlendirmesi, reaction işleme, gelen düzenlemeyi bastırma, yeniden başlatma replay dedupe, homeserver kesintisi kurtarma, onay metadata teslimi, medya işleme ve Matrix E2EE bootstrap/kurtarma/doğrulama akışları. E2EE CLI profili ayrıca gateway yanıtlarını denetlemeden önce aynı tek kullanımlık homeserver üzerinden openclaw matrix encryption setup ve doğrulama komutlarını çalıştırır.
Discord’da hata yeniden üretimi için yalnızca Mantis’e özgü isteğe bağlı senaryolar da vardır. Açık durum reaction zaman çizelgesi için
--scenario discord-status-reactions-tool-only kullanın veya gerçek bir
Discord thread’i oluşturup message.thread-reply öğesinin bir filePath
ekini koruduğunu doğrulamak için --scenario discord-thread-reply-filepath-attachment
kullanın. Bu senaryolar varsayılan canlı Discord hattının dışında tutulur,
çünkü geniş smoke kapsamı yerine önce/sonra yeniden üretim problarıdır.
Thread eki Mantis workflow’u, QA ortamında MANTIS_DISCORD_VIEWER_CHROME_PROFILE_DIR
veya MANTIS_DISCORD_VIEWER_CHROME_PROFILE_TGZ_B64 yapılandırılmışsa oturum açmış
bir Discord Web tanık videosu da ekleyebilir. Bu görüntüleyici profili yalnızca
görsel yakalama içindir; başarılı/başarısız kararı yine Discord REST oracle’dan
gelir.
CI, .github/workflows/qa-live-transports-convex.yml içinde aynı komut yüzeyini kullanır.
Zamanlanmış ve varsayılan manuel çalıştırmalar, QA tarafından sağlanan
live-frontier kimlik bilgileri, --fast ve
OPENCLAW_QA_MATRIX_NO_REPLY_WINDOW_MS=3000 ile hızlı Matrix profilini çalıştırır.
Manuel matrix_profile=all, beş profil shard’ına yayılır.
Gerçek aktarım kullanan Telegram, Discord, Slack ve WhatsApp smoke hatları için:
slack-qa/, slack-desktop-smoke.png ve
slack-desktop-smoke.mp4 dosyalarını Mantis artifact dizinine kopyalar. Crabbox
masaüstü/tarayıcı kiralamaları yakalama araçlarını ve tarayıcı/native-build yardımcı
paketlerini baştan sağlar; bu nedenle senaryo yalnızca eski kiralamalarda fallback
yüklemelidir. Mantis, yavaş çalıştırmalarda sürenin kiralama ısınmasına, kimlik
bilgisi edinimine, uzak kuruluma veya artifact kopyalamaya gidip gitmediğini
göstermek için toplam ve aşama bazlı süreleri mantis-slack-desktop-smoke-report.md
içinde raporlar. VNC üzerinden Slack Web’e manuel olarak giriş yaptıktan sonra
--lease-id <cbx_...> ile yeniden kullanın; yeniden kullanılan kiralamalar
Crabbox’ın pnpm store önbelleğini de sıcak tutar. Varsayılan
--hydrate-mode source, bir kaynak checkout’undan doğrular ve VM içinde
install/build çalıştırır. --hydrate-mode prehydrated seçeneğini yalnızca
yeniden kullanılan uzak workspace zaten node_modules ve derlenmiş dist/
içerdiğinde kullanın; bu mod pahalı install/build adımını atlar ve workspace
hazır değilse fail-closed davranır. --gateway-setup ile Mantis, VM içinde
38973 portunda kalıcı bir OpenClaw Slack Gateway çalışır halde bırakır; onsuz,
komut normal bot-to-bot Slack QA hattını çalıştırır ve artifact yakalamadan sonra çıkar.
Yerel Slack onay kullanıcı arayüzünü masaüstü kanıtıyla doğrulamak için Mantis
onay checkpoint modunu çalıştırın:
--gateway-setup ile karşılıklı olarak dışlayıcıdır. Slack onay
senaryolarını çalıştırır, onay dışı senaryo kimliklerini reddeder, her bekleyen
ve çözümlenmiş onay durumunda bekler, gözlemlenen Slack API mesajını
approval-checkpoints/<scenario>-pending.png ve
approval-checkpoints/<scenario>-resolved.png içine render eder, ardından herhangi
bir checkpoint, mesaj kanıtı, acknowledgement veya render edilmiş ekran görüntüsü
eksik ya da boşsa başarısız olur. Soğuk CI kiralamaları slack-desktop-smoke.png
içinde hâlâ Slack oturum açma ekranını gösterebilir; onay checkpoint görüntüleri
bu hat için görsel kanıttır.
Operatör kontrol listesi, GitHub workflow dispatch komutu, kanıt yorumu
sözleşmesi, hydrate-mode karar tablosu, süre yorumlama ve hata işleme adımları
Mantis Slack Desktop Runbook içinde yer alır.
Agent/CV tarzı bir masaüstü görevi için şunu çalıştırın:
visual-task, bir Crabbox masaüstü/tarayıcı makinesi kiralar veya yeniden
kullanır, crabbox record --while başlatır, görünür tarayıcıyı iç içe bir
visual-driver üzerinden sürer, visual-task.png yakalar, --vision-mode image-describe
seçildiğinde ekran görüntüsüne karşı openclaw infer image describe çalıştırır
ve visual-task.mp4, mantis-visual-task-summary.json,
mantis-visual-task-driver-result.json ve mantis-visual-task-report.md yazar.
--expect-text ayarlandığında vision prompt’u yapılandırılmış bir JSON verdict
ister ve yalnızca model olumlu görünür kanıt bildirdiğinde başarılı olur; hedef
metni yalnızca alıntılayan olumsuz bir yanıt assertion’ı başarısız yapar.
Masaüstü, tarayıcı, ekran görüntüsü ve video tesisatını bir image-understanding
sağlayıcısını çağırmadan doğrulayan modelsiz bir smoke için --vision-mode metadata
kullanın. Kayıt, visual-task için gerekli bir artifact’tir; Crabbox boş olmayan
bir visual-task.mp4 kaydetmezse görsel driver geçmiş olsa bile görev başarısız
olur. Hata durumunda, görev zaten başarılı olmuş ve --keep-lease ayarlanmamış
olmadıkça Mantis kiralamayı VNC için tutar.
Havuzlanmış canlı kimlik bilgilerini kullanmadan önce şunu çalıştırın:
Canlı aktarım kapsamı
Canlı aktarım hatları, her birinin kendi senaryo listesi şeklini icat etmesi yerine tek bir sözleşmeyi paylaşır.qa-channel, geniş sentetik ürün davranışı paketidir ve canlı aktarım kapsam matrisinin parçası değildir.
Canlı aktarım runner’ları paylaşılan senaryo kimliklerini, baseline kapsam
yardımcılarını ve senaryo seçimi yardımcısını
openclaw/plugin-sdk/qa-live-transport-scenarios içinden import etmelidir.
| Hat | Canary | Mention gating | Bot-to-bot | Allowlist engeli | Üst düzey yanıt | Alıntı yanıt | Yeniden başlatma sürdürme | Thread takibi | Thread izolasyonu | Reaction gözlemi | Yardım komutu | Yerel komut kaydı |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Matrix | x | x | x | x | x | x | x | x | x | |||
| Telegram | x | x | x | x | ||||||||
| Discord | x | x | x | x | ||||||||
| Slack | x | x | x | x | x | x | x | x | ||||
| x | x | x | x | x | x | x | x |
qa-channel öğesini geniş ürün davranışı paketi olarak tutarken Matrix,
Telegram ve diğer canlı aktarımların tek bir açık aktarım sözleşmesi kontrol
listesini paylaşmasını sağlar.
QA yoluna Docker sokmadan tek kullanımlık bir Linux VM hattı için şunu çalıştırın:
qa suite çalıştırır, ardından normal QA raporunu ve özetini
host üzerinde .artifacts/qa-e2e/... içine geri kopyalar.
Host ve aynı senaryo seçimi davranışını host üzerindeki qa suite ile yeniden kullanır.
Host ve Multipass suite çalıştırmaları varsayılan olarak izole gateway worker’larıyla
birden fazla seçili senaryoyu paralel yürütür. qa-channel varsayılan olarak
4 concurrency kullanır ve seçili senaryo sayısıyla sınırlanır. Worker sayısını
ayarlamak için --concurrency <count> veya seri yürütme için --concurrency 1
kullanın.
Kişisel asistan benchmark paketini çalıştırmak için --pack personal-agent
kullanın. Paket seçici, tekrarlanan --scenario bayraklarıyla toplamsaldır:
açık senaryolar önce çalışır, ardından paket senaryoları yinelenenler kaldırılmış
şekilde paket sırasına göre çalışır.
Özel bir QA runner zaten OpenTelemetry collector kurulumunu sağlıyor ve
OpenTelemetry ile Prometheus tanılama smoke senaryolarını birlikte seçmek istiyorsa
--pack observability kullanın.
Herhangi bir senaryo başarısız olduğunda komut sıfır olmayan kodla çıkar. Hata
çıkış kodu olmadan artifact istiyorsanız --allow-failures kullanın.
Canlı çalıştırmalar, guest için pratik olan desteklenen QA kimlik doğrulama
girdilerini iletir: ortam tabanlı sağlayıcı anahtarları, QA canlı sağlayıcı
yapılandırma yolu ve mevcut olduğunda CODEX_HOME. Guest’in bağlı workspace
üzerinden geri yazabilmesi için --output-dir değerini repo kökü altında tutun.
Telegram, Discord, Slack ve WhatsApp QA başvurusu
Matrix, senaryo sayısı ve Docker destekli homeserver sağlama işlemi nedeniyle ayrı bir sayfaya sahiptir. Telegram, Discord, Slack ve WhatsApp önceden var olan gerçek taşımalara karşı çalışır, bu nedenle başvuruları burada yer alır.Paylaşılan CLI bayrakları
Bu hatlarextensions/qa-lab/src/live-transports/shared/live-transport-cli.ts üzerinden kaydolur ve aynı bayrakları kabul eder:
| Bayrak | Varsayılan | Açıklama |
|---|---|---|
--scenario <id> | - | Yalnızca bu senaryoyu çalıştırır. Tekrarlanabilir. |
--output-dir <path> | <repo>/.artifacts/qa-e2e/<transport>-<timestamp> | Raporların, özetlerin, kanıtların, taşımaya özgü yapıtların ve çıktı günlüğünün yazıldığı yer. Göreli yollar --repo-root temelinde çözümlenir. |
--repo-root <path> | process.cwd() | Nötr bir cwd konumundan çağırırken depo kökü. |
--sut-account <id> | sut | QA gateway yapılandırması içindeki geçici hesap kimliği. |
--provider-mode <mode> | live-frontier | mock-openai veya live-frontier (eski live-openai hâlâ çalışır). |
--model <ref> / --alt-model <ref> | sağlayıcı varsayılanı | Birincil/alternatif model başvuruları. |
--fast | kapalı | Desteklendiğinde sağlayıcı hızlı modu. |
--credential-source <env|convex> | env | Bkz. Convex kimlik bilgisi havuzu. |
--credential-role <maintainer|ci> | CI içinde ci, aksi halde maintainer | --credential-source convex kullanıldığında kullanılan rol. |
--allow-failures, başarısız çıkış kodu ayarlamadan yapıtları yazar.
Telegram QA
@BotFather içinde Bot-to-Bot Communication Mode etkin olduğunda en iyi şekilde çalışır.
--credential-source env kullanıldığında gerekli env:
OPENCLAW_QA_TELEGRAM_GROUP_ID- sayısal sohbet kimliği (dize).OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKENOPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN
extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.ts):
telegram-canarytelegram-mention-gatingtelegram-mentioned-message-replytelegram-help-commandtelegram-commands-commandtelegram-tools-compact-commandtelegram-whoami-commandtelegram-status-commandtelegram-repeated-command-authorizationtelegram-other-bot-command-gatingtelegram-context-commandtelegram-current-session-status-tooltelegram-reply-chain-exact-markertelegram-stream-final-single-messagetelegram-long-final-reuses-previewtelegram-long-final-three-chunks
mock-openai varsayılanları ayrıca deterministik yanıt zinciri ve son mesaj akışı denetimlerini içerir. telegram-current-session-status-tool, yalnızca canary’den doğrudan sonra iş parçacığına bağlandığında kararlı olduğu, rastgele yerel komut yanıtlarından sonra kararlı olmadığı için opt-in kalır. Regresyon başvurularıyla birlikte geçerli varsayılan/isteğe bağlı ayrımı yazdırmak için pnpm openclaw qa telegram --list-scenarios --provider-mode mock-openai kullanın.
Çıktı yapıtları:
telegram-qa-report.mdqa-evidence.json- profil, kapsam, sağlayıcı, kanal, yapıtlar, sonuç ve RTT alanları dahil canlı taşıma denetimleri için kanıt girdileri.
result.timing altında qa-evidence.json
içine katlanır.
OPENCLAW_QA_CREDENTIAL_SOURCE=convex ayarlandığında, paket canlı sarmalayıcısı
bir kind: "telegram" kimlik bilgisi kiralar, kiralanan grup/sürücü/SUT bot
env değerlerini kurulu paket çalıştırmasına aktarır, kiralamanın Heartbeat işlemini yapar ve
kapanışta serbest bırakır. Paket sarmalayıcısı, varsayılan olarak
telegram-mentioned-message-reply için 20 RTT denetimi, 30 sn RTT zaman aşımı ve Convex seçildiğinde CI dışında Convex rolü
maintainer kullanır.
Ayrı bir RTT komutu veya Telegram’a özgü özet biçimi oluşturmadan RTT ölçümünü ayarlamak için
OPENCLAW_NPM_TELEGRAM_RTT_SAMPLES, OPENCLAW_NPM_TELEGRAM_RTT_TIMEOUT_MS
veya OPENCLAW_NPM_TELEGRAM_RTT_MAX_FAILURES değerlerini geçersiz kılın.
Discord QA
/help komutunu kaydettiğini ve opt-in Mantis kanıt senaryolarını doğrular.
--credential-source env kullanıldığında gerekli env:
OPENCLAW_QA_DISCORD_GUILD_IDOPENCLAW_QA_DISCORD_CHANNEL_IDOPENCLAW_QA_DISCORD_DRIVER_BOT_TOKENOPENCLAW_QA_DISCORD_SUT_BOT_TOKENOPENCLAW_QA_DISCORD_SUT_APPLICATION_ID- Discord tarafından döndürülen SUT bot kullanıcı kimliğiyle eşleşmelidir (aksi halde hat hızlı şekilde başarısız olur).
OPENCLAW_QA_DISCORD_CAPTURE_CONTENT=1gözlemlenen mesaj yapıtlarında ileti gövdelerini tutar.OPENCLAW_QA_DISCORD_VOICE_CHANNEL_ID,discord-voice-autojoiniçin ses/sahne kanalını seçer; bu olmadan senaryo, SUT botu için ilk görünür ses/sahne kanalını seçer.
extensions/qa-lab/src/live-transports/discord/discord-live.runtime.ts:36):
discord-canarydiscord-mention-gatingdiscord-native-help-command-registrationdiscord-voice-autojoin- opt-in ses senaryosu. Tek başına çalışır,channels.discord.voice.autoJoinetkinleştirir ve SUT botunun geçerli Discord ses durumunun hedef ses/sahne kanalı olduğunu doğrular. Convex Discord kimlik bilgileri isteğe bağlıvoiceChannelIdiçerebilir; aksi halde çalıştırıcı guild içindeki ilk görünür ses/sahne kanalını keşfeder.discord-status-reactions-tool-only- opt-in Mantis senaryosu. SUT’umessages.statusReactions.enabled=trueile her zaman açık, yalnızca araç kullanan guild yanıtlarına geçirdiği için tek başına çalışır, ardından REST tepki zaman çizelgesi ve HTML/PNG görsel yapıtları yakalar. Mantis önce/sonra raporları ayrıca senaryo tarafından sağlanan MP4 yapıtlarınıbaseline.mp4vecandidate.mp4olarak korur.
discord-qa-report.mdqa-evidence.json- canlı taşıma denetimleri için kanıt girdileri.discord-qa-observed-messages.json-OPENCLAW_QA_DISCORD_CAPTURE_CONTENT=1olmadığı sürece gövdeler redakte edilir.- Durum tepkisi senaryosu çalıştığında
discord-qa-reaction-timelines.jsonvediscord-status-reactions-tool-only-timeline.png.
Slack QA
--credential-source env kullanıldığında gerekli env:
OPENCLAW_QA_SLACK_CHANNEL_IDOPENCLAW_QA_SLACK_DRIVER_BOT_TOKENOPENCLAW_QA_SLACK_SUT_BOT_TOKENOPENCLAW_QA_SLACK_SUT_APP_TOKEN
OPENCLAW_QA_SLACK_CAPTURE_CONTENT=1gözlemlenen mesaj yapıtlarında ileti gövdelerini tutar.OPENCLAW_QA_SLACK_APPROVAL_CHECKPOINT_DIR, Mantis için görsel onay denetim noktalarını etkinleştirir. Çalıştırıcı<scenario>.pending.jsonve<scenario>.resolved.jsonyazar, ardından eşleşen.ack.jsondosyalarını bekler.OPENCLAW_QA_SLACK_APPROVAL_CHECKPOINT_TIMEOUT_MS, denetim noktası alındı zaman aşımını geçersiz kılar. Varsayılan120000değeridir.
extensions/qa-lab/src/live-transports/slack/slack-live.runtime.ts):
slack-canaryslack-mention-gatingslack-allowlist-blockslack-top-level-reply-shapeslack-restart-resumeslack-thread-follow-upslack-thread-isolationslack-approval-exec-native- opt-in yerel Slack exec onay senaryosu. Gateway üzerinden bir exec onayı ister, Slack iletisinde yerel onay düğmeleri olduğunu doğrular, bunu çözer ve çözümlenmiş Slack güncellemesini doğrular.slack-approval-plugin-native- opt-in yerel Slack plugin onay senaryosu. Exec ve plugin onay iletmeyi birlikte etkinleştirir; böylece plugin olayları exec onay yönlendirmesi tarafından bastırılmaz, ardından aynı bekleyen/çözülmüş yerel Slack UI yolunu doğrular.
slack-qa-report.mdqa-evidence.json- canlı taşıma denetimleri için kanıt girdileri.slack-qa-observed-messages.json-OPENCLAW_QA_SLACK_CAPTURE_CONTENT=1olmadığı sürece gövdeler redakte edilir.approval-checkpoints/- yalnızca MantisOPENCLAW_QA_SLACK_APPROVAL_CHECKPOINT_DIRayarladığında; denetim noktası JSON, alındı JSON ve bekleyen/çözülmüş ekran görüntülerini içerir.
Slack çalışma alanını ayarlama
Hat, tek bir çalışma alanında iki ayrı Slack uygulamasına ve her iki botun da üye olduğu bir kanala ihtiyaç duyar:channelId- her iki botun da davet edildiği bir kanalınCxxxxxxxxxxkimliği. Özel bir kanal kullanın; hat her çalıştırmada gönderi yapar.driverBotToken- Driver uygulamasının bot token’ı (xoxb-...).sutBotToken- SUT’un bot kullanıcı kimliğinin ayrı olması için sürücüden ayrı bir Slack uygulaması olması gereken SUT uygulamasının bot token’ı (xoxb-...).sutAppToken- SUT uygulamasınınconnections:writeyetkisine sahip uygulama düzeyi token’ı (xapp-...); SUT uygulamasının olayları alabilmesi için Socket Mode tarafından kullanılır.
extensions/slack/src/setup-shared.ts:10) kasıtlı olarak canlı Slack QA paketi tarafından kapsanan izinlere ve olaylara daraltır. Kullanıcıların gördüğü üretim kanalı kurulumu için bkz. Slack kanalı hızlı kurulum; QA Driver/SUT çifti, hat tek bir çalışma alanında iki ayrı bot kullanıcı kimliğine ihtiyaç duyduğu için kasıtlı olarak ayrıdır.
1. Driver uygulamasını oluşturun
api.slack.com/apps adresine gidin → Yeni Uygulama Oluştur → Bir manifestten → QA çalışma alanını seçin, aşağıdaki manifesti yapıştırın, ardından Çalışma Alanına Yükle:
xoxb-...) kopyalayın - bu driverBotToken olur. Sürücünün yalnızca ileti göndermesi ve kendini tanımlaması gerekir; olaylar veya Socket Mode gerekmez.
2. SUT uygulamasını oluşturun
Aynı çalışma alanında Yeni Uygulama Oluştur → Bir manifestten işlemini tekrarlayın. Bu QA uygulaması, paketle gelen Slack Plugin’inin üretim manifestinin (extensions/slack/src/setup-shared.ts:10) özellikle daha dar bir sürümünü kullanır: canlı Slack QA paketi henüz tepki işlemeyi kapsamadığı için tepki kapsamları ve olayları atlanmıştır.
- Çalışma Alanına Yükle → Bot Kullanıcısı OAuth Tokenı değerini kopyalayın → bu
sutBotTokenolur. - Temel Bilgiler → Uygulama Düzeyi Tokenlar → Token ve Kapsamlar Oluştur →
connections:writekapsamını ekleyin → kaydedin →xapp-...değerini kopyalayın → busutAppTokenolur.
auth.test çağırarak iki botun farklı kullanıcı kimliklerine sahip olduğunu doğrulayın. Çalışma zamanı sürücü ve SUT’yi kullanıcı kimliğine göre ayırt eder; ikisi için aynı uygulamayı yeniden kullanmak, bahsetme geçidinde hemen başarısız olur.
3. Kanalı oluşturun
QA çalışma alanında bir kanal oluşturun (ör. #openclaw-qa) ve kanalın içinden her iki botu davet edin:
Cxxxxxxxxxx kimliğini kopyalayın - bu channelId olur. Genel bir kanal çalışır; özel kanal kullanırsanız iki uygulamada da zaten groups:history bulunduğu için koşumun geçmiş okumaları yine başarılı olur.
4. Kimlik bilgilerini kaydedin
İki seçenek vardır. Tek makinede hata ayıklama için ortam değişkenlerini kullanın (dört OPENCLAW_QA_SLACK_* değişkenini ayarlayın ve --credential-source env iletin) veya CI ve diğer bakımcıların kiralayabilmesi için paylaşılan Convex havuzunu tohumlayın.
Convex havuzu için dört alanı bir JSON dosyasına yazın:
OPENCLAW_QA_CONVEX_SITE_URL ve OPENCLAW_QA_CONVEX_SECRET_MAINTAINER dışa aktarılmışken kaydedin ve doğrulayın:
count: 1, status: "active" ve lease alanı olmamasını bekleyin.
5. Uçtan uca doğrulayın
Her iki botun aracı üzerinden birbirleriyle konuşabildiğini doğrulamak için hattı yerelde çalıştırın:
slack-qa-report.md, hem slack-canary hem de slack-mention-gating durumunu pass olarak gösterir. Hat yaklaşık 90 saniye takılıp Convex credential pool exhausted for kind "slack" ile çıkarsa havuz ya boştur ya da her satır kiralanmıştır - qa credentials list --kind slack --status all --json hangisi olduğunu söyler.
WhatsApp QA
--credential-source env kullanıldığında gerekli ortam:
OPENCLAW_QA_WHATSAPP_DRIVER_PHONE_E164OPENCLAW_QA_WHATSAPP_SUT_PHONE_E164OPENCLAW_QA_WHATSAPP_DRIVER_AUTH_ARCHIVE_BASE64OPENCLAW_QA_WHATSAPP_SUT_AUTH_ARCHIVE_BASE64
OPENCLAW_QA_WHATSAPP_GROUP_JID,whatsapp-mention-gating,whatsapp-group-pending-history-context,whatsapp-broadcast-group-fanout,whatsapp-group-activation-always,whatsapp-group-reply-to-bot-triggers, grup eylem/medya/anket senaryoları vewhatsapp-group-allowlist-blockgibi grup senaryolarını etkinleştirir.OPENCLAW_QA_WHATSAPP_CAPTURE_CONTENT=1, ileti gövdelerini gözlemlenen ileti yapıtlarında tutar.
extensions/qa-lab/src/live-transports/whatsapp/whatsapp-live.runtime.ts):
- Temel ve grup geçidi:
whatsapp-canary,whatsapp-pairing-block,whatsapp-mention-gating,whatsapp-group-pending-history-context,whatsapp-group-activation-always,whatsapp-group-reply-to-bot-triggers,whatsapp-top-level-reply-shape,whatsapp-restart-resume,whatsapp-group-allowlist-block. - Yerel komutlar:
whatsapp-help-command,whatsapp-status-command,whatsapp-commands-command,whatsapp-tools-compact-command,whatsapp-whoami-command,whatsapp-context-command,whatsapp-native-new-command. - Yanıt ve son çıktı davranışı:
whatsapp-tool-only-usage-footer,whatsapp-reply-to-message,whatsapp-group-reply-to-message,whatsapp-reply-to-mode-batched,whatsapp-reply-context-isolation,whatsapp-reply-delivery-shape,whatsapp-stream-final-message-accounting. - Kullanıcı yolu ileti eylemleri:
whatsapp-agent-message-action-react, gerçek bir sürücü DM’sinden başlar, modelinmessagearacını çağırmasına izin verir ve yerel WhatsApp tepkisini gözlemler.whatsapp-agent-message-action-upload-file,message(action=upload-file)için aynı duruşu kullanır ve yerel WhatsApp medyasını gözlemler.whatsapp-group-agent-message-action-reactvewhatsapp-group-agent-message-action-upload-file, aynı kullanıcı tarafından görülebilen eylemleri gerçek bir WhatsApp grubunda kanıtlar. - Grup yayılımı:
whatsapp-broadcast-group-fanout, bahsetme içeren tek bir WhatsApp grup iletisinden başlar vemainileqa-secondtarafından verilen farklı görünür yanıtları doğrular. - Grup etkinleştirme:
whatsapp-group-activation-always, gerçek bir grup oturumunu/activation alwaysolarak değiştirir, bahsetme içermeyen bir grup iletisinin ajanı uyandırdığını kanıtlar ve ardından/activation mentiondeğerini geri yükler.whatsapp-group-reply-to-bot-triggers, bir bot yanıtı tohumlar, açık bir bahsetme olmadan ona yerel alıntılı yanıt gönderir ve ajanın bu yanıt bağlamından uyandığını doğrular. - Gelen medya ve yapılandırılmış iletiler:
whatsapp-inbound-image-caption,whatsapp-audio-preflight,whatsapp-inbound-structured-messages,whatsapp-group-audio-gating,whatsapp-inbound-reaction-no-trigger. Bunlar sürücü üzerinden gerçek WhatsApp görsel, ses, belge, konum, kişi, çıkartma ve tepki olayları gönderir. - Doğrudan Gateway sözleşme yoklamaları:
whatsapp-outbound-media-matrix,whatsapp-outbound-document-preserves-filename,whatsapp-outbound-poll,whatsapp-group-outbound-media,whatsapp-group-outbound-poll,whatsapp-message-actions,whatsapp-reply-context-isolation,whatsapp-reply-delivery-shape. Bunlar model istemini bilerek atlar ve deterministik Gateway/kanalsend,pollvemessage.actionsözleşmelerini kanıtlar. - Erişim denetimi kapsamı:
whatsapp-access-control-dm-open,whatsapp-access-control-dm-disabled,whatsapp-access-control-group-open,whatsapp-access-control-group-disabled,whatsapp-group-allowlist-block. - Yerel onaylar:
whatsapp-approval-exec-deny-native,whatsapp-approval-exec-native,whatsapp-approval-exec-reaction-native,whatsapp-approval-exec-group-reaction-native,whatsapp-approval-plugin-native. - Durum tepkileri:
whatsapp-status-reactions,whatsapp-status-reaction-lifecycle.
live-frontier varsayılan hattı,
hızlı duman kapsamı için 10 senaryoda küçük tutulur. mock-openai varsayılan
hattı, yalnızca model çıktısını taklit ederken gerçek WhatsApp taşıması üzerinden
44 deterministik senaryo çalıştırır. Onay senaryoları ve birkaç daha ağır/engelleyici
kontrol, senaryo kimliğine göre açık kalır.
WhatsApp QA sürücüsü yapılandırılmış canlı olayları (text, media,
location, reaction ve poll) gözlemler ve etkin olarak medya, anketler,
kişiler, konumlar ve çıkartmalar gönderebilir. QA Lab, bu sürücüyü özel
WhatsApp çalışma zamanı dosyalarına uzanmak yerine @openclaw/whatsapp/api.js
paket yüzeyi üzerinden içe aktarır. Grup gözlemleri için fromJid grup JID’sidir,
participantJid ve fromPhoneE164 ise katılımcı göndereni tanımlar. İleti
içeriği varsayılan olarak redakte edilir. Doğrudan Gateway
anket, upload-file, medya, grup anketi, grup medyası ve yanıt şekli yoklamaları taşıma/API sözleşmesi
kontrolleridir; bunlar bir kullanıcı isteminin ajanın aynı eylemi seçmesini
sağladığının kanıtı olarak ele alınmaz. Kullanıcı yolu eylem kanıtı,
whatsapp-agent-message-action-react ve
whatsapp-group-agent-message-action-react gibi senaryolardan gelir; burada sürücü normal bir
WhatsApp iletisi gönderir ve QA Lab ortaya çıkan yerel WhatsApp yapıtını gözlemler.
WhatsApp raporları, kanıtın gerçekte kanıtladığından daha güçlü bir sözleşmeyle
karıştırılamaması için her senaryonun duruşunu (user-path, direct-gateway
veya native-approval) içerir.
Çıktı yapıtları:
whatsapp-qa-report.mdqa-evidence.json- canlı taşıma kontrolleri için kanıt girdileri.whatsapp-qa-observed-messages.json-OPENCLAW_QA_WHATSAPP_CAPTURE_CONTENT=1olmadığı sürece gövdeler redakte edilir.
Convex kimlik bilgisi havuzu
Telegram, Discord, Slack ve WhatsApp hatları, yukarıdaki ortam değişkenlerini okumak yerine paylaşılan bir Convex havuzundan kimlik bilgileri kiralayabilir.--credential-source convex iletin (veya OPENCLAW_QA_CREDENTIAL_SOURCE=convex ayarlayın); QA Lab özel bir kira alır, çalışma süresi boyunca Heartbeat gönderir ve kapanışta serbest bırakır. Havuz türleri "telegram", "discord", "slack" ve "whatsapp" değerleridir.
Aracının admin/add üzerinde doğruladığı yük şekilleri:
- Telegram (
kind: "telegram"):{ groupId: string, driverToken: string, sutToken: string }-groupIdsayısal bir sohbet kimliği dizesi olmalıdır. - Gerçek Telegram kullanıcısı (
kind: "telegram-user"):{ groupId: string, sutToken: string, testerUserId: string, testerUsername: string, telegramApiId: string, telegramApiHash: string, tdlibDatabaseEncryptionKey: string, tdlibArchiveBase64: string, tdlibArchiveSha256: string, desktopTdataArchiveBase64: string, desktopTdataArchiveSha256: string }- Yalnızca Mantis Telegram Desktop kanıtı. Genel QA Lab hatları bu türü edinmemelidir. - Discord (
kind: "discord"):{ guildId: string, channelId: string, driverBotToken: string, sutBotToken: string, sutApplicationId: string }. - WhatsApp (
kind: "whatsapp"):{ driverPhoneE164: string, sutPhoneE164: string, driverAuthArchiveBase64: string, sutAuthArchiveBase64: string, groupJid?: string }- telefon numaraları birbirinden farklı E.164 dizeleri olmalıdır.
telegram-user kiralaması tutar, ardından kanıtı yayımladıktan sonra bunu serbest bırakır.
Bir PR deterministik görsel fark gerektirdiğinde Mantis, Telegram biçimlendiricisi veya teslim katmanı değişirken main üzerinde ve PR başlığında aynı sahte model yanıtını kullanabilir. Yakalama varsayılanları PR yorumları için ayarlanmıştır: standart Crabbox sınıfı, 24fps masaüstü kaydı, 24fps hareket GIF’i ve 1920px önizleme genişliği. Önce/sonra yorumları, yalnızca amaçlanan GIF’leri içeren temiz bir paket yayımlamalıdır.
Slack hatları da havuzu kullanabilir. Slack yük şekli denetimleri şu anda aracı yerine Slack QA çalıştırıcısında bulunur; Slack kanal kimliği Cxxxxxxxxxx gibi olacak şekilde { channelId: string, driverBotToken: string, sutBotToken: string, sutAppToken: string } kullanın. Uygulama ve kapsam hazırlığı için Slack çalışma alanını ayarlama bölümüne bakın.
Operasyonel ortam değişkenleri ve Convex aracı uç nokta sözleşmesi Test Etme → Convex üzerinden paylaşılan Telegram kimlik bilgileri içinde bulunur (bölüm adı çok kanallı havuzdan öncesine aittir; kiralama semantiği türler arasında ortaktır).
Repo destekli tohumlar
Tohum varlıklarıqa/ içinde bulunur:
qa/scenarios/index.yamlqa/scenarios/<theme>/*.yaml
qa-lab genel bir YAML senaryo çalıştırıcısı olarak kalmalıdır. Her senaryo YAML dosyası, tek bir test çalışması için doğruluk kaynağıdır ve şunları tanımlamalıdır:
- üst düzey
title scenariometa verileriscenarioiçinde isteğe bağlı kategori, yetenek, hat ve risk meta verileriscenarioiçinde doküman ve kod referanslarıscenarioiçinde isteğe bağlı Plugin gereksinimleriscenarioiçinde isteğe bağlı Gateway yapılandırma yaması- akış senaryoları için çalıştırılabilir üst düzey
flowveya Vitest ve Playwright senaryoları içinscenario.execution.kind/scenario.execution.path
flow arkasındaki yeniden kullanılabilir çalışma zamanı yüzeyinin genel ve kesişen kapsamda kalmasına izin verilir. Örneğin YAML senaryoları, Gateway browser.request bağlantısı üzerinden gömülü Control UI’yi yöneten tarayıcı tarafı yardımcılarıyla taşıma tarafı yardımcılarını, özel durum çalıştırıcısı eklemeden birleştirebilir.
Senaryo dosyaları kaynak ağacı klasörü yerine ürün yeteneğine göre gruplanmalıdır. Dosyalar taşındığında senaryo kimliklerini kararlı tutun; uygulama izlenebilirliği için docsRefs ve codeRefs kullanın.
Temel liste aşağıdakileri kapsayacak kadar geniş kalmalıdır:
- DM ve kanal sohbeti
- ileti dizisi davranışı
- ileti eylemi yaşam döngüsü
- Cron geri çağrıları
- bellek hatırlama
- model değiştirme
- alt agent devri
- repo okuma ve doküman okuma
- Lobster Invaders gibi küçük bir derleme görevi
Sağlayıcı sahte hatları
qa suite iki yerel sağlayıcı sahte hattına sahiptir:
mock-openai, senaryo farkındalığına sahip OpenClaw sahtesidir. Repo destekli QA ve eşdeğerlik geçitleri için varsayılan deterministik sahte hat olarak kalır.aimock, deneysel protokol, fixture, kayıt/yeniden oynatma ve kaos kapsamı için AIMock destekli bir sağlayıcı sunucusu başlatır. Eklemelidir vemock-openaisenaryo dağıtıcısının yerini almaz.
extensions/qa-lab/src/providers/ altında bulunur. Her sağlayıcı kendi varsayılanlarına, yerel sunucu başlatmasına, Gateway model yapılandırmasına, kimlik doğrulama profili hazırlama ihtiyaçlarına ve canlı/sahte yetenek bayraklarına sahiptir. Paylaşılan suite ve Gateway kodu, sağlayıcı adlarına göre dallanmak yerine sağlayıcı kayıt defteri üzerinden yönlendirilmelidir.
Taşıma bağdaştırıcıları
qa-lab, YAML QA senaryoları için genel bir taşıma bağlantısına sahiptir. qa-channel sentetik varsayılandır. crabline, yerel sağlayıcı şeklindeki sunucuları başlatır ve OpenClaw’ın normal kanal Pluginlerini bunlara karşı çalıştırır. live, gerçek sağlayıcı kimlik bilgileri ve dış kanallar için ayrılmıştır.
Mimari düzeyde ayrım şöyledir:
qa-lab, genel senaryo yürütmeyi, worker eşzamanlılığını, artifact yazımını ve raporlamayı sahiplenir.- Taşıma bağdaştırıcısı Gateway yapılandırmasını, hazır olmayı, gelen ve giden gözlemi, taşıma eylemlerini ve normalleştirilmiş taşıma durumunu sahiplenir.
qa/scenarios/altındaki YAML senaryo dosyaları test çalışmasını tanımlar;qa-labbunları yürüten yeniden kullanılabilir çalışma zamanı yüzeyini sağlar.
Kanal ekleme
YAML QA sistemine kanal eklemek, kanal uygulamasını ve kanal sözleşmesini çalıştıran bir senaryo paketini gerektirir. Smoke CI kapsamı için eşleşen Crabline yerel sağlayıcı sunucusunu ekleyin vecrabline sürücüsü üzerinden sunun.
Paylaşılan qa-lab konağı akışı sahiplenebiliyorsa yeni bir üst düzey QA komut kökü eklemeyin.
qa-lab paylaşılan konak mekaniklerini sahiplenir:
openclaw qakomut kökü- suite başlatma ve kapatma
- worker eşzamanlılığı
- artifact yazımı
- rapor üretimi
- senaryo yürütme
- eski
qa-channelsenaryoları için uyumluluk takma adları
openclaw qa <runner>öğesinin paylaşılanqakökü altına nasıl bağlandığı- Gateway’in bu taşıma için nasıl yapılandırıldığı
- hazır olmanın nasıl denetlendiği
- gelen olayların nasıl enjekte edildiği
- giden iletilerin nasıl gözlendiği
- transkriptlerin ve normalleştirilmiş taşıma durumunun nasıl sunulduğu
- taşıma destekli eylemlerin nasıl yürütüldüğü
- taşımaya özgü sıfırlama veya temizliğin nasıl ele alındığı
qa-laböğesini paylaşılanqakökünün sahibi olarak tutun.- Taşıma çalıştırıcısını paylaşılan
qa-labkonak bağlantısında uygulayın. - Taşımaya özgü mekanikleri çalıştırıcı Plugini veya kanal harness’ı içinde tutun.
- Rakip bir kök komut kaydetmek yerine çalıştırıcıyı
openclaw qa <runner>olarak bağlayın. Çalıştırıcı Pluginleriopenclaw.plugin.jsoniçindeqaRunnersbildirmeli veruntime-api.tsiçinden eşleşen birqaRunnerCliRegistrationsdizisi dışa aktarmalıdır.runtime-api.tshafif kalmalıdır; tembel CLI ve çalıştırıcı yürütmesi ayrı giriş noktalarının arkasında kalmalıdır. - Temalı
qa/scenarios/dizinleri altında YAML senaryoları yazın veya uyarlayın. - Yeni senaryolar için genel senaryo yardımcılarını kullanın.
- Repo kasıtlı bir geçiş yapmıyorsa mevcut uyumluluk takma adlarını çalışır durumda tutun.
- Davranış
qa-labiçinde bir kez ifade edilebiliyorsa, onuqa-labiçine koyun. - Davranış tek bir kanal taşımasına bağlıysa, onu ilgili çalıştırıcı Plugininde veya Plugin harness’ında tutun.
- Bir senaryo birden fazla kanalın kullanabileceği yeni bir yetenek gerektiriyorsa,
suite.tsiçinde kanala özgü bir dal yerine genel bir yardımcı ekleyin. - Bir davranış yalnızca tek bir taşıma için anlamlıysa, senaryoyu taşımaya özgü tutun ve bunu senaryo sözleşmesinde açık hale getirin.
Senaryo yardımcı adları
Yeni senaryolar için tercih edilen genel yardımcılar:waitForTransportReadywaitForChannelReadyinjectInboundMessageinjectOutboundMessagewaitForTransportOutboundMessagewaitForChannelOutboundMessagewaitForNoTransportOutboundgetTransportSnapshotreadTransportMessagereadTransportTranscriptformatTransportTranscriptresetTransport
waitForQaChannelReady, waitForOutboundMessage, waitForNoOutbound, formatConversationTranscript, resetBus - ancak yeni senaryo yazımı genel adları kullanmalıdır. Takma adlar, ilerideki model olarak değil, bir bayrak günü geçişinden kaçınmak için vardır.
Raporlama
qa-lab, gözlenen veri yolu zaman çizelgesinden bir Markdown protokol raporu dışa aktarır. Rapor şunları yanıtlamalıdır:
- Ne çalıştı
- Ne başarısız oldu
- Ne engelli kaldı
- Hangi takip senaryolarını eklemeye değer
pnpm openclaw qa coverage çalıştırın (makine tarafından okunabilir çıktı için --json ekleyin).
Dokunulan bir davranış veya dosya yolu için odaklı kanıt seçerken pnpm openclaw qa coverage --match <query> çalıştırın.
Eşleşme raporu senaryo meta verilerini, doküman referanslarını, kod referanslarını, kapsam kimliklerini, Pluginleri ve sağlayıcı gereksinimlerini arar, ardından eşleşen qa suite --scenario ... hedeflerini yazdırır.
Her qa suite çalışması, seçilen senaryo kümesi için üst düzey qa-evidence.json,
qa-suite-summary.json ve qa-suite-report.md artifact’lerini yazar. execution.kind: vitest veya
execution.kind: playwright bildiren senaryolar eşleşen test yolunu çalıştırır ve ayrıca senaryo başına günlükler yazar. execution.kind: script bildiren senaryolar,
kanıt üreticisini execution.path konumunda node --import tsx üzerinden çalıştırır (execution.args içinde
${outputDir} ve ${scenarioId} genişletilmiş olarak); üretici kendi qa-evidence.json dosyasını yazar, buradaki girdiler suite çıktısına aktarılır ve artifact yolları ilgili üretici
qa-evidence.json dosyasına göre çözümlenir. qa suite,
qa run --qa-profile üzerinden ulaşıldığında aynı qa-evidence.json, seçilen taksonomi kategorileri için profil puan kartı özetini de içerir.
Bunu bir keşif yardımı olarak ele alın, geçit yerine geçen bir şey olarak değil; seçilen senaryo, test edilen davranış için hâlâ doğru sağlayıcı modu, canlı taşıma, Multipass, Testbox veya yayın hattını gerektirir.
Puan kartı bağlamı için Olgunluk puan kartı bölümüne bakın.
Karakter ve stil denetimleri için aynı senaryoyu birden fazla canlı model referansı üzerinde çalıştırın ve değerlendirilmiş bir Markdown raporu yazın:
SOUL.md üzerinden ayarlamalı, ardından sohbet, çalışma alanı
yardımı ve küçük dosya görevleri gibi sıradan kullanıcı turlarını çalıştırmalıdır.
Aday modele değerlendirildiği söylenmemelidir. Komut her tam transkripti korur,
temel çalıştırma istatistiklerini kaydeder, ardından judge modellerinden desteklenen
yerlerde xhigh akıl yürütme ile hızlı modda çalıştırmaları doğallık, hava ve mizaha
göre sıralamalarını ister.
Sağlayıcıları karşılaştırırken --blind-judge-models kullanın: judge istemi yine
her transkripti ve çalıştırma durumunu alır, ancak aday referansları candidate-01
gibi nötr etiketlerle değiştirilir; rapor, ayrıştırmadan sonra sıralamaları gerçek
referanslara geri eşler.
Aday çalıştırmaları varsayılan olarak high düşünme kullanır; GPT-5.5 için
medium, bunu destekleyen eski OpenAI değerlendirme referansları için xhigh
kullanılır. Belirli bir adayı satır içinde
--model provider/model,thinking=<level> ile geçersiz kılın. --thinking <level>
yine genel bir yedek ayarlar ve eski --model-thinking <provider/model=level>
biçimi uyumluluk için korunur.
OpenAI aday referansları varsayılan olarak hızlı moda geçer; böylece sağlayıcının
desteklediği yerlerde öncelikli işleme kullanılır. Tek bir adayın veya judge’ın
geçersiz kılmaya ihtiyacı olduğunda satır içinde ,fast, ,no-fast veya
,fast=false ekleyin. Hızlı modu her aday model için zorlamak istediğinizde yalnızca
--fast iletin. Aday ve judge süreleri karşılaştırma analizi için rapora kaydedilir,
ancak judge istemleri açıkça hıza göre sıralama yapmamalarını söyler.
Aday ve judge model çalıştırmalarının ikisi de varsayılan olarak 16 eşzamanlılık
kullanır. Sağlayıcı sınırları veya yerel gateway baskısı bir çalıştırmayı fazla
gürültülü hale getirdiğinde --concurrency veya --judge-concurrency değerini
düşürün.
Hiçbir aday --model iletilmediğinde, karakter değerlendirmesi varsayılan olarak
openai/gpt-5.5, openai/gpt-5.2, openai/gpt-5, anthropic/claude-opus-4-8,
anthropic/claude-sonnet-4-6, zai/glm-5.1,
moonshot/kimi-k2.5 ve
google/gemini-3.1-pro-preview kullanır.
Hiçbir --judge-model iletilmediğinde, judge’lar varsayılan olarak
openai/gpt-5.5,thinking=xhigh,fast ve
anthropic/claude-opus-4-8,thinking=high olur.