diff --git a/server-rs/crates/spacetime-module/src/external_generation.rs b/server-rs/crates/spacetime-module/src/external_generation.rs index 07c2cbab4..eba694174 100644 --- a/server-rs/crates/spacetime-module/src/external_generation.rs +++ b/server-rs/crates/spacetime-module/src/external_generation.rs @@ -1881,11 +1881,10 @@ fn get_worker_owned_external_generation_job( fn ensure_external_generation_job_provider_checkpoint_absent( row: &ExternalGenerationJob, ) -> Result<(), String> { - if row.provider_task_id.is_some() { - return Err( - "external_generation_job.provider_task_id 已存在,禁止覆盖 provider checkpoint" - .to_string(), - ); + // checkpoint 由 provider_kind + provider_task_id 两个字段共同构成, + // 只判 task_id 会让部分写入的行绕过 at-most-once submit 保护。 + if row.provider_kind.is_some() || row.provider_task_id.is_some() { + return Err("external_generation_job.provider checkpoint 已存在,禁止覆盖".to_string()); } Ok(()) }