diff --git a/server/src/agents/pool/auto_assign/story_checks.rs b/server/src/agents/pool/auto_assign/story_checks.rs index e2b106c0..fbf4e0b2 100644 --- a/server/src/agents/pool/auto_assign/story_checks.rs +++ b/server/src/agents/pool/auto_assign/story_checks.rs @@ -72,9 +72,11 @@ pub(super) fn has_content_conflict_failure( if !is_merge_failure { return false; } - // The projection does not carry the reason string; read the raw content - // from the CRDT content store and scan for conflict markers. - crate::db::read_content(story_id) + // The projection does not carry the reason string; read the gate output + // (where the merge runner persists the failure message) and scan for + // conflict markers. NB: the key is `{story_id}:gate_output`, not `{story_id}` + // — the latter is the story's *description* text and would never match. + crate::db::read_content(&format!("{story_id}:gate_output")) .map(|content| { content.contains("Merge conflict") || content.contains("CONFLICT (content):") })