pub struct RunFlags {
pub modified_files: Vec<String>,
pub modified_file_count: usize,
pub empty_output: bool,
pub no_output_tools: bool,
pub max_iterations_hit: usize,
pub gates_forced: usize,
pub workspace_lost: bool,
}Expand description
Post-hoc diagnosis of a run’s productivity, persisted in meta.json so a
harness (or the dashboard) can tell an empty run from a successful one
without inspecting the workspace or parsing logs.
The motivating failure: 13/300 SWE-bench runs completed their whole stage pipeline and produced no file changes at all. Nothing on disk said so, or said why.
Fields§
§modified_files: Vec<String>Paths passed to file-modifying tools that succeeded, in first-touch
order. Capped at MAX_TRACKED_MODIFIED_FILES; modified_file_count
keeps the true total.
modified_file_count: usizeTotal successful file-modifying tool calls across the run (uncapped).
empty_output: boolThe run reached a terminal status having modified nothing, and its
blueprint gave it a way to modify something. See Self::no_output_tools.
no_output_tools: boolNo stage of the blueprint advertised a file-modifying tool, so this run
could never have produced the file changes empty_output looks for.
Recorded because “modified no files” only diagnoses an agent that was supposed to modify files. A router that spawns sub-agents, or an agent whose answer is its text, would otherwise report itself empty on every successful run - which is what happened in issue #192. The framework has no basis to judge such a run, so it says nothing rather than accusing.
This mirrors the escape the runtime’s gate_blocks already applies per
stage: a require_modifications gate on a stage that advertises no
modifying tool is skipped, because it could never pass.
Phrased negatively so the false that Default and serde(default)
produce means “was capable” - the behavior every meta.json written
before this field had.
max_iterations_hit: usizeHow many stages exhausted their max_iterations.
gates_forced: usizeHow many transitions proceeded past an unsatisfied gate because the gate’s re-run budget ran out.
workspace_lost: boolThe working directory disappeared mid-run.