rust-bevy-standards — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited rust-bevy-standards (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
⚠️ Bevy 0.17+ Breaking Changes
MeshMaterial3d<T>, not Handle<T>commands.trigger(), add_observer())Event split into Message (buffered) and Event (observers)EventWriter/EventReader replaced by MessageWriter/MessageReader (message.write() / messages.read()) // Old
commands.add_observer(|trigger: Trigger<OnAdd, Player>| {
info!("Spawned player {}", trigger.target());
});
// New
commands.add_observer(|add: On<Add, Player>| {
info!("Spawned player {}", add.entity);
});⚠️ Bevy 0.18+ Breaking Changes
RenderTarget is now a required component on Camera, not a Camera field: // Old
Camera { target: RenderTarget::Image(handle.into()), ..default() }
// New
commands.spawn((Camera3d::default(), RenderTarget::Image(handle.into())));BorderRadius is now a field on Node, not a componentLineHeight is now a required component on Text/Text2d/TextSpan; removed from TextFontAmbientLight resource renamed to GlobalAmbientLight; AmbientLight is now a component on Cameraclear_children → detach_all_children, remove_children → detach_children, remove_child → detach_child (same on EntityCommands and EntityWorldMut)AnimationTarget { id, player } replaced by separate AnimationTargetId(id) and AnimatedBy(player_entity) componentsnext_state.set(...) now always fires OnEnter/OnExit; use set_if_neq for the old behaviourMaterialPlugin fields prepass_enabled/shadows_enabled replaced by Material trait methods enable_prepass()/enable_shadows()SimpleExecutor removed; use SingleThreadedExecutor instead#[reflect(...)] now only supports parentheses, not braces or bracketsAssetLoader, AssetSaver, AssetTransformer, Process now require #[derive(TypePath)]ron no longer re-exported from bevy_scene or bevy_asset; add it as a direct dependencyanimation → gltf_animation, bevy_sprite_picking_backend → sprite_picking, bevy_ui_picking_backend → ui_picking, bevy_mesh_picking_backend → mesh_pickingdespawn() orphans children, consider despawn_recursive() insteadChanged<T> and Added<T> query filters to skip unchanged components — omitting these is the most common Bevy performance mistakeOnAdd, OnRemove) for component lifecycle reactions; don't poll for these in Updateposition not pos_systemhandle_, ends in _message/// doc comment explaining their purpose and scope/// Handles damage processing and death detection.
pub struct CombatPlugin;
impl Plugin for CombatPlugin {
fn build(&self, app: &mut App) {
app
.add_event::<DamageEvent>()
.add_systems(Update, (process_damage, check_death));
}
}run_if(in_state(...))) to skip whole systemsOnEnter/OnExit schedules for state transitions, not flags checked in Update.add_systems(
Update,
(
// 1. Input
handle_input,
// 2. State changes
process_events,
update_state,
// 3. Derived values
calculate_derived_values,
// 4. Visuals
update_materials,
update_animations,
// 5. UI (last)
update_ui_displays,
),
)~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.