fix(simulation): Clippy cleanup and CI enforcement (#635)

Fix all Clippy warnings across the server codebase (2411 insertions, 1341
deletions). Raise type-complexity-threshold to 750 and too-many-arguments
to 12 in .clippy.toml for idiomatic Bevy ECS system signatures. The server
now passes `cargo clippy -- --deny warnings` cleanly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-17 10:33:15 +01:00
co-authored by Claude Opus 4.6
parent 7f7706442a
commit aa79dd97e7
84 changed files with 2409 additions and 1339 deletions
+47 -28
View File
@@ -9,15 +9,14 @@
//! `cargo test -p settled-reach-server -- triangle_validation`
use settled_reach_server::{
simulation::triangle::{
generate_cross_template_triangles, generate_intra_template_triangles,
validate_triangle_def, ConflictType, NpcAxis, RelationshipConstraint, RoleId,
TemplateId, TemplateOwnership, TriangleDef, TriangleId, TrianglePhase, TrustRange,
ValidationError,
},
knowledge::{registry::StableEntityId, types::StableId},
npc::{Npc, RelationshipKind},
simulation::rng::SimRng,
simulation::triangle::{
generate_cross_template_triangles, generate_intra_template_triangles,
validate_triangle_def, ConflictType, NpcAxis, RelationshipConstraint, RoleId, TemplateId,
TemplateOwnership, TriangleDef, TriangleId, TrianglePhase, TrustRange, ValidationError,
},
};
// ---------------------------------------------------------------------------
@@ -102,7 +101,12 @@ fn triangle_validation_conflict_viability_fails_without_want_axis() {
let result = validate_triangle_def(&def);
assert!(
matches!(result, Err(ValidationError::ConflictViability { triangle_id: TriangleId(10) })),
matches!(
result,
Err(ValidationError::ConflictViability {
triangle_id: TriangleId(10)
})
),
"expected ConflictViability error, got: {:?}",
result
);
@@ -129,7 +133,12 @@ fn triangle_validation_relationship_coherence_fails_without_constraints() {
let result = validate_triangle_def(&def);
assert!(
matches!(result, Err(ValidationError::RelationshipCoherence { triangle_id: TriangleId(20) })),
matches!(
result,
Err(ValidationError::RelationshipCoherence {
triangle_id: TriangleId(20)
})
),
"expected RelationshipCoherence error, got: {:?}",
result
);
@@ -214,11 +223,7 @@ fn triangle_validation_interest_divergence_first_last_duplicate() {
fn triangle_validation_conflict_viability_checked_before_coherence() {
let def = TriangleDef {
triangle_id: TriangleId(40),
roles: [
RoleId::new("a"),
RoleId::new("b"),
RoleId::new("c"),
],
roles: [RoleId::new("a"), RoleId::new("b"), RoleId::new("c")],
conflict_type: ConflictType::LatentTension,
interest_axes: [NpcAxis::Contentment, NpcAxis::Tolerance, NpcAxis::Routine],
relationship_constraints: vec![], // also fails coherence
@@ -266,13 +271,8 @@ fn triangle_validation_cross_template_spans_two_templates() {
..def
};
let result = generate_cross_template_triangles(
&mut world,
hub_id,
bar_id,
&[overridden],
&mut rng,
);
let result =
generate_cross_template_triangles(&mut world, hub_id, bar_id, &[overridden], &mut rng);
assert!(
result.warnings.is_empty(),
@@ -297,12 +297,22 @@ fn triangle_validation_cross_template_spans_two_templates() {
let freight = state.role_assignments[&RoleId::new("freight-handler")];
let bartender = state.role_assignments[&RoleId::new("bartender")];
assert_eq!(ops, StableId(1), "ops-manager must map to hub NPC 1");
assert_eq!(freight, StableId(2), "freight-handler must map to hub NPC 2");
assert_eq!(
freight,
StableId(2),
"freight-handler must map to hub NPC 2"
);
assert_eq!(bartender, StableId(3), "bartender must map to bar NPC 3");
assert_eq!(state.phase, TrianglePhase::Simmering);
assert!(state.tension >= 5 && state.tension <= 25, "tension in seeded range");
assert!(state.tension_rate >= 1 && state.tension_rate <= 5, "rate in seeded range");
assert!(
state.tension >= 5 && state.tension <= 25,
"tension in seeded range"
);
assert!(
state.tension_rate >= 1 && state.tension_rate <= 5,
"rate in seeded range"
);
}
/// Cross-template generation skips defs that fail validation, adding a warning.
@@ -335,10 +345,15 @@ fn triangle_validation_cross_template_skips_invalid_defs() {
}],
};
let result = generate_cross_template_triangles(&mut world, hub_id, bar_id, &[invalid], &mut rng);
let result =
generate_cross_template_triangles(&mut world, hub_id, bar_id, &[invalid], &mut rng);
assert_eq!(result.triangles.len(), 0, "invalid def must be skipped");
assert_eq!(result.warnings.len(), 1, "exactly one warning for the skipped def");
assert_eq!(
result.warnings.len(),
1,
"exactly one warning for the skipped def"
);
assert!(
result.warnings[0].contains("validation failed"),
"warning must mention validation failure: {}",
@@ -391,8 +406,7 @@ fn triangle_validation_cross_template_deterministic() {
assert_eq!(result1.triangles.len(), 1);
assert_eq!(result2.triangles.len(), 1);
assert_eq!(
result1.triangles[0].tension,
result2.triangles[0].tension,
result1.triangles[0].tension, result2.triangles[0].tension,
"cross-template generation must be deterministic (D-010)"
);
assert_eq!(
@@ -431,7 +445,12 @@ fn triangle_validation_intra_template_does_not_see_other_template_npcs() {
relationship_constraints: vec![],
};
let result = generate_intra_template_triangles(&mut world, hub_id, &[def, valid_triangle_def(6)], &mut rng);
let result = generate_intra_template_triangles(
&mut world,
hub_id,
&[def, valid_triangle_def(6)],
&mut rng,
);
// The def needing "inspector" should fall back (inspector is in bar, not hub)
// At least one warning about the missing role