Skip to content

Deny internal execution order ambiguities in CI #7386

@alice-i-cecile

Description

@alice-i-cecile

What problem does this solve or what need does it fill?

As discussed in #7383, internal execution order ambiguities are genuinely bad.

They often represent subtle bugs, break determinism for end users, and result in noisy logs for users.

What solution would you like?

  1. Recreate the enum from Improvements to execution order ambiguity reporting #4299 to create configurable levels of system execution order ambiguity reporting / strictness first.
  2. Run the example from [Merged by Bors] - Reduce internal system order ambiguities, and add an example explaining them #7383 in CI.
  3. Ensure that this example panics if any ambiguities are found

To actually get this to pass, we need more powerful tools to resolve or ignore ambiguities between plugins that aren't aware of them.
Once #7267 is merged, we should have those.

Then, add some form of IntegrationPlugin to DefaultPlugins that uses system set configuration + feature flags to resolve or ignore cross-plugin ambiguities.

What alternative(s) have you considered?

Do this manually before every release 🥲

We could just ignore ambiguities on the offending systems completely, but that's definitely incorrect for important systems like UI layout and animation.

Current status

  • clean up tests in #146760
  • resolve all main app ambiguities and set the allowed number to 0
  • figure out how to count the number of ambiguities in the RenderApp and make sure they don't increase
  • resolve all render app ambiguities and set the allowed number to 0

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-Build-SystemRelated to build systems or continuous integrationA-ECSEntities, components, systems, and eventsC-TestingA change that impacts how we test Bevy or how users test their appsD-ComplexQuite challenging from either a design or technical perspective. Ask for help!S-Ready-For-ImplementationThis issue is ready for an implementation PR. Go for it!

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions