1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//! Reusable observers for the Twine framework.
//!
//! This crate provides [`Observer`] implementations and capability traits that
//! work across different solvers in the Twine ecosystem.
//!
//! # Crate position in the dependency graph
//!
//! `twine-observers` sits at the top of the stack:
//!
//! ```text
//! twine-core ← twine-solvers ← twine-observers
//! ```
//!
//! This is intentional. Observers know about solvers — they implement capability
//! traits (see [`traits`]) for the concrete event and action types that solvers
//! expose. Solvers know nothing about observers. Removing this crate leaves
//! `twine-solvers` entirely unaffected.
//!
//! # Modules
//!
//! - [`traits`] — Capability traits for cross-solver observers
//! ([`HasResidual`], [`HasObjective`], [`CanStopEarly`], [`CanAssumeWorse`])
//!
//! # Features
//!
//!
//! [`Observer`]: twine_core::Observer
//! [`HasResidual`]: traits::HasResidual
//! [`HasObjective`]: traits::HasObjective
//! [`CanStopEarly`]: traits::CanStopEarly
//! [`CanAssumeWorse`]: traits::CanAssumeWorse
pub use ;