bevyengine/bevy · error · RegisteredSystemError

System did not run due to failed parameter validation: {0}

Error message

System did not run due to failed parameter validation: {0}

What it means

RegisteredSystemError::Skipped: the cached/stored system did not run because one of its system parameters failed validation (e.g. a required resource missing or an invalid param). This is informational — the system was skipped, not broken.

Source

Thrown at crates/bevy_ecs/src/system/system_registry.rs:860

    /// A system was run by id, but no system with that id was found.
    ///
    /// Did you forget to register it?
    #[error("System {0:?} was not registered")]
    SystemIdNotRegistered(SystemId<I, O>),
    /// A cached system was removed by value, but no system with its type was found.
    ///
    /// Did you forget to register it?
    #[error("Cached system was not found")]
    SystemNotCached,
    /// The `RegisteredSystem` component is missing.
    #[error("System {0:?} does not have a RegisteredSystem component. This only happens if app code removed the component.")]
    MissingRegisteredSystemComponent(SystemId<I, O>),
    /// A system tried to remove itself.
    #[error("System {0:?} tried to remove itself")]
    SelfRemove(SystemId<I, O>),
    /// System could not be run due to parameters that failed validation.
    /// This is not considered an error.
    #[error("System did not run due to failed parameter validation: {0}")]
    Skipped(SystemParamValidationError),
    /// System returned an error or failed required parameter validation.
    #[error("System returned error: {0}")]
    Failed(BevyError),
    /// [`SystemId`] had different input and/or output types than [`SystemIdMarker`]
    #[error("Could not get system from `{}`, entity was `SystemId<{}, {}>`", DebugName::type_name::<SystemId<I, O>>(), .1.input_type_id.name, .1.output_type_id.name)]
    IncorrectType(SystemId<I, O>, SystemIdMarker),
    /// System is not present in the `RegisteredSystem` component.
    // TODO: We should consider using catch_unwind to protect against the panic case.
    #[error("The system is not present in the RegisteredSystem component. This can happen if the system was called recursively or if the system panicked on the last run.")]
    SystemMissing(SystemId<I, O>),
}

impl<I: SystemInput, O> From<RunSystemError> for RegisteredSystemError<I, O> {
    fn from(value: RunSystemError) -> Self {
        match value {
            RunSystemError::Skipped(err) => Self::Skipped(err),
            RunSystemError::Failed(err) => Self::Failed(err),

View on GitHub (pinned to 396ca72708)

Solutions

  1. Inspect the inner SystemParamValidationError to see which parameter failed
  2. Ensure required resources/params are initialized before running the system (e.g. app.init_resource)
  3. Treat Skipped as non-fatal and continue the frame
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at crates/bevy_ecs/src/system/system_registry.rs:860 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of bevyengine/bevy@396ca72708 (2026-08-20). Data as JSON: /api/errors/da621d58b812fe97. Report an issue: GitHub.