fix(desktop-client): treat title-length validation as definitive publish failure
Extract the definitive-failure regex into a named constant and add title length/count validation patterns so submit-phase failures like "标题长度应该在2-30字之间" stay non-retryable instead of being classified as uncertain. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,6 +2,9 @@ import type { JsonValue } from '@geo/shared-types'
|
||||
|
||||
import type { AdapterExecutionResult } from './adapters/base'
|
||||
|
||||
const definitivePublishFailurePattern =
|
||||
/(?:csrf|forbidden|\b403\b|not_logged_in|login_required|token_missing|cookie_missing|challenge_required|risk_control|captcha|验证码|滑块|人机验证|安全验证|风控|风险|参数错误|内容为空|标题.{0,12}(?:长度|字数|过长|太长|超过|不能超过)|title[_\s-]*(?:length|too[_\s-]*long|too[_\s-]*short|max)|image_fetch_failed|cover_fetch_failed|upload_failed|signature_failed)/i
|
||||
|
||||
export function markAuthorizationFailureNonRetryable(
|
||||
error: Record<string, JsonValue>,
|
||||
category: 'ai_platform_authorization' | 'media_account_authorization',
|
||||
@@ -49,9 +52,7 @@ export function isDefinitivePublishFailure(result: AdapterExecutionResult): bool
|
||||
return true
|
||||
}
|
||||
|
||||
return /(?:csrf|forbidden|\b403\b|not_logged_in|login_required|token_missing|cookie_missing|challenge_required|risk_control|captcha|验证码|滑块|人机验证|安全验证|风控|风险|参数错误|内容为空|image_fetch_failed|cover_fetch_failed|upload_failed|signature_failed)/i.test(
|
||||
combined,
|
||||
)
|
||||
return definitivePublishFailurePattern.test(combined)
|
||||
}
|
||||
|
||||
export function asSubmitUncertainExecution(result: AdapterExecutionResult): AdapterExecutionResult {
|
||||
|
||||
@@ -21,6 +21,20 @@ describe('publish retry result classification', () => {
|
||||
expect(asSubmitUncertainExecution(result).status).toBe('failed')
|
||||
})
|
||||
|
||||
it('keeps title length validation failures definitive after submit started', () => {
|
||||
const result: AdapterExecutionResult = {
|
||||
status: 'failed',
|
||||
summary: '标题长度应该在2-30字之间',
|
||||
error: {
|
||||
code: 'toutiaohao_publish_failed',
|
||||
message: '标题长度应该在2-30字之间',
|
||||
},
|
||||
}
|
||||
|
||||
expect(isDefinitivePublishFailure(result)).toBe(true)
|
||||
expect(asSubmitUncertainExecution(result).status).toBe('failed')
|
||||
})
|
||||
|
||||
it('marks ambiguous submit-phase publish failures as unknown', () => {
|
||||
const result: AdapterExecutionResult = {
|
||||
status: 'failed',
|
||||
|
||||
Reference in New Issue
Block a user