mirror of
https://github.com/ruvnet/RuView
synced 2026-08-07 20:01:43 +00:00
7a0158c44d
New crate wifi-densepose-calibration implementing the per-room pipeline beyond Stage-1 baseline: - anchor.rs: guided-anchor sequence + event-sourced EnrollmentSession (Stage 2) - enrollment.rs: AnchorQualityGate + AnchorRecorder — gates anchors against the ADR-135 baseline deviation (presence/motion), re-prompts bad captures - extract.rs: Features + AnchorFeature — autocorrelation periodicity (breathing/ HR bands), variance/motion (Stage 3) - specialist.rs: 6 small room-calibrated models — presence (learned threshold), posture (nearest-prototype), breathing/heartbeat (band periodicity), restlessness (calm/active normalization), anomaly (novelty vs anchors) (Stage 4) - bank.rs: SpecialistBank — train/persist + baseline-drift STALE invalidation - runtime.rs: MixtureOfSpecialists — presence short-circuit + anomaly veto + stale flagging (Stage 5) Statistical heads make the pipeline runnable/validatable today; the ADR-150 HF RF Foundation Encoder backbone is the documented upgrade path. 29 unit tests pass. Co-Authored-By: claude-flow <ruv@ruv.net>
50 lines
1.5 KiB
Rust
50 lines
1.5 KiB
Rust
//! Error types for the calibration pipeline.
|
|
|
|
use thiserror::Error;
|
|
|
|
/// Errors surfaced by the per-room calibration & training pipeline (ADR-151).
|
|
#[derive(Debug, Error)]
|
|
pub enum CalibrationError {
|
|
/// An anchor was recorded with zero frames.
|
|
#[error("anchor '{0}' captured no frames")]
|
|
EmptyAnchor(String),
|
|
|
|
/// The enrollment session is missing anchors required to train a specialist.
|
|
#[error("enrollment incomplete: missing anchors {missing:?}")]
|
|
IncompleteEnrollment {
|
|
/// Labels still required.
|
|
missing: Vec<String>,
|
|
},
|
|
|
|
/// A frame did not match the expected tier geometry.
|
|
#[error("frame geometry mismatch: {0}")]
|
|
Geometry(String),
|
|
|
|
/// Not enough samples to fit a specialist.
|
|
#[error("insufficient samples for '{kind}': have {have}, need {need}")]
|
|
InsufficientSamples {
|
|
/// Specialist kind.
|
|
kind: String,
|
|
/// Samples available.
|
|
have: usize,
|
|
/// Samples required.
|
|
need: usize,
|
|
},
|
|
|
|
/// Serialization / persistence failure.
|
|
#[error("serialization error: {0}")]
|
|
Serde(String),
|
|
|
|
/// The specialist bank was trained against a different baseline and is stale.
|
|
#[error("bank is STALE: trained against baseline {trained}, current is {current}")]
|
|
StaleBaseline {
|
|
/// Baseline id the bank was trained against.
|
|
trained: String,
|
|
/// Current baseline id.
|
|
current: String,
|
|
},
|
|
}
|
|
|
|
/// Convenience result alias.
|
|
pub type Result<T> = std::result::Result<T, CalibrationError>;
|