diff --git a/src/crates/assembly/core/src/agentic/coordination/coordinator.rs b/src/crates/assembly/core/src/agentic/coordination/coordinator.rs
index 0c84931852..9e5cda3d2c 100644
--- a/src/crates/assembly/core/src/agentic/coordination/coordinator.rs
+++ b/src/crates/assembly/core/src/agentic/coordination/coordinator.rs
@@ -10062,14 +10062,31 @@ Update the persona files and delete BOOTSTRAP.md as soon as bootstrap is complet
partial_result.text.len()
);
if let Some(parent_info) = subagent_parent_info.as_ref() {
- let event = self.session_manager.record_subagent_partial_timeout(
- &parent_info.session_id,
- &parent_info.dialog_turn_id,
- &logical_agent_type,
- &partial_result.text,
- Some("timeout"),
- );
- partial_result = partial_result.with_ledger_event_id(event.event_id);
+ match self
+ .session_manager
+ .record_subagent_partial_timeout(
+ &parent_info.session_id,
+ &parent_info.dialog_turn_id,
+ &logical_agent_type,
+ &partial_result.text,
+ Some("timeout"),
+ )
+ .await
+ {
+ Ok(event) => {
+ partial_result =
+ partial_result.with_ledger_event_id(event.event_id);
+ }
+ Err(error) => {
+ warn!(
+ "Failed to persist partial subagent evidence: parent_session_id={}, parent_turn_id={}, agent_type={}, error={}",
+ parent_info.session_id,
+ parent_info.dialog_turn_id,
+ logical_agent_type,
+ error
+ );
+ }
+ }
}
if let Err(cleanup_err) = self.cleanup_subagent_resources(&session_id).await {
warn!(
diff --git a/src/crates/assembly/core/src/agentic/persistence/manager.rs b/src/crates/assembly/core/src/agentic/persistence/manager.rs
index 20fc63200d..89d118a727 100644
--- a/src/crates/assembly/core/src/agentic/persistence/manager.rs
+++ b/src/crates/assembly/core/src/agentic/persistence/manager.rs
@@ -17,6 +17,9 @@ use crate::agentic::session::transcript_render::{
use crate::agentic::session::{
CoreSessionStorePort, SessionPromptCache, TokenAnchor, PROMPT_CACHE_SCHEMA_VERSION,
};
+use crate::agentic::session::{
+ EvidenceLedgerEvent, PersistedEvidenceLedgerFile, EVIDENCE_LEDGER_SCHEMA_VERSION,
+};
use crate::agentic::skill_agent_snapshot::TurnSkillAgentSnapshot;
use crate::infrastructure::PathManager;
use crate::service::config::get_global_config_service;
@@ -485,6 +488,8 @@ pub struct PersistenceManager {
#[cfg(test)]
fail_next_session_state_write: std::sync::Mutex