From 71e342ddaf367b8604ec0e7b79716d88b1fe1325 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Thu, 16 Jul 2026 17:11:59 +0100 Subject: [PATCH] Supersede rejected role admissions --- .../src/bin/epiphany-mvp-coordinator.rs | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/epiphany-core/src/bin/epiphany-mvp-coordinator.rs b/epiphany-core/src/bin/epiphany-mvp-coordinator.rs index 89e1c43b..4ba2b957 100644 --- a/epiphany-core/src/bin/epiphany-mvp-coordinator.rs +++ b/epiphany-core/src/bin/epiphany-mvp-coordinator.rs @@ -371,12 +371,37 @@ fn run_coordinator(args: &Args) -> Result { steps.push(step); break; } - let accepted = accept_role( + let accepted = match accept_role( &runtime_store, &thread_id, role_id, revision.and_then(|value| u64::try_from(value).ok()), - )?; + ) { + Ok(accepted) => accepted, + Err(error) if args.supersede_failed_results => { + let superseded = supersede_role_result( + &runtime_store, + &thread_id, + role_id, + revision, + &result, + )?; + push_event( + &mut step, + json!({ + "type": "roleAdmissionRejected", + "roleId": role_id, + "error": format!("{error:#}"), + "superseded": status_cli::sanitize_for_operator(superseded), + }), + ); + final_status = collect_coordinator_status(&runtime_store, &thread_id)?; + append_operator_step_jsonl(&steps_path, &step)?; + steps.push(step); + continue; + } + Err(error) => return Err(error), + }; if let Some(memory) = maybe_apply_role_self_patch(&accepted, &agent_memory_dir)? { let mut accepted_with_memory = accepted.clone(); accepted_with_memory["selfMemoryApply"] = memory;