@@ -3,7 +3,6 @@ import fs from "node:fs/promises";
33import path from "node:path" ;
44import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime" ;
55import { normalizeStringEntries , uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime" ;
6- import { runQaManualLane } from "./manual-lane.runtime.js" ;
76import { isQaFastModeModelRef , type QaProviderMode } from "./model-selection.js" ;
87import {
98 QA_FRONTIER_CHARACTER_EVAL_MODELS ,
@@ -13,7 +12,7 @@ import {
1312} from "./providers/live-frontier/character-eval.js" ;
1413import type { QaThinkingLevel } from "./qa-gateway-config.js" ;
1514import { extractQaVisibleReplyLeakText } from "./reply-failure.js" ;
16- import { runQaSuiteFromRuntime } from "./suite-launch.runtime .js" ;
15+ import { readQaSuiteFailedScenarioCountFromFile } from "./suite-summary .js" ;
1716import type { QaSuiteResult } from "./suite.js" ;
1817
1918const DEFAULT_CHARACTER_SCENARIO_ID = "character-vibes-gollum" ;
@@ -412,6 +411,7 @@ async function defaultRunJudge(params: {
412411 prompt : string ;
413412 timeoutMs : number ;
414413} ) {
414+ const { runQaManualLane } = await import ( "./manual-lane.runtime.js" ) ;
415415 const result = await runQaManualLane ( {
416416 repoRoot : params . repoRoot ,
417417 providerMode : "live-frontier" ,
@@ -425,6 +425,11 @@ async function defaultRunJudge(params: {
425425 return result . reply ;
426426}
427427
428+ async function defaultRunSuite ( params : Parameters < RunSuiteFn > [ 0 ] ) {
429+ const { runQaSuiteFromRuntime } = await import ( "./suite-launch.runtime.js" ) ;
430+ return await runQaSuiteFromRuntime ( params ) ;
431+ }
432+
428433function renderCharacterEvalReport ( params : {
429434 scenarioId : string ;
430435 startedAt : Date ;
@@ -519,7 +524,7 @@ export async function runQaCharacterEval(params: QaCharacterEvalParams) {
519524 const runsDir = path . join ( outputDir , "runs" ) ;
520525 await fs . mkdir ( runsDir , { recursive : true } ) ;
521526
522- const runSuite = params . runSuite ?? runQaSuiteFromRuntime ;
527+ const runSuite = params . runSuite ?? defaultRunSuite ;
523528 const candidateConcurrency = normalizeConcurrency (
524529 params . candidateConcurrency ,
525530 DEFAULT_CHARACTER_EVAL_CONCURRENCY ,
@@ -560,10 +565,8 @@ export async function runQaCharacterEval(params: QaCharacterEvalParams) {
560565 } ) ;
561566 const transcript = extractTranscript ( result ) ;
562567 const transcriptFailure = detectTranscriptFailure ( transcript ) ;
563- const status =
564- result . scenarios . some ( ( scenario ) => scenario . status === "fail" ) || transcriptFailure
565- ? "fail"
566- : "pass" ;
568+ const failedScenarioCount = await readQaSuiteFailedScenarioCountFromFile ( result . summaryPath ) ;
569+ const status = failedScenarioCount > 0 || transcriptFailure ? "fail" : "pass" ;
567570 const run = {
568571 model,
569572 status,
0 commit comments