Part of epic #112.
Depends on: nothing — standalone change in arcane-infra.
Change
All changes in crates/arcane-infra/src/cluster_manager.rs and src/lib.rs:
1. Add field to ClusterManager:
party_assignments: HashMap<Uuid, Uuid>, // entity_id → party_id
Initialised to HashMap::new() in all constructors. Default behaviour: all party_id fields remain None — zero behaviour change for existing code.
2. Add method:
pub fn set_party_assignments(&mut self, assignments: HashMap<Uuid, Uuid>)
3. One-line change in run_evaluation_cycle() when building PlayerInfo:
// Before:
party_id: None,
// After:
party_id: self.party_assignments.get(&entity_id).copied(),
4. Export set_party_assignments is automatically available — no lib.rs change needed since ClusterManager is already re-exported.
Acceptance criteria
Spec
See §4.7, §5.2 in demo_agent_group_behaviour.md.
Part of epic #112.
Depends on: nothing — standalone change in
arcane-infra.Change
All changes in
crates/arcane-infra/src/cluster_manager.rsandsrc/lib.rs:1. Add field to
ClusterManager:Initialised to
HashMap::new()in all constructors. Default behaviour: allparty_idfields remainNone— zero behaviour change for existing code.2. Add method:
3. One-line change in
run_evaluation_cycle()when buildingPlayerInfo:4. Export
set_party_assignmentsis automatically available — nolib.rschange needed sinceClusterManageris already re-exported.Acceptance criteria
arcane-infratests pass unchangedset_party_assignmentsappear with matchingparty_idin theWorldStateView.playersseen by the modelparty_assignmentshasparty_id = NoneinPlayerInfoClusterManager::with_defaults()andClusterManager::new()initialiseparty_assignmentsas empty (existing behaviour unchanged)cargo test -p arcane-infrapassescargo clippy -- -D warningspassesSpec
See §4.7, §5.2 in
demo_agent_group_behaviour.md.