extensions/qa-channel: channel pesan sintetis dengan permukaan DM, channel, thread, reaksi, edit, dan hapus.extensions/qa-lab: UI debugger dan bus QA untuk mengamati transkrip, menyuntikkan pesan masuk, dan mengekspor laporan Markdown.qa/: aset seed berbasis repo untuk tugas kickoff dan skenario QA baseline.
- Kiri: dasbor Gateway (UI Control) dengan agen.
- Kanan: QA Lab, menampilkan transkrip bergaya Slack dan rencana skenario.
qa:lab:up:fast menjaga layanan Docker tetap menggunakan image yang sudah dibangun sebelumnya dan melakukan bind-mount
extensions/qa-lab/web/dist ke container qa-lab. qa:lab:watch
membangun ulang bundle tersebut saat ada perubahan, dan browser melakukan muat ulang otomatis saat hash aset QA Lab berubah.
Untuk lane smoke Matrix transport-riil, jalankan:
qa-channel di config child. Lane ini menulis artefak laporan terstruktur dan
log gabungan stdout/stderr ke direktori output Matrix QA yang dipilih. Untuk
menangkap juga output build/launcher scripts/run-node.mjs bagian luar, setel
OPENCLAW_RUN_NODE_OUTPUT_LOG=<path> ke file log lokal-repo.
Untuk lane smoke Telegram transport-riil, jalankan:
OPENCLAW_QA_TELEGRAM_GROUP_ID,
OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN, dan
OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN, ditambah dua bot berbeda dalam grup
privat yang sama. Bot SUT harus memiliki username Telegram, dan observasi bot-ke-bot
berfungsi paling baik saat kedua bot memiliki Bot-to-Bot Communication Mode
diaktifkan di @BotFather.
Perintah keluar dengan status non-zero saat ada skenario yang gagal. Gunakan --allow-failures saat
Anda menginginkan artefak tanpa exit code gagal.
Laporan dan ringkasan Telegram menyertakan RTT per-balasan dari permintaan kirim
pesan driver ke balasan SUT yang teramati, dimulai dari canary.
Untuk lane smoke Discord transport-riil, jalankan:
OPENCLAW_QA_DISCORD_GUILD_ID, OPENCLAW_QA_DISCORD_CHANNEL_ID,
OPENCLAW_QA_DISCORD_DRIVER_BOT_TOKEN, OPENCLAW_QA_DISCORD_SUT_BOT_TOKEN,
dan OPENCLAW_QA_DISCORD_SUT_APPLICATION_ID saat menggunakan kredensial env.
Lane ini memverifikasi penanganan mention channel dan memeriksa bahwa bot SUT telah
mendaftarkan perintah native /help ke Discord.
Perintah keluar dengan status non-zero saat ada skenario yang gagal. Gunakan --allow-failures saat
Anda menginginkan artefak tanpa exit code gagal.
Lane transport live sekarang berbagi satu kontrak yang lebih kecil alih-alih masing-masing menciptakan
bentuk daftar skenario sendiri:
qa-channel tetap menjadi suite luas perilaku produk sintetis dan bukan bagian
dari matriks cakupan transport live.
| Lane | Canary | Pembatasan mention | Blok allowlist | Balasan tingkat atas | Lanjut setelah restart | Follow-up thread | Isolasi thread | Observasi reaksi | Perintah help | Pendaftaran perintah native |
|---|---|---|---|---|---|---|---|---|---|---|
| Matrix | x | x | x | x | x | x | x | x | ||
| Telegram | x | x | x | |||||||
| Discord | x | x | x |
qa-channel sebagai suite luas perilaku produk sementara Matrix,
Telegram, dan transport live mendatang berbagi satu checklist kontrak transport
yang eksplisit.
Untuk lane VM Linux sekali pakai tanpa membawa Docker ke jalur QA, jalankan:
qa suite, lalu menyalin laporan dan
ringkasan QA normal kembali ke .artifacts/qa-e2e/... di host.
Perintah ini menggunakan kembali perilaku pemilihan skenario yang sama seperti qa suite di host.
Run suite host dan Multipass mengeksekusi beberapa skenario terpilih secara paralel
dengan worker gateway terisolasi secara default. qa-channel default ke konkurensi
4, dibatasi oleh jumlah skenario yang dipilih. Gunakan --concurrency <count> untuk menyetel
jumlah worker, atau --concurrency 1 untuk eksekusi serial.
Perintah keluar dengan status non-zero saat ada skenario yang gagal. Gunakan --allow-failures saat
Anda menginginkan artefak tanpa exit code gagal.
Run live meneruskan input auth QA yang didukung dan praktis untuk
guest: kunci penyedia berbasis env, path config penyedia live QA, dan
CODEX_HOME bila ada. Pertahankan --output-dir di bawah root repo agar guest
dapat menulis kembali melalui workspace yang di-mount.
Seed berbasis repo
Aset seed berada diqa/:
qa/scenarios/index.mdqa/scenarios/<theme>/*.md
qa-lab harus tetap menjadi runner Markdown generik. Setiap file Markdown skenario adalah
sumber kebenaran untuk satu run pengujian dan harus mendefinisikan:
- metadata skenario
- metadata kategori, kemampuan, lane, dan risiko opsional
- referensi dokumentasi dan kode
- persyaratan Plugin opsional
- patch config Gateway opsional
qa-flowyang dapat dieksekusi
qa-flow diizinkan untuk tetap generik
dan lintas potong. Misalnya, skenario Markdown dapat menggabungkan helper
sisi transport dengan helper sisi browser yang mengendalikan UI Control tersemat melalui
seam browser.request Gateway tanpa menambahkan runner kasus khusus.
File skenario harus dikelompokkan berdasarkan kemampuan produk, bukan folder
pohon sumber. Pertahankan ID skenario tetap stabil saat file dipindahkan; gunakan docsRefs dan codeRefs
untuk keterlacakan implementasi.
Daftar baseline harus tetap cukup luas untuk mencakup:
- chat DM dan channel
- perilaku thread
- siklus hidup tindakan pesan
- callback Cron
- recall memori
- pergantian model
- handoff subagen
- pembacaan repo dan dokumentasi
- satu tugas build kecil seperti Lobster Invaders
Lane mock penyedia
qa suite memiliki dua lane mock penyedia lokal:
mock-openaiadalah mock OpenClaw yang sadar skenario. Lane ini tetap menjadi lane mock deterministik default untuk QA berbasis repo dan gerbang paritas.aimockmemulai server penyedia berbasis AIMock untuk cakupan protokol, fixture, record/replay, dan chaos yang eksperimental. Lane ini bersifat tambahan dan tidak menggantikan dispatcher skenariomock-openai.
extensions/qa-lab/src/providers/.
Setiap penyedia memiliki default, startup server lokal, config model Gateway,
kebutuhan staging auth-profile, dan flag kemampuan live/mock sendiri. Kode suite dan gateway bersama seharusnya merutekan melalui registry penyedia alih-alih bercabang berdasarkan nama penyedia.
Adapter transport
qa-lab memiliki seam transport generik untuk skenario QA Markdown.
qa-channel adalah adapter pertama pada seam tersebut, tetapi target desainnya lebih luas:
channel nyata atau sintetis di masa depan harus dipasang ke runner suite yang sama
alih-alih menambahkan runner QA khusus transport.
Pada tingkat arsitektur, pembagiannya adalah:
qa-labmemiliki eksekusi skenario generik, konkurensi worker, penulisan artefak, dan pelaporan.- adapter transport memiliki config gateway, kesiapan, observasi masuk dan keluar, tindakan transport, dan state transport yang dinormalisasi.
- file skenario Markdown di bawah
qa/scenarios/mendefinisikan run pengujian;qa-labmenyediakan permukaan runtime yang dapat digunakan ulang yang mengeksekusinya.
Pelaporan
qa-lab mengekspor laporan protokol Markdown dari timeline bus yang diamati.
Laporan tersebut harus menjawab:
- Apa yang berhasil
- Apa yang gagal
- Apa yang tetap terblokir
- Skenario lanjutan apa yang layak ditambahkan
SOUL.md, lalu menjalankan giliran pengguna biasa
seperti chat, bantuan workspace, dan tugas file kecil. Model kandidat
tidak boleh diberi tahu bahwa model tersebut sedang dievaluasi. Perintah ini menyimpan setiap
transkrip lengkap, mencatat statistik run dasar, lalu meminta model juri dalam mode cepat dengan
penalaran xhigh bila didukung untuk memberi peringkat run berdasarkan naturalness, vibe, dan humor.
Gunakan --blind-judge-models saat membandingkan penyedia: prompt juri tetap mendapatkan
setiap transkrip dan status run, tetapi ref kandidat diganti dengan label netral
seperti candidate-01; laporan memetakan kembali peringkat ke ref sebenarnya setelah
parsing.
Run kandidat default ke thinking high, dengan medium untuk GPT-5.4 dan xhigh
untuk ref eval OpenAI lama yang mendukungnya. Override kandidat tertentu secara inline dengan
--model provider/model,thinking=<level>. --thinking <level> tetap menetapkan fallback
global, dan bentuk lama --model-thinking <provider/model=level> tetap
dipertahankan demi kompatibilitas.
Ref kandidat OpenAI default ke mode cepat sehingga pemrosesan prioritas digunakan saat
penyedia mendukungnya. Tambahkan ,fast, ,no-fast, atau ,fast=false secara inline saat
satu kandidat atau juri memerlukan override. Berikan --fast hanya saat Anda ingin
memaksa mode cepat aktif untuk setiap model kandidat. Durasi kandidat dan juri
dicatat dalam laporan untuk analisis benchmark, tetapi prompt juri secara eksplisit mengatakan
agar tidak memberi peringkat berdasarkan kecepatan.
Run model kandidat dan juri keduanya default ke konkurensi 16. Turunkan
--concurrency atau --judge-concurrency saat batas penyedia atau tekanan gateway lokal
membuat run terlalu bising.
Saat tidak ada kandidat --model yang diberikan, evaluasi karakter default ke
openai/gpt-5.4, 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, dan
google/gemini-3.1-pro-preview saat tidak ada --model yang diberikan.
Saat tidak ada --judge-model yang diberikan, juri default ke
openai/gpt-5.4,thinking=xhigh,fast dan
anthropic/claude-opus-4-6,thinking=high.