fix(usage): treat stream terminal failures as failures on HTTP 200

This commit is contained in:
zhefox
2026-05-22 09:34:22 +08:00
parent 3714c211dc
commit 507f2f8250
5 changed files with 230 additions and 12 deletions

View File

@@ -91,6 +91,27 @@ describe('request failure notice', () => {
})
})
it('does not present HTTP 200 as the cause of stream terminal failures', () => {
const notice = resolveRequestFailureNotice(buildRequestDetail({
status_code: 200,
status: 'failed',
error_message: 'This content was flagged for possible cybersecurity risk',
failure_summary: {
source: 'client_response',
status_code: 200,
type: 'stream_terminal_error',
message: 'This content was flagged for possible cybersecurity risk',
},
}))
expect(notice).toEqual({
title: '执行失败原因',
message: 'This content was flagged for possible cybersecurity risk',
isSchedulingFailure: false,
meta: ['stream_terminal_error', 'client_response'],
})
})
it('does not show a stale notice when the refreshed detail has no error fields', () => {
const notice = resolveRequestFailureNotice(buildRequestDetail({
status_code: 200,

View File

@@ -51,15 +51,15 @@ describe('usage status helpers', () => {
expect(isUsageRecordSuccessful(record)).toBe(false)
})
it('treats explicit failed status with a 2xx status code as successful for display', () => {
it('treats explicit failed status as authoritative over a 2xx transport code', () => {
const record = buildUsageRecord({
status: 'failed',
status_code: 200,
error_message: 'stale failure flag'
error_message: 'stream terminal error'
})
expect(isUsageRecordFailed(record)).toBe(false)
expect(isUsageRecordSuccessful(record)).toBe(true)
expect(isUsageRecordFailed(record)).toBe(true)
expect(isUsageRecordSuccessful(record)).toBe(false)
})
it('normalizes request status strings before mapping timeline status', () => {

View File

@@ -18,7 +18,9 @@ function normalizeErrorDomain(domain: RequestErrorDomain | null | undefined): Re
}
function formatHttpStatus(statusCode: number | null | undefined): string | null {
return typeof statusCode === 'number' ? `HTTP ${statusCode}` : null
return typeof statusCode === 'number' && (statusCode < 200 || statusCode >= 300)
? `HTTP ${statusCode}`
: null
}
function uniqueMeta(values: Array<string | null | undefined>): string[] {

View File

@@ -189,7 +189,7 @@ export function isUsageRecordFailed(record: UsageFailureSignal & Pick<UsageRecor
return false
}
if (status === 'failed') {
return !hasTerminalSuccessStatusCode(record)
return true
}
}
if (hasTerminalSuccessStatusCode(record)) {
@@ -208,7 +208,7 @@ export function isUsageRecordSuccessful(record: UsageFailureSignal & Pick<UsageR
return true
}
if (status === 'failed') {
return hasTerminalSuccessStatusCode(record)
return false
}
return false
}