use std::time::Duration;
use tokio::sync::watch;
use crate::subagent::RunStatus;
pub(crate) async fn wait_for_writer(mut status_rx: watch::Receiver<RunStatus>) -> RunStatus {
const WRITER_COMPLETION_BUDGET: Duration = Duration::from_secs(30);
let completed = tokio::time::timeout(WRITER_COMPLETION_BUDGET, async {
while status_rx.changed().await.is_ok() {}
})
.await;
let status = status_rx.borrow().clone();
assert!(
completed.is_ok(),
"artifact writer did not close its status channel within {WRITER_COMPLETION_BUDGET:?}; status: {status:?}"
);
status
}