pub struct AbCell {
pub task_id: String,
pub treatment: ArmOutcome,
pub control: ArmOutcome,
pub treatment_spec: Option<ArmSpec>,
pub control_spec: Option<ArmSpec>,
}Expand description
Both arms’ outcomes on one task — the paired unit.
treatment/control (ALE’s compare_pair vocabulary, which this module’s
statistics already mirror) rather than native/external: the arms are no
longer engine-typed, and under ablation both are native. The asymmetry is
kept deliberately — treatment is the arm under test, control the
reference — because the delta’s sign and ab_loop’s quality bar both need to
know which arm is “us”.
Fields§
§task_id: String§treatment: ArmOutcome§control: ArmOutcome§treatment_spec: Option<ArmSpec>The exact arms that produced this cell.
Per-cell, not per-report, because the resume checkpoint is keyed by
corpus path alone: without provenance, running flask@gpt-5.5 and then
resuming the same corpus at flask@gpt-5.4 silently reuses the 5.5 cells
and folds two backbones into one report — a contaminated result that
looks perfectly clean. AbCell::matches is the guard.
None = a legacy checkpoint written before provenance existed; treated
as unknown, hence never reusable.
control_spec: Option<ArmSpec>Implementations§
Trait Implementations§
Source§impl<'de> Deserialize<'de> for AbCell
impl<'de> Deserialize<'de> for AbCell
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>,
impl StructuralPartialEq for AbCell
Auto Trait Implementations§
impl Freeze for AbCell
impl RefUnwindSafe for AbCell
impl Send for AbCell
impl Sync for AbCell
impl Unpin for AbCell
impl UnsafeUnpin for AbCell
impl UnwindSafe for AbCell
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