diff --git a/server-rs/crates/platform-tripo/src/common/mapping.rs b/server-rs/crates/platform-tripo/src/common/mapping.rs index bd42255dc..bfcb32449 100644 --- a/server-rs/crates/platform-tripo/src/common/mapping.rs +++ b/server-rs/crates/platform-tripo/src/common/mapping.rs @@ -35,11 +35,11 @@ pub(crate) fn map_task(task: Task) -> Result { status, progress: task.progress, output, - failure: (task.error_code.is_some() || task.error_message.is_some()).then(|| { - TripoTaskFailure { - code: task.error_code, - message: task.error_message, - } + // 只有非成功的终态才可能带 provider 失败信息:provider 留下过期错误字段时, + // 已完成的快照不该再挂 failure,否则快照内部自相矛盾。 + failure: is_terminal_failure(status).then(|| TripoTaskFailure { + code: task.error_code, + message: task.error_message, }), created_at: task.created_at, completed_at: task.completed_at, @@ -72,6 +72,14 @@ fn map_status(status: TaskStatus) -> Result { } } +/// 失败 / 取消 / 过期是「任务已结束且没有可用产物」的终态,只有它们允许携带失败信息。 +fn is_terminal_failure(status: Model3dTaskStatus) -> bool { + matches!( + status, + Model3dTaskStatus::Failed | Model3dTaskStatus::Cancelled | Model3dTaskStatus::Expired + ) +} + fn map_output( task_id: &str, task_type: &TripoTaskType,