//! # wifi-densepose-calibration — ADR-151 per-room calibration & specialist training //! //! "Teach the room before you teach the model." A local-first pipeline that turns //! a few minutes of clean human anchors — layered on the ADR-135 empty-room //! baseline — into a versioned bank of small, specialised models for breathing, //! heartbeat, restlessness, posture, presence, and anomaly. //! //! Stages (ADR-151 §1.3): //! 1. **baseline** — empty-room environmental fingerprint (ADR-135; consumed here). //! 2. **enroll** — guided anchors with an adaptive quality gate ([`anchor`], [`enrollment`]). //! 3. **extract** — labelled feature records from anchor captures ([`extract`]). //! 4. **train** — a bank of small specialist models ([`specialist`], [`bank`]) and a //! confidence-gated mixture runtime ([`runtime`]). //! //! Invariants: specialisation over scale; local-first; honest `STALE` degradation //! when the baseline drifts. #![forbid(unsafe_code)] #![warn(missing_docs)] pub mod anchor; pub mod enrollment; pub mod error; pub mod extract; pub mod specialist; pub mod bank; pub mod runtime; pub mod multistatic; pub use anchor::{Anchor, AnchorLabel, AnchorQuality, EnrollmentEvent, EnrollmentSession, Posture}; pub use bank::SpecialistBank; pub use enrollment::{AnchorQualityGate, AnchorRecorder}; pub use error::{CalibrationError, Result}; pub use extract::AnchorFeature; pub use multistatic::MultiNodeMixture; pub use runtime::{MixtureOfSpecialists, RoomState}; pub use specialist::{Specialist, SpecialistKind, SpecialistReading};