Follow-up from PR #409 review (raised by @roborluo in #409 (comment)).
The run orchestrator tracks its outcome through many scattered booleans and derived fields — watchdog.fired, SigintGovernor.interrupted/.forced, session.stop_requested, session_completed_normally, BenchmarkResult.run_timed_out/.user_interrupted, Report.state/.complete — combined at several layers (_run_benchmark_async, finalize_benchmark, run_benchmark, run_audit). Each flag is individually justified, but the combinations are hard to review and easy to get subtly wrong.
Proposal: a single run-outcome enum/struct (e.g. RunOutcome: COMPLETED | ABORTED_USER | ABORTED_FORCED | ABORTED_TIMEOUT | ABORTED_EXTERNAL | INCOMPLETE_METRICS) owned by the orchestrator, derived once, consumed everywhere (artifact rewriting, exit-code mapping, audit certification).
Follow-up from PR #409 review (raised by @roborluo in #409 (comment)).
The run orchestrator tracks its outcome through many scattered booleans and derived fields —
watchdog.fired,SigintGovernor.interrupted/.forced,session.stop_requested,session_completed_normally,BenchmarkResult.run_timed_out/.user_interrupted,Report.state/.complete— combined at several layers (_run_benchmark_async,finalize_benchmark,run_benchmark,run_audit). Each flag is individually justified, but the combinations are hard to review and easy to get subtly wrong.Proposal: a single run-outcome enum/struct (e.g.
RunOutcome: COMPLETED | ABORTED_USER | ABORTED_FORCED | ABORTED_TIMEOUT | ABORTED_EXTERNAL | INCOMPLETE_METRICS) owned by the orchestrator, derived once, consumed everywhere (artifact rewriting, exit-code mapping, audit certification).