pub struct ArmOutcome {
pub passed: bool,
pub iterations: u32,
pub cost_usd: f64,
pub wall_ms: u64,
pub error: Option<String>,
pub transcript_path: Option<String>,
pub infra_failed: bool,
}Expand description
A single arm’s result on a single task, normalized so both the native
LoopOutcome and the external CLI’s
result map onto one shape.
Fields§
§passed: boolEvery contract check passed (the ground-truth win condition).
iterations: u32Contract-evaluation rounds actually executed.
cost_usd: f64USD spent on inference for this arm’s run (0.0 when unknown — the native
loop does not always meter; the external CLI reports total_cost_usd).
wall_ms: u64Wall-clock for the arm’s run.
error: Option<String>Terminal error (cancellation, repeated inference failure). Distinct from
infra_failed: an arm can error late (task-attributable) after really
running.
transcript_path: Option<String>Where the arm’s transcript/event stream landed, for Slice 3 attribution.
infra_failed: boolThe arm never actually attempted the task — worktree/setup/CLI-launch/ transport failure before any real work. Excluded from the honest denominator (ALE’s infra-vs-task split); NOT a scored task-0.
Implementations§
Source§impl ArmOutcome
impl ArmOutcome
Sourcepub fn infra(reason: impl Into<String>, wall_ms: u64) -> Self
pub fn infra(reason: impl Into<String>, wall_ms: u64) -> Self
An infra failure: the arm couldn’t be attempted. Kept out of the scored denominator.
Sourcepub fn timeout_loss(reason: impl Into<String>, wall_ms: u64) -> Self
pub fn timeout_loss(reason: impl Into<String>, wall_ms: u64) -> Self
An arm that ran but was stopped by the harness’s own wall bound.
A scored loss, deliberately — not ArmOutcome::infra. The infra
exclusion means “the arm could not be attempted”; an arm that ran for
its entire wall budget was attempted, and very hard. Excluding it would
drop precisely the SLOW tasks from the denominator, which is the same
upward bias coder_ab::INFRA_MARKERS documents at length and warns
against — it excluded “precisely the dependency-trouble tasks, i.e. the
hard ones”.
The asymmetry made it worse: the two arms carry different wall bounds (900s native, 300s external), so excluding on timeout gave a paired design two different exclusion rates feeding one denominator.
Trait Implementations§
Source§impl Clone for ArmOutcome
impl Clone for ArmOutcome
Source§impl Debug for ArmOutcome
impl Debug for ArmOutcome
Source§impl<'de> Deserialize<'de> for ArmOutcome
impl<'de> Deserialize<'de> for ArmOutcome
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for ArmOutcome
impl PartialEq for ArmOutcome
Source§impl Serialize for ArmOutcome
impl Serialize for ArmOutcome
impl StructuralPartialEq for ArmOutcome
Auto Trait Implementations§
impl Freeze for ArmOutcome
impl RefUnwindSafe for ArmOutcome
impl Send for ArmOutcome
impl Sync for ArmOutcome
impl Unpin for ArmOutcome
impl UnsafeUnpin for ArmOutcome
impl UnwindSafe for ArmOutcome
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more