pub struct ResearchOutcome {
pub status: ResearchStatus,
pub max_effect_ns: f64,
pub max_effect_ci: (f64, f64),
pub theta_floor: f64,
pub detectable: bool,
pub model_mismatch: bool,
pub effect: EffectEstimate,
pub samples_used: usize,
pub quality: MeasurementQuality,
pub diagnostics: Diagnostics,
}Expand description
Research mode outcome (spec v4.1 research mode).
This struct is returned when using AttackerModel::Research. Unlike the
standard Outcome which makes Pass/Fail decisions, research mode characterizes
the timing behavior relative to the measurement floor.
Key differences from standard mode:
- No Pass/Fail verdict (no threshold comparison)
- Reports measurement floor (
theta_floor) at final sample size detectablefield indicates if CI lower bound > floormodel_mismatchis non-blocking (tracked but doesn’t stop analysis)
Fields§
§status: ResearchStatusResearch outcome status.
max_effect_ns: f64Maximum effect across quantiles: max_k |(Xβ)_k| in nanoseconds. This is the posterior mean of the maximum absolute predicted effect.
max_effect_ci: (f64, f64)95% credible interval for maximum effect: (2.5th, 97.5th percentile).
theta_floor: f64Measurement floor at final sample size. This is the minimum detectable effect given measurement noise.
detectable: boolTrue if the effect is detectable: CI lower bound > theta_floor.
model_mismatch: boolTrue if model mismatch was detected (Q > q_thresh). In research mode, this is non-blocking but adds a caveat to interpretation.
effect: EffectEstimateEffect size estimate with decomposition.
If model_mismatch is true, interpretation_caveat will be set.
samples_used: usizeNumber of samples used.
quality: MeasurementQualityMeasurement quality assessment.
diagnostics: DiagnosticsDiagnostic information.
Implementations§
Source§impl ResearchOutcome
impl ResearchOutcome
Sourcepub fn is_effect_detected(&self) -> bool
pub fn is_effect_detected(&self) -> bool
Check if a timing effect was confidently detected.
Sourcepub fn is_no_effect_detected(&self) -> bool
pub fn is_no_effect_detected(&self) -> bool
Check if no effect was confidently detected.
Sourcepub fn is_resolution_limit_reached(&self) -> bool
pub fn is_resolution_limit_reached(&self) -> bool
Check if the resolution limit was reached.
Sourcepub fn has_quality_issue(&self) -> bool
pub fn has_quality_issue(&self) -> bool
Check if there was a quality issue.
Sourcepub fn effect(&self) -> &EffectEstimate
pub fn effect(&self) -> &EffectEstimate
Get the effect estimate.
Sourcepub fn quality(&self) -> MeasurementQuality
pub fn quality(&self) -> MeasurementQuality
Get the measurement quality.
Sourcepub fn diagnostics(&self) -> &Diagnostics
pub fn diagnostics(&self) -> &Diagnostics
Get the diagnostics.
Trait Implementations§
Source§impl Clone for ResearchOutcome
impl Clone for ResearchOutcome
Source§fn clone(&self) -> ResearchOutcome
fn clone(&self) -> ResearchOutcome
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ResearchOutcome
impl Debug for ResearchOutcome
Source§impl<'de> Deserialize<'de> for ResearchOutcome
impl<'de> Deserialize<'de> for ResearchOutcome
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 Display for ResearchOutcome
impl Display for ResearchOutcome
Auto Trait Implementations§
impl Freeze for ResearchOutcome
impl RefUnwindSafe for ResearchOutcome
impl Send for ResearchOutcome
impl Sync for ResearchOutcome
impl Unpin for ResearchOutcome
impl UnwindSafe for ResearchOutcome
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.