Get started
Bidsprinkhaan
Mantis publiceert visueel CI-bewijs en een PR-opmerking voor OpenClaw-gedrag. Live-transportscenario's vergelijken een bekende foutieve basislijn met een kandidaatref; gerichte browsertrajecten kunnen in plaats daarvan één kandidaat bewijzen aan de hand van een deterministische gesimuleerde transportlaag. Discord werd als eerste uitgebracht met echte botauthenticatie, guildkanalen, reacties, threads en een browsergetuige. Er bestaan ook trajecten voor Slack, Telegram en gerichte Control UI-chat; WhatsApp en Matrix zijn niet geïmplementeerd.
Eigenaarschap
- OpenClaw (
extensions/qa-lab/src/mantis/*): scenarioruntime, CLIpnpm openclaw qa mantis <command>, bewijsschema. - QA Lab (
extensions/qa-lab/src/live-transports/*): live-transporttestomgeving, driver-/SUT-bots, rapport-/bewijsschrijvers. - Crabbox (
openclaw/crabbox): opgewarmde Linux-machines, leases, VNC,crabbox media preview. - GitHub Actions (
.github/workflows/mantis-*.yml): externe toegangspunten, bewaring van artefacten. - ClawSweeper: parseert PR-opdrachten van beheerders, start workflows en plaatst de definitieve PR-opmerking.
CLI-opdrachten
Alle opdrachten hebben de vorm pnpm openclaw qa mantis <command> en zijn gedefinieerd in
extensions/qa-lab/src/mantis/cli.ts. Vereist OPENCLAW_ENABLE_PRIVATE_QA_CLI=1
tijdens het bouwen/uitvoeren (meegeleverde workflows stellen vóór het bouwen
OPENCLAW_BUILD_PRIVATE_QA=1 en OPENCLAW_ENABLE_PRIVATE_QA_CLI=1 in).
| Opdracht | Doel |
|---|---|
discord-smoke |
Controleren of de Mantis Discord-bot de guild/het kanaal kan zien, een bericht kan plaatsen en kan reageren. |
run |
Een voor-/nascenario uitvoeren op basislijn- en kandidaatrefs (alleen Discord). |
desktop-browser-smoke |
Een Crabbox-desktop leasen/hergebruiken, een zichtbare browser openen en een schermafbeelding + video vastleggen. |
slack-desktop-smoke |
Een Crabbox-desktop leasen/hergebruiken, Slack-QA daarin uitvoeren, Slack Web openen en bewijs vastleggen. |
telegram-desktop-builder |
Een Crabbox-desktop leasen/hergebruiken, Telegram Desktop installeren en optioneel een OpenClaw-Gateway configureren. |
visual-task / visual-driver |
Algemene vastlegging van een Crabbox-desktop met optionele controles via beeldherkenning; visual-driver is het drivergedeelte dat onder crabbox record --while wordt gestart. |
Elke opdracht accepteert --repo-root <path> en --output-dir <path>; Crabbox-
opdrachten accepteren ook --crabbox-bin, --provider, --machine-class/--class,
--lease-id, --idle-timeout, --ttl en --keep-lease. De lokale CLI-standaardwaarden
voor provider/klasse zijn hetzner/beast, tenzij anders vermeld; CI-workflows
overschrijven doorgaans beide.
discord-smoke
pnpm openclaw qa mantis discord-smoke \ --output-dir .artifacts/qa-e2e/mantis/discord-smokeRoept de Discord REST-API (https://discord.com/api/v10) aan om de botgebruiker,
de guild, de kanalen van de guild en het doelkanaal op te halen, controleert of het
kanaal bij de guild hoort en plaatst vervolgens (tenzij --skip-post is opgegeven)
een bericht met een 👀-reactie. Schrijft mantis-discord-smoke-summary.json en
mantis-discord-smoke-report.md.
Volgorde voor tokenbepaling: de waarde van --token-file, vervolgens OPENCLAW_QA_DISCORD_MANTIS_BOT_TOKEN
(overschrijven met --token-env) en daarna een bestand waarvan de naam wordt bepaald door OPENCLAW_QA_DISCORD_MANTIS_BOT_TOKEN_FILE
(overschrijven met --token-file-env). Guild-/kanaal-id's komen uit
OPENCLAW_QA_DISCORD_GUILD_ID / OPENCLAW_QA_DISCORD_CHANNEL_ID (overschrijven met
--guild-id / --channel-id) en moeten Discord-snowflakes van 17-20 cijfers zijn. Stel
OPENCLAW_QA_REDACT_PUBLIC_METADATA=1 in om bot-/guild-/kanaal-/bericht-id's
en namen in de gepubliceerde samenvatting en het rapport te vervangen door <redacted>.
run
pnpm openclaw qa mantis run \ --transport discord \ --scenario discord-status-reactions-tool-only \ --baseline origin/main \ --candidate HEAD \ --output-dir .artifacts/qa-e2e/mantis/local-discord-status-reactions--transport accepteert momenteel alleen discord. --scenario is een van twee
ingebouwde id's, elk met een eigen standaardref voor de basislijn en verwachte voor-/na-
labels (extensions/qa-lab/src/mantis/run.runtime.ts):
| Scenario | Standaardbasislijn | Basislijn verwacht | Kandidaat verwacht |
|---|---|---|---|
discord-status-reactions-tool-only |
0bf06e953fdda290799fc9fb9244a8f67fdae593 |
queued-only |
queued -> thinking -> done |
discord-thread-reply-filepath-attachment |
81349cdc2a9d5143fd0991ed858b739e7d96e05c |
threadantwoord laat filePath-bijlage weg |
threadantwoord bevat deze |
--candidate heeft standaard de waarde HEAD. Andere vlaggen: --credential-source
(standaard convex), --credential-role (standaard ci), --provider-mode
(standaard live-frontier), --fast (standaard ingeschakeld), --skip-install, --skip-build.
De runner maakt voor de basislijn en kandidaat losse git worktree-check-outs
onder <output-dir>/worktrees/, voert in elk daarvan pnpm install/pnpm build uit
(tenzij overgeslagen) en voert vervolgens
pnpm openclaw qa discord --scenario <id> --model openai/gpt-5.4 --alt-model openai/gpt-5.4 --allow-failures
uit voor elke worktree. Elk traject schrijft discord-qa-reaction-timelines.json
plus een paar <scenario-id>-timeline.html/.png; de runner kopieert dit
bewijs terug naar baseline//candidate/, schrijft comparison.json,
mantis-report.md en mantis-evidence.json in de uitvoermap en
eindigt met een niet-nulstatus als de vergelijking niet is geslaagd (basislijn
fail en kandidaat pass).
Het tweede Discord-scenario (discord-thread-reply-filepath-attachment) plaatst
een bovenliggend bericht met de driverbot, maakt een echte thread, roept de
actie message.thread-reply van het SUT aan met een filePath binnen de repository
en bevraagt vervolgens herhaaldelijk de thread op het antwoord en de bestandsnaam
van de bijlage. Het verwacht een bijlage met de naam mantis-thread-report.md.
desktop-browser-smoke
pnpm openclaw qa mantis desktop-browser-smoke \ --output-dir .artifacts/qa-e2e/mantis/desktop-browserLeaset of hergebruikt een Crabbox-desktop, start binnen de VNC-sessie een browser
die naar --browser-url (standaard https://openclaw.ai) of een gerenderd
--html-file wijst, wacht, maakt een schermafbeelding met scrot, neemt optioneel
een MP4 op met ffmpeg en synchroniseert desktop-browser-smoke.png / .mp4 / remote-metadata.json
via rsync terug naar --output-dir.
Vlaggen:
--lease-id <cbx_...>hergebruikt een opgewarmde desktop in plaats van er een te maken.--browser-profile-dir <remote-path>hergebruikt een externe Chrome-map met gebruikersgegevens, zodat een permanente desktop tussen uitvoeringen aangemeld blijft (gebruikt voor een langdurig Discord Web-weergaveprofiel).--browser-profile-archive-env <name>herstelt vóór het starten een base64-gecodeerd.tgz-archief van een Chrome-profiel vanuit die omgevingsvariabele (standaardOPENCLAW_MANTIS_BROWSER_PROFILE_TGZ_B64); gebruikt voor aangemelde getuigen zoals Discord Web.--video-duration <seconds>bepaalt de duur van de MP4-opname (standaard 10 s).--keep-lease(ofOPENCLAW_MANTIS_KEEP_VM=1) houdt een lease die tijdens deze uitvoering is gemaakt open voor VNC-inspectie; mislukte uitvoeringen die een lease hebben gemaakt, houden deze standaard ook open.
Voor bewijs uit Discord Web gebruikt Mantis een speciaal weergaveaccount, geen
bottoken. De Discord REST-orakelcontrole (via qa discord) blijft gezaghebbend; wanneer
OPENCLAW_QA_DISCORD_CAPTURE_UI_METADATA=1 is ingesteld, schrijft het scenario ook een
Discord Web-URL-artefact en houdt OPENCLAW_QA_DISCORD_KEEP_THREADS=1 de
thread lang genoeg open zodat de browser deze kan openen.
De GitHub-workflow geeft de voorkeur aan een permanent weergaveprofiel via
MANTIS_DISCORD_VIEWER_CHROME_PROFILE_DIR (volledige profielarchieven kunnen
de limiet voor de geheimgrootte van GitHub overschrijden); voor kleine/opstartprofielen kan deze
in plaats daarvan een base64-gecodeerd .tgz-bestand herstellen vanuit MANTIS_DISCORD_VIEWER_CHROME_PROFILE_TGZ_B64. Als
geen van beide bronnen is geconfigureerd, publiceert de workflow nog steeds de deterministische
schermafbeeldingen van de basislijn/kandidaat en registreert deze dat de aangemelde getuige is
overgeslagen.
slack-desktop-smoke
pnpm openclaw qa mantis slack-desktop-smoke \ --output-dir .artifacts/qa-e2e/mantis/slack-desktop \ --gateway-setup \ --scenario slack-canary \ --keep-leaseLeaset of hergebruikt een Crabbox-desktop, synchroniseert de check-out naar de VM, voert
pnpm openclaw qa slack daarin uit, opent Slack Web in de VNC-browser,
legt de desktop vast en kopieert zowel de Slack-QA-artefacten (slack-qa/) als
de VNC-schermafbeelding/video lokaal terug. Dit is de enige Mantis-vorm waarbij de
SUT-Gateway en de browser beide binnen dezelfde VM draaien.
Met --gateway-setup maakt de opdracht in de VM een permanente, wegwerpbare OpenClaw-
thuismap op $HOME/.openclaw-mantis/slack-openclaw, past de Slack-
Socket Mode-configuratie voor het doelkanaal aan, start
openclaw gateway run --dev --allow-unconfigured --port 38973 en laat
Chrome actief in de VNC-sessie; zonder --gateway-setup wordt in plaats daarvan het normale
bot-naar-bot-Slack-QA-traject uitgevoerd.
Vereiste omgevingsvariabelen voor --credential-source env (lokale standaardwaarde is env;
de standaardrol is maintainer):
OPENCLAW_QA_SLACK_CHANNEL_IDOPENCLAW_QA_SLACK_DRIVER_BOT_TOKENOPENCLAW_QA_SLACK_SUT_BOT_TOKENOPENCLAW_QA_SLACK_SUT_APP_TOKENOPENCLAW_LIVE_OPENAI_KEYvoor het externe modeltraject (als lokaal alleenOPENAI_API_KEYis ingesteld, kopieert Mantis deze naarOPENCLAW_LIVE_OPENAI_KEYvoordat Crabbox wordt aangeroepen)
Met --credential-source convex leaset Mantis de Slack-SUT-aanmeldgegevens uit
de gedeelde pool voordat de VM wordt gemaakt en stuurt het kanaal-id, het app-token en
het bottoken als OPENCLAW_MANTIS_SLACK_*-omgevingsvariabelen door naar de VM, zodat GitHub-
workflows alleen het geheim van de Convex-broker nodig hebben, niet de onbewerkte Slack-tokens.
Andere vlaggen: --slack-url <url> opent een specifieke URL (anders leidt Mantis
https://app.slack.com/client/<team>/<channel> af uit auth.test);
--slack-channel-id <id> stelt het kanaal in de toelatingslijst van de Gateway in;
OPENCLAW_MANTIS_SLACK_BROWSER_PROFILE_DIR bepaalt het permanente Chrome-
profiel binnen de VM (standaard $HOME/.config/openclaw-mantis/slack-chrome-profile);
--approval-checkpoints voert de systeemeigen Slack-goedkeuringsscenario's uit
(slack-approval-exec-native, slack-approval-plugin-native) en rendert
schermafbeeldingen van openstaande/afgehandelde controlepunten in plaats van Gateway-configuratie (kan
niet samen met --gateway-setup worden gebruikt); --hydrate-mode source|prehydrated,
--provider-mode, --model, --alt-model en --fast worden doorgegeven aan het
live Slack-traject.
Schermafbeeldingen van goedkeuringscontrolepunten worden gerenderd vanuit het Slack-API-bericht dat het
scenario heeft waargenomen, niet vanuit de live Slack-UI; slack-desktop-smoke.png is alleen
bewijs van Slack Web zelf wanneer het browserprofiel van de lease al was aangemeld.
telegram-desktop-builder
pnpm openclaw qa mantis telegram-desktop-builder \ --credential-source convex \ --credential-role maintainer \ --keep-leaseLeaset of hergebruikt een Crabbox-desktop, installeert de systeemeigen Linux-versie van Telegram Desktop,
herstelt optioneel een gebruikerssessiearchief, configureert OpenClaw met het
geleasete Telegram-SUT-bottoken, start
openclaw gateway run --dev --allow-unconfigured --port 38974, plaatst een
gereedheidsbericht van de driverbot in de geleasete privégroep en maakt vervolgens een
schermafbeelding en MP4. Een bottoken configureert alleen OpenClaw; het meldt
Telegram Desktop nooit aan. De desktopviewer is een afzonderlijke Telegram-gebruikerssessie
die wordt hersteld vanuit --telegram-profile-archive-env <name> of handmatig wordt aangemeld
via VNC en actief wordt gehouden met --keep-lease.
Vlaggen: --lease-id <cbx_...> voert de test opnieuw uit op een VM die al is aangemeld bij
Telegram Desktop; --telegram-profile-archive-env <name> herstelt vóór het starten een base64-
.tgz-profielarchief; --telegram-profile-dir <remote-path>
stelt de externe profielmap in (standaard $HOME/.local/share/TelegramDesktop);
--no-gateway-setup installeert en opent alleen Telegram Desktop;
--credential-source/--credential-role zijn standaard convex/maintainer.
Bewijsmanifest
Elk scenario dat naar een PR publiceert, schrijft mantis-evidence.json naast
het bijbehorende rapport:
{ "schemaVersion": 1, "id": "discord-status-reactions", "title": "Mantis Discord Status Reactions QA", "summary": "Human-readable top summary for the PR comment.", "scenario": "discord-status-reactions-tool-only", "comparison": { "baseline": { "sha": "...", "status": "fail", "expected": "queued-only" }, "candidate": { "sha": "...", "status": "pass", "expected": "queued -> thinking -> done" }, "pass": true }, "artifacts": [ { "kind": "timeline", "lane": "baseline", "label": "Baseline queued-only", "path": "baseline/timeline.png", "targetPath": "baseline.png", "alt": "Baseline Discord timeline", "width": 420 } ]}Het artefactpad path is relatief ten opzichte van de map van het manifest; targetPath is
relatief ten opzichte van het geconfigureerde R2/S3-artefactvoorvoegsel. scripts/mantis/publish-pr-evidence.mjs
weigert padtraversering en slaat vermeldingen met "required": false over wanneer het
bestand ontbreekt.
Artefacttypen: timeline (deterministische schermafbeelding van voor en na),
desktopScreenshot (VNC-/browserschermafbeelding), motionPreview (inline geanimeerde
GIF uit de opname), motionClip (op beweging bijgesneden MP4), fullVideo (volledige
opname), metadata (JSON-/log-nevenbestand), report (Markdown-rapport).
De artefactindeling van een uitvoering op schijf:
.artifacts/qa-e2e/mantis/<run-id>/ mantis-report.md mantis-evidence.json baseline/ candidate/ comparison.jsonSchermafbeeldingen zijn bewijs, geen geheimen, maar vereisen nog steeds zorgvuldige redactie:
namen van privékanalen, gebruikersnamen of berichtinhoud kunnen zichtbaar zijn. Stel
OPENCLAW_QA_REDACT_PUBLIC_METADATA=1 in voor openbare artefactuploads; dit is
standaard ingeschakeld in de GitHub-workflows voor Discord/Slack/Telegram.
GitHub-automatisering
scripts/mantis/publish-pr-evidence.mjs is de herbruikbare publiceerder. Workflows
roepen deze aan met het manifest, de doel-PR, de hoofdmap voor artefactdoelen, de reactiemarkering,
de artefact-URL, de uitvoerings-URL en de aanvraagbron. De publiceerder uploadt de opgegeven artefacten naar
de Mantis R2-bucket, bouwt een PR-reactie met de samenvatting voorop, inline
afbeeldingen/voorvertoningen en gekoppelde video's, en werkt vervolgens de bestaande gemarkeerde reactie bij of
maakt een nieuwe. Vereiste omgevingsvariabelen:
MANTIS_ARTIFACT_R2_ACCESS_KEY_IDMANTIS_ARTIFACT_R2_SECRET_ACCESS_KEYMANTIS_ARTIFACT_R2_BUCKET(workflows stellenopenclaw-crabbox-artifactsin)MANTIS_ARTIFACT_R2_ENDPOINTMANTIS_ARTIFACT_R2_REGION(workflows stellenautoin)MANTIS_ARTIFACT_R2_PUBLIC_BASE_URL(workflows stellenhttps://artifacts.openclaw.aiin)
Reacties worden geplaatst via de Mantis GitHub App (MANTIS_GITHUB_APP_ID /
MANTIS_GITHUB_APP_PRIVATE_KEY), niet via github-actions[bot], waarbij een verborgen
markeringsreactie als upsert-sleutel wordt gebruikt.
| Workflow | Trigger | Wat deze doet |
|---|---|---|
Mantis Discord Smoke |
handmatige activering | Voert discord-smoke uit voor een gekozen ref. |
Mantis Discord Status Reactions |
PR-reactie of handmatige activering | Bouwt afzonderlijke werkmappen voor basislijn/kandidaat, voert discord-status-reactions-tool-only op beide uit, rendert de tijdlijn van elk traject in een Crabbox-desktopbrowser, genereert op beweging bijgesneden GIF-/MP4-voorvertoningen met crabbox media preview, uploadt artefacten en plaatst inline PR-bewijs. |
Mantis Scenario |
handmatige activering | Algemene dispatcher: accepteert scenario_id (discord-status-reactions-tool-only, discord-thread-reply-filepath-attachment, slack-desktop-smoke, telegram-live, telegram-desktop-proof, web-ui-chat-proof), baseline_ref, candidate_ref, pr_number en stuurt deze door naar de bijbehorende scenarioworkflow. |
Mantis Slack Desktop Smoke |
handmatige activering | Leaset een Crabbox-Linux-desktop (standaard aws, met keuze voor hetzner), voert slack-desktop-smoke --gateway-setup uit voor de kandidaat, neemt de desktop op, genereert een bewegingsvoorvertoning, uploadt artefacten en plaatst PR-bewijs wanneer een PR-nummer is opgegeven. |
Mantis Telegram Live |
PR-reactie of handmatige activering | Voert het live Telegram-QA-traject via de bot-API uit (openclaw qa telegram), schrijft mantis-evidence.json vanuit de QA-samenvatting, rendert geredigeerde bewijs-HTML via een Crabbox-desktopbrowser, genereert een bewegings-GIF en plaatst PR-bewijs. Aanmelding bij Telegram Web is voor dit traject niet vereist. |
Mantis Telegram Desktop Proof |
PR-label van beheerder (mantis: telegram-visible-proof) plus PR-reactie, of handmatige activering |
Agentgestuurd systeemeigen Telegram Desktop-bewijs van voor en na. Geeft de PR, refs voor basislijn/kandidaat en instructies van de beheerder door aan Codex, dat voor beide refs het echte-gebruikersbewijstraject voor Crabbox Telegram Desktop uitvoert en een PR-bewijstabel met twee kolommen plaatst. |
Mantis Web UI Chat Proof |
PR-reactie of handmatige activering | Voert het gerichte Playwright-bewijs voor OpenClaw Control UI-chat uit voor de kandidaat, verifieert dat de browser via de nagebootste Gateway verzendt, legt schermafbeeldings-/videoartefacten vast en plaatst PR-bewijs. Dit traject bewijst alleen webchat, niet WinUI/systeemeigen apps of willekeurig visueel bewijs. |
Mantis Discord Status Reactions en Mantis Telegram Live accepteren beide
baseline_ref/candidate_ref (of baseline=/candidate= in een PR-reactie)
en valideren vóór uitvoering met geheime aanmeldgegevens dat de herleide SHA een voorouder is van origin/main, een
releasetag (v*) of de kop van een open PR.
Reactietriggers vanuit een PR met schrijf-/beheer-/beheerderstoegang:
@openclaw-mantis discord status reactions@openclaw-mantis discord status reactions baseline=origin/main candidate=HEAD@openclaw-mantis telegram@openclaw-mantis telegram scenario=telegram-status-command@openclaw-mantis telegram scenarios=telegram-status-command,telegram-mentioned-message-reply@openclaw-mantis web ui chat@openclaw-mantis web-ui-chat candidate=HEADTelegram-reactietriggers gebruiken standaard de kop-SHA van de PR als kandidaat en
telegram-status-command als scenario; ze accepteren provider=aws|hetzner en
lease=<cbx_...> om een specifieke Crabbox-provider of een voorverwarmde
desktop te gebruiken. Mantis Telegram Desktop Proof reageert alleen op een PR-reactie wanneer
de PR al het label mantis: telegram-visible-proof heeft.
Reactietriggers voor web-UI-chat gebruiken standaard de kop-SHA van de PR als kandidaat. Ze voeren het chatbewijs voor Control UI met nagebootste Gateway uit en publiceren browserartefacten; gebruik normaal Playwright-/browserbewijs, schermafbeeldingen van beheerders, Crabbox of lokale artefacten voor andere webpagina's en systeemeigen app-oppervlakken.
ClawSweeper kan een scenario ook rechtstreeks activeren:
@clawsweeper mantis discord discord-status-reactions-tool-onlyMachines en geheimen
De standaardwaarden van de lokale CLI voor Crabbox zijn --provider hetzner --class beast; overschrijf
deze met --provider, --class/--machine-class of
OPENCLAW_MANTIS_CRABBOX_PROVIDER / OPENCLAW_MANTIS_CRABBOX_CLASS. GitHub-
workflows overschrijven beide vaak (bijvoorbeeld --class standard en de
invoer voor de providerkeuze aws/hetzner van de Slack-workflow). Als een provider te
traag of niet beschikbaar is, voeg deze dan achter dezelfde Crabbox-interface toe in plaats van
een terugvaloptie hard te coderen.
VM-basislijn: Linux met desktopgeschikte Chrome/Chromium, CDP-toegang, VNC/ noVNC, Node 22+ en pnpm, een OpenClaw-checkout en uitgaande toegang tot het doeltransport, GitHub, modelproviders en de broker voor aanmeldgegevens.
Namen van geheimen die in de Mantis-workflows worden gebruikt:
OPENCLAW_QA_DISCORD_MANTIS_BOT_TOKENOPENCLAW_QA_DISCORD_DRIVER_BOT_TOKENOPENCLAW_QA_DISCORD_SUT_BOT_TOKENOPENCLAW_QA_DISCORD_GUILD_IDOPENCLAW_QA_DISCORD_CHANNEL_IDOPENCLAW_QA_REDACT_PUBLIC_METADATA=1voor openbare artefactuploadsOPENCLAW_QA_CONVEX_SITE_URL,OPENCLAW_QA_CONVEX_SECRET_CICRABBOX_COORDINATOR/CRABBOX_COORDINATOR_TOKEN(workflows accepteren ookOPENCLAW_QA_MANTIS_CRABBOX_COORDINATOR/_TOKENals terugvaloptie en koppelen deze aan de gewone namen voordat Crabbox wordt aangeroepen)MANTIS_GITHUB_APP_ID,MANTIS_GITHUB_APP_PRIVATE_KEY
De Mantis-runner mag nooit Discord-/Slack-/Telegram-bottokens, API-sleutels van providers, browsercookies, inhoud van authenticatieprofielen, VNC-wachtwoorden of onbewerkte payloads met aanmeldgegevens afdrukken. Als een token uitlekt in een issue, PR, chat of log, roteer het dan nadat het vervangende geheim is opgeslagen.
Uitvoeringsresultaten
Transportscenario's met voor-en-na-vergelijking onderscheiden deze resultaten, zodat een instabiele omgeving niet als productregressie wordt geïnterpreteerd:
- Bug gereproduceerd: de basislijn mislukte op de manier die het scenario verwacht.
- Harnasmislukking: de omgevingsconfiguratie, aanmeldgegevens, transport-API, browser of provider mislukte voordat de oracle betekenisvol was.
Browserbewijs voor alleen de kandidaat meldt of de kandidaat slaagde voor de nagebootste Gateway- en zichtbare UI-asserties; het claimt niet dat de basislijn is gereproduceerd.
Een scenario toevoegen
Live transportscenario's worden per transport in TypeScript gedefinieerd (zie
MANTIS_SCENARIO_CONFIGS in extensions/qa-lab/src/mantis/run.runtime.ts voor
de Discord-structuur met voor-en-na-vergelijking), niet als een zelfstandige declaratieve bestandsindeling.
Elk scenario vereist: id en titel, transport, vereiste aanmeldgegevens, refbeleid voor de basislijn,
refbeleid voor de kandidaat, OpenClaw-configuratiepatch, configuratie-/stimulusstappen,
verwachte oracle voor basislijn en kandidaat, doelen voor visuele vastlegging, time-outbudget
en opschoningsstappen.
Gericht browserbewijs dat alleen voor een kandidaat geldt, kan een speciale deterministische E2E-test en workflow gebruiken. Houd het bereik ervan expliciet, valideer de kandidaat-ref vóór uitvoering, isoleer publicatie waarvoor geheimen nodig zijn en genereer hetzelfde manifestcontract voor bewijsmateriaal.
Geef de voorkeur aan kleine, getypeerde orakels boven visuele controles: de reactiestatus of berichtverwijzingen van Discord, de ts-waarde van een Slack-thread/de reactiestatus uit de API, en bericht-ID's en headers van e-mails. Gebruik browserschermafbeeldingen wanneer de UI het enige betrouwbare waarneembare resultaat is en houd visuele controles aanvullend op een platform-API-orakel als dat beschikbaar is.
Na Discord, Slack en Telegram kan dezelfde runnerstructuur worden uitgebreid naar WhatsApp (QR-aanmelding, heridentificatie, bezorging, media, reacties) en Matrix (versleutelde ruimtes, thread-/antwoordrelaties, hervatting na opnieuw opstarten); geen van beide is nog geïmplementeerd.
Openstaande vragen
- Welke Discord-bot moet het stuurprogramma zijn en welke het te testen systeem wanneer de bestaande Mantis-bot opnieuw wordt gebruikt?
- Hoelang moet GitHub Mantis-artefacten voor PR's bewaren?
- Wanneer moet ClawSweeper automatisch een Mantis-scenario aanbevelen in plaats van op een opdracht van een beheerder te wachten?
- Moeten schermafbeeldingen vóór het uploaden voor openbare PR's worden geredigeerd of bijgesneden?