fix(managed): bound completed target retention
Retain only the 256 most recent target outcomes in the final group snapshot while tracking total, successful, failed, and discarded outcome counts. Publish each authoritative TargetFinished event before inserting into the bounded history. Update CLI/TUI exit decisions to use aggregate counts and add a dynamic churn regression proving every outcome remains observable while join retention stays bounded.
This commit is contained in:
5 files changed
+125
-38
No files matched your search
@@ -408,16 +408,8 @@ fn run_group_stream(
|
||||
report_target_failure(target);
|
||||
}
|
||||
}
|
||||
let successful_targets = outcome
|
||||
.targets
|
||||
.iter()
|
||||
.filter(|target| target.is_success())
|
||||
.count();
|
||||
let failed_targets = outcome
|
||||
.targets
|
||||
.iter()
|
||||
.filter(|target| target.end_reason.failure().is_some())
|
||||
.count();
|
||||
let successful_targets = outcome.successful_target_outcomes;
|
||||
let failed_targets = outcome.failed_target_outcomes;
|
||||
if !interrupted && successful_targets == 0 && failed_targets > 0 {
|
||||
return Err(
|
||||
format!("no managed target completed successfully ({failed_targets} failed)").into(),
|
||||
|
||||
@@ -261,16 +261,8 @@ fn run_group_tui(
|
||||
}
|
||||
};
|
||||
}
|
||||
let successful_targets = outcome
|
||||
.targets
|
||||
.iter()
|
||||
.filter(|target| target.is_success())
|
||||
.count();
|
||||
let failed_targets = outcome
|
||||
.targets
|
||||
.iter()
|
||||
.filter(|target| target.end_reason.failure().is_some())
|
||||
.count();
|
||||
let successful_targets = outcome.successful_target_outcomes;
|
||||
let failed_targets = outcome.failed_target_outcomes;
|
||||
if !interrupted && successful_targets == 0 && failed_targets > 0 {
|
||||
state.set_status(TuiStatus::Error);
|
||||
render_if_due(terminal, state, next_render, true)?;
|
||||
|
||||
Reference in new issue
Block a user