Skip to content

Conversation

@andrewzhurov
Copy link

Hola!
So, tried that async-first approach, so all clipboard-related stuff happens in async Task, on IoTaskPool,
and simple&easy sync api just block_on(<that_task>). 🎉

(if user uses async API to fetch some text, I guess it's up to him to store that Task somewhere and poll when it's finished, but hey, if they invisigate "blocking may be harfmul for us" - they're likely capable of doing so! 😄)
(would be nicer if we'd have some task.add_observer(handle_pasted_text) API tho)

& some other misc.

mockersf and others added 30 commits June 29, 2025 20:36
# Objective

- bevy_asset has a clippy warning in wasm:
[`clippy::io_other_error`](https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error)

```
error: this can be `std::io::Error::other(_)`
  --> crates/bevy_asset/src/io/wasm.rs:50:9
   |
50 |         std::io::Error::new(std::io::ErrorKind::Other, message)
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error
   = note: `-D clippy::io-other-error` implied by `-D warnings`
   = help: to override `-D warnings` add `#[allow(clippy::io_other_error)]`
help: use `std::io::Error::other`
   |
50 -         std::io::Error::new(std::io::ErrorKind::Other, message)
50 +         std::io::Error::other(message)
```

## Solution

- Fix it

## Testing

`cargo clippy --target wasm32-unknown-unknown -p bevy_asset --no-deps --
-D warnings`
# Objective

- bevy_winit has a warning when compiling without default feature on
linux
- bevy_winit has a clippy warning when compiling in wasm

## Solution

- Fix them

## Testing

```
cargo build -p bevy_winit --no-default-features --features winit/x11
cargo clippy --target wasm32-unknown-unknown -p bevy_winit --no-deps -- -D warnings
```
# Objective

- avoid several internal vec copies while collecting all the level data
in ktx2 load
- merge another little piece of bevyengine#18411 (benchmarks there found this to
be a significant win)

## Solution

- reserve and extend

## Testing

- ran a few examples that load ktx2 images, like ssr. looks fine

## Future work

- fast path logic to skip the reading into different vecs and just read
it all in one go into the final buffer instead
- as above, but directly into gpu staging buffer perhaps
# Objective

- bevy_render has unfulfilled expected clippy lints in wasm

## Solution

- Don't expect them in wasm

## Testing

`cargo clippy --target wasm32-unknown-unknown -p bevy_render --no-deps
-- -D warnings`
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
# Objective

- Fixes bevyengine#19670

## Solution

- Updated breaking code to be able to upgrade `ui_test` to the latest
version.

## Testing

- CI checks.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
# Objective

- bevy_window fails to compile without default features

```
error: cannot find derive macro `Reflect` in this scope
    --> crates/bevy_window/src/window.rs:1474:60
     |
1474 | #[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Reflect)]
     |                                                            ^^^^^^^

warning: unused import: `format`
 --> crates/bevy_window/src/window.rs:1:30
  |
1 | use alloc::{borrow::ToOwned, format, string::String};
  |                              ^^^^^^
  |
  = note: `#[warn(unused_imports)]` on by default

warning: `bevy_window` (lib) generated 1 warning
error: could not compile `bevy_window` (lib) due to 1 previous error; 1 warning emitted
```

## Solution

- Fix them

## Testing

`cargo build -p bevy_window --no-default-features --features
bevy_math/libm`
# Objective

add support for light textures (also known as light cookies, light
functions, and light projectors)


![image](https://github.com/user-attachments/assets/afdb23e2-b35f-4bf0-bf92-f883cd7db771)

## Solution

- add components:

```rs
/// Add to a [`PointLight`] to add a light texture effect.
/// A texture mask is applied to the light source to modulate its intensity,  
/// simulating patterns like window shadows, gobo/cookie effects, or soft falloffs.
pub struct PointLightTexture {
    /// The texture image. Only the R channel is read.
    pub image: Handle<Image>,
    /// The cubemap layout. The image should be a packed cubemap in one of the formats described by the [`CubemapLayout`] enum.
    pub cubemap_layout: CubemapLayout,
}

/// Add to a [`SpotLight`] to add a light texture effect.
/// A texture mask is applied to the light source to modulate its intensity,  
/// simulating patterns like window shadows, gobo/cookie effects, or soft falloffs.
pub struct SpotLightTexture {
    /// The texture image. Only the R channel is read.
    /// Note the border of the image should be entirely black to avoid leaking light.
    pub image: Handle<Image>,
}

/// Add to a [`DirectionalLight`] to add a light texture effect.
/// A texture mask is applied to the light source to modulate its intensity,  
/// simulating patterns like window shadows, gobo/cookie effects, or soft falloffs.
pub struct DirectionalLightTexture {
    /// The texture image. Only the R channel is read.
    pub image: Handle<Image>,
    /// Whether to tile the image infinitely, or use only a single tile centered at the light's translation
    pub tiled: bool,
}
```

- store images to the `RenderClusteredDecals` buffer
- read the image and modulate the lights
- add `light_textures` example to showcase the new features

## Testing

see light_textures example
Bumps
[super-linter/super-linter](https://github.com/super-linter/super-linter)
from 7.3.0 to 7.4.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/super-linter/super-linter/releases">super-linter/super-linter's
releases</a>.</em></p>
<blockquote>
<h2>v7.4.0</h2>
<h2><a
href="https://github.com/super-linter/super-linter/compare/v7.3.0...v7.4.0">7.4.0</a>
(2025-05-13)</h2>
<h3>🚀 Features</h3>
<ul>
<li>add env var for npm-groovy-lint failon level (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6530">#6530</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/418c922120006007fad0f1839b3dae7210c0a50b">418c922</a>)</li>
<li>check in-progress commit msg with commitlint (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6757">#6757</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/57345c5c792fc2719987f110bd7fcb9c5973e1a1">57345c5</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6411">#6411</a></li>
<li>disable xmllint verbose output if debuging (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6747">#6747</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/e6c42ca463ef54ca2f2c2075f2e3e87f0d98577c">e6c42ca</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6653">#6653</a></li>
<li>do not hide php composer output (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6637">#6637</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/1c621411943c1ca0b2e057424cff5f7158addc2a">1c62141</a>)</li>
<li>pass optional arguments to gitleaks (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6756">#6756</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/109384b3f0f3398204739c8a4748e517e8c4a6d1">109384b</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6601">#6601</a></li>
<li>set github_before_sha on pull requests (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6687">#6687</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/d7f522206a7ce6f2a76be2e489fd69d590fcf1e8">d7f5222</a>)</li>
<li>support eslint flat config files (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6619">#6619</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/d349d575765a595151dd8ae5f42355336f37b028">d349d57</a>)</li>
<li>support ktlint format fix (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6748">#6748</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/5cb5915c0d20a2bb6ee51134a67af05a0b984161">5cb5915</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6618">#6618</a></li>
<li>warn the user on conflicting tools (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6759">#6759</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/b4aaae9add1a33d2161135540bce9afea7ffd24e">b4aaae9</a>)</li>
</ul>
<h3>🐛 Bugfixes</h3>
<ul>
<li>check if commit count is defined before using (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6733">#6733</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/d007229c20a9759603dda61d6fa449bb244440c1">d007229</a>)</li>
<li>check return code and misc test improvements (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6697">#6697</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/7f46ec3f956811ca47e4234cd7fa694a96f19caf">7f46ec3</a>)</li>
<li>configure nbqa tools (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6761">#6761</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/e31adf99f984b59dbb2b093e5c26d7383fbdf440">e31adf9</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6736">#6736</a></li>
<li>consider git dirs safe (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6675">#6675</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/101d5a6e79d6caf56aa9fa45b432eaf17151019c">101d5a6</a>)</li>
<li>do not use a pager on git log (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6765">#6765</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/f5bae0c893640c928e51c39f6408f9f43e186ff0">f5bae0c</a>)</li>
<li>emit prettier verbose output when debugging (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6636">#6636</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/4e1eb5f5e0bffb6484d6411426a4edd32e35eeed">4e1eb5f</a>)</li>
<li>export github_before_sha (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6714">#6714</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/6401906d78fb46bed63ab074daac098d75305e26">6401906</a>)</li>
<li>fix default values for prettier fix vars (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6769">#6769</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/4230ecc9a86a7ae77b6da88a9f16227ac74359be">4230ecc</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6768">#6768</a></li>
<li>more robust error checking and test fixes (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6693">#6693</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/1c70566ff2fa29fa52365733a591857a66a6964c">1c70566</a>)</li>
<li>skip symbolic links when passing files to prettier (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6620">#6620</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/417a58a62d9b71cab86a467908b0aca8b4ec88b3">417a58a</a>)</li>
<li>update editorconfig-checker config file name (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6730">#6730</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/72f02f08d97c1351fad5a0959a9de8fdd3ca1786">72f02f0</a>)</li>
</ul>
<h3>⬆️ Dependency updates</h3>
<ul>
<li><strong>bundler:</strong> bump the rubocop group in /dependencies
with 10 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6661">#6661</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/2757a99ca5ce4642797fd2187a068c28f10acb3b">2757a99</a>)</li>
<li><strong>bundler:</strong> bump the rubocop group in /dependencies
with 4 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6782">#6782</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/17cf93575b5edb6cc02b4ef8d8738927d07c719b">17cf935</a>)</li>
<li><strong>docker:</strong> bump python in the docker-base-images group
(<a
href="https://redirect.github.com/super-linter/super-linter/issues/6723">#6723</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/960298bbebd32dc07191a2efe750cf813e6eabdc">960298b</a>)</li>
<li><strong>docker:</strong> bump the docker group across 1 directory
with 17 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6776">#6776</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/8b602a4d8b62847d02044e9bd7b19b2081631f1d">8b602a4</a>)</li>
<li><strong>java:</strong> bump
com.google.googlejavaformat:google-java-format (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6780">#6780</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/aa3f3f87797b1d4b58682f4012069b0d5739c0b4">aa3f3f8</a>)</li>
<li><strong>java:</strong> bump com.puppycrawl.tools:checkstyle (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6639">#6639</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/59f2b6bebb71bd8587eda48518b7fec475138eb4">59f2b6b</a>)</li>
<li><strong>npm:</strong> bump <code>@​babel/eslint-parser</code> in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6762">#6762</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/fd53895808c3312b4a8bbd5d017626f895f86f88">fd53895</a>)</li>
<li><strong>npm:</strong> bump <code>@​babel/runtime-corejs3</code> (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6651">#6651</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/8fbf79e7cd4907ab33eb5b130ec81873582444c0">8fbf79e</a>)</li>
<li><strong>npm:</strong> bump <code>@​stoplight/spectral-cli</code> in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6742">#6742</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/56355b5d6ea91fdf7dfc98aef76cebad07cc7fb7">56355b5</a>)</li>
<li><strong>npm:</strong> bump asl-validator from 3.13.0 to 3.14.0 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6631">#6631</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/30aa4b3218937031b1485461bb57124575a09b90">30aa4b3</a>)</li>
<li><strong>npm:</strong> bump asl-validator from 3.14.0 to 3.15.0 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6777">#6777</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/660f7dcb41565d1f232b9f16d81ee769e46753c7">660f7dc</a>)</li>
<li><strong>npm:</strong> bump next (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6676">#6676</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/f171ee5245d05a25a5901c8ddf5a55eb779b11f4">f171ee5</a>)</li>
<li><strong>npm:</strong> bump next (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6708">#6708</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/43faf9530c2b779d74245b557b58a8f680e7df77">43faf95</a>)</li>
<li><strong>npm:</strong> bump next (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6729">#6729</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/536538ab2da9d255ce7a368fba137778fab32642">536538a</a>)</li>
<li><strong>npm:</strong> bump npm-groovy-lint from 15.1.0 to 15.2.0 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6779">#6779</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/c19a3da4cfec85e855885f784c612d3536e6d96e">c19a3da</a>)</li>
<li><strong>npm:</strong> bump prettier from 3.5.2 to 3.5.3 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6629">#6629</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/6864c8c0d5cb1e7c8bbee4625a94dc0dcb88c666">6864c8c</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md">super-linter/super-linter's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/super-linter/super-linter/compare/v7.3.0...v7.4.0">7.4.0</a>
(2025-05-13)</h2>
<h3>🚀 Features</h3>
<ul>
<li>add env var for npm-groovy-lint failon level (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6530">#6530</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/418c922120006007fad0f1839b3dae7210c0a50b">418c922</a>)</li>
<li>check in-progress commit msg with commitlint (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6757">#6757</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/57345c5c792fc2719987f110bd7fcb9c5973e1a1">57345c5</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6411">#6411</a></li>
<li>disable xmllint verbose output if debuging (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6747">#6747</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/e6c42ca463ef54ca2f2c2075f2e3e87f0d98577c">e6c42ca</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6653">#6653</a></li>
<li>do not hide php composer output (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6637">#6637</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/1c621411943c1ca0b2e057424cff5f7158addc2a">1c62141</a>)</li>
<li>pass optional arguments to gitleaks (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6756">#6756</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/109384b3f0f3398204739c8a4748e517e8c4a6d1">109384b</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6601">#6601</a></li>
<li>set github_before_sha on pull requests (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6687">#6687</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/d7f522206a7ce6f2a76be2e489fd69d590fcf1e8">d7f5222</a>)</li>
<li>support eslint flat config files (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6619">#6619</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/d349d575765a595151dd8ae5f42355336f37b028">d349d57</a>)</li>
<li>support ktlint format fix (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6748">#6748</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/5cb5915c0d20a2bb6ee51134a67af05a0b984161">5cb5915</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6618">#6618</a></li>
<li>warn the user on conflicting tools (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6759">#6759</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/b4aaae9add1a33d2161135540bce9afea7ffd24e">b4aaae9</a>)</li>
</ul>
<h3>🐛 Bugfixes</h3>
<ul>
<li>check if commit count is defined before using (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6733">#6733</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/d007229c20a9759603dda61d6fa449bb244440c1">d007229</a>)</li>
<li>check return code and misc test improvements (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6697">#6697</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/7f46ec3f956811ca47e4234cd7fa694a96f19caf">7f46ec3</a>)</li>
<li>configure nbqa tools (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6761">#6761</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/e31adf99f984b59dbb2b093e5c26d7383fbdf440">e31adf9</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6736">#6736</a></li>
<li>consider git dirs safe (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6675">#6675</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/101d5a6e79d6caf56aa9fa45b432eaf17151019c">101d5a6</a>)</li>
<li>do not use a pager on git log (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6765">#6765</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/f5bae0c893640c928e51c39f6408f9f43e186ff0">f5bae0c</a>)</li>
<li>emit prettier verbose output when debugging (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6636">#6636</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/4e1eb5f5e0bffb6484d6411426a4edd32e35eeed">4e1eb5f</a>)</li>
<li>export github_before_sha (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6714">#6714</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/6401906d78fb46bed63ab074daac098d75305e26">6401906</a>)</li>
<li>fix default values for prettier fix vars (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6769">#6769</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/4230ecc9a86a7ae77b6da88a9f16227ac74359be">4230ecc</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6768">#6768</a></li>
<li>more robust error checking and test fixes (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6693">#6693</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/1c70566ff2fa29fa52365733a591857a66a6964c">1c70566</a>)</li>
<li>skip symbolic links when passing files to prettier (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6620">#6620</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/417a58a62d9b71cab86a467908b0aca8b4ec88b3">417a58a</a>)</li>
<li>update editorconfig-checker config file name (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6730">#6730</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/72f02f08d97c1351fad5a0959a9de8fdd3ca1786">72f02f0</a>)</li>
</ul>
<h3>⬆️ Dependency updates</h3>
<ul>
<li><strong>bundler:</strong> bump the rubocop group in /dependencies
with 10 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6661">#6661</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/2757a99ca5ce4642797fd2187a068c28f10acb3b">2757a99</a>)</li>
<li><strong>bundler:</strong> bump the rubocop group in /dependencies
with 4 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6782">#6782</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/17cf93575b5edb6cc02b4ef8d8738927d07c719b">17cf935</a>)</li>
<li><strong>docker:</strong> bump python in the docker-base-images group
(<a
href="https://redirect.github.com/super-linter/super-linter/issues/6723">#6723</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/960298bbebd32dc07191a2efe750cf813e6eabdc">960298b</a>)</li>
<li><strong>docker:</strong> bump the docker group across 1 directory
with 17 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6776">#6776</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/8b602a4d8b62847d02044e9bd7b19b2081631f1d">8b602a4</a>)</li>
<li><strong>java:</strong> bump
com.google.googlejavaformat:google-java-format (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6780">#6780</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/aa3f3f87797b1d4b58682f4012069b0d5739c0b4">aa3f3f8</a>)</li>
<li><strong>java:</strong> bump com.puppycrawl.tools:checkstyle (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6639">#6639</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/59f2b6bebb71bd8587eda48518b7fec475138eb4">59f2b6b</a>)</li>
<li><strong>npm:</strong> bump <code>@​babel/eslint-parser</code> in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6762">#6762</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/fd53895808c3312b4a8bbd5d017626f895f86f88">fd53895</a>)</li>
<li><strong>npm:</strong> bump <code>@​babel/runtime-corejs3</code> (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6651">#6651</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/8fbf79e7cd4907ab33eb5b130ec81873582444c0">8fbf79e</a>)</li>
<li><strong>npm:</strong> bump <code>@​stoplight/spectral-cli</code> in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6742">#6742</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/56355b5d6ea91fdf7dfc98aef76cebad07cc7fb7">56355b5</a>)</li>
<li><strong>npm:</strong> bump asl-validator from 3.13.0 to 3.14.0 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6631">#6631</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/30aa4b3218937031b1485461bb57124575a09b90">30aa4b3</a>)</li>
<li><strong>npm:</strong> bump asl-validator from 3.14.0 to 3.15.0 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6777">#6777</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/660f7dcb41565d1f232b9f16d81ee769e46753c7">660f7dc</a>)</li>
<li><strong>npm:</strong> bump next (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6676">#6676</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/f171ee5245d05a25a5901c8ddf5a55eb779b11f4">f171ee5</a>)</li>
<li><strong>npm:</strong> bump next (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6708">#6708</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/43faf9530c2b779d74245b557b58a8f680e7df77">43faf95</a>)</li>
<li><strong>npm:</strong> bump next (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6729">#6729</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/536538ab2da9d255ce7a368fba137778fab32642">536538a</a>)</li>
<li><strong>npm:</strong> bump npm-groovy-lint from 15.1.0 to 15.2.0 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6779">#6779</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/c19a3da4cfec85e855885f784c612d3536e6d96e">c19a3da</a>)</li>
<li><strong>npm:</strong> bump prettier from 3.5.2 to 3.5.3 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6629">#6629</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/6864c8c0d5cb1e7c8bbee4625a94dc0dcb88c666">6864c8c</a>)</li>
<li><strong>npm:</strong> bump renovate from 39.179.1 to 40.3.4 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6763">#6763</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/5e7e9212d8a16b49e13adc43bf5361a0da58276f">5e7e921</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/super-linter/super-linter/commit/12150456a73e248bdc94d0794898f94e23127c88"><code>1215045</code></a>
chore(main): release 7.4.0 (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6634">#6634</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/8b602a4d8b62847d02044e9bd7b19b2081631f1d"><code>8b602a4</code></a>
deps(docker): bump the docker group across 1 directory with 17 updates
(<a
href="https://redirect.github.com/super-linter/super-linter/issues/6776">#6776</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/f8df7f61c0ee5c6daf16d20e15f06d4550c8263d"><code>f8df7f6</code></a>
deps(npm): bump the stylelint group across 1 directory with 3 updates
(<a
href="https://redirect.github.com/super-linter/super-linter/issues/6775">#6775</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/660f7dcb41565d1f232b9f16d81ee769e46753c7"><code>660f7dc</code></a>
deps(npm): bump asl-validator from 3.14.0 to 3.15.0 in /dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6777">#6777</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/25d4ced079befcc1c2ccc1c62ebb849848513265"><code>25d4ced</code></a>
deps(npm): bump renovate from 40.10.4 to 40.11.8 in /dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6778">#6778</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/c19a3da4cfec85e855885f784c612d3536e6d96e"><code>c19a3da</code></a>
deps(npm): bump npm-groovy-lint from 15.1.0 to 15.2.0 in /dependencies
(<a
href="https://redirect.github.com/super-linter/super-linter/issues/6779">#6779</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/aa3f3f87797b1d4b58682f4012069b0d5739c0b4"><code>aa3f3f8</code></a>
deps(java): bump com.google.googlejavaformat:google-java-format (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6780">#6780</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/e15495758bbbc863cf4b608a5d39e756d525a7ad"><code>e154957</code></a>
deps(python): bump the pip group across 1 directory with 3 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6781">#6781</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/17cf93575b5edb6cc02b4ef8d8738927d07c719b"><code>17cf935</code></a>
deps(bundler): bump the rubocop group in /dependencies with 4 updates
(<a
href="https://redirect.github.com/super-linter/super-linter/issues/6782">#6782</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/2757a99ca5ce4642797fd2187a068c28f10acb3b"><code>2757a99</code></a>
deps(bundler): bump the rubocop group in /dependencies with 10 updates
(<a
href="https://redirect.github.com/super-linter/super-linter/issues/6661">#6661</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/super-linter/super-linter/compare/v7.3.0...v7.4.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=super-linter/super-linter&package-manager=github_actions&previous-version=7.3.0&new-version=7.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

You can trigger a rebase of this PR by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

> **Note**
> Automatic rebases have been disabled on this pull request as it has
been open for over 30 days.

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
# Objective

Fixes bevyengine#19356
Issue: Spawning a batch of entities in relationship with the same target
adds the relationship between the target and only the last entity of the
batch. `spawn_batch` flushes only after having spawned all entities.
This means each spawned entity will have run the `on_insert` hook of its
`Relationship` component. Here is the relevant part of that hook:
```Rust
            if let Some(mut relationship_target) =
                target_entity_mut.get_mut::<Self::RelationshipTarget>()
            {
                relationship_target.collection_mut_risky().add(entity);
            } else {
                let mut target = <Self::RelationshipTarget as RelationshipTarget>::with_capacity(1);
                target.collection_mut_risky().add(entity);
                world.commands().entity(target_entity).insert(target);
            }
```
Given the above snippet and since there's no flush between spawns, each
entity finds the target without a `RelationshipTarget` component and
defers the insertion of that component with the entity's id as the sole
member of its collection. When the commands are finally flushed, each
insertion after the first replaces the one before and in the process
triggers the `on_replace` hook of `RelationshipTarget` which removes the
`Relationship` component from the corresponding entity. That's how we
end up in the invalid state.

## Solution

I see two possible solutions
1. Flush after every spawn
2. Defer the whole code snippet above

I don't know enough about bevy as a whole but 2. seems much more
efficient to me. This is what I'm proposing here. I have a doubt though
because I've started to look at bevyengine#19348 that 1. would fix as well.

## Testing

I added a test for the issue. I've put it in `relationship/mod.rs` but I
could see it in `world/spawn_batch.rs` or `lib.rs` because the test is
as much about `spawn_batch` as it is about relationships.
# Objective

- A step towards bevyengine#19024.
- `AnimationGraph` can serialize raw `AssetId`s. However for normal
handles, this is a runtime ID. This means it is unlikely that the
`AssetId` will correspond to the same asset after deserializing -
effectively breaking the graph.

## Solution

- Stop allowing `AssetId` to be serialized by `AnimationGraph`.
Serializing a handle with no path is now an error.
- Add `MigrationSerializedAnimationClip`. This is an untagged enum for
serde, meaning that it will take the first variant that deserializes. So
it will first try the "modern" version, then it will fallback to the
legacy version.
- Add some logging/error messages to explain what users should do.

Note: one limitation here is that this removes the ability to serialize
and deserialize UUIDs. In theory, someone could be using this to have a
"default" animation. If someone inserts an empty `AnimationClip` into
the `Handle::default()`, this **might** produce a T-pose. It might also
do nothing though. Unclear! I think this is worth the risk for
simplicity as it seems unlikely that people are sticking UUIDs in here
(or that you want a default animation in **any** AnimationGraph).

## Testing

- Ran `cargo r --example animation_graph -- --save` on main, then ran
`cargo r --example animation_graph` on this PR. The PR was able to load
the old data (after bevyengine#19631).
…weak handles. (bevyengine#19634)

# Objective

- A step towards bevyengine#19024.
- The logic here was kinda complex before.

## Solution

- I've restructured the logic here while preserving the behavior (as far
as I can tell).
- We no longer return the handle if it was passed in. The caller should
already have access to it, and the returned handle will be a weak
handle, not a strong handle (which can cause issues). This prevents us
from needing weak handles at all here.
- I verified the callers do not need the return value. The only callsite
that needs the returned handle does not pass in the input_handle
argument.

## Testing

- CI
# Objective

Fixes sprite picking when using a viewport. Related to bevyengine#19744.

## Solution

- Do not substract `viewport.min` as `Camera::viewport_to_world` already
does that.
- Skip pointers outside the viewport.

## Testing

Tested with the following example:

<details>
<summary>Click to expand code</summary>

```rust
use bevy::{
    prelude::*, render::camera::Viewport, window::SystemCursorIcon, winit::cursor::CursorIcon,
};

fn main() -> AppExit {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_systems(Startup, setup)
        .insert_resource(ClearColor(Color::BLACK))
        .run()
}

fn setup(mut commands: Commands, window: Single<&Window>) {
    commands.spawn((
        Camera2d,
        Camera {
            clear_color: ClearColorConfig::Custom(Color::WHITE),
            viewport: Some(Viewport {
                physical_position: UVec2::new(
                    window.physical_width() / 4,
                    window.physical_height() / 4,
                ),
                physical_size: UVec2::new(
                    window.physical_width() / 2,
                    window.physical_height() / 2,
                ),
                ..default()
            }),
            ..default()
        },
    ));

    commands
        .spawn((
            Transform::from_xyz(100.0, 100.0, 0.0),
            Sprite::from_color(Color::srgb(0.0, 1.0, 0.0), Vec2::new(200.0, 200.0)),
            Pickable::default(),
        ))
        .observe(
            |trigger: On<Pointer<Drag>>, mut transform: Query<&mut Transform>| {
                let mut transform = transform.get_mut(trigger.target()).unwrap();
                transform.translation.x += trigger.delta.x;
                transform.translation.y -= trigger.delta.y;
            },
        )
        .observe(
            |_: On<Pointer<DragStart>>,
             window: Single<Entity, With<Window>>,
             mut commands: Commands| {
                commands
                    .entity(*window)
                    .insert(CursorIcon::from(SystemCursorIcon::Grabbing));
            },
        )
        .observe(
            |_: On<Pointer<DragEnd>>,
             window: Single<Entity, With<Window>>,
             mut commands: Commands| {
                commands.entity(*window).remove::<CursorIcon>();
            },
        );
}
```
</details>
# Objective

Fixes bevyengine#19692 

## Solution

- Skip pointers outside the viewport.

## Testing

Tested with the following example:

<details>
<summary>Click to expand code</summary>

```rust
use bevy::{
    prelude::*, render::camera::Viewport, window::SystemCursorIcon, winit::cursor::CursorIcon,
};

fn main() -> AppExit {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_systems(Startup, setup)
        .insert_resource(ClearColor(Color::BLACK))
        .run()
}

fn setup(mut commands: Commands, window: Single<&Window>) {
    //
    commands.spawn((
        Camera2d,
        Camera {
            clear_color: ClearColorConfig::Custom(Color::WHITE),
            viewport: Some(Viewport {
                physical_position: UVec2::new(
                    window.physical_width() / 4,
                    window.physical_height() / 4,
                ),
                physical_size: UVec2::new(
                    window.physical_width() / 2,
                    window.physical_height() / 2,
                ),
                ..default()
            }),
            ..default()
        },
    ));

    commands
        .spawn((
            Node {
                top: Val::Px(100.0),
                left: Val::Px(100.0),
                width: Val::Px(200.0),
                height: Val::Px(200.0),
                ..default()
            },
            BackgroundColor(Color::srgb(1.0, 0.0, 0.0)),
        ))
        .observe(|trigger: On<Pointer<Drag>>, mut node: Query<&mut Node>| {
            let mut node = node.get_mut(trigger.target()).unwrap();
            node.left = Val::Px(px(node.left) + trigger.delta.x);
            node.top = Val::Px(px(node.top) + trigger.delta.y);
        })
        .observe(
            |_: On<Pointer<DragStart>>,
             window: Single<Entity, With<Window>>,
             mut commands: Commands| {
                commands
                    .entity(*window)
                    .insert(CursorIcon::from(SystemCursorIcon::Grabbing));
            },
        )
        .observe(
            |_: On<Pointer<DragEnd>>,
             window: Single<Entity, With<Window>>,
             mut commands: Commands| {
                commands.entity(*window).remove::<CursorIcon>();
            },
        );
}

fn px(val: Val) -> f32 {
    match val {
        Val::Px(px) => px,
        _ => 0.0,
    }
}
```
</details>

## Additional information

This is at least also broken on the sprite picking backend. I guess the
fix for other backends are also trivial if this is correct.
(Sprite picking: bevyengine#19747)
# Objective

- Splitted off from bevyengine#19491
- Add some benchmarks for spawning and inserting components. Right now
these are pretty short, but it's expected that they will be extended
when different kinds of dynamic bundles will be implemented.
# Objective

Contributes to bevyengine#18238 
Updates the `log_layers_ecs`, example to use the `children!` macro.

Note that I did not use a macro, nor `Children::spawn` for the outer
layer. Since the `EventReader` is borrowed mutably, any `.map` I did on
`events.read()` was going to have the reference outlive the function
body. I believe this scope of change is correct for the PR.

## Solution

Updates examples to use the Improved Spawning API merged in
bevyengine#17521

## Testing

- Did you test these changes? If so, how?
- Opened the examples before and after and verified the same behavior
was observed. I did this on Ubuntu 24.04.2 LTS using `--features
wayland`.
- Are there any parts that need more testing?
- Other OS's and features can't hurt, but this is such a small change it
shouldn't be a problem.
- How can other people (reviewers) test your changes? Is there anything
specific they need to know?
  - Run the examples yourself with and without these changes.
- If relevant, what platforms did you test these changes on, and are
there any important ones you can't test?
  - see above

---

## Showcase

n/a

## Migration Guide

n/a

Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
# Objective

- That node has a bunch of query items that are mostly ignored in a few
places
- Previously this lead to having a long chain of ignored params that was
replaced with `..,`. This works, but this seems a bit more likely to
break in a subtle way if new parameters are added

## Solution

- Split the query in a few groups based on how it was already structured
(Mandatory, Optional, Has<T>)

## Testing

- None, it's just code style changes
# Objective

I was lurking and noticed that some links to the Bevy website were not
updated in newer code (`bevyengine.org` -> `bevy.org`).

## Solution

- Look for `bevyengine.org` occurrences in the current code, replace
them with `bevy.org`.

## Testing

- Did you test these changes? If so, how? I visited the Bevy website!
- Are there any parts that need more testing?
- How can other people (reviewers) test your changes? Is there anything
specific they need to know?
- If relevant, what platforms did you test these changes on, and are
there any important ones you can't test?

## Longer term

- Maybe add a lint to flag references to the old website but I don't
know how to do that. But not sure it's needed as the more time will pass
the less it will be relevant.
…vyengine#19875)

# Objective

`#[derive(Reflect)]` derives `Typed` impls whose `type_info` methods
contain useless calls to `with_custom_attributes` and `with_docs`, e.g.:
```
::bevy::reflect::NamedField::new::<f32>("x")
    .with_custom_attributes(
        ::bevy::reflect::attributes::CustomAttributes::default()
    )
    .with_docs(::core::option::Option::None),
```
This hurts compile times and makes the `cargo expand` output harder to
read. It might also hurt runtime speed, depending on whether the
compiler can optimize away the no-op methods.

Avoiding this will help with bevyengine#19873.

## Solution

Check if the attributes/docs are empty before appending the method
calls.

## Testing

I used `cargo expand` to confirm the useless calls are no longer
produced.

`-Zmacro-stats` outputs tells me this reduces the size of the `Reflect`
impls produced for `bevy_ui` from 1_544_696 bytes to 1_511_214 bytes, a
2.2% drop. Only a small improvement, but it's a start.
…ine#19876)

# Objective

Most of the impls derived for `#[derive(Reflect)]` have one set of type
bounds per field, like so:
```
        f32: ::bevy::reflect::FromReflect
            + ::bevy::reflect::TypePath
            + ::bevy::reflect::MaybeTyped
            + ::bevy::reflect::__macro_exports::RegisterForReflection,
```
If multiple fields have the same type, the bounds are repeated
uselessly. This can only hurt compile time and clogs up the `cargo
expand` output.

Avoiding this will help with
bevyengine#19873.

## Solution

Use a hashset when collecting the bounds to eliminate duplicates.

## Testing

I used cargo expand to confirm the duplicate bounds are no longer
produced.

`-Zmacro-stats` outputs tells me this reduces the size of the `Reflect`
code produced for `bevy_ui` from 1_544_696 bytes to 1_467_967 bytes, a
5% drop.
Bumps
[cargo-bins/cargo-binstall](https://github.com/cargo-bins/cargo-binstall)
from 1.12.5 to 1.14.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/cargo-bins/cargo-binstall/releases">cargo-bins/cargo-binstall's
releases</a>.</em></p>
<blockquote>
<h2>v1.14.1</h2>
<p><em>Binstall is a tool to fetch and install Rust-based executables as
binaries. It aims to be a drop-in replacement for <code>cargo
install</code> in most cases. Install it today with <code>cargo install
cargo-binstall</code>, from the binaries below, or if you already have
it, upgrade with <code>cargo binstall cargo-binstall</code>.</em></p>
<h4>In this release:</h4>
<ul>
<li>Upgrade dependencies</li>
</ul>
<h2>v1.14.0</h2>
<p><em>Binstall is a tool to fetch and install Rust-based executables as
binaries. It aims to be a drop-in replacement for <code>cargo
install</code> in most cases. Install it today with <code>cargo install
cargo-binstall</code>, from the binaries below, or if you already have
it, upgrade with <code>cargo binstall cargo-binstall</code>.</em></p>
<h4>In this release:</h4>
<ul>
<li>Fix glibc detection on arm Fedora (<a
href="https://redirect.github.com/cargo-bins/cargo-binstall/issues/2205">#2205</a>)</li>
<li>Add support for repository host Codeberg (<a
href="https://redirect.github.com/cargo-bins/cargo-binstall/issues/2202">#2202</a>)</li>
<li>Fix error for missing binaries when <code>--bin</code> does not
include any of these missing bins (<a
href="https://redirect.github.com/cargo-bins/cargo-binstall/issues/1888">#1888</a>
<a
href="https://redirect.github.com/cargo-bins/cargo-binstall/issues/2199">#2199</a>)</li>
</ul>
<h4>Other changes:</h4>
<ul>
<li>Rm uninstalled crates from
<code>$CARGO_HOME/binstall/crates-v1.json</code> (<a
href="https://redirect.github.com/cargo-bins/cargo-binstall/issues/2197">#2197</a>)</li>
<li>Upgrade dependencies</li>
</ul>
<h2>v1.13.0</h2>
<p><em>Binstall is a tool to fetch and install Rust-based executables as
binaries. It aims to be a drop-in replacement for <code>cargo
install</code> in most cases. Install it today with <code>cargo install
cargo-binstall</code>, from the binaries below, or if you already have
it, upgrade with <code>cargo binstall cargo-binstall</code>.</em></p>
<h4>In this release:</h4>
<ul>
<li>Add a <code>--bin</code> argument to mirror cargo install
<code>--bin</code> (<a
href="https://redirect.github.com/cargo-bins/cargo-binstall/issues/1961">#1961</a>
<a
href="https://redirect.github.com/cargo-bins/cargo-binstall/issues/2189">#2189</a>)</li>
</ul>
<h4>Other changes:</h4>
<ul>
<li>Upgrade dependencies</li>
</ul>
<h2>v1.12.7</h2>
<p><em>Binstall is a tool to fetch and install Rust-based executables as
binaries. It aims to be a drop-in replacement for <code>cargo
install</code> in most cases. Install it today with <code>cargo install
cargo-binstall</code>, from the binaries below, or if you already have
it, upgrade with <code>cargo binstall cargo-binstall</code>.</em></p>
<h4>In this release:</h4>
<ul>
<li>Fix updating installed crates manifest for custom registry (<a
href="https://redirect.github.com/cargo-bins/cargo-binstall/issues/2175">#2175</a>
<a
href="https://redirect.github.com/cargo-bins/cargo-binstall/issues/2178">#2178</a>)</li>
</ul>
<h4>Other changes:</h4>
<ul>
<li>Upgrade transitive dependencies</li>
<li>Ensure build script always waits for threads created (<a
href="https://redirect.github.com/cargo-bins/cargo-binstall/issues/2185">#2185</a>)</li>
<li>optimization</li>
</ul>
<h2>v1.12.6</h2>
<p><em>Binstall is a tool to fetch and install Rust-based executables as
binaries. It aims to be a drop-in replacement for <code>cargo
install</code> in most cases. Install it today with <code>cargo install
cargo-binstall</code>, from the binaries below, or if you already have
it, upgrade with <code>cargo binstall cargo-binstall</code>.</em></p>
<h4>In this release:</h4>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/cargo-bins/cargo-binstall/commit/8aac5aa2bf0dfaa2863eccad9f43c68fe40e5ec8"><code>8aac5aa</code></a>
release: cargo-binstall v1.14.1 (<a
href="https://redirect.github.com/cargo-bins/cargo-binstall/issues/2211">#2211</a>)</li>
<li><a
href="https://github.com/cargo-bins/cargo-binstall/commit/e5b77406bb70971183d2bc62dd243348b7b82e37"><code>e5b7740</code></a>
chore: release (<a
href="https://redirect.github.com/cargo-bins/cargo-binstall/issues/2210">#2210</a>)</li>
<li><a
href="https://github.com/cargo-bins/cargo-binstall/commit/fe1c5ab94f6fa5abca7bb24639fa392523efb52b"><code>fe1c5ab</code></a>
dep: Upgrade transitive dependencies (<a
href="https://redirect.github.com/cargo-bins/cargo-binstall/issues/2209">#2209</a>)</li>
<li><a
href="https://github.com/cargo-bins/cargo-binstall/commit/151e1ec8c4e4c99f72e3f1be7ad0c7fcda0f5d62"><code>151e1ec</code></a>
ci: enable cache-workspace-crates (<a
href="https://redirect.github.com/cargo-bins/cargo-binstall/issues/2208">#2208</a>)</li>
<li><a
href="https://github.com/cargo-bins/cargo-binstall/commit/abb695a27627ea9a75c0ef93a132551f16685853"><code>abb695a</code></a>
build(deps): bump tj-actions/changed-files from
4140eb99d2cced9bfd78375c20883...</li>
<li><a
href="https://github.com/cargo-bins/cargo-binstall/commit/a1ca1a46abf7b8edeca998dc0d610449d4515709"><code>a1ca1a4</code></a>
dep: Replace vergen with vergen-gitcl (<a
href="https://redirect.github.com/cargo-bins/cargo-binstall/issues/2207">#2207</a>)</li>
<li><a
href="https://github.com/cargo-bins/cargo-binstall/commit/f317ddf23aec11babe1465e20d02f42c39ae7753"><code>f317ddf</code></a>
release: cargo-binstall v1.14.0 (<a
href="https://redirect.github.com/cargo-bins/cargo-binstall/issues/2206">#2206</a>)</li>
<li><a
href="https://github.com/cargo-bins/cargo-binstall/commit/d47e67b0107309bc0038bd50c184448faa0d5f49"><code>d47e67b</code></a>
chore: release (<a
href="https://redirect.github.com/cargo-bins/cargo-binstall/issues/2195">#2195</a>)</li>
<li><a
href="https://github.com/cargo-bins/cargo-binstall/commit/bb9211b72ceec23a8a17d53fad34bcc36a3d2d1d"><code>bb9211b</code></a>
Fix glibc detection on Fedora (<a
href="https://redirect.github.com/cargo-bins/cargo-binstall/issues/2205">#2205</a>)</li>
<li><a
href="https://github.com/cargo-bins/cargo-binstall/commit/a90dd4569f858e438f8234fd24289093943dbd5a"><code>a90dd45</code></a>
feat: Add repository host Codeberg (<a
href="https://redirect.github.com/cargo-bins/cargo-binstall/issues/2202">#2202</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/cargo-bins/cargo-binstall/compare/v1.12.5...v1.14.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cargo-bins/cargo-binstall&package-manager=github_actions&previous-version=1.12.5&new-version=1.14.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: François Mockers <francois.mockers@vleue.com>
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
# Objective

- This example uses a FromWorld impl to initialize a resource on startup
- bevyengine#19887

## Solution

- Use RenderStartup instead

## Testing

- The example still works as expected
# Objective

- The MaterialPlugin has some ugly code to initialize some data in the
render world
- bevyengine#19887

## Solution

- Use the new RenderStartup schedule to use a system instead of using
the plugin `finish()`

## Testing

- Tested that the 3d_scene and shader_material example still work as
expected
Currently, our specialization API works through a series of wrapper
structs and traits, which make things confusing to follow and difficult
to generalize.

This pr takes a different approach, where "specializers" (types that
implement `Specialize`) are composable, but "flat" rather than composed
of a series of wrappers. The key is that specializers don't *produce*
pipeline descriptors, but instead *modify* existing ones:

```rs
pub trait Specialize<T: Specializable> {
    type Key: SpecializeKey;
    
    fn specialize(
        &self, 
        key: Self::Key, 
        descriptor: &mut T::Descriptor
    ) -> Result<Canonical<Self::Key>, BevyError>;
}
```

This lets us use some derive magic to stick multiple specializers
together:

```rs
pub struct A;
pub struct B;

impl Specialize<RenderPipeline> for A { ... }
impl Specialize<RenderPipeline> for A { ... }

#[derive(Specialize)]
#[specialize(RenderPipeline)]
struct C {
    // specialization is applied in struct field order
    applied_first: A,
    applied_second: B,
}

type C::Key = (A::Key, B::Key);

```

This approach is much easier to understand, IMO, and also lets us
separate concerns better. Specializers can be placed in fully separate
crates/modules, and key computation can be shared as well.

The only real breaking change here is that since specializers only
modify descriptors, we need a "base" descriptor to work off of. This can
either be manually supplied when constructing a `Specializer` (the new
collection replacing `Specialized[Render/Compute]Pipelines`), or
supplied by implementing `HasBaseDescriptor` on a specializer. See
`examples/shader/custom_phase_item.rs` for an example implementation.

## Testing

- Did some simple manual testing of the derive macro, it seems robust.

---

## Showcase

```rs
#[derive(Specialize, HasBaseDescriptor)]
#[specialize(RenderPipeline)]
pub struct SpecializeMeshMaterial<M: Material> {
    // set mesh bind group layout and shader defs
    mesh: SpecializeMesh,
    // set view bind group layout and shader defs
    view: SpecializeView,
    // since type SpecializeMaterial::Key = (), 
    // we can hide it from the wrapper's external API
    #[key(default)]
    // defer to the GetBaseDescriptor impl of SpecializeMaterial, 
    // since it carries the vertex and fragment handles
    #[base_descriptor]
    // set material bind group layout, etc
    material: SpecializeMaterial<M>,
}

// implementation generated by the derive macro
impl <M: Material> Specialize<RenderPipeline> for SpecializeMeshMaterial<M> {
    type Key = (MeshKey, ViewKey);

    fn specialize(
        &self, 
        key: Self::Key, 
        descriptor: &mut RenderPipelineDescriptor
    ) -> Result<Canonical<Self::Key>, BevyError>  {
        let mesh_key = self.mesh.specialize(key.0, descriptor)?;
        let view_key = self.view.specialize(key.1, descriptor)?;
        let _ = self.material.specialize((), descriptor)?;
        Ok((mesh_key, view_key));
    }
}

impl <M: Material> HasBaseDescriptor<RenderPipeline> for SpecializeMeshMaterial<M> {
    fn base_descriptor(&self) -> RenderPipelineDescriptor {
        self.material.base_descriptor()
    }
}
```

---------

Co-authored-by: Tim Overbeek <158390905+Bleachfuel@users.noreply.github.com>
# Objective
The `EntityEvent` derive macro only parsed the first `entity_event`
attr, resulting in the following event having auto propagation silently
turned off:
```rust
#[derive(Event, EntityEvent)]
#[entity_event(traversal = &'static ChildOf)]
#[entity_event(auto_propagate)]
struct MyEvent;
```

This should either fail to compile or be parsed correctly.

## Solution

Parse all `entity_event`.

## Testing

Cargo expand the snippet above. I haven't added an extra test for this.
…e#19855)

# Objective

Because we want to be able to support more notification options in the
future (in addition to just using registered one-shot systems), the
`Option<SystemId>` notifications have been changed to a new enum,
`Callback`.

@alice-i-cecile
…gine#19867)

# Objective

- This plugin currently does nothing. That's because we add the plugin
to the `RenderApp`. Inside the plugin it then looks for the `RenderApp`
itself, but since it was added **to** the `RenderApp`, it will never
find the `RenderApp`.

## Solution

- Move the plugin into build, and more importantly, add it to the app
not the render_app.
bevyengine#19890)

Previously, the specialize/queue systems were added per-material and the
plugin prepass/shadow enable flags controlled whether we added those
systems. Now, we make this a property of the material instance and check
for it when specializing. Fixes
bevyengine#19850.
dependabot bot and others added 27 commits July 21, 2025 17:17
Bumps
[super-linter/super-linter](https://github.com/super-linter/super-linter)
from 7.4.0 to 8.0.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/super-linter/super-linter/releases">super-linter/super-linter's
releases</a>.</em></p>
<blockquote>
<h2>v8.0.0</h2>
<h2><a
href="https://github.com/super-linter/super-linter/compare/v7.4.0...v8.0.0">8.0.0</a>
(2025-07-17)</h2>
<h3>⚠ BREAKING CHANGES</h3>
<ul>
<li>migrate to the latest eslint configuration (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6814">#6814</a>)</li>
<li>remove unmaintained node packages (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6848">#6848</a>)</li>
<li>remove unmaintained linters and formatters (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6773">#6773</a>)</li>
</ul>
<h3>🚀 Features</h3>
<ul>
<li>add options to the prettier command (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6882">#6882</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/aeb043e06fe6cbb1702bf57e75dafc40b26b6c0d">aeb043e</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6772">#6772</a></li>
<li>add vue files linting support (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6800">#6800</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/597b1952cdc4e9e89fe3093e782a8596935a22a2">597b195</a>)</li>
<li>migrate to the latest eslint configuration (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6814">#6814</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/0d8f7aad449c1dc8ecaf2362684de5d379d2cd7d">0d8f7aa</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6405">#6405</a></li>
<li>remove unmaintained linters and formatters (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6773">#6773</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/4e80084b0c06e7cd178aa879d3a3cde965b73d65">4e80084</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6771">#6771</a></li>
<li>support passing arguments to java (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6785">#6785</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/4099648f56a29ed2b889b6b0765c198d83c9b508">4099648</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6281">#6281</a></li>
</ul>
<h3>🐛 Bugfixes</h3>
<ul>
<li>exclude files matching default branch ones (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6801">#6801</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/26efde18b393f7820fcd1a618f21ae205362a687">26efde1</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6798">#6798</a></li>
<li>use the current name for space after tabs (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6866">#6866</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/bb9538964e4d0f91418fcb8423fd3901b3bd5e94">bb95389</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6829">#6829</a></li>
</ul>
<h3>⬆️ Dependency updates</h3>
<ul>
<li><strong>bundler:</strong> bump rubocop in /dependencies in the
rubocop group (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6875">#6875</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/e0f760c874fd64dc38eaa1cb628d169267c59bae">e0f760c</a>)</li>
<li><strong>bundler:</strong> bump the rubocop group across 1 directory
with 4 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6820">#6820</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/4cabfd657310aa37806368c500b16df43ded01f2">4cabfd6</a>)</li>
<li><strong>docker:</strong> bump the docker group across 1 directory
with 16 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6864">#6864</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/1879b46afce189362ad060b6fa66184d6094a672">1879b46</a>)</li>
<li><strong>java:</strong> bump the java-gradle group across 2
directories with 2 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6810">#6810</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/b900e08c7ef98640db1d62399bde05f6c237a93e">b900e08</a>)</li>
<li><strong>java:</strong> bump the java-gradle group across 2
directories with 2 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6880">#6880</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/4d267db3b1855f53472086a5b0222fbbb70ff0b2">4d267db</a>)</li>
<li><strong>npm:</strong> bump <code>@​babel/eslint-parser</code> in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6865">#6865</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/5a39b53ef576e2eeaf3f850d041e4c25e8e09fb5">5a39b53</a>)</li>
<li><strong>npm:</strong> bump
<code>@​typescript-eslint/eslint-plugin</code> (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6872">#6872</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/4099a2f87daa168ab43b0cb1a619253260b4feb0">4099a2f</a>)</li>
<li><strong>npm:</strong> bump asl-validator from 3.15.0 to 4.0.0 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6845">#6845</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/27e1d3b97be6df3ba9402355f4b17448db4580bf">27e1d3b</a>)</li>
<li><strong>npm:</strong> bump eslint from 9.29.0 to 9.31.0 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6878">#6878</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/c1b79c24e67e9b2d43598abfeaeba9df9df39c15">c1b79c2</a>)</li>
<li><strong>npm:</strong> bump markdownlint-cli from 0.44.0 to 0.45.0 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6796">#6796</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/cbafd4a64a6624d14043bc5714a38a4d991b8c84">cbafd4a</a>)</li>
<li><strong>npm:</strong> bump next (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6869">#6869</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/a0f6e7dc540772fbafb53657c4bc7acfb0933fdb">a0f6e7d</a>)</li>
<li><strong>npm:</strong> bump prettier from 3.5.3 to 3.6.2 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6857">#6857</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/53ab6bbb94bcdeca203858c646b88fa6e8f77576">53ab6bb</a>)</li>
<li><strong>npm:</strong> bump react-router-dom (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6871">#6871</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/4258001721a0f0e88d9b9fee849ba5e2341471ee">4258001</a>)</li>
<li><strong>npm:</strong> bump renovate from 40.11.8 to 40.28.0 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6807">#6807</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/66b6cb3802422e5c67588a7983dae41b518cf91c">66b6cb3</a>)</li>
<li><strong>npm:</strong> bump renovate from 40.62.1 to 41.32.2 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6876">#6876</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/b67cd445cfc4481e467de52bc247b655b32f7dce">b67cd44</a>)</li>
<li><strong>npm:</strong> bump stylelint (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6867">#6867</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/9572e8f1315da054fa080b9ed9e2c2ccae8033fe">9572e8f</a>)</li>
<li><strong>npm:</strong> bump textlint (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6868">#6868</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/05919fdf12f18417de9530d2202bce606adf957d">05919fd</a>)</li>
<li><strong>npm:</strong> bump textlint-rule-terminology (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6877">#6877</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/e2ac8dda85363bdcadd01804c4df2fc99bcb4cbb">e2ac8dd</a>)</li>
<li><strong>npm:</strong> bump the eslint-plugins-configs group across 1
directory with 4 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6870">#6870</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/301a807afb529c0747fbc8ab6579b39b02fa54a5">301a807</a>)</li>
<li><strong>python:</strong> bump the pip group across 1 directory with
4 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6879">#6879</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/8735a57c588de6753da6212598529e7462d49d18">8735a57</a>)</li>
<li><strong>python:</strong> bump the pip group across 1 directory with
6 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6851">#6851</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/a659e7d47bb881934a51f9c21332315a7bde591d">a659e7d</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md">super-linter/super-linter's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/super-linter/super-linter/compare/v7.4.0...v8.0.0">8.0.0</a>
(2025-07-17)</h2>
<h3>⚠ BREAKING CHANGES</h3>
<ul>
<li>migrate to the latest eslint configuration (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6814">#6814</a>)</li>
<li>remove unmaintained node packages (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6848">#6848</a>)</li>
<li>remove unmaintained linters and formatters (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6773">#6773</a>)</li>
</ul>
<h3>🚀 Features</h3>
<ul>
<li>add options to the prettier command (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6882">#6882</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/aeb043e06fe6cbb1702bf57e75dafc40b26b6c0d">aeb043e</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6772">#6772</a></li>
<li>add vue files linting support (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6800">#6800</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/597b1952cdc4e9e89fe3093e782a8596935a22a2">597b195</a>)</li>
<li>migrate to the latest eslint configuration (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6814">#6814</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/0d8f7aad449c1dc8ecaf2362684de5d379d2cd7d">0d8f7aa</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6405">#6405</a></li>
<li>remove unmaintained linters and formatters (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6773">#6773</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/4e80084b0c06e7cd178aa879d3a3cde965b73d65">4e80084</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6771">#6771</a></li>
<li>support passing arguments to java (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6785">#6785</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/4099648f56a29ed2b889b6b0765c198d83c9b508">4099648</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6281">#6281</a></li>
</ul>
<h3>🐛 Bugfixes</h3>
<ul>
<li>exclude files matching default branch ones (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6801">#6801</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/26efde18b393f7820fcd1a618f21ae205362a687">26efde1</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6798">#6798</a></li>
<li>use the current name for space after tabs (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6866">#6866</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/bb9538964e4d0f91418fcb8423fd3901b3bd5e94">bb95389</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/6829">#6829</a></li>
</ul>
<h3>⬆️ Dependency updates</h3>
<ul>
<li><strong>bundler:</strong> bump rubocop in /dependencies in the
rubocop group (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6875">#6875</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/e0f760c874fd64dc38eaa1cb628d169267c59bae">e0f760c</a>)</li>
<li><strong>bundler:</strong> bump the rubocop group across 1 directory
with 4 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6820">#6820</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/4cabfd657310aa37806368c500b16df43ded01f2">4cabfd6</a>)</li>
<li><strong>docker:</strong> bump the docker group across 1 directory
with 16 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6864">#6864</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/1879b46afce189362ad060b6fa66184d6094a672">1879b46</a>)</li>
<li><strong>java:</strong> bump the java-gradle group across 2
directories with 2 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6810">#6810</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/b900e08c7ef98640db1d62399bde05f6c237a93e">b900e08</a>)</li>
<li><strong>java:</strong> bump the java-gradle group across 2
directories with 2 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6880">#6880</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/4d267db3b1855f53472086a5b0222fbbb70ff0b2">4d267db</a>)</li>
<li><strong>npm:</strong> bump <code>@​babel/eslint-parser</code> in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6865">#6865</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/5a39b53ef576e2eeaf3f850d041e4c25e8e09fb5">5a39b53</a>)</li>
<li><strong>npm:</strong> bump
<code>@​typescript-eslint/eslint-plugin</code> (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6872">#6872</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/4099a2f87daa168ab43b0cb1a619253260b4feb0">4099a2f</a>)</li>
<li><strong>npm:</strong> bump asl-validator from 3.15.0 to 4.0.0 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6845">#6845</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/27e1d3b97be6df3ba9402355f4b17448db4580bf">27e1d3b</a>)</li>
<li><strong>npm:</strong> bump eslint from 9.29.0 to 9.31.0 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6878">#6878</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/c1b79c24e67e9b2d43598abfeaeba9df9df39c15">c1b79c2</a>)</li>
<li><strong>npm:</strong> bump markdownlint-cli from 0.44.0 to 0.45.0 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6796">#6796</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/cbafd4a64a6624d14043bc5714a38a4d991b8c84">cbafd4a</a>)</li>
<li><strong>npm:</strong> bump next (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6869">#6869</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/a0f6e7dc540772fbafb53657c4bc7acfb0933fdb">a0f6e7d</a>)</li>
<li><strong>npm:</strong> bump prettier from 3.5.3 to 3.6.2 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6857">#6857</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/53ab6bbb94bcdeca203858c646b88fa6e8f77576">53ab6bb</a>)</li>
<li><strong>npm:</strong> bump react-router-dom (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6871">#6871</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/4258001721a0f0e88d9b9fee849ba5e2341471ee">4258001</a>)</li>
<li><strong>npm:</strong> bump renovate from 40.11.8 to 40.28.0 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6807">#6807</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/66b6cb3802422e5c67588a7983dae41b518cf91c">66b6cb3</a>)</li>
<li><strong>npm:</strong> bump renovate from 40.62.1 to 41.32.2 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6876">#6876</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/b67cd445cfc4481e467de52bc247b655b32f7dce">b67cd44</a>)</li>
<li><strong>npm:</strong> bump stylelint (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6867">#6867</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/9572e8f1315da054fa080b9ed9e2c2ccae8033fe">9572e8f</a>)</li>
<li><strong>npm:</strong> bump textlint (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6868">#6868</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/05919fdf12f18417de9530d2202bce606adf957d">05919fd</a>)</li>
<li><strong>npm:</strong> bump textlint-rule-terminology (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6877">#6877</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/e2ac8dda85363bdcadd01804c4df2fc99bcb4cbb">e2ac8dd</a>)</li>
<li><strong>npm:</strong> bump the eslint-plugins-configs group across 1
directory with 4 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6870">#6870</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/301a807afb529c0747fbc8ab6579b39b02fa54a5">301a807</a>)</li>
<li><strong>python:</strong> bump the pip group across 1 directory with
4 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6879">#6879</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/8735a57c588de6753da6212598529e7462d49d18">8735a57</a>)</li>
<li><strong>python:</strong> bump the pip group across 1 directory with
6 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6851">#6851</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/a659e7d47bb881934a51f9c21332315a7bde591d">a659e7d</a>)</li>
</ul>
<h3>🧰 Maintenance</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/super-linter/super-linter/commit/5119dcd8011e92182ce8219d9e9efc82f16fddb6"><code>5119dcd</code></a>
chore(main): release 8.0.0 (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6786">#6786</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/b67cd445cfc4481e467de52bc247b655b32f7dce"><code>b67cd44</code></a>
deps(npm): bump renovate from 40.62.1 to 41.32.2 in /dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6876">#6876</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/53ab6bbb94bcdeca203858c646b88fa6e8f77576"><code>53ab6bb</code></a>
deps(npm): bump prettier from 3.5.3 to 3.6.2 in /dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6857">#6857</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/aeb043e06fe6cbb1702bf57e75dafc40b26b6c0d"><code>aeb043e</code></a>
feat: add options to the prettier command (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6882">#6882</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/e2ac8dda85363bdcadd01804c4df2fc99bcb4cbb"><code>e2ac8dd</code></a>
deps(npm): bump textlint-rule-terminology (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6877">#6877</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/e0f760c874fd64dc38eaa1cb628d169267c59bae"><code>e0f760c</code></a>
deps(bundler): bump rubocop in /dependencies in the rubocop group (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6875">#6875</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/c1b79c24e67e9b2d43598abfeaeba9df9df39c15"><code>c1b79c2</code></a>
deps(npm): bump eslint from 9.29.0 to 9.31.0 in /dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6878">#6878</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/8735a57c588de6753da6212598529e7462d49d18"><code>8735a57</code></a>
deps(python): bump the pip group across 1 directory with 4 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6879">#6879</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/4d267db3b1855f53472086a5b0222fbbb70ff0b2"><code>4d267db</code></a>
deps(java): bump the java-gradle group across 2 directories with 2
updates (#...</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/f7855fe64db599395ee7c9a57ee52e9e72ed4163"><code>f7855fe</code></a>
ci(dev-docker): bump node in /dev-dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/6881">#6881</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/super-linter/super-linter/compare/v7.4.0...v8.0.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=super-linter/super-linter&package-manager=github_actions&previous-version=7.4.0&new-version=8.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
# Objective

- Fixes bevyengine#14698

## Solution

- Refactor all the `SceneSpawner` functions to include a `_dynamic`
suffix where appropriate.
- Add non-DynamicScene versions of functions on `SceneSpawner`.
- Listen for `Scene` `AssetEvent`s and update the corresponding spawned
scenes.
- Despawn scenes before respawning them.
- Store the parent of a scene in its `InstanceInfo`, so that we know
where to parent the new entities from a hot-reloaded scene.
- Make `InstanceInfo` private (none of our APIs returned it anyway).

## Testing

- Ran the `hot_asset_reloading` example and mutated the GLTF to see it
be updated. It works! Moving around meshes works in Blender works,
deleting meshes also seems to work.
- Wrote a test for scene and dynamic scene to ensure they continue to
hot-reload.

---

## Migration Guide

- Some of the methods on `SceneSpawner` have been renamed:
    - `despawn` -> `despawn_dynamic`
    - `despawn_sync` -> `despawn_dynamic_sync`
    - `update_spawned_scenes` -> `update_spawned_dynamic_scenes`
- In their place, we've also added `despawn`, `despawn_sync`, and
`update_spawned_scenes` which all act on `Scene`s (as opposed to
`DynamicScene`s).
# Objective

* The `get_ui_graph` function in bevy_ui's render module is misnamed. It
doesn't get the graph, it creates a new one.
* `get_ui_graph` shouldn't be called until after we've retrieved each
subgraph, otherwise the new UI graph is created for nothing.


## Solution

* Rename `get_ui_graph` to `new_ui_graph`
* Call `new_ui_graph` only after each subgraph is successful retrieved
from the render graph.
…(remade) (bevyengine#19046)

# Objective

Reopens bevyengine#18961

## Solution

Copy the code

## Testing

It worked in the previous pull request

## Showcase

See bevyengine#18961

---------

Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
…ine#17209)

# Objective

Fixes bevyengine#7358
Redo of bevyengine#7360

Ergonomics. There's a bunch of enigmatic boilerplate for constructing a
texture for rendering to, which could be greatly simplified for the
external user-facing API.

## Solution

- Take part of the render_to_target example and turn it into a new
constructor for `Image`, with minimal changes beyond the `Default`
implementation.
- Update the render_to_target example to use the new API.

Strictly speaking, there are two small differences between the
constructor and the example:

~~1. The example sets the `size` when initially constructing the
`Image`, then `resize`s, but `resize` sets the `size` anyway so we don't
need to do this extra step.~~

~~2. The example sets `Image.texture_descriptor.format` to
`TextureFormat::Bgra8UnormSrgb`, but the default impl sets this to
`TextureFormat::Rgba8UnormSrgb` via
`wgpu::TextureFormat::bevy_default()`. I don't know what sort of impact
this has, but it works on my machine.~~

I've deliberately chosen to only include `width` and `height` as
parameters, but maybe it makes sense for some of the other properties to
be exposed as parameters.

---

## Changelog

### Added

Added `Image::new_target_texture` constructor for simpler creation of
render target textures.

---

Notes:

- This is a re-do of bevyengine#7360 -
there's some relevant discussion on code style there.
- The docs for the method want to refer to `bevy_render::camera::Camera`
and `bevy_render::camera::RenderTarget::Image`. `bevy_image` used to be
part of `bevy_render` and was split out in the past, and `bevy_image`
doesn't depend on `bevy_render`. What's the recommendation here?

---------

Co-authored-by: Antony <antony.m.3012@gmail.com>
# Objective

- Title.

## Solution

- Add an explanation of the various traits and structs.
- Make VertexLayoutCache private - this type is not used anywhere, and
it's just a type alias for a HashMap with no other utility functions.
- Rename `specialize_pipeline` argument to `pipeline_specializer` to
clarify this is more like a factory than a render pipeline.

Technically making `VertexLayoutCache` private is a breaking change, but
it seems highly unlikely that anyone is using this (since it's just a
hashmap alias. I don't think this needs a migration guide.
…un conditions. (bevyengine#20061)

# Objective

The `ErrorContext::RunCondition` variant is never used. When reporting
errors from a run condition, `ErrorContext::System` is currently used
instead.

## Solution

Use `ErrorContext::RunCondition` variant when reporting errors from run
conditions.
# Objective

- Implement `ShapeSample for CircularSector`

## Testing

- The results can be verified visually. 

---

## Showcase
### Boundary
<img width="661" height="383" alt="Circular Sector Boundary Sampling"
src="https://github.com/user-attachments/assets/a08ee2eb-9b3d-4be1-8798-9317db337513"
/>


### Interior
<img width="665" height="386" alt="Circular Sector Interior Sampling"
src="https://github.com/user-attachments/assets/bf71ce54-e73c-414c-899d-6402c0abd9e7"
/>
…wing `Access` (bevyengine#20111)

# Objective

Improve the performance of queries using `FilteredEntityRef`,
`FilteredEntityMut`, `EntityRefExcept`, and `EntityMutExcept`. In
particular, this appears to speed up `bevy_animation::animate_targets`
by 10% in many-foxes.

`FilteredEntity(Ref|Mut)` needs to store an `Access` to determine which
components may be accessed. Prior to bevyengine#15396, this required cloning the
`Access` for each instance. Now, we can borrow the `Access` from the
query state and make cheap pointer copies.

`Entity(Ref|Mut)Except` avoided needing to clone an `Access` by calling
functions on the `Bundle` trait. Unfortunately, that meant we needed to
convert from a type to a `ComponentId` for every component in the bundle
on every check. Now, we can do those conversions up front and pass
references to an `Access`.

Finally, fix a bug where `Entity(Ref|Mut)Except` would not initialize
their components during `init_state`. I noticed this while updating
`init_state` and fixed it while I was there. That was normally harmless
because the components would be registered elsewhere, but a system like
`fn system(_q1: Query<EntityMutExcept<C>>, _q2: Query<&mut C>) {}` would
fail to find the `ComponentId` for `C` and not exclude it from the
access for `q1`, and then panic with conflicting access from `q2`.

## Solution

Change `FilteredEntityRef` and `FilteredEntityMut` to store `&'s Access`
instead of `Access`, and change `EntityRefExcept` and `EntityMutExcept`
to store an extra `&'s Access`.

This adds the `'s` lifetime to those four types, and most changes are
adding lifetimes as appropriate.

Change the `WorldQuery::State` for `Entity(Ref|Mut)Except` to store an
`Access` that can be borrowed from, replacing the
`SmallVec<[ComponentId; 4]>` that was used only to set the query access.

To support the conversions from `EntityRef` and `EntityMut`, we need to
be able to create a `&'static Access` for read-all or write-all. I could
not change `fn read_all_components()` to be `const` because it called
the non-`const` `FixedBitSet::clear()`, so I created separate
constructor functions.

## Testing

Ran `cargo run --example many_foxes --features bevy/trace_tracy
--release` before and after, and compared the results of
`animate_targets`, since that is the only in-engine use of
`EntityMutExcept` and was the motivation for creating it.

Yellow is this PR, red is main: 

<img width="695" height="690" alt="image"
src="https://github.com/user-attachments/assets/24531a3f-65bf-46d0-baa5-29ea9e56b16a"
/>
# Objective

- Getting the closest point to a line segment is a fairly simple and
useful but nontrivial operation.
- @janhohenheim recently asked if we had a built-in for a similar
problem. (Finding the distance, which afaik is best done by finding the
closest point first, from there on it's a trivial problem given our
API.)

## Solution

- So I did it.

## Testing

- Added 2 tests
# Objective

- Cache is not reused across days as we produce too much cache and it
gets cleaned by github

## Solution

- create cache from main
- reuse cache in other jobs

---------

Co-authored-by: BD103 <59022059+BD103@users.noreply.github.com>
# Objective

- Progress towards bevyengine#19887.
- This example was non-trivial to port so was done as a separate PR.

## Solution

- This situation is very weird. We are trying to get features of the
renderer back into the main world. We use an ArcMutex to communicate
between the two worlds.
- We now insert the resource into both worlds, but only with
Option::None.
- The `RenderStartup` init system initializes the resource with the
feature values populated.

This does result in a "regression" where there is a single frame where
the `update_status_text` system doesn't react properly, since it doesn't
have the features from the render world yet.

## Testing

- Ran the `occlusion_culling` example and it worked!
# Objective

- Fix bevyengine#20174

## Solution

- Avoid implementing `DerefMut` for `ComponentsRegistrator`
- To avoid potential breakage, expose the `any_queued_mut` and
`num_queued_mut` on `ComponentsRegistrator`. These are the only methods
taking `&mut self` on `Components` and for which the `DerefMut` impl
could have been useful for.
# Objective

- Progress towards bevyengine#19887.

## Solution

- Convert `FromWorld` impls to systems in `RenderStartup`.
- Add a system to conditionally add render graph edges (if a particular
node exists).

## Testing

- Ran the `ssr` example and it still works.
…#20195)

# Objective

- Progress towards bevyengine#19887.
- This migration actually caught a segfault on Linux + Vulkan + llvmpipe
software rendering driver + (maybe) `xvfb-run`
- It seems the reason for this is that we are concurrently terminating
the program (which trigger's LLVMs `atexit` handlers) while we are also
compiling pipelines in parallel. It seems LLVM code is not quite
multithread safe in this situation.
    - Thanks to @kristoff3r for figuring out this segfault!
    - I still have no idea why this PR triggers it and not others.

## Solution

Most of this is the same as all the other `RenderStartup` migrations.
- Convert FromWorld impls to RenderStartup systems.

In addition, I had to 1) enable synchronous pipeline compilation, 2)
disable pipelined rendering in the `ambiguity_detection` test. This
ensures that 1) the render thread just blocks on pipeline compilation
rather than letting it run in another thread, 2) we don't leave
`App::update` until the render thread finishes. So therefore, there
won't be any pipeline compilation happening by the time the test ends.

## Testing

- I ran the run-examples-linux-vulkan Github action many, many times and
segfaults were consistent until this PR! Now they don't seem to happen
anymore.
# Objective

- Part of bevyengine#20115

We don't actually need the `ScheduleGraph` in order to get the kind of a
node, so lets move it to our newly created trait.

## Solution

- Removed `ScheduleGraph::get_node_kind`, added `GraphNodeId::kind`
instead.
- Co-located `GraphNodeId` in the same file as
`DiGraph`/`UnGraph`/`Graph`.
- Implemented `GraphNodeId` for `SystemSetKey` for symmetry.

No migration guide needed as `get_node_kind` is a private function.

## Testing

Re-using current tests.
# Objective

As we move more stuff to entities, it's a good idea to keep these
entities quasi-private. We do not want to confuse users by having to
explain everything as being an entity.

This came out of bevyengine#19711.

## Solution

This PR introduces the concept of internal entities, entities marked by
the `Internal` component, that are filtered out by queries through
`DefaultQureyFilters` and also don't show up for
`World::entity_count()`.

## Testing

Added a test.
# Objective

- Biggest bottleneck in Solari by far is currently initial sampling for
DI
- Cache usage is really poor randomly sampling different lights

## Solution

- Implement light tiles from
https://cwyman.org/papers/hpg21_rearchitectingReSTIR.pdf
  - A new dispatch samples 128 blocks of 1024 samples each
  - Each DI workgroup randomly picks one of the 128 blocks
- Each of the 32 initial samples for a thread randomly picks from within
the 1024 samples in the block
  - This is much more cache coherent
- Refactored sampling.wgsl APIs to reduce redundant data loads,
execution divergence, and allow supporting light tiles and in the future
specular BRDFs
- Compacted LightSample and DI Reservoir struct sizes to reduce memory
usage

## Testing

- Needs some performance testing on both NVIDIA/AMD hardware. Please
upload before/after NSight/RGP captures!
# Objective

Line segments aren't meshable.

## Solution

Make line segments meshable.
…vyengine#20220)

# Objective

- the changes done in bevyengine#19303 did not end up being necessary for
bevy_camera, because i found a better split. it was still a good
refactor, but lets leave it in bevy_render

## Solution

- partially revert by moving the extracted file to bevy_render

## Testing

- it compiles
# Objective

- Fix panic when input dispatch system tries to trigger events on a
despawned focused entity
- Fixes bevyengine#20057

## Solution

- Added entity validity check in `dispatch_focused_input` function using
`entities.contains(focused_entity)`
- If the focused entity no longer exists, the focus is cleared and the
event is dispatched to the window instead

## Testing

- Added test `dispatch_clears_focus_when_focused_entity_despawned` that
reproduces the issue scenario
# Objective

- `Allows` was added as a handy tool to work with default query filters.
- It wasn't in the docs though, and I had to hunt it down while
reviewing bevyengine#20204.

## Solution

-  Add some breadcrumbs to the docs in the expected places.
# Objective

- Remove an unnecessary extra `Camera2d` from one of the examples. 

## Solution

- I removed the `commands.spawn(Camera2d)` where it was less explicit.
- Because the default camera brings a lot more thing, it is necessary to
spawn it early (remove the `.after()` call)

## Testing

I run the test, and the result was the same as without the change -
regression passed. (Win10, GTX1050TI)

Running this specific example:
```
cargo run --example sprite_scale
```

When the example starts, Gabe should run nicely.
# Objective

Make it easy to efficiently count the number of entities matching a
query.

## Solution

Implement a `Query::count()` method.  

Use `as_nop()` to skip initializing the fetch state, like we do for
`is_empty()` and `contains()`.

If the filter is archetypal, call `size_hint()` to get the count without
iterating. Otherwise, use an ordinary `count()`.
…#20234)

# Objective

- Cleanup unnecessary world.flush() calls in the Observer tests
…ne#20239)

# Objective

- the new cache action (bevyengine#20144) is currently failing on the install rust
step

## Solution

- Use the correct branch name
@andrewzhurov
Copy link
Author

@ickshonpe 👋 Hope this won't bother you much, curious of your thoughts on this async-first approach

As arboard isn't supported on that platform, resulting in compile error.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.