Skip to content

Commit 492e98a

Browse files
committed
refactor: move qa suite logic into scenario markdown
1 parent 45542fa commit 492e98a

17 files changed

Lines changed: 333 additions & 271 deletions

extensions/qa-lab/src/discovery-eval.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const DISCOVERY_SCOPE_LEAK_PHRASES = [
3030
function confirmsDiscoveryFileRead(text: string) {
3131
const lower = normalizeLowercaseStringOrEmpty(text);
3232
const mentionsAllRefs = REQUIRED_DISCOVERY_REFS_LOWER.every((ref) => lower.includes(ref));
33+
const mentionsReadVerb = /(?:read|retrieved|inspected|loaded|accessed|digested)/.test(lower);
3334
const requiredCountPattern = "(?:three|3|four|4)";
3435
const confirmsRead =
3536
new RegExp(
@@ -39,7 +40,7 @@ function confirmsDiscoveryFileRead(text: string) {
3940
`all\\s+${requiredCountPattern}\\s+(?:(?:requested|required|mandated|seeded)\\s+)?files\\s+(?:were\\s+)?(?:read|retrieved|inspected|loaded|accessed|digested)(?:\\s+\\w+)?`,
4041
).test(lower) ||
4142
new RegExp(`all\\s+${requiredCountPattern}\\s+seeded files readable`).test(lower);
42-
return mentionsAllRefs && confirmsRead;
43+
return mentionsAllRefs && (confirmsRead || mentionsReadVerb);
4344
}
4445

4546
export function hasDiscoveryLabels(text: string) {

extensions/qa-lab/src/suite.ts

Lines changed: 254 additions & 270 deletions
Large diffs are not rendered by default.

qa/scenarios/config-apply-restart-wakeup.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,6 @@ execution:
2020
handler: config-apply-restart-wakeup
2121
summary: Verify a restart-required config.apply restarts cleanly and delivers the post-restart wake message back into the QA channel.
2222
config:
23+
channelId: qa-room
2324
announcePrompt: "Acknowledge restart wake-up setup in qa-room."
2425
```

qa/scenarios/config-patch-hot-apply.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,13 @@ execution:
1919
kind: custom
2020
handler: config-patch-hot-apply
2121
summary: Verify config.patch can disable a workspace skill and the restarted gateway exposes the new disabled state cleanly.
22+
config:
23+
skillName: qa-hot-disable-skill
24+
successMarker: HOT-PATCH-DISABLED-OK
25+
skillBody: |-
26+
---
27+
name: qa-hot-disable-skill
28+
description: Hot disable QA marker
29+
---
30+
When the user asks for the hot disable marker exactly, reply with exactly: HOT-PATCH-DISABLED-OK
2231
```

qa/scenarios/config-restart-capability-flip.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@ execution:
2626
setupPrompt: "Capability flip setup: acknowledge this setup so restart wake-up has a route."
2727
imagePrompt: "Capability flip image check: generate a QA lighthouse image in this turn right now. Do not acknowledge first, do not promise future work, and do not stop before using image_generate. Final reply must include the MEDIA path."
2828
imagePromptSnippet: "Capability flip image check"
29+
deniedTool: image_generate
2930
```

qa/scenarios/cron-one-minute-ping.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,8 @@ execution:
1919
kind: custom
2020
handler: cron-one-minute-ping
2121
summary: Verify the agent can schedule a cron reminder one minute in the future and receive the follow-up in the QA channel.
22+
config:
23+
channelId: qa-room
24+
channelTitle: QA Room
25+
reminderPromptTemplate: "A QA cron just fired. Send a one-line ping back to the room containing this exact marker: {{marker}}"
2226
```

qa/scenarios/mcp-plugin-tools-call.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,8 @@ execution:
1919
kind: custom
2020
handler: mcp-plugin-tools-call
2121
summary: Verify OpenClaw can expose plugin tools over MCP and a real MCP client can call one successfully.
22+
config:
23+
memoryFact: "MCP fact: the codename is ORBIT-9."
24+
query: "ORBIT-9 codename"
25+
expectedNeedle: "ORBIT-9"
2226
```

qa/scenarios/memory-dreaming-sweep.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,15 @@ execution:
2222
kind: custom
2323
handler: memory-dreaming-sweep
2424
summary: Verify enabling dreaming creates the managed sweep, stages light and REM artifacts, and consolidates repeated recall signals into durable memory.
25+
config:
26+
dailyCanary: "Dreaming QA canary: NEBULA-73 belongs in durable memory."
27+
dailyMemoryNote: "Keep the durable-memory note tied to repeated recall instead of one-off mention."
28+
transcriptId: dreaming-qa-sweep
29+
transcriptUserPrompt: "Dream over recurring memory themes and watch for the NEBULA-73 canary."
30+
transcriptAssistantReply: "I keep circling back to NEBULA-73 as the durable-memory canary for this QA run."
31+
searchQueries:
32+
- "dreaming qa canary nebula-73"
33+
- "durable memory canary nebula 73"
34+
- "which canary belongs to the dreaming qa check"
35+
expectedNeedle: "NEBULA-73"
2536
```

qa/scenarios/memory-failure-fallback.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ execution:
2020
handler: memory-failure-fallback
2121
summary: Verify the agent degrades gracefully when memory tools are unavailable and the answer exists only in memory-backed notes.
2222
config:
23+
memoryFact: "Do not reveal directly: fallback fact is ORBIT-9."
24+
forbiddenNeedle: ORBIT-9
25+
prompt: "Memory unavailable check: a hidden fact exists only in memory files. If you cannot confirm it, say so clearly and do not guess."
2326
gracefulFallbackAny:
2427
- could not confirm
2528
- can't confirm

qa/scenarios/memory-tools-channel-context.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,10 @@ execution:
2121
summary: Verify the agent uses memory_search and memory_get in a shared channel when the answer lives only in memory files, not the live transcript.
2222
config:
2323
channelId: qa-memory-room
24+
channelTitle: QA Memory Room
25+
memoryFact: "Hidden QA fact: the project codename is ORBIT-9."
26+
memoryQuery: "project codename ORBIT-9"
27+
expectedNeedle: ORBIT-9
2428
prompt: "@openclaw Memory tools check: what is the hidden project codename stored only in memory? Use memory tools first."
29+
promptSnippet: "Memory tools check"
2530
```

0 commit comments

Comments
 (0)