Skip to content

Solari6 various improvements#40

Merged
JMS55 merged 37 commits intoJMS55:solari6-variousfrom
jasmine-nominal:solari6-various-improvements
Oct 31, 2025
Merged

Solari6 various improvements#40
JMS55 merged 37 commits intoJMS55:solari6-variousfrom
jasmine-nominal:solari6-various-improvements

Conversation

@jasmine-nominal
Copy link
Copy Markdown

No description provided.

andrewhickman and others added 30 commits October 25, 2025 02:25
# Objective

Currently the docs for
[`SpawnScene`](https://docs.rs/bevy/latest/bevy/app/struct.SpawnScene.html)
link to the
[`Main`](https://docs.rs/bevy/latest/bevy/prelude/struct.Main.html)
schedule, but those docs don't mention when it runs.

## Solution

Updates docs to include this information, based on the schedule ordering
defined here:


https://github.com/bevyengine/bevy/blob/78d940cbfe177e3585fe19145e73c76172f4085e/crates/bevy_app/src/main_schedule.rs#L222-L224
# Objective

* Make DespawnOnExit more discoverable.
* Fix broken link text - the parenthetical before it seems to mess it
up.

## Solution

* Link directly to DespawnOnExit from the module documentation instead
of just the containing module.

## Testing

None. Somebody should build the docs to make sure the links actually
work (I'm 99% sure they do) and that the `\` added actually fixes the
link on line 32 (I'm only 80% sure it does)

## Further Questions

I'm wondering if this functionality should be listed in the bulleted
list that precedes this paragraph.

---------

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

# Objective

- Fixes bevyengine#20803
- See issue for motivations on this change


## Solution

- Use ureq's `platform-verifier` feature and enable it in the agent
config.

I've gone the simple route and made this non-configurable, for now at
least.

The downside of this change is that you can longer use webpki-roots but
if bevy only supports one certificate verification method then I think
platform-verifier is the more sensible option.

## Testing

- Tested the web_asset example on Windows and macOS
# Objective

The docs state that `Entity::from_row` creates an entity with a
generation of `1`, which was the case previously. With `Entity`
internals being reworked in `0.17` however, this is no longer the case,
as the generation used is now `EntityGeneration::FIRST`, currently
equivalent to `0`.

## Solution

This PR changes the docs to state an "unspecified" generation to allow
further changes to implementation without needing another rewrite, as
the docs rather consistently refer to `Entity`, `EntityRow`, and
`EntityGeneration` as being opaque identifiers.
# Objective

- Fixes bevyengine#21413

## Solution

- make bevy_input_focus dep on bevy_picking optional

## Testing

- ci
# Objective

- See rust-lang/rust#145457, we want to remove
unconditional `[T; 0]: Default` impl. That would be a breaking change
breaking `bevy_ecs` and (a test of) `bevy_camera`.

## Solution

- Replace `<[T; 0]>::default()` calls with `[]`

## Testing

- It compiles, the `<[T; 0]>::default()` is equivalent to `[]`, no
additional testing required
# Objective

close bevyengine#21334

## Solution

update linux dependencies in docs
Some small work on virtual geometry.

Some other improvements we should do in the future for the builder code:

* meshopt_computeSphereBounds instead of merge_spheres
* Permissive simplification
* Faster vertex locking, copying
zeux/meshoptimizer#961
* Try out meshopt's clusterizer/partitioner instead of using metis

---------

Co-authored-by: Jasmine Schweitzer <jasmine.schweitzer@nominal.io>
Bumps
[actions/download-artifact](https://github.com/actions/download-artifact)
from 4 to 6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/download-artifact/releases">actions/download-artifact's
releases</a>.</em></p>
<blockquote>
<h2>v6.0.0</h2>
<h2>What's Changed</h2>
<p><strong>BREAKING CHANGE:</strong> this update supports Node
<code>v24.x</code>. This is not a breaking change per-se but we're
treating it as such.</p>
<ul>
<li>Update README for download-artifact v5 changes by <a
href="https://github.com/yacaovsnc"><code>@​yacaovsnc</code></a> in <a
href="https://redirect.github.com/actions/download-artifact/pull/417">actions/download-artifact#417</a></li>
<li>Update README with artifact extraction details by <a
href="https://github.com/yacaovsnc"><code>@​yacaovsnc</code></a> in <a
href="https://redirect.github.com/actions/download-artifact/pull/424">actions/download-artifact#424</a></li>
<li>Readme: spell out the first use of GHES by <a
href="https://github.com/danwkennedy"><code>@​danwkennedy</code></a> in
<a
href="https://redirect.github.com/actions/download-artifact/pull/431">actions/download-artifact#431</a></li>
<li>Bump <code>@actions/artifact</code> to <code>v4.0.0</code></li>
<li>Prepare <code>v6.0.0</code> by <a
href="https://github.com/danwkennedy"><code>@​danwkennedy</code></a> in
<a
href="https://redirect.github.com/actions/download-artifact/pull/438">actions/download-artifact#438</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/danwkennedy"><code>@​danwkennedy</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/download-artifact/pull/431">actions/download-artifact#431</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/download-artifact/compare/v5...v6.0.0">https://github.com/actions/download-artifact/compare/v5...v6.0.0</a></p>
<h2>v5.0.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Update README.md by <a
href="https://github.com/nebuk89"><code>@​nebuk89</code></a> in <a
href="https://redirect.github.com/actions/download-artifact/pull/407">actions/download-artifact#407</a></li>
<li>BREAKING fix: inconsistent path behavior for single artifact
downloads by ID by <a
href="https://github.com/GrantBirki"><code>@​GrantBirki</code></a> in <a
href="https://redirect.github.com/actions/download-artifact/pull/416">actions/download-artifact#416</a></li>
</ul>
<h2>v5.0.0</h2>
<h3>🚨 Breaking Change</h3>
<p>This release fixes an inconsistency in path behavior for single
artifact downloads by ID. <strong>If you're downloading single artifacts
by ID, the output path may change.</strong></p>
<h4>What Changed</h4>
<p>Previously, <strong>single artifact downloads</strong> behaved
differently depending on how you specified the artifact:</p>
<ul>
<li><strong>By name</strong>: <code>name: my-artifact</code> → extracted
to <code>path/</code> (direct)</li>
<li><strong>By ID</strong>: <code>artifact-ids: 12345</code> → extracted
to <code>path/my-artifact/</code> (nested)</li>
</ul>
<p>Now both methods are consistent:</p>
<ul>
<li><strong>By name</strong>: <code>name: my-artifact</code> → extracted
to <code>path/</code> (unchanged)</li>
<li><strong>By ID</strong>: <code>artifact-ids: 12345</code> → extracted
to <code>path/</code> (fixed - now direct)</li>
</ul>
<h4>Migration Guide</h4>
<h5>✅ No Action Needed If:</h5>
<ul>
<li>You download artifacts by <strong>name</strong></li>
<li>You download <strong>multiple</strong> artifacts by ID</li>
<li>You already use <code>merge-multiple: true</code> as a
workaround</li>
</ul>
<h5>⚠️ Action Required If:</h5>
<p>You download <strong>single artifacts by ID</strong> and your
workflows expect the nested directory structure.</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/download-artifact/commit/018cc2cf5baa6db3ef3c5f8a56943fffe632ef53"><code>018cc2c</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/download-artifact/issues/438">#438</a>
from actions/danwkennedy/prepare-6.0.0</li>
<li><a
href="https://github.com/actions/download-artifact/commit/815651c680ffe1c95719d0ed08aba1a2f9d5c177"><code>815651c</code></a>
Revert &quot;Remove <code>github.dep.yml</code>&quot;</li>
<li><a
href="https://github.com/actions/download-artifact/commit/bb3a066a8babc8ed7b3e4218896c548fe34e7115"><code>bb3a066</code></a>
Remove <code>github.dep.yml</code></li>
<li><a
href="https://github.com/actions/download-artifact/commit/fa1ce46bbd11b8387539af12741055a76dfdf804"><code>fa1ce46</code></a>
Prepare <code>v6.0.0</code></li>
<li><a
href="https://github.com/actions/download-artifact/commit/4a24838f3d5601fd639834081e118c2995d51e1c"><code>4a24838</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/download-artifact/issues/431">#431</a>
from danwkennedy/patch-1</li>
<li><a
href="https://github.com/actions/download-artifact/commit/5e3251c4ff5a32e4cf8dd4adaee0e692365237ae"><code>5e3251c</code></a>
Readme: spell out the first use of GHES</li>
<li><a
href="https://github.com/actions/download-artifact/commit/abefc31eafcfbdf6c5336127c1346fdae79ff41c"><code>abefc31</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/download-artifact/issues/424">#424</a>
from actions/yacaovsnc/update_readme</li>
<li><a
href="https://github.com/actions/download-artifact/commit/ac43a6070aa7db8a41e756e7a2846221edca7027"><code>ac43a60</code></a>
Update README with artifact extraction details</li>
<li><a
href="https://github.com/actions/download-artifact/commit/de96f4613b77ec03b5cf633e7c350c32bd3c5660"><code>de96f46</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/download-artifact/issues/417">#417</a>
from actions/yacaovsnc/update_readme</li>
<li><a
href="https://github.com/actions/download-artifact/commit/7993cb44e9052f2f08f9b828ae5ef3ecca7d2ac7"><code>7993cb4</code></a>
Remove migration guide for artifact download changes</li>
<li>Additional commits viewable in <a
href="https://github.com/actions/download-artifact/compare/v4...v6">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/download-artifact&package-manager=github_actions&previous-version=4&new-version=6)](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

- bevyengine#21664 broke CI. Failures wasn't triggered by this PR as it's the CI
that runs from the main branch

## Solution

- download-artifact v5 changed how artefacts are handled. we met a case
not documented in their breaking change
Bumps
[actions/upload-artifact](https://github.com/actions/upload-artifact)
from 4 to 5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/upload-artifact/releases">actions/upload-artifact's
releases</a>.</em></p>
<blockquote>
<h2>v5.0.0</h2>
<h2>What's Changed</h2>
<p><strong>BREAKING CHANGE:</strong> this update supports Node
<code>v24.x</code>. This is not a breaking change per-se but we're
treating it as such.</p>
<ul>
<li>Update README.md by <a
href="https://github.com/GhadimiR"><code>@​GhadimiR</code></a> in <a
href="https://redirect.github.com/actions/upload-artifact/pull/681">actions/upload-artifact#681</a></li>
<li>Update README.md by <a
href="https://github.com/nebuk89"><code>@​nebuk89</code></a> in <a
href="https://redirect.github.com/actions/upload-artifact/pull/712">actions/upload-artifact#712</a></li>
<li>Readme: spell out the first use of GHES by <a
href="https://github.com/danwkennedy"><code>@​danwkennedy</code></a> in
<a
href="https://redirect.github.com/actions/upload-artifact/pull/727">actions/upload-artifact#727</a></li>
<li>Update GHES guidance to include reference to Node 20 version by <a
href="https://github.com/patrikpolyak"><code>@​patrikpolyak</code></a>
in <a
href="https://redirect.github.com/actions/upload-artifact/pull/725">actions/upload-artifact#725</a></li>
<li>Bump <code>@actions/artifact</code> to <code>v4.0.0</code></li>
<li>Prepare <code>v5.0.0</code> by <a
href="https://github.com/danwkennedy"><code>@​danwkennedy</code></a> in
<a
href="https://redirect.github.com/actions/upload-artifact/pull/734">actions/upload-artifact#734</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/GhadimiR"><code>@​GhadimiR</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/upload-artifact/pull/681">actions/upload-artifact#681</a></li>
<li><a href="https://github.com/nebuk89"><code>@​nebuk89</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/upload-artifact/pull/712">actions/upload-artifact#712</a></li>
<li><a
href="https://github.com/danwkennedy"><code>@​danwkennedy</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/upload-artifact/pull/727">actions/upload-artifact#727</a></li>
<li><a
href="https://github.com/patrikpolyak"><code>@​patrikpolyak</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/upload-artifact/pull/725">actions/upload-artifact#725</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/upload-artifact/compare/v4...v5.0.0">https://github.com/actions/upload-artifact/compare/v4...v5.0.0</a></p>
<h2>v4.6.2</h2>
<h2>What's Changed</h2>
<ul>
<li>Update to use artifact 2.3.2 package &amp; prepare for new
upload-artifact release by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/upload-artifact/pull/685">actions/upload-artifact#685</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/upload-artifact/pull/685">actions/upload-artifact#685</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/upload-artifact/compare/v4...v4.6.2">https://github.com/actions/upload-artifact/compare/v4...v4.6.2</a></p>
<h2>v4.6.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Update to use artifact 2.2.2 package by <a
href="https://github.com/yacaovsnc"><code>@​yacaovsnc</code></a> in <a
href="https://redirect.github.com/actions/upload-artifact/pull/673">actions/upload-artifact#673</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/upload-artifact/compare/v4...v4.6.1">https://github.com/actions/upload-artifact/compare/v4...v4.6.1</a></p>
<h2>v4.6.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Expose env vars to control concurrency and timeout by <a
href="https://github.com/yacaovsnc"><code>@​yacaovsnc</code></a> in <a
href="https://redirect.github.com/actions/upload-artifact/pull/662">actions/upload-artifact#662</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/upload-artifact/compare/v4...v4.6.0">https://github.com/actions/upload-artifact/compare/v4...v4.6.0</a></p>
<h2>v4.5.0</h2>
<h2>What's Changed</h2>
<ul>
<li>fix: deprecated <code>Node.js</code> version in action by <a
href="https://github.com/hamirmahal"><code>@​hamirmahal</code></a> in <a
href="https://redirect.github.com/actions/upload-artifact/pull/578">actions/upload-artifact#578</a></li>
<li>Add new <code>artifact-digest</code> output by <a
href="https://github.com/bdehamer"><code>@​bdehamer</code></a> in <a
href="https://redirect.github.com/actions/upload-artifact/pull/656">actions/upload-artifact#656</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/hamirmahal"><code>@​hamirmahal</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/upload-artifact/pull/578">actions/upload-artifact#578</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/upload-artifact/commit/330a01c490aca151604b8cf639adc76d48f6c5d4"><code>330a01c</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/upload-artifact/issues/734">#734</a>
from actions/danwkennedy/prepare-5.0.0</li>
<li><a
href="https://github.com/actions/upload-artifact/commit/03f282445299bbefc96171af272a984663b63a26"><code>03f2824</code></a>
Update <code>github.dep.yml</code></li>
<li><a
href="https://github.com/actions/upload-artifact/commit/905a1ecb5915b264cbc519e4eb415b5d82916018"><code>905a1ec</code></a>
Prepare <code>v5.0.0</code></li>
<li><a
href="https://github.com/actions/upload-artifact/commit/2d9f9cdfa99fedaddba68e9b5b5c281eca26cc63"><code>2d9f9cd</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/upload-artifact/issues/725">#725</a>
from patrikpolyak/patch-1</li>
<li><a
href="https://github.com/actions/upload-artifact/commit/9687587dec67f2a8bc69104e183d311c42af6d6f"><code>9687587</code></a>
Merge branch 'main' into patch-1</li>
<li><a
href="https://github.com/actions/upload-artifact/commit/2848b2cda0e5190984587ec6bb1f36730ca78d50"><code>2848b2c</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/upload-artifact/issues/727">#727</a>
from danwkennedy/patch-1</li>
<li><a
href="https://github.com/actions/upload-artifact/commit/9b511775fd9ce8c5710b38eea671f856de0e70a7"><code>9b51177</code></a>
Spell out the first use of GHES</li>
<li><a
href="https://github.com/actions/upload-artifact/commit/cd231ca1eda77976a84805c4194a1954f56b0727"><code>cd231ca</code></a>
Update GHES guidance to include reference to Node 20 version</li>
<li><a
href="https://github.com/actions/upload-artifact/commit/de65e23aa2b7e23d713bb51fbfcb6d502f8667d8"><code>de65e23</code></a>
Merge pull request <a
href="https://redirect.github.com/actions/upload-artifact/issues/712">#712</a>
from actions/nebuk89-patch-1</li>
<li><a
href="https://github.com/actions/upload-artifact/commit/8747d8cd7632611ad6060b528f3e0f654c98869c"><code>8747d8c</code></a>
Update README.md</li>
<li>Additional commits viewable in <a
href="https://github.com/actions/upload-artifact/compare/v4...v5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/upload-artifact&package-manager=github_actions&previous-version=4&new-version=5)](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>
Bumps
[super-linter/super-linter](https://github.com/super-linter/super-linter)
from 8.2.0 to 8.2.1.
<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.2.1</h2>
<h2><a
href="https://github.com/super-linter/super-linter/compare/v8.2.0...v8.2.1">8.2.1</a>
(2025-10-15)</h2>
<h3>🐛 Bugfixes</h3>
<ul>
<li>biome ignore errors on unmatched files (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7089">#7089</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/8d1cfd5ca320fa3a3cdb9718b78b71106b3867e6">8d1cfd5</a>)</li>
<li>handle pull_request_target (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7088">#7088</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/188a10fdb3a991cc813af934f03c634e03c178bd">188a10f</a>)</li>
<li>handle schedule and workflow_dispatch events (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7098">#7098</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/28cb079925f2c003a9781ead0eec64e8278c93df">28cb079</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/7095">#7095</a></li>
<li>set CONFLICT_FOUND as expected (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7093">#7093</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/07cfe7eb123bd56fbd1c73d274193c488ad2e60f">07cfe7e</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/7092">#7092</a></li>
<li>strip workspace from the regex check path (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7110">#7110</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/3b72a2d2c03b9db79296a430a534d0e6b003c8dc">3b72a2d</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/7086">#7086</a></li>
<li>validate DEFAULT_BRANCH when using find (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7119">#7119</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/7508f4ccb749f1d5b9328aca04bfdeda2e9f8542">7508f4c</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/7117">#7117</a></li>
</ul>
<h3>⬆️ Dependency updates</h3>
<ul>
<li><strong>docker:</strong> bump the docker group with 2 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7100">#7100</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/28c568121b3f6b7167c8892e422d102bbcc8eb69">28c5681</a>)</li>
<li><strong>npm:</strong> bump eslint from 9.36.0 to 9.37.0 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7102">#7102</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/cf6cb1ebfa9a5acc42b8897b270b94214f0bb3cc">cf6cb1e</a>)</li>
<li><strong>npm:</strong> bump renovate from 41.132.2 to 41.136.0 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7107">#7107</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/495692ff75eb1cc6963c05d614e75f341d06a062">495692f</a>)</li>
<li><strong>npm:</strong> bump the eslint-plugins-configs group across 1
directory with 2 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7101">#7101</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/b3a735d16a56266102f0297bf4f48bc13f23aa9b">b3a735d</a>)</li>
<li><strong>npm:</strong> bump the npm group across 1 directory with 4
updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7108">#7108</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/ce227b3ec86ae4f7d6650674ed1f37877f7f4c34">ce227b3</a>)</li>
<li><strong>npm:</strong> bump typescript (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7109">#7109</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/deba11c880239ab04bcd11a8b5cde914b13db740">deba11c</a>)</li>
<li><strong>python:</strong> bump the pip group across 1 directory with
7 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7106">#7106</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/7c02a56ba63719acef55b8e6865582f7dc4465b2">7c02a56</a>)</li>
</ul>
<h3>🧰 Maintenance</h3>
<ul>
<li>add missing ruff variables to readme (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7091">#7091</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/7daeceba58e1d1d43afdd9df96070ba6bfbc37fb">7daeceb</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/7099">#7099</a></li>
<li>explain who ignores VALIDATE_ALL_CODEBASE (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7111">#7111</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/9150eb9b2be254146a684b5f97b10b3ed16882a9">9150eb9</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/7090">#7090</a></li>
<li><strong>github-actions:</strong> bump
peter-evans/create-issue-from-file (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7103">#7103</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/ec80a773933c4215f8450a7eeb5b617436fe7d03">ec80a77</a>)</li>
<li>update rack to 3.2.3 (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7136">#7136</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/2e6ad3dff5b580a3e84c781cd9b0e3555c09414a">2e6ad3d</a>)</li>
<li>update ruby transitive dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7115">#7115</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/00a71f647b0014a246a0fb34caaa0e7640e85070">00a71f6</a>)</li>
</ul>
</blockquote>
</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/v8.2.0...v8.2.1">8.2.1</a>
(2025-10-15)</h2>
<h3>🐛 Bugfixes</h3>
<ul>
<li>biome ignore errors on unmatched files (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7089">#7089</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/8d1cfd5ca320fa3a3cdb9718b78b71106b3867e6">8d1cfd5</a>)</li>
<li>handle pull_request_target (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7088">#7088</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/188a10fdb3a991cc813af934f03c634e03c178bd">188a10f</a>)</li>
<li>handle schedule and workflow_dispatch events (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7098">#7098</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/28cb079925f2c003a9781ead0eec64e8278c93df">28cb079</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/7095">#7095</a></li>
<li>set CONFLICT_FOUND as expected (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7093">#7093</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/07cfe7eb123bd56fbd1c73d274193c488ad2e60f">07cfe7e</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/7092">#7092</a></li>
<li>strip workspace from the regex check path (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7110">#7110</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/3b72a2d2c03b9db79296a430a534d0e6b003c8dc">3b72a2d</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/7086">#7086</a></li>
<li>validate DEFAULT_BRANCH when using find (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7119">#7119</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/7508f4ccb749f1d5b9328aca04bfdeda2e9f8542">7508f4c</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/7117">#7117</a></li>
</ul>
<h3>⬆️ Dependency updates</h3>
<ul>
<li><strong>docker:</strong> bump the docker group with 2 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7100">#7100</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/28c568121b3f6b7167c8892e422d102bbcc8eb69">28c5681</a>)</li>
<li><strong>npm:</strong> bump eslint from 9.36.0 to 9.37.0 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7102">#7102</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/cf6cb1ebfa9a5acc42b8897b270b94214f0bb3cc">cf6cb1e</a>)</li>
<li><strong>npm:</strong> bump renovate from 41.132.2 to 41.136.0 in
/dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7107">#7107</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/495692ff75eb1cc6963c05d614e75f341d06a062">495692f</a>)</li>
<li><strong>npm:</strong> bump the eslint-plugins-configs group across 1
directory with 2 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7101">#7101</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/b3a735d16a56266102f0297bf4f48bc13f23aa9b">b3a735d</a>)</li>
<li><strong>npm:</strong> bump the npm group across 1 directory with 4
updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7108">#7108</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/ce227b3ec86ae4f7d6650674ed1f37877f7f4c34">ce227b3</a>)</li>
<li><strong>npm:</strong> bump typescript (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7109">#7109</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/deba11c880239ab04bcd11a8b5cde914b13db740">deba11c</a>)</li>
<li><strong>python:</strong> bump the pip group across 1 directory with
7 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7106">#7106</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/7c02a56ba63719acef55b8e6865582f7dc4465b2">7c02a56</a>)</li>
</ul>
<h3>🧰 Maintenance</h3>
<ul>
<li>add missing ruff variables to readme (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7091">#7091</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/7daeceba58e1d1d43afdd9df96070ba6bfbc37fb">7daeceb</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/7099">#7099</a></li>
<li>explain who ignores VALIDATE_ALL_CODEBASE (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7111">#7111</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/9150eb9b2be254146a684b5f97b10b3ed16882a9">9150eb9</a>),
closes <a
href="https://redirect.github.com/super-linter/super-linter/issues/7090">#7090</a></li>
<li><strong>github-actions:</strong> bump
peter-evans/create-issue-from-file (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7103">#7103</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/ec80a773933c4215f8450a7eeb5b617436fe7d03">ec80a77</a>)</li>
<li>update rack to 3.2.3 (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7136">#7136</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/2e6ad3dff5b580a3e84c781cd9b0e3555c09414a">2e6ad3d</a>)</li>
<li>update ruby transitive dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7115">#7115</a>)
(<a
href="https://github.com/super-linter/super-linter/commit/00a71f647b0014a246a0fb34caaa0e7640e85070">00a71f6</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/super-linter/super-linter/commit/2bdd90ed3262e023ac84bf8fe35dc480721fc1f2"><code>2bdd90e</code></a>
chore(main): release 8.2.1 (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7094">#7094</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/51e00ddd747163eace0c6c457a14ba3fab178581"><code>51e00dd</code></a>
chore: use powershell from dotnet sdk image (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7141">#7141</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/2e6ad3dff5b580a3e84c781cd9b0e3555c09414a"><code>2e6ad3d</code></a>
chore: update rack to 3.2.3 (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7136">#7136</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/7508f4ccb749f1d5b9328aca04bfdeda2e9f8542"><code>7508f4c</code></a>
fix: validate DEFAULT_BRANCH when using find (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7119">#7119</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/cf6cb1ebfa9a5acc42b8897b270b94214f0bb3cc"><code>cf6cb1e</code></a>
deps(npm): bump eslint from 9.36.0 to 9.37.0 in /dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7102">#7102</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/495692ff75eb1cc6963c05d614e75f341d06a062"><code>495692f</code></a>
deps(npm): bump renovate from 41.132.2 to 41.136.0 in /dependencies (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7107">#7107</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/deba11c880239ab04bcd11a8b5cde914b13db740"><code>deba11c</code></a>
deps(npm): bump typescript (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7109">#7109</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/28c568121b3f6b7167c8892e422d102bbcc8eb69"><code>28c5681</code></a>
deps(docker): bump the docker group with 2 updates (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7100">#7100</a>)</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/b3a735d16a56266102f0297bf4f48bc13f23aa9b"><code>b3a735d</code></a>
deps(npm): bump the eslint-plugins-configs group across 1 directory with
2 up...</li>
<li><a
href="https://github.com/super-linter/super-linter/commit/ec80a773933c4215f8450a7eeb5b617436fe7d03"><code>ec80a77</code></a>
ci(github-actions): bump peter-evans/create-issue-from-file (<a
href="https://redirect.github.com/super-linter/super-linter/issues/7103">#7103</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/super-linter/super-linter/compare/v8.2.0...v8.2.1">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=8.2.0&new-version=8.2.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>
…engine#21647)

# Objective

In bevyengine#21598 and the related Discord discussion, it was pointed out that
the `async_compute` example promotes an inefficient and potentially
error-prone pattern: `future::block_on(poll_once)`.

It is now recommended to use `bevy::tasks::futures::check_ready`
instead, which is much cheaper and avoids blocking the main thread while
waiting on the future. Another valid approach is to pass a channel into
the async tasks and detach them, letting the channel handle task
readiness.

This PR implements both suggestions.


## Solution

* **Updated `async_compute` example**
Replaced the use of `future::block_on(poll_once)` with the recommended
`check_ready`.
  The change is minimal and limited to the directly affected lines.

* **Added new example: `async_channel_pattern`**
Demonstrates how to spawn async tasks using a channel-based
communication pattern.

* Each task is executed on a separate thread via `AsyncComputeTaskPool`.
* Results (cube positions) are sent back through a `CubeChannel` once
completed.
* Tasks are detached to run fully asynchronously, ensuring the main
thread remains unblocked.
* A rotating light in the scene visually indicates that the frame loop
remains responsive.



I am relatively new to both Bevy and async Rust, and I genuinely
appreciate any feedback or suggestions to improve these examples —
especially regarding idiomatic async patterns and best practices for
Bevy task management.

Fixes bevyengine#21598

---------

Co-authored-by: syszery <syszery@users.noreply.github.com>
Co-authored-by: François Mockers <francois.mockers@vleue.com>
# Objective

This PR is to add SSAO support on WebGPU.

## Solution
Add r16float detect and fallback to r32float if not supported. FYI the
initial ssao PR [here](bevyengine#7402).

## Testing

- Did you test these changes? If so, how?
     Yes, here is the command to test the ssao example 
`RUSTFLAGS="--cfg getrandom_backend=\"wasm_js\"" cargo run --example
ssao --target wasm32-unknown-unknown --features webgpu`
and then http://localhost:1334, make sure it supports
[WebGPU](https://caniuse.com/webgpu)

- Are there any parts that need more testing?
 N/A
- How can other people (reviewers) test your changes? Is there anything
specific they need to know?
1. For the R32Float fallback, only the 1st commit is needed. However, I
ran into some strange flickering issue on Chrome (and Chrome canary
too), so I added a "detect_r16float_support" flag and a temp fix in the
2nd and 3rd commit, which are intended to be reverted when merging.
2. with the 1st commit, Safari works fine, but Chrome has the
flickering, and I fixed it by partially reverting a shader change from
bevyengine#20313, which is very strange. It
is probably caused by some shader optimization issue in Chrome, and I
have no clue why, as the change is just moving the calculation to a
different function.
Here is the flickering on Mac Chrome(140.0.7339.133 (Official Build)
(arm64))
<img width="353" height="327" alt="chrome_ssao"
src="https://github.com/user-attachments/assets/0666673f-508e-4b57-a152-19327ffdb6f3"
/>


- If relevant, what platforms did you test these changes on, and are
there any important ones you can't test?
Tested on native(mac) and WebGPU. To test on native, set
"detect_r16float_support" to false to force R32Float.
I couldn't make the WebGPU ssao example running on Windows 11 Chrome or
Firefox, there is some error in 'taa_pipeline' .
 
---
# Objective

Remove the `line_height` field from `TextFont`.
Line height is a property of the text layout, not the font.

Part of the changes for bevyengine#21175 

## Solution

Remove the `line_height` field from `TextFont`.
Make `LineHeight` into a component.
Update the text access API and text pipeline.
# Objective

- This commit refactors the `from_viewport_and_override` function to
improve readability and safety.

## Solution

- Replaces the initial `cloned()` and subsequent `if/else` logic with a
clearer `if let` structure.
- Removes the need for `unwrap()` by handling both `Some` and `None`
cases

## Testing

- I don't know how to make sure there is no probelm, but I run some
examples and I don't see the errors.
# Objective

- This PR refactors the Frustum struct to improve code readability and
maintainability by replacing magic numbers with named constants and
unrolling a loop for clarity.

## Testing

- I ran the command 'cargo test --package bevy_camera --lib --
primitives::tests --show-output' and all the test are passed.

---
# Objective

For bevyengine#17647, we want to create a `QueryData` that can follow a relation
and query data from an entity's parent. If the parent does not have the
queried data, the child entity should be skipped in the query. However,
there is no way to tell from the child's archetype whether the parent
will match! So, we need to support *non-archetypal* `QueryData`, just as
we support non-archetypal `QueryFilter`s for `Added` and `Changed`.

That is, if `Query<Parent<&T>>` yields `&T`, and we do:

```rust
let parent1 = world.spawn(T).id();
let child1 = world.spawn(ChildOf(parent1));
let parent2 = world.spawn(()).id();
let child2 = world.spawn(ChildOf(parent2));

let query = world.query::<Parent<&T>>();
```

then `query` must yield a row for `child1` but not for `child2`, even
though they have the same archetype.

## Solution

Change `QueryData::fetch` to return `Option` so that entities can be
filtered during fetching by returning `None`.

To support `ExactSizeIterator`, introduce an `ArchetypeQueryData` trait
and an `QueryData::IS_ARCHETYPAL` associated constant, similar to
`ArchetypeFilter` and `QueryFilter::IS_ARCHETYPAL`. Implement this trait
on existing `QueryData` types. Modify `ExactSizeIterator`
implementations to require `D: ArchetypeQueryData`, and the
`size_hint()` methods to return a minimum size of `0` if
`!D::IS_ARCHETYPAL`.

## Alternatives

We could do nothing here, and have `Query<Parent<&T>>` yield
`Option<&T>`. That makes the API less convenient, though. Note that if
one *wants* to query for `Option`, they can use either
`Query<Option<Parent<&T>>` or `Query<Parent<Option<&T>>`, depending on
whether they want to include entities with no parent.

Another option is to re-use the `ArchetypeFilter` trait instead of
introducing a new one. There are no places where we want to abstract
over both, however, and it would require writing bounds like `D:
QueryData + ArchetypeFilter, F: QueryFilter + ArchetypeFilter` instead
of simply `D: ArchetypeQueryData, F: ArchetypeFilter`.

---------

Co-authored-by: Periwink <charlesbour@gmail.com>
Depends on bevyengine#20838 

# Objective

There's some redundant sampler bindings in the atmosphere code

## Solution

Remove them

## Testing

Ran the example
# Objective

- Splitting out the non-BSN parts of the work on popup menus.

## Solution

- Added Popover and Menu components.

## Testing

- Manual testing using example.

## Showcase

<img width="311" height="261" alt="popup"
src="https://github.com/user-attachments/assets/ab9e8959-65bc-45d3-aa36-9d56cc09ea9d"
/>

---------

Co-authored-by: Viktor Gustavsson <villor94@gmail.com>
…evyengine#21643)

# Objective

- Fixes bevyengine#10903

## Solution

- Stop using `Path::join` for joining asset paths and instead use
`AssetPath::resolve_embed`.

## Testing

- Added 2 tests!
# Objective

Just a tiny fix of `log_layers` example path in documentation comments.

## Solution

The comments are corrected.

## Testing

No needed
# Objective

Allows users to override `TextColor` and use a custom color for
underline and strikethrough text decorations.

## Solution

New components `UnderlineColor` and `StrikethroughColor`. Add them to a
text entity with `Underline` or `Strikethrough`, respectively, to use a
custom color for the lines.

#

This could just be an optional color field on `Underline` or
`Strikethrough`, that would be fine. I spent a while going back and
fourth about it. The main reasons why I went with a separate component:

* The same color is almost always used for both text and its
decorations. Overriding `TextColor` is going to be rare.
* Once we have some sort of global or propagated text style support,
underline and strikethrough colors probably won't be set per entity.

The single component approach has some advantages too. Discoverability,
obviously. Also compare:
```rust
(
    Text::new("Hello"),
    Underline,
    UnderlineColor(RED.into())
)
```
with 
```rust
(
    Text::new("Hello"),
    Underline::color(RED),
)
```
which seems clearly nicer. If it weren't for the planned
non-entity-local text styling support, I'd lean more towards the single
component approach.

## Testing

Added a few color overrides to this example:
```
cargo run --example strikethrough
```

## Showcase

<img width="1924" height="1127" alt="strike-under-color"
src="https://github.com/user-attachments/assets/83664f95-0926-4ccb-81e4-a3059cd2ccf3"
/>
…bevyengine#21685)

# Objective

Tests should be more resilient to entities added on `World` creation.
This is necessary for resources-as-components to work without relying on
`DefaultQueryFilters`.

## Solution

I've added an empty entity during `World::bootstrap()` and ran the test
suite (and CI). I've gone and fixed every test, except for the ones
where it's not possible / doesn't make sense. Both `iter_entities` and
`iter_entities_mut` and their tests have been removed as they were
deprecated in 0.17.
# Objective

- Computing the ndc from a viewport coordinates is already done in a few
places.
- It's can be useful for users, not just internally.

## Solution

- Extract it to a function

## Testing

- I'm using it in a currently unfinished PR for gpu picking and things
worked as expected
- I also tested 3d_viewport_to_world and 2d_viewport_to_world

---------

Co-authored-by: atlv <email@atlasdostal.com>
…_2d_as_array` (bevyengine#21628)

# Objective

If you want to use a `TilemapChunk` (or more generally use a
`texture2DArray` in a shader), you have to implement a mechanism that
waits for your texture to load, then calls
`Image::reinterpret_stacked_2d_as_array`.

## Solution

Have the loader do it instead.

Closes bevyengine#20799, which does very similar things and should be remade if
more functionality is needed.

## Testing

- Ran the updated examples

---

## Showcase

```rs
let array_texture = asset_server.load_with_settings(
    "textures/array_texture.png",
    |settings: &mut ImageLoaderSettings| {
        settings.array_layout = Some(ImageArrayLayout::RowCount(4));
    },
);
```
# Objective

Ended up with two release notes for strikethrough somehow after the
merges or whatever.

## Solution

Rename one, delete the other.
…evyengine#21689)

# Objective

Rename the example, fix a typo in its ("it's") comments.
# Objective

Follow up to the underline and strikethrough PRs:
* Replace the quintuples stored in `TextLayoutInfo::section_geometry`
with a struct with named fields.
* Rename `TextLayoutInfo::section_geometry` because "section" in our
terminology implies a one-to-one correspondence with text entities.
* Add some basic helpers to construct the underline and strikethrough
lines.
* Seperate the thickness values for underline and strikethrough. This is
needed for an API that allows users to set custom thicknesses.

## Solution

* New struct `RunGeometry`. `RunGeometry` holds the bounds and
decoration geometry for each text run (a contiguous sequence of glyphs
on a line that share text attributes). It has helper methods for placing
underline and strikethrough.
* Rename the `section_geometry` field to `run_geometry` and make it a
`Vec<RunGeometry>`
* `RunGeometry` has seperate `underline_thickness` and
`strikethrough_thickness` values.
# Objective

Some macros were handling Idents and indexes as seperate things, we can
use syn::Member to make this more readable and nicer.

revive of bevyengine#18199
chescock and others added 7 commits October 30, 2025 02:53
…yengine#16396)

# Objective

Improve the performance of some dynamic queries with
`FilteredEntity(Ref|Mut)` by allowing dense iteration in more cases, and
remove a call to the sort-of deprecated
`Access::component_reads_and_writes()` method.

`QueryBuilder` currently requires sparse iteration if any sparse set
components may be read. We do need sparse iteration if sparse set
components are used in the filters, but `FilteredEntityRef` can still
perform dense iteration when reading optional components or when reading
all components.

Note that the optional case is different from `Option`, which performs
sparse iteration when the inner query is sparse so that it can cache
whether the inner query matches for an entire archetype.

## Solution

Change `FilteredEntity(Ref|Mut)` to have `IS_DENSE = true`. It used to
require sparse iteration in order to filter the `Access` for each
archetype, but bevyengine#15207 changed it to copy the entire access.

Change `QueryBuilder::is_dense()` to check `D::IS_DENSE && F::IS_DENSE`
instead of looking at the component reads and writes.
`QueryBuilder::is_dense()` still checks the *filters*, so
`builder.data::<&Sparse>()` will still cause sparse iteration, but
`builder.data::<Option<&Sparse>>()` no longer will.

I believe this is sound, even in the presence of query transmutes. The
only `WorldQuery` implementations that rely on a sparse query being
sparse for soundness are `&`, `&mut`, `Ref`, and `Mut`, but they can
only be transmuted to if the component is in the `required` set. If a
dynamic query has the component in the `required` set, then it appears
in the filters and the query will use sparse iteration.

Note that `Option` and `Has` will misbehave and report `None` and
`false` for all entities if they do a dense query while wrapping a
sparse component, but they won't cause UB. And it's already possible to
hit that case by transmuting from `Query<EntityMut>` to
`Query<Option<&Sparse>>`.
# Objective

Have the layout of the tile chunk map the world axis.

## Solution

Invert the calculated y index in the shader and transform calculation.

## Testing

Ran the example and saw 0,0 move to the bottom left instead of the top
left.


## Migration

People manually calculating the tile index will have to invert the chunk
relative y index from the current implementation.

For example, with a chunk size of (16, 16) today:
(5, 6) in world coords => (5, 9) in chunk coords 

Changes to:
(5, 6) in world coords => (5, 6) in chunk coords

---------

Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
Co-authored-by: Martín Maita <47983254+mnmaita@users.noreply.github.com>
# Objective

Text2d underline shadow is being drawn using the strikethrough position
and size values. Draw it with the correct geometry.

## Solution

Use the underline values.
…ources. (bevyengine#21673)

# Objective

- Trying to rewrite asset processing to be dynamic is hard, especially
since we don't have tests verifying all the situations asset processing
is supposed to be able to handle!

## Solution

- Add a couple more tests! One to check that processing multiple sources
works, and another to check that sending asset events triggers
processing (including processing of dependent processing).

## Testing

- ;)
@JMS55 JMS55 merged commit 55d0d59 into JMS55:solari6-various Oct 31, 2025
26 of 29 checks passed
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.