Skip to content

arcane-clustering-sim: self-contained clustering simulation binary + integration test #115

@rebelmachina

Description

@rebelmachina

Part of epic #112.

Depends on: #113, #114.

Change

1. New feature in arcane-demos/Cargo.toml:

[features]
clustering-sim = ["arcane-infra/affinity-clustering"]

[[bin]]
name = "arcane-clustering-sim"
path = "src/bin/arcane_clustering_sim.rs"
required-features = ["clustering-sim"]

2. New binary src/bin/arcane_clustering_sim.rs — synchronous loop (no Tokio), no WebSocket, no Redis:

  • create_grouped_agents to create agents across M initial zones
  • set_party_assignments on ClusterManager from agent group_ids
  • Per tick: tick_grouped_agentsupdate_entity per agent → run_evaluation_cycle every eval_interval ticks
  • Emit one JSON line per evaluation: {"tick":N,"model":"...","clusters":N,"merges":N,"splits":N,"group_fragmentation":F,"groups_co_located":N}
  • CLI flags: --agents, --group-size, --zones, --ticks, --eval-interval, --model rules|affinity, --compare

3. Extract run_sim(config) -> SimResult library function callable from tests without spawning a subprocess.

4. New integration test tests/clustering_sim_tests.rs — Test E:

// 30 agents, 3 groups of 10, 3 zones, 300 ticks, eval every 10
let affinity = run_sim(SimConfig { model: Model::Affinity, ticks: 300, .. });
let rules    = run_sim(SimConfig { model: Model::Rules,   ticks: 300, .. });
assert!(affinity.final_fragmentation < 0.25);
assert!(rules.final_fragmentation > affinity.final_fragmentation + 0.2);

Acceptance criteria

  • Binary builds with --features clustering-sim
  • --model rules works without clustering-sim feature (falls back gracefully)
  • Test E passes: affinity group_fragmentation < 0.25 at tick 300; rules fragmentation exceeds affinity by ≥ 0.2
  • --compare emits interleaved JSON lines for both models on the same agent sequence
  • All existing arcane-demo tests pass (no regressions)
  • cargo test -p arcane-demo --features clustering-sim passes
  • cargo clippy -- -D warnings passes

Spec

See §4.8, §5.3, §7, §8 in demo_agent_group_behaviour.md.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions