Commit Graph

8610 Commits

Author SHA1 Message Date
Charlie Marsh 03b4d8a2da Use optimized rustfmt step in .pre-commit-config.yaml (#18355)
Matches the setup we use in Ruff.
2026-03-06 13:49:48 -05:00
Zanie Blue 9345450b4c Use cargo auditable to include SBOM in uv builds (#18276)
Inspired by #18252 

This required an upstream change
https://github.com/rust-secure-code/cargo-auditable/pull/245 which is
now released.

This increases binary sizes slightly, ~4KB.

The cargo wrapper implementation will be extended in #18280 to code sign
binaries.
2026-03-06 11:38:02 -06:00
Charlie Marsh 12caaf3160 Respect build constraints for workspace members (#18350)
## Summary

These are respected in `uv sync` and `uv pip install`, but not `uv
build`.

Closes https://github.com/astral-sh/uv/issues/18283
2026-03-06 16:53:07 +00:00
Zanie Blue 24e9b47900 Add fallback to /usr/lib/os-release on Linux (#18349) 2026-03-06 16:50:54 +00:00
luyiming 7520fe6c25 Improve documentation on virtual dependencies (#18346)
<!--
Thank you for contributing to uv! To help us out with reviewing, please
consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->

## Summary

<!-- What's the purpose of the change? What does it do, and why? -->

The current documentation for virtual dependencies is somewhat confusing
because it places the sentence

> "the package will be built even if a build system is not declared"

immediately after introducing `tool.uv.package = false`. This makes it
sound as if the package might still be built when `package = false` is
set.

In reality, that sentence describes the *default behavior of path
dependencies* (when `package = false` is not set). The revised wording
clarifies that:

- `package = false` → the dependency becomes virtual (its dependencies
are installed, but the package itself is not built or installed)
- otherwise → uv treats the path dependency as a normal package and will
attempt to build it, even without a `[build-system]`.
2026-03-06 10:50:11 -06:00
Charlie Marsh 9dea237fca Revalidate editables and other dependencies in scripts (#18328)
## Summary

Lockfile re-validation was iterating from the workspace roots; but for
scripts, we have no roots! This is similar to the approach we use in `uv
tree`, `uv export`, etc.

Closes https://github.com/astral-sh/uv/issues/18312.
2026-03-06 11:46:07 -05:00
Zanie Blue a13ba947c9 Add a development build of aarch64-linux-android to CI (#18333)
Part of https://github.com/astral-sh/uv/issues/14574

Adds a cross-compiled build for the `aarch64-linux-android` target using
the Android NDK available on the runner.

Requires #18324
2026-03-06 16:45:20 +00:00
Zanie Blue bb8970a982 Add a Termux integration test (#18332)
After this, I want to figure out how to unify more of the smoke, system,
and integration tests, but this seems like a sufficient start for Termux
testing.
2026-03-06 16:44:16 +00:00
Zanie Blue 363aea27be Drop the sys-info dependency (#18324)
Part of https://github.com/astral-sh/uv/issues/14574 and
https://github.com/termux/termux-packages/issues/27547

Avoids the downstream patch at
https://github.com/termux/termux-packages/blob/master/packages/uv/0001-sys-info-replace-index-with-strchr.diff

`sys-info-rs` has not been updated in years
https://github.com/FillZpp/sys-info-rs — it includes C code and can't be
built on Termux https://github.com/FillZpp/sys-info-rs/issues/116

I considered switching to https://github.com/GuillaumeGomez/sysinfo but
our usage is trivial, so we implement our requirements in `uv-platform`
instead
2026-03-06 16:30:19 +00:00
Zanie Blue ccd1ea99ae Skip building of dhi images in contributor pull requests (#18330)
These require authentication to pull.
2026-03-06 10:22:41 -06:00
konsti 401661ee22 Log the duration we took before erroring (#18231)
We previously errored due to not having long enough backoff, and there
were questions about how long the retries are, so let's log this on
failure.
2026-03-06 08:51:10 -06:00
renovate[bot] 686f43e67e Update PyO3/maturin-action action to v1.50.1 (#18343)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [PyO3/maturin-action](https://redirect.github.com/PyO3/maturin-action)
| action | patch | `v1.50.0` → `v1.50.1` |

---

### Release Notes

<details>
<summary>PyO3/maturin-action (PyO3/maturin-action)</summary>

###
[`v1.50.1`](https://redirect.github.com/PyO3/maturin-action/releases/tag/v1.50.1)

[Compare
Source](https://redirect.github.com/PyO3/maturin-action/compare/v1.50.0...v1.50.1)

##### What's Changed

- Remove ziglang bound by
[@&#8203;konstin](https://redirect.github.com/konstin) in
[#&#8203;418](https://redirect.github.com/PyO3/maturin-action/pull/418)
- Try reactivating Windows ARM by
[@&#8203;konstin](https://redirect.github.com/konstin) in
[#&#8203;419](https://redirect.github.com/PyO3/maturin-action/pull/419)

**Full Changelog**:
<https://github.com/PyO3/maturin-action/compare/v1...v1.50.1>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM, only on
Monday ( * 0-3 * * 1 ) (UTC), Automerge - At any time (no schedule
defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/astral-sh/uv).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41Ni4wIiwidXBkYXRlZEluVmVyIjoiNDMuNTYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiYnVpbGQ6c2tpcC1kb2NrZXIiLCJidWlsZDpza2lwLXJlbGVhc2UiLCJpbnRlcm5hbCJdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-06 15:26:48 +01:00
renovate[bot] 95bc471164 Update maturin to v1.12.6 (#18342)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [maturin](https://redirect.github.com/PyO3/maturin) | patch |
`v1.12.4` → `v1.12.6` |

---

### Release Notes

<details>
<summary>PyO3/maturin (maturin)</summary>

###
[`v1.12.6`](https://redirect.github.com/PyO3/maturin/releases/tag/v1.12.6)

[Compare
Source](https://redirect.github.com/PyO3/maturin/compare/v1.12.5...v1.12.6)

##### What's Changed

- Sync legacy\_py.rs with upstream PyPI warehouse legacy.py
([#&#8203;3053](https://redirect.github.com/PyO3/maturin/pull/3053))
- Keep cargo build artifact at original path after staging
([#&#8203;3054](https://redirect.github.com/PyO3/maturin/pull/3054))

**Full Changelog**:
<https://github.com/PyO3/maturin/compare/v1.12.5...v1.12.6>

###
[`v1.12.5`](https://redirect.github.com/PyO3/maturin/releases/tag/v1.12.5)

[Compare
Source](https://redirect.github.com/PyO3/maturin/compare/v1.12.4...v1.12.5)

##### What's Changed

- feat: include debug info files (.pdb, .dSYM, .dwp) in wheels by
[@&#8203;messense](https://redirect.github.com/messense) in
[#&#8203;3024](https://redirect.github.com/PyO3/maturin/pull/3024)
- Fix wrong abi3 tag for conditional cargo features enabled pyo3 abi3
feature by [@&#8203;messense](https://redirect.github.com/messense) in
[#&#8203;3029](https://redirect.github.com/PyO3/maturin/pull/3029)
- fix: `maturin build --sdist` wheel name/layout for excluded workspace
crates by [@&#8203;messense](https://redirect.github.com/messense) in
[#&#8203;3031](https://redirect.github.com/PyO3/maturin/pull/3031)
- fix: preserve wheel output dir when building from unpacked sdist by
[@&#8203;messense](https://redirect.github.com/messense) in
[#&#8203;3036](https://redirect.github.com/PyO3/maturin/pull/3036)
- feat: add python-implementation condition to conditional features by
[@&#8203;messense](https://redirect.github.com/messense) in
[#&#8203;3038](https://redirect.github.com/PyO3/maturin/pull/3038)
- Update zip to 8.1 by
[@&#8203;musicinmybrain](https://redirect.github.com/musicinmybrain) in
[#&#8203;3039](https://redirect.github.com/PyO3/maturin/pull/3039)
- Use the latest version of github actions by
[@&#8203;Armavica](https://redirect.github.com/Armavica) in
[#&#8203;3040](https://redirect.github.com/PyO3/maturin/pull/3040)
- Use renovate and pinned hashes for GitHub Actions by
[@&#8203;konstin](https://redirect.github.com/konstin) in
[#&#8203;3043](https://redirect.github.com/PyO3/maturin/pull/3043)
- chore(deps): update taiki-e/install-action digest to
[`7410117`](https://redirect.github.com/PyO3/maturin/commit/7410117) by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;3046](https://redirect.github.com/PyO3/maturin/pull/3046)
- Fix non-existent comment tag by
[@&#8203;konstin](https://redirect.github.com/konstin) in
[#&#8203;3044](https://redirect.github.com/PyO3/maturin/pull/3044)
- chore(deps): update dtolnay/rust-toolchain digest to
[`efa25f7`](https://redirect.github.com/PyO3/maturin/commit/efa25f7) by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;3045](https://redirect.github.com/PyO3/maturin/pull/3045)
- chore(deps): update actions/attest-build-provenance action to v4 by
[@&#8203;renovate](https://redirect.github.com/renovate)\[bot] in
[#&#8203;3047](https://redirect.github.com/PyO3/maturin/pull/3047)
- Use mmap for faster warn\_missing\_py\_init by
[@&#8203;orlp](https://redirect.github.com/orlp) in
[#&#8203;2950](https://redirect.github.com/PyO3/maturin/pull/2950), to
be safe we now move the cargo built artifact to `target/maturin` so this
may cause breakage if you rely on it in standard cargo `target/`
location

##### New Contributors

- [@&#8203;Armavica](https://redirect.github.com/Armavica) made their
first contribution in
[#&#8203;3040](https://redirect.github.com/PyO3/maturin/pull/3040)
- [@&#8203;renovate](https://redirect.github.com/renovate)\[bot] made
their first contribution in
[#&#8203;3046](https://redirect.github.com/PyO3/maturin/pull/3046)
- [@&#8203;orlp](https://redirect.github.com/orlp) made their first
contribution in
[#&#8203;2950](https://redirect.github.com/PyO3/maturin/pull/2950)

**Full Changelog**:
<https://github.com/PyO3/maturin/compare/v1.12.4...v1.12.5>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM, only on
Monday ( * 0-3 * * 1 ) (UTC), Automerge - At any time (no schedule
defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/astral-sh/uv).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41Ni4wIiwidXBkYXRlZEluVmVyIjoiNDMuNTYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiYnVpbGQ6c2tpcC1kb2NrZXIiLCJidWlsZDpza2lwLXJlbGVhc2UiLCJpbnRlcm5hbCJdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-06 15:26:02 +01:00
Zanie Blue 8b82d17f44 Support Python 3.13+ on Android (#18301)
Python 3.13+ changed how it reports platform information on Android; see
https://peps.python.org/pep-0738/#architectures

Here we add support for the new platform values, without which uv will
fail due to an unrecognized interpreter.

Closes #18296
Closes #18285
Closes https://github.com/astral-sh/uv/issues/18313

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-03-06 07:42:21 -06:00
konsti 6055369bb1 Remove invisible unicode characters (#18344) 2026-03-06 14:27:57 +01:00
Charlie Marsh 5fc74a2357 Add fbgemm-gpu, fbgemm-gpu-genai, torchrec, and torchtune to the PyTorch list (#18338)
## Summary

Like #18336.
2026-03-06 07:27:35 -06:00
konsti 53c4a0925a Workspace refactoring rollup (#18308)
Three small refactorings pulled out of the toml optimization branch.
2026-03-06 10:37:41 +00:00
konsti 4a1028e78c Avoid toml Document overhead (#18306)
The difference is below the noise threshold, but it showed up in the
profiled. The code originally existed for error handling that has since
been removed.
2026-03-06 11:16:15 +01:00
Djordje 8616b11d59 Add torchcodec to PyTorch List (#18336)
<!--
Thank you for contributing to uv! To help us out with reviewing, please
consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->

## Summary

torchcodec added
https://github.com/astral-sh/uv/issues/18335
<!-- What's the purpose of the change? What does it do, and why? -->

## Test Plan

<!-- How was it tested? -->
2026-03-05 19:11:38 -05:00
Alessandro Molina 6036575324 Handle the hard link limit gracefully instead of failing (#17699)
## Summary

Handle the case where too many hardlinks were created and thus
installing packages fails.

There are cases where the file system can have a hardlinks limit and
when it's hit `uv` fails,
for example AWS EFS that has a limit of 177 hard links (
https://docs.aws.amazon.com/efs/latest/ug/troubleshooting-efs-fileop-errors.html#hardlinkerror
)

This PR address this by resetting the hardlinks when the limit is
reached (it does this by replacing the file in the cache, so new
hardlinks can be made)

There can be race conditions over the limit, but those are ok, as the
links are reset atomically so in case of race conditions the worst case
will be that the limit is reset twice, but nothing will break.

## Test Plan

Add a `install_hardlink_after_emlink` function, it successfully
reproduced the issue on my system.
The issue is that it's expensive to run as it has to generate a lot of
hardlinks

---------

Co-authored-by: Tomasz Kramkowski <tom@astral.sh>
2026-03-05 23:43:34 +00:00
Charlie Marsh eec0c284d0 Add an environment variable for UV_VENV_RELOCATABLE (#18331)
Closes https://github.com/astral-sh/uv/issues/18319.
2026-03-05 18:40:39 -05:00
Charlie Marsh 9f53c5866f Add documentation for common marker values (#18327)
Closes https://github.com/astral-sh/uv/issues/18300.
2026-03-05 21:18:01 +00:00
Zanie Blue e431787e4e Retry on apt downloads in Docker (#18329)
This failed with a 503 flake. I hate flakes.

```
   E: Failed to fetch                              
 https://snapshot.ubuntu.com/.../libcurl4t64_8.5.0 -2ubuntu10.7_arm64.deb  503  Service Unavailable  
```
2026-03-05 20:51:16 +00:00
Zanie Blue 91f02e29bb Add the uv-audit crate readme (#18325) 2026-03-05 19:44:21 +00:00
konsti 674fdffe4d Use a single global workspace cache (#18307)
Currently, uv parses each workspace member 's `pyproject.toml` in
airflow 4 times, this reduces it to 3 times.
2026-03-05 14:44:03 +01:00
konsti f18d279686 Add spans for toml reading (#18305)
In a warm cache situation, e.g. with `uv run`, toml parsing is by far
our slowest operation. These kinda hacky spans help debugging that. It
would be better if `toml::from_str` would be instrumented itself, but
this way we can add paths in the relevant places.
2026-03-05 14:43:52 +01:00
Zanie Blue 4eed07269b Use --no-project in graalpy integration test (#18314) 2026-03-05 13:01:37 +00:00
konsti 87b2539e80 Warn when using uv_build settings without uv_build (#15750)
To help with cases such as https://github.com/astral-sh/uv/issues/15655.

A question is when to show this warning. I've used sources as a proxy as
URL dependencies with enabled sources are likely those controlled by the
user, and they include workspace and `git clone`d path dependencies.

The first commit is a refactoring, the second commit the implementation.

Fixes https://github.com/astral-sh/uv/issues/15740
2026-03-05 06:56:35 -06:00
konsti 8efb5421bc Skip over broken tool Python on Windows too (#17176)
Fixes #16252
2026-03-05 10:02:49 +01:00
Zanie Blue 02e92aed3b Fix debian system test which was building uv by accident (#18294) 2026-03-04 16:38:06 -06:00
konsti bfcccc4be4 Support cp3-none-any (#17064)
According to
https://packaging.python.org/en/latest/specifications/platform-compatibility-tags/,
`cp3-none-any` is a valid tag, even though you shouldn't use it. We
should accept it.

Part of https://github.com/astral-sh/uv/issues/17063
2026-03-04 20:45:34 +00:00
Zanie Blue 8ed803e507 Continue on trampoline job assignment failures (#18291)
A simpler short-term fix for https://github.com/astral-sh/uv/pull/18170

It's unclear if the complexity of that pull request is worth it.
2026-03-04 13:47:05 -06:00
konsti 2db251d454 Fix ssl_env_var test delay (#18289)
The test took >20s, usually being the last to run.
2026-03-04 12:18:23 -06:00
Zanie Blue 647a309494 Lock zig dependencies in Docker builds (#18267)
Follows #18251 and #18263
2026-03-04 16:03:07 +00:00
Zanie Blue 4ff4720da5 Use uv to manage our Python documentation dependencies (#18263)
I want to lock our Zig build dependencies and this is an incremental
step towards doing so via uv
2026-03-04 09:52:15 -06:00
konsti 6ddcbbf700 Make ProjectWorkspace::from_project private (#18288)
Makes it easier to normalize paths exactly once.
2026-03-04 15:08:37 +01:00
Mitchell Berendhuysen d58915e8b3 Replace remove_dir_all with remove_virtualenv (#16203)
## Summary

Replace `remove_dir_all` with `remove_virtualenv` for the tool environment creation code path.

Closes #14985

## Test Plan

Relied on existing test coverage.

---------

Co-authored-by: Tomasz Kramkowski <tomasz@kramkow.ski>
2026-03-04 13:30:33 +00:00
github-actions[bot] 379f056aff Sync latest Python releases (#18282)
Automated update for Python releases.

Co-authored-by: zanieb <2586601+zanieb@users.noreply.github.com>
2026-03-03 20:23:27 -06:00
Zanie Blue c021be36ab Bump version to 0.10.8 (#18277) 2026-03-03 15:08:03 -06:00
Zanie Blue de60ad5b98 Use latest Python version filtering in more places (#18273)
Add `with_filtered_latest_python_versions()` to tests that were using
hardcoded patch versions for latest Python releases. This makes the
tests resilient to Python version bumps by using `[LATEST]` placeholders
instead of specific version numbers like `3.12.12` or `3.10.19`.

Also use `LATEST_PYTHON_3_12` constant for constructing directory paths
in the build version upgrade tests.
2026-03-03 18:19:29 +00:00
Zanie Blue 1eb571b1fc Pin the rustup version in our Docker build (#18255)
Follows #18251
2026-03-03 12:16:39 -06:00
Zanie Blue b9abe15562 Add SBOM attestations to Docker images (#18252)
Adds SBOM attestations
https://docs.docker.com/build/metadata/attestations/sbom/

Requires https://github.com/rust-secure-code/cargo-auditable/pull/236
for our uv binaries and their dependencies to be included in the SBOM

You can inspect the SBOM with, e.g.:

```
docker buildx imagetools inspect ghcr.io/astral-sh/uv-dev:sha-ece6427 --format '{{json .SBOM}}' | jq
docker buildx imagetools inspect ghcr.io/astral-sh/uv-dev:sha-ece6427-python3.9-trixie --format '{{json .SBOM}}' | jq
```

Also explicitly sets
https://docs.docker.com/build/metadata/attestations/slsa-provenance/#max
but there appears to be no change as all of the max SLSA data is already
present.
2026-03-03 12:14:06 -06:00
konsti 55cbe85d74 Unify poetry check types (#18260)
Found this duplication when looking at the toml parsing code.
2026-03-03 12:13:01 -06:00
Zanie Blue 74fe4a0431 Vendor mold installation and add more retries (#18271) 2026-03-03 11:59:58 -06:00
Denizhan Dakılır 810072dd62 fix: uv tree orphaned roots and premature deduplication (#17212)
<!--
Thank you for contributing to uv! To help us out with reviewing, please
consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->

## Summary

will close https://github.com/astral-sh/uv/issues/17160

Basically, old code using nodes with no incoming edges included
transitive deps which resulted in orphaned roots. We didnt actually need
that code as well, infinite cycle handling was done in `fn visit`
correctly so just using root node directly solves the issue. I also
found another bug during the process where packages were marked as
"visited" prematurely resulting in not even expanding them and not
showing them at the tree.

## Test Plan

I added two tests with snapshots.

---------

Co-authored-by: Charlie Marsh <charlie.r.marsh@gmail.com>
2026-03-03 17:37:54 +00:00
github-actions[bot] 36955f7527 Sync latest Python releases (#18268)
Automated update for Python releases.

Co-authored-by: zsol <66740+zsol@users.noreply.github.com>
2026-03-03 17:36:38 +00:00
Charlie Marsh 06933d2af0 Respect exclusions in scripts (#18269)
## Summary

See: https://github.com/astral-sh/uv/pull/18022#discussion_r2809756319.
2026-03-03 17:20:57 +00:00
Brad Cowie 753ad06fe5 Prevent uv tool upgrade from installing excluded dependencies (#18022)
## Summary

<!-- What's the purpose of the change? What does it do, and why? -->

Fixes #18021

Store dependencies excluded by uv tool install in the tool receipt and
provide these same dependencies to the requirements resolver when the
tool is upgraded.

## Test Plan

<!-- How was it tested? -->

Running the repro commands provided in issue #18021, we can see the
excluded dependency does not get reinstalled when the tool is upgraded:

```sh
$ cat /tmp/excludes.txt
markdown-it-py

$ ~/Dev/uv/target/debug/uv install --excludes /tmp/excludes.txt 2048-cli==1.0.2
Resolved 7 packages in 150ms
Installed 7 packages in 56ms
 + 2048-cli==1.0.2
 + click==8.3.1
 + maturin==1.12.0
 + numpy==2.4.2
 + pygments==2.19.2
 + rich==13.9.4
 + rich-menu==0.3.0
Installed 1 executable: 2048-cli

$ cat ~/.local/share/uv/tools/2048-cli/uv-receipt.toml
[tool]
requirements = [{ name = "2048-cli" }]
excludes = ["markdown-it-py"]
entrypoints = [
    { name = "2048-cli", install-path = "/home/brad/.local/bin/2048-cli", from = "2048-cli" },
]

$ ~/Dev/uv/target/debug/uv tool upgrade 2048-cli
Updated 2048-cli v1.0.2 -> v1.0.3
 - 2048-cli==1.0.2
 + 2048-cli==1.0.3
Installed 1 executable: 2048-cli
```

---------

Co-authored-by: Charlie Marsh <charlie.r.marsh@gmail.com>
2026-03-03 17:06:35 +00:00
Zanie Blue d426a2d568 Use an Ubuntu snapshot to pin some Docker build dependency versions (#18251)
This is an incremental step to harden our Docker build pipeline.
2026-03-03 10:42:02 -06:00
Zanie Blue 18391e295f Fix Docker build tests when push is disabled (#18265) 2026-03-03 10:12:59 -06:00