Epic: #64 (AffinityEngine)
Depends on: #70 (AffinityEngine core)
What
- Add
arcane-affinity as an optional dependency in crates/arcane-infra/Cargo.toml under a feature flag:
arcane-affinity = { path = "../arcane-affinity", optional = true }
[features]
affinity-clustering = ["dep:arcane-affinity"]
- Add a model selection constructor to
ClusterManager:
pub fn with_model(model_type: &str) -> Self {
let model: Arc<dyn IClusteringModel> = match model_type {
#[cfg(feature = "affinity-clustering")]
"affinity" => Arc::new(arcane_affinity::AffinityEngine::default()),
_ => Arc::new(RulesEngine::new()),
};
Self::new(model, Arc::new(LocalPool::default()), SpatialIndex::new())
}
Acceptance criteria
cargo build --workspace passes (default features, no affinity)
cargo build --workspace --features arcane-infra/affinity-clustering passes
ClusterManager::with_model("affinity") creates an AffinityEngine instance
ClusterManager::with_model("rules") creates a RulesEngine instance (default)
Spec
See arcane-engine repo: in_08_00_integration_report.md §2.6
Epic: #64 (AffinityEngine)
Depends on: #70 (AffinityEngine core)
What
arcane-affinityas an optional dependency incrates/arcane-infra/Cargo.tomlunder a feature flag:ClusterManager:Acceptance criteria
cargo build --workspacepasses (default features, no affinity)cargo build --workspace --features arcane-infra/affinity-clusteringpassesClusterManager::with_model("affinity")creates an AffinityEngine instanceClusterManager::with_model("rules")creates a RulesEngine instance (default)Spec
See
arcane-enginerepo:in_08_00_integration_report.md§2.6