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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user