diff --git a/extensions/qa-lab/src/scenario-catalog-compaction.test.ts b/extensions/qa-lab/src/scenario-catalog-compaction.test.ts index b32c7a91be15..3d7a32d17da0 100644 --- a/extensions/qa-lab/src/scenario-catalog-compaction.test.ts +++ b/extensions/qa-lab/src/scenario-catalog-compaction.test.ts @@ -98,9 +98,7 @@ describe("qa compaction scenario catalog", () => { const terminalEvidenceAssertExpr = readAssertExpression( "terminalContinuations[0].providerVariant === 'openai'", ); - const compactionSummaryAssertExpr = readAssertExpression( - "compactionSummaryRequests.length > 0", - ); + const compactionSummaryAssertExpr = readAssertExpression("compactionSummaryRequests.some"); const noQualityRetryAssertExpr = readAssertExpression("Previous summary failed quality checks"); const knownGap = "known-harness-gap compaction-retry-mutating-tool: provider-error recovery does not invoke Codex native compaction; native token-threshold compaction needs a separate scenario."; @@ -280,13 +278,12 @@ describe("qa compaction scenario catalog", () => { expect(flow).not.toContain("String(request.toolOutput ?? '').includes(`---"); expect(flow).not.toContain("String(request.toolOutput ?? '').includes(`+++"); expect(compactionSummaryRequestsExpr).toContain("request.requestKind === 'compaction-summary'"); - expect(compactionSummaryAssertExpr).toContain("compactionSummaryRequests.length > 0"); expect(compactionSummaryAssertExpr).toContain( - "request.cursor > overflowRequest.cursor && request.cursor < writeRequest.cursor", + "compactionSummaryRequests.some((request) => request.cursor > overflowRequest.cursor && request.cursor < writeRequest.cursor)", + ); + expect(compactionSummaryAssertExpr).toContain( + "compactionSummaryRequests.every((request) => request.outcome === 'success' && request.plannedToolName === undefined && request.toolOutputStructuredError !== true)", ); - expect(compactionSummaryAssertExpr).toContain("request.outcome === 'success'"); - expect(compactionSummaryAssertExpr).toContain("request.plannedToolName === undefined"); - expect(compactionSummaryAssertExpr).toContain("request.toolOutputStructuredError !== true"); expect(noQualityRetryAssertExpr).toContain("compactionSummaryRequests.every"); expect(noQualityRetryAssertExpr).toContain( "!String(request.allInputText ?? '').includes('Previous summary failed quality checks')", diff --git a/qa/scenarios/runtime/compaction-retry-mutating-tool.yaml b/qa/scenarios/runtime/compaction-retry-mutating-tool.yaml index ef7987132b33..64687d7b7d90 100644 --- a/qa/scenarios/runtime/compaction-retry-mutating-tool.yaml +++ b/qa/scenarios/runtime/compaction-retry-mutating-tool.yaml @@ -229,9 +229,9 @@ flow: value: expr: "scenarioRequests.filter((request) => request.requestKind === 'compaction-summary')" - assert: - expr: "compactionSummaryRequests.length > 0 && compactionSummaryRequests.every((request) => request.cursor > overflowRequest.cursor && request.cursor < writeRequest.cursor && request.outcome === 'success' && request.plannedToolName === undefined && request.toolOutputStructuredError !== true)" + expr: "compactionSummaryRequests.some((request) => request.cursor > overflowRequest.cursor && request.cursor < writeRequest.cursor) && compactionSummaryRequests.every((request) => request.outcome === 'success' && request.plannedToolName === undefined && request.toolOutputStructuredError !== true)" message: - expr: "`expected successful OpenClaw compaction summary requests causally between overflow and retry: ${JSON.stringify(requestEvidence.filter((request) => request.kind === 'compaction-summary'))}`" + expr: "`expected at least one causal summary between overflow and retry with all OpenClaw compaction summaries healthy: ${JSON.stringify(requestEvidence.filter((request) => request.kind === 'compaction-summary'))}`" - assert: expr: "compactionSummaryRequests.every((request) => !String(request.allInputText ?? '').includes('Previous summary failed quality checks'))" message: